libftdi: Don't discard data on LIBUSB_ERROR_TIMEOUT

libusb may have transferred some data, don't want to lose it
pull/25/head
Paul Hollinsky 2020-09-01 15:14:37 -04:00
parent 1bb1ab7a82
commit aceea6dc5b
1 changed files with 3 additions and 2 deletions

View File

@ -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)