From aceea6dc5bb364788a88a79b4d38c6ceef4e9d18 Mon Sep 17 00:00:00 2001 From: Paul Hollinsky Date: Tue, 1 Sep 2020 15:14:37 -0400 Subject: [PATCH] libftdi: Don't discard data on LIBUSB_ERROR_TIMEOUT libusb may have transferred some data, don't want to lose it --- third-party/libftdi/src/ftdi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/third-party/libftdi/src/ftdi.c b/third-party/libftdi/src/ftdi.c index 175befc..75609bd 100644 --- a/third-party/libftdi/src/ftdi.c +++ b/third-party/libftdi/src/ftdi.c @@ -1496,7 +1496,8 @@ int ftdi_write_data(struct ftdi_context *ftdi, const unsigned char *buf, int siz if (offset+write_size > size) write_size = size-offset; - if (libusb_bulk_transfer(ftdi->usb_dev, ftdi->in_ep, (unsigned char *)buf+offset, write_size, &actual_length, ftdi->usb_write_timeout) < 0) + int ret = libusb_bulk_transfer(ftdi->usb_dev, ftdi->in_ep, (unsigned char *)buf+offset, write_size, &actual_length, ftdi->usb_write_timeout); + if (ret < 0 && ret != LIBUSB_ERROR_TIMEOUT) ftdi_error_return(-1, "usb bulk write failed"); offset += actual_length; @@ -1946,7 +1947,7 @@ int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size) ftdi->readbuffer_offset = 0; /* returns how much received */ ret = libusb_bulk_transfer (ftdi->usb_dev, ftdi->out_ep, ftdi->readbuffer, ftdi->readbuffer_chunksize, &actual_length, ftdi->usb_read_timeout); - if (ret < 0) + if (ret < 0 && ret != LIBUSB_ERROR_TIMEOUT) ftdi_error_return(ret, "usb bulk read failed"); if (actual_length > 2)