Minor updates to the Benito programmer - remove redundant PORT register manipulations.
[pub/USBasp.git] / Demos / Device / LowLevel / Keyboard / Keyboard.c
index 2527148..e27b228 100644 (file)
@@ -172,7 +172,11 @@ void EVENT_USB_UnhandledControlPacket(void)
                                Endpoint_ClearSETUP();\r
                                \r
                                /* Wait until the LED report has been sent by the host */\r
-                               while (!(Endpoint_IsOUTReceived()));\r
+                               while (!(Endpoint_IsOUTReceived()))\r
+                               {\r
+                                       if (USB_DeviceState == DEVICE_STATE_Unattached)\r
+                                         return;\r
+                               }\r
 \r
                                /* Read in the LED report from the host */\r
                                uint8_t LEDStatus = Endpoint_Read_Byte();\r
@@ -183,9 +187,7 @@ void EVENT_USB_UnhandledControlPacket(void)
                                /* Clear the endpoint data */\r
                                Endpoint_ClearOUT();\r
 \r
-                               /* Acknowledge status stage */\r
-                               while (!(Endpoint_IsINReady()));\r
-                               Endpoint_ClearIN();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
                        \r
                        break;\r
@@ -200,9 +202,7 @@ void EVENT_USB_UnhandledControlPacket(void)
                                /* Send the flag to the host */\r
                                Endpoint_ClearIN();\r
 \r
-                               /* Acknowledge status stage */\r
-                               while (!(Endpoint_IsOUTReceived()));\r
-                               Endpoint_ClearOUT();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
                        \r
                        break;\r
@@ -214,9 +214,7 @@ void EVENT_USB_UnhandledControlPacket(void)
                                /* Set or clear the flag depending on what the host indicates that the current Protocol should be */\r
                                UsingReportProtocol = (USB_ControlRequest.wValue != 0);\r
 \r
-                               /* Acknowledge status stage */\r
-                               while (!(Endpoint_IsINReady()));\r
-                               Endpoint_ClearIN();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
                        \r
                        break;\r
@@ -228,9 +226,7 @@ void EVENT_USB_UnhandledControlPacket(void)
                                /* Get idle period in MSB, IdleCount must be multiplied by 4 to get number of milliseconds */\r
                                IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6);\r
                                \r
-                               /* Acknowledge status stage */\r
-                               while (!(Endpoint_IsINReady()));\r
-                               Endpoint_ClearIN();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
                        \r
                        break;\r
@@ -245,9 +241,7 @@ void EVENT_USB_UnhandledControlPacket(void)
                                /* Send the flag to the host */\r
                                Endpoint_ClearIN();\r
 \r
-                               /* Acknowledge status stage */\r
-                               while (!(Endpoint_IsOUTReceived()));\r
-                               Endpoint_ClearOUT();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
 \r
                        break;\r
@@ -377,13 +371,13 @@ void ReceiveNextReport(void)
 /** Function to manage HID report generation and transmission to the host, when in report mode. */\r
 void HID_Task(void)\r
 {\r
-       /* Check if the USB system is connected to a host */\r
-       if (USB_IsConnected)\r
-       {\r
-               /* Send the next keypress report to the host */\r
-               SendNextReport();\r
+       /* Device must be connected and configured for the task to run */\r
+       if (USB_DeviceState != DEVICE_STATE_Configured)\r
+         return;\r
+         \r
+       /* Send the next keypress report to the host */\r
+       SendNextReport();\r
                \r
-               /* Process the LED report sent from the host */\r
-               ReceiveNextReport();\r
-       }\r
+       /* Process the LED report sent from the host */\r
+       ReceiveNextReport();\r
 }\r