diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2010-12-12 16:50:45 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2010-12-12 16:50:45 +0000 |
commit | 46677b45896a955b8c62a46d624750213a00b1dd (patch) | |
tree | 785e49178112a425ef3acf3848e481783694dbe3 /Projects/USBtoSerial | |
parent | b67f9f366902ae62d55195f4a4be88d209fb64fe (diff) | |
download | lufa-46677b45896a955b8c62a46d624750213a00b1dd.tar.gz lufa-46677b45896a955b8c62a46d624750213a00b1dd.tar.bz2 lufa-46677b45896a955b8c62a46d624750213a00b1dd.zip |
Fixed possible lost data in the XPLAINBridge, USBtoSerial and Benito projects when the host exceeds the packet timeout period on received packets as set by USB_STREAM_TIMEOUT_MS (thanks to Justin Rajewski).
Diffstat (limited to 'Projects/USBtoSerial')
-rw-r--r-- | Projects/USBtoSerial/USBtoSerial.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Projects/USBtoSerial/USBtoSerial.c b/Projects/USBtoSerial/USBtoSerial.c index 1dfd70896..477dd44f5 100644 --- a/Projects/USBtoSerial/USBtoSerial.c +++ b/Projects/USBtoSerial/USBtoSerial.c @@ -100,7 +100,17 @@ int main(void) /* Read bytes from the USART receive buffer into the USB IN endpoint */ while (BufferCount--) - CDC_Device_SendByte(&VirtualSerial_CDC_Interface, RingBuffer_Remove(&USARTtoUSB_Buffer)); + { + /* Try to send the next byte of data to the host, abort if there is an error without dequeuing */ + if (CDC_Device_SendByte(&VirtualSerial_CDC_Interface, + RingBuffer_Peek(&USARTtoUSB_Buffer)) != ENDPOINT_READYWAIT_NoError) + { + break; + } + + /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */ + RingBuffer_Remove(&USARTtoUSB_Buffer); + } } /* Load the next byte from the USART transmit buffer into the USART */ |