Browse Source

Bugfix: ft232r: Always flush writes before purging buffers, and empty local read buffer when flushing ftdi read buffer

Luke Dashjr 13 years ago
parent
commit
af21c0227d
1 changed files with 6 additions and 1 deletions
  1. 6 1
      ft232r.c

+ 6 - 1
ft232r.c

@@ -218,9 +218,14 @@ void ft232r_close(struct ft232r_device_handle *dev)
 
 
 bool ft232r_purge_buffers(struct ft232r_device_handle *dev, enum ft232r_reset_purge purge)
 bool ft232r_purge_buffers(struct ft232r_device_handle *dev, enum ft232r_reset_purge purge)
 {
 {
-	if (purge & FTDI_PURGE_RX)
+	if (ft232r_flush(dev) < 0)
+		return false;
+
+	if (purge & FTDI_PURGE_RX) {
 		if (libusb_control_transfer(dev->h, FTDI_REQTYPE_OUT, FTDI_REQUEST_RESET, FTDI_PURGE_RX, FTDI_INDEX, NULL, 0, FTDI_TIMEOUT))
 		if (libusb_control_transfer(dev->h, FTDI_REQTYPE_OUT, FTDI_REQUEST_RESET, FTDI_PURGE_RX, FTDI_INDEX, NULL, 0, FTDI_TIMEOUT))
 			return false;
 			return false;
+		dev->ibufLen = 0;
+	}
 	if (purge & FTDI_PURGE_TX)
 	if (purge & FTDI_PURGE_TX)
 		if (libusb_control_transfer(dev->h, FTDI_REQTYPE_OUT, FTDI_REQUEST_RESET, FTDI_PURGE_TX, FTDI_INDEX, NULL, 0, FTDI_TIMEOUT))
 		if (libusb_control_transfer(dev->h, FTDI_REQTYPE_OUT, FTDI_REQUEST_RESET, FTDI_PURGE_TX, FTDI_INDEX, NULL, 0, FTDI_TIMEOUT))
 			return false;
 			return false;