Re-add in old Endpoint/Pipe workaround for unordered pipes - add new ORDERED_EP_CONFI...
[pub/USBasp.git] / Projects / USBtoSerial / USBtoSerial.c
index c26667d..477dd44 100644 (file)
@@ -31,7 +31,7 @@
 /** \file
  *
  *  Main source file for the USBtoSerial project. This file contains the main tasks of
 /** \file
  *
  *  Main source file for the USBtoSerial project. This file contains the main tasks of
- *  the demo and is responsible for the initial application hardware configuration.
+ *  the project and is responsible for the initial application hardware configuration.
  */
 
 #include "USBtoSerial.h"
  */
 
 #include "USBtoSerial.h"
@@ -100,7 +100,17 @@ int main(void)
 
                        /* Read bytes from the USART receive buffer into the USB IN endpoint */
                        while (BufferCount--)
 
                        /* 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 */
                }
 
                /* Load the next byte from the USART transmit buffer into the USART */
@@ -152,8 +162,8 @@ void EVENT_USB_Device_ConfigurationChanged(void)
        LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
 }
 
        LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
 }
 
-/** Event handler for the library USB Unhandled Control Request event. */
-void EVENT_USB_Device_UnhandledControlRequest(void)
+/** Event handler for the library USB Control Request reception event. */
+void EVENT_USB_Device_ControlRequest(void)
 {
        CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
 }
 {
        CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
 }