Use sane ANSI terminal escape codes for the Host mode demos, so that they do not...
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Device / HID.c
index c37dc5d..2ac0dd3 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
@@ -105,12 +108,16 @@ void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* HIDInterfaceInf
                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
+                                       while (!(Endpoint_IsINReady()));\r
+                                       Endpoint_ClearIN();\r
+                               }\r
                        }\r
                        \r
                        break;\r
@@ -130,7 +137,7 @@ void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* HIDInterfaceInf
        }\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
        HIDInterfaceInfo->State.UsingReportProtocol = true;\r
 \r
@@ -143,7 +150,7 @@ 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
          return;\r