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).
This commit is contained in:
parent
b67f9f3669
commit
46677b4589
4 changed files with 40 additions and 8 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue