Minor cleanups to DualCDC ClassDriver device demo for clarity.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / HID.c
index c37dc5d..43f11ee 100644 (file)
 \r
 #include "HID.h"\r
 \r
-void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo)\r
+void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)\r
 {\r
        if (!(Endpoint_IsSETUPReceived()))\r
          return;\r
          \r
-       if (USB_ControlRequest.wIndex != HIDInterfaceInfo->Config.InterfaceNumber)\r
-         return;\r
+       if ((USB_ControlRequest.wIndex   != HIDInterfaceInfo->Config.InterfaceNumber) &&\r
+           (USB_ControlRequest.bRequest != REQ_SetIdle))\r
+       {\r
+               return;\r
+       }\r
 \r
        switch (USB_ControlRequest.bRequest)\r
        {\r
@@ -85,8 +88,7 @@ void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* HIDInterfaceInf
                                Endpoint_Write_Byte(HIDInterfaceInfo->State.UsingReportProtocol);\r
                                Endpoint_ClearIN();\r
 \r
-                               while (!(Endpoint_IsOUTReceived()));\r
-                               Endpoint_ClearOUT();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
                        \r
                        break;\r
@@ -97,20 +99,22 @@ void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* HIDInterfaceInf
 \r
                                HIDInterfaceInfo->State.UsingReportProtocol = (USB_ControlRequest.wValue != 0x0000);\r
                                \r
-                               while (!(Endpoint_IsINReady()));\r
-                               Endpoint_ClearIN();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
                        \r
                        break;\r
                case REQ_SetIdle:\r
                        if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
                        {\r
-                               Endpoint_ClearSETUP();\r
-                               \r
-                               HIDInterfaceInfo->State.IdleCount = ((USB_ControlRequest.wValue >> 8) << 2);\r
-                               \r
-                               while (!(Endpoint_IsINReady()));\r
-                               Endpoint_ClearIN();\r
+                               if ((USB_ControlRequest.wIndex         == HIDInterfaceInfo->Config.InterfaceNumber) ||\r
+                                   (USB_ControlRequest.wValue & 0xFF) == 0)\r
+                               {\r
+                                       Endpoint_ClearSETUP();\r
+                                       \r
+                                       HIDInterfaceInfo->State.IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6);\r
+                                       \r
+                                       Endpoint_ClearStatusStage();\r
+                               }\r
                        }\r
                        \r
                        break;\r
@@ -122,16 +126,17 @@ void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* HIDInterfaceInf
                                Endpoint_Write_Byte(HIDInterfaceInfo->State.IdleCount >> 2);\r
                                Endpoint_ClearIN();\r
 \r
-                               while (!(Endpoint_IsOUTReceived()));\r
-                               Endpoint_ClearOUT();\r
+                               Endpoint_ClearStatusStage();\r
                        }\r
 \r
                        break;\r
        }\r
 }\r
 \r
-bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo)\r
+bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)\r
 {\r
+       memset(&HIDInterfaceInfo->State, 0x00, sizeof(HIDInterfaceInfo->State));\r
+       HIDInterfaceInfo->State.IdleCount = 500;\r
        HIDInterfaceInfo->State.UsingReportProtocol = true;\r
 \r
        if (!(Endpoint_ConfigureEndpoint(HIDInterfaceInfo->Config.ReportINEndpointNumber, EP_TYPE_INTERRUPT,\r
@@ -143,9 +148,9 @@ bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo)
        return true;\r
 }\r
                \r
-void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo)\r
+void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)\r
 {\r
-       if (!(USB_IsConnected))\r
+       if (USB_DeviceState != DEVICE_STATE_Configured)\r
          return;\r
 \r
        Endpoint_SelectEndpoint(HIDInterfaceInfo->Config.ReportINEndpointNumber);\r