libftdi: Don't discard data on LIBUSB_ERROR_TIMEOUT
libusb may have transferred some data, don't want to lose itpull/25/head
parent
1bb1ab7a82
commit
aceea6dc5b
|
|
@ -1496,7 +1496,8 @@ int ftdi_write_data(struct ftdi_context *ftdi, const unsigned char *buf, int siz
|
||||||
if (offset+write_size > size)
|
if (offset+write_size > size)
|
||||||
write_size = size-offset;
|
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");
|
ftdi_error_return(-1, "usb bulk write failed");
|
||||||
|
|
||||||
offset += actual_length;
|
offset += actual_length;
|
||||||
|
|
@ -1946,7 +1947,7 @@ int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size)
|
||||||
ftdi->readbuffer_offset = 0;
|
ftdi->readbuffer_offset = 0;
|
||||||
/* returns how much received */
|
/* 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);
|
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");
|
ftdi_error_return(ret, "usb bulk read failed");
|
||||||
|
|
||||||
if (actual_length > 2)
|
if (actual_length > 2)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue