X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/f1076ac4d6e56bff7fb6d2126746af1108211370..cc879df4f014e403e57caca50a5791c996c0d79c:/LUFA/Drivers/USB/Class/Device/HID.c diff --git a/LUFA/Drivers/USB/Class/Device/HID.c b/LUFA/Drivers/USB/Class/Device/HID.c index d0320868f..2ac0dd354 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.c +++ b/LUFA/Drivers/USB/Class/Device/HID.c @@ -38,8 +38,11 @@ void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* const HIDInterf if (!(Endpoint_IsSETUPReceived())) return; - if (USB_ControlRequest.wIndex != HIDInterfaceInfo->Config.InterfaceNumber) - return; + if ((USB_ControlRequest.wIndex != HIDInterfaceInfo->Config.InterfaceNumber) && + (USB_ControlRequest.bRequest != REQ_SetIdle)) + { + return; + } switch (USB_ControlRequest.bRequest) { @@ -105,12 +108,16 @@ void HID_Device_ProcessControlPacket(USB_ClassInfo_HID_Device_t* const HIDInterf case REQ_SetIdle: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { - Endpoint_ClearSETUP(); - - HIDInterfaceInfo->State.IdleCount = ((USB_ControlRequest.wValue >> 8) << 2); - - while (!(Endpoint_IsINReady())); - Endpoint_ClearIN(); + if ((USB_ControlRequest.wIndex == HIDInterfaceInfo->Config.InterfaceNumber) || + (USB_ControlRequest.wValue & 0xFF) == 0) + { + Endpoint_ClearSETUP(); + + HIDInterfaceInfo->State.IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6); + + while (!(Endpoint_IsINReady())); + Endpoint_ClearIN(); + } } break;