diff --git a/Demos/Device/ClassDriver/DualCDC/DualCDC.c b/Demos/Device/ClassDriver/DualCDC/DualCDC.c index 9e3217cf76..82ed59d515 100644 --- a/Demos/Device/ClassDriver/DualCDC/DualCDC.c +++ b/Demos/Device/ClassDriver/DualCDC/DualCDC.c @@ -78,11 +78,6 @@ USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface = .NotificationEndpointNumber = CDC2_NOTIFICATION_EPNUM, .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE, }, - - .State = - { - // Leave all state values to their defaults - } }; /** Main program entry point. This routine contains the overall program flow, including initial diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.c b/Demos/Device/ClassDriver/GenericHID/GenericHID.c index b04f7af760..4315723f45 100644 --- a/Demos/Device/ClassDriver/GenericHID/GenericHID.c +++ b/Demos/Device/ClassDriver/GenericHID/GenericHID.c @@ -118,8 +118,7 @@ void EVENT_USB_UnhandledControlPacket(void) /** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { - if (Generic_HID_Interface.State.IdleMSRemaining) - Generic_HID_Interface.State.IdleMSRemaining--; + HID_Device_MillisecondElapsed(&Generic_HID_Interface); } /** HID class driver callback function for the creation of HID reports to the host. diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.c b/Demos/Device/ClassDriver/Joystick/Joystick.c index d9ff6ca91c..ffd167ef59 100644 --- a/Demos/Device/ClassDriver/Joystick/Joystick.c +++ b/Demos/Device/ClassDriver/Joystick/Joystick.c @@ -120,8 +120,7 @@ void EVENT_USB_UnhandledControlPacket(void) /** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { - if (Joystick_HID_Interface.State.IdleMSRemaining) - Joystick_HID_Interface.State.IdleMSRemaining--; + HID_Device_MillisecondElapsed(&Joystick_HID_Interface); } /** HID class driver callback function for the creation of HID reports to the host. diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.c b/Demos/Device/ClassDriver/Keyboard/Keyboard.c index cd8c3e69ea..fb19d02d92 100644 --- a/Demos/Device/ClassDriver/Keyboard/Keyboard.c +++ b/Demos/Device/ClassDriver/Keyboard/Keyboard.c @@ -121,8 +121,7 @@ void EVENT_USB_UnhandledControlPacket(void) /** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { - if (Keyboard_HID_Interface.State.IdleMSRemaining) - Keyboard_HID_Interface.State.IdleMSRemaining--; + HID_Device_MillisecondElapsed(&Keyboard_HID_Interface); } /** HID class driver callback function for the creation of HID reports to the host. diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c index 45a2c52706..418ccba4e4 100644 --- a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c +++ b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c @@ -66,12 +66,7 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface = .ReportINEndpointNumber = MOUSE_IN_EPNUM, .ReportINEndpointSize = HID_EPSIZE, - }, - - .State = - { - // Leave all state values to their defaults - } + }, }; /** Main program entry point. This routine contains the overall program flow, including initial @@ -147,11 +142,8 @@ void EVENT_USB_UnhandledControlPacket(void) /** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { - if (Keyboard_HID_Interface.State.IdleMSRemaining) - Keyboard_HID_Interface.State.IdleMSRemaining--; - - if (Mouse_HID_Interface.State.IdleMSRemaining) - Mouse_HID_Interface.State.IdleMSRemaining--; + HID_Device_MillisecondElapsed(&Keyboard_HID_Interface); + HID_Device_MillisecondElapsed(&Mouse_HID_Interface); } /** HID class driver callback function for the creation of HID reports to the host. diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.c b/Demos/Device/ClassDriver/Mouse/Mouse.c index 44894340b1..51021c0f5f 100644 --- a/Demos/Device/ClassDriver/Mouse/Mouse.c +++ b/Demos/Device/ClassDriver/Mouse/Mouse.c @@ -120,8 +120,7 @@ void EVENT_USB_UnhandledControlPacket(void) /** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { - if (Mouse_HID_Interface.State.IdleMSRemaining) - Mouse_HID_Interface.State.IdleMSRemaining--; + HID_Device_MillisecondElapsed(&Mouse_HID_Interface); } /** HID class driver callback function for the creation of HID reports to the host. diff --git a/LUFA/Drivers/USB/Class/Device/HID.c b/LUFA/Drivers/USB/Class/Device/HID.c index bfe97ffbb6..eef15f26cd 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.c +++ b/LUFA/Drivers/USB/Class/Device/HID.c @@ -184,4 +184,10 @@ void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo) } } +void HID_Device_MillisecondElapsed(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo) +{ + if (HIDInterfaceInfo->State.IdleMSRemaining) + HIDInterfaceInfo->State.IdleMSRemaining--; +} + #endif diff --git a/LUFA/Drivers/USB/Class/Device/HID.h b/LUFA/Drivers/USB/Class/Device/HID.h index ae68134fe3..06456cf8ad 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.h +++ b/LUFA/Drivers/USB/Class/Device/HID.h @@ -121,6 +121,13 @@ */ void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo); + /** Indicates that a millisecond of idle time has elapsed on the given HID interface, and the interface's idle count should be + * decremented. This should be called once per millisecond so that hardware key-repeats function correctly. + * + * \param[in,out] HIDInterfaceInfo Pointer to a structure containing a HID Class configuration and state. + */ + void HID_Device_MillisecondElapsed(USB_ClassInfo_HID_Device_t* HIDInterfaceInfo); + /** HID class driver callback for the user creation of a HID input report. This callback may fire in response to either * HID class control requests from the host, or by the normal HID endpoint polling procedure. Inside this callback the * user is responsible for the creation of the next HID input report to be sent to the host. diff --git a/Projects/Magstripe/Magstripe.c b/Projects/Magstripe/Magstripe.c index 898ad3c392..6d463d6a8d 100644 --- a/Projects/Magstripe/Magstripe.c +++ b/Projects/Magstripe/Magstripe.c @@ -153,8 +153,7 @@ void EVENT_USB_UnhandledControlPacket(void) /** Timer 0 CTC ISR, firing once each millisecond to keep track of elapsed idle time in the HID interface. */ ISR(TIMER0_COMPA_vect, ISR_BLOCK) { - if (Keyboard_HID_Interface.State.IdleMSRemaining) - Keyboard_HID_Interface.State.IdleMSRemaining--; + HID_Device_MillisecondElapsed(&Keyboard_HID_Interface); } /** HID Class driver callback function for the creation of a HID report for the host.