aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/XPLAINBridge
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-12-12 16:50:45 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-12-12 16:50:45 +0000
commit46677b45896a955b8c62a46d624750213a00b1dd (patch)
tree785e49178112a425ef3acf3848e481783694dbe3 /Projects/XPLAINBridge
parentb67f9f366902ae62d55195f4a4be88d209fb64fe (diff)
downloadlufa-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/XPLAINBridge')
-rw-r--r--Projects/XPLAINBridge/XPLAINBridge.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/Projects/XPLAINBridge/XPLAINBridge.c b/Projects/XPLAINBridge/XPLAINBridge.c
index 7c824ec93..912e68367 100644
--- a/Projects/XPLAINBridge/XPLAINBridge.c
+++ b/Projects/XPLAINBridge/XPLAINBridge.c
@@ -136,9 +136,19 @@ void UARTBridge_Task(void)
/* Clear flush timer expiry flag */
TIFR0 |= (1 << TOV0);
- /* Read bytes from the UART receive buffer into the USB IN endpoint */
+ /* Read bytes from the USART receive buffer into the USB IN endpoint */
while (BufferCount--)
- CDC_Device_SendByte(&VirtualSerial_CDC_Interface, RingBuffer_Remove(&UARTtoUSB_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(&UARTtoUSB_Buffer)) != ENDPOINT_READYWAIT_NoError)
+ {
+ break;
+ }
+
+ /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */
+ RingBuffer_Remove(&UARTtoUSB_Buffer);
+ }
}
CDC_Device_USBTask(&VirtualSerial_CDC_Interface);