aboutsummaryrefslogtreecommitdiff
path: root/Projects/USBtoSerial/USBtoSerial.c
diff options
context:
space:
mode:
authorDean <Dean@d5102386-fcda-11dd-9fdb-3debd5008f28>2010-12-12 16:50:45 +0000
committerDean <Dean@d5102386-fcda-11dd-9fdb-3debd5008f28>2010-12-12 16:50:45 +0000
commit9e17a68245dda43b741dc193b1098729886c94c2 (patch)
tree785e49178112a425ef3acf3848e481783694dbe3 /Projects/USBtoSerial/USBtoSerial.c
parent8fa52c48863865cc59f1eb3fa4778f6e77a1eb2d (diff)
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).
git-svn-id: http://lufa-lib.googlecode.com/svn/trunk@1603 d5102386-fcda-11dd-9fdb-3debd5008f28
Diffstat (limited to 'Projects/USBtoSerial/USBtoSerial.c')
-rw-r--r--Projects/USBtoSerial/USBtoSerial.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/Projects/USBtoSerial/USBtoSerial.c b/Projects/USBtoSerial/USBtoSerial.c
index 1dfd7089..477dd44f 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 */