Added CDC_Device_Flush() command to the CDC Device mode class driver.
[pub/lufa.git] / LUFA / Drivers / USB / Class / Device / CDC.c
index a6e5e26..cbb9a85 100644 (file)
@@ -115,21 +115,10 @@ bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)
 \r
 void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)\r
 {\r
-       if (USB_DeviceState != DEVICE_STATE_Configured)\r
+       if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))\r
          return;\r
 \r
-       Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpointNumber);\r
-\r
-       if (!(Endpoint_BytesInEndpoint()))\r
-         return;\r
-         \r
-       if (!(Endpoint_IsReadWriteAllowed()))\r
-       {\r
-               Endpoint_ClearIN();\r
-               Endpoint_WaitUntilReady();\r
-       }       \r
-       \r
-       Endpoint_ClearIN();\r
+       CDC_Device_Flush(CDCInterfaceInfo);\r
 }\r
 \r
 void CDC_Device_SendString(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, char* const Data, const uint16_t Length)\r
@@ -157,6 +146,23 @@ void CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, con
        Endpoint_Write_Byte(Data);      \r
 }\r
 \r
+void CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)\r
+{\r
+       if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS))\r
+         return;\r
+\r
+       Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpointNumber);\r
+       \r
+       if (Endpoint_BytesInEndpoint())\r
+       {\r
+               Endpoint_ClearIN();\r
+               Endpoint_WaitUntilReady();\r
+       }\r
+       \r
+       Endpoint_ClearIN();\r
+       Endpoint_WaitUntilReady();      \r
+}\r
+\r
 uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)\r
 {\r
        Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpointNumber);\r