Speed up bit-banged USART code in the AVRISP project.
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Template / Template_Endpoint_Control_R.c
index d66edaf..6948296 100644 (file)
@@ -1,9 +1,18 @@
 uint8_t TEMPLATE_FUNC_NAME (void* Buffer, uint16_t Length)\r
 {\r
-       uint8_t* DataStream = (uint8_t*)(Buffer + TEMPLATE_BUFFER_OFFSET(Length));\r
+       uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));\r
+       \r
+       if (!(Length))\r
+         Endpoint_ClearOUT();\r
        \r
        while (Length)\r
        {\r
+               if (Endpoint_IsSETUPReceived())\r
+                 return ENDPOINT_RWCSTREAM_HostAborted;\r
+\r
+               if (USB_DeviceState == DEVICE_STATE_Unattached)\r
+                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;\r
+                 \r
                if (Endpoint_IsOUTReceived())\r
                {\r
                        while (Length && Endpoint_BytesInEndpoint())\r
@@ -13,10 +22,14 @@ uint8_t TEMPLATE_FUNC_NAME (void* Buffer, uint16_t Length)
                        }\r
                        \r
                        Endpoint_ClearOUT();\r
-               }\r
+               }                 \r
        }\r
        \r
-       while (!(Endpoint_IsINReady()));\r
+       while (!(Endpoint_IsINReady()))\r
+       {\r
+               if (USB_DeviceState == DEVICE_STATE_Unattached)\r
+                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;\r
+       }\r
        \r
        return ENDPOINT_RWCSTREAM_NoError;\r
 }\r