Fixed incorrect/missing control status stage transfers on demos, bootloaders and...
[pub/lufa.git] / Demos / Keyboard / Keyboard.c
index 22d406d..931f080 100644 (file)
@@ -210,10 +210,8 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
                                /* Clear the endpoint data */\r
                                Endpoint_ClearSetupOUT();\r
 \r
-                               /* Wait until the host is ready to receive the request confirmation */\r
+                               /* Acknowledge status stage */\r
                                while (!(Endpoint_IsSetupINReady()));\r
-                               \r
-                               /* Handshake the request by sending an empty IN packet */\r
                                Endpoint_ClearSetupIN();\r
                        }\r
                        \r
@@ -228,6 +226,10 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
                                \r
                                /* Send the flag to the host */\r
                                Endpoint_ClearSetupIN();\r
+                               \r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsSetupOUTReceived()));\r
+                               Endpoint_ClearSetupOUT();\r
                        }\r
                        \r
                        break;\r
@@ -242,7 +244,8 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
                                /* Set or clear the flag depending on what the host indicates that the current Protocol should be */\r
                                UsingReportProtocol = (wValue != 0x0000);\r
                                \r
-                               /* Send an empty packet to acknowedge the command */\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsSetupINReady()));\r
                                Endpoint_ClearSetupIN();\r
                        }\r
                        \r
@@ -258,7 +261,8 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
                                /* Get idle period in MSB */\r
                                IdleCount = (wValue >> 8);\r
                                \r
-                               /* Send an empty packet to acknowedge the command */\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsSetupINReady()));\r
                                Endpoint_ClearSetupIN();\r
                        }\r
                        \r
@@ -273,6 +277,10 @@ EVENT_HANDLER(USB_UnhandledControlPacket)
                                \r
                                /* Send the flag to the host */\r
                                Endpoint_ClearSetupIN();\r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsSetupOUTReceived()));\r
+                               Endpoint_ClearSetupOUT();\r
                        }\r
 \r
                        break;\r