diff --git a/LUFA/Drivers/USB/Class/Device/HID.c b/LUFA/Drivers/USB/Class/Device/HID.c index 4c13436e07..bfe97ffbb6 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.c +++ b/LUFA/Drivers/USB/Class/Device/HID.c @@ -150,8 +150,6 @@ bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* const HIDInterfac void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo) { - static uint8_t PreviousReportINData[HID_MAX_REPORT_SIZE]; - if (USB_DeviceState != DEVICE_STATE_Configured) return; @@ -167,10 +165,10 @@ void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo) ReportINSize = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportINData); - bool StatesChanged = (memcmp(ReportINData, PreviousReportINData, ReportINSize) != 0); + bool StatesChanged = (memcmp(ReportINData, HIDInterfaceInfo->State.PreviousReportINData, ReportINSize) != 0); bool IdlePeriodElapsed = (HIDInterfaceInfo->State.IdleCount && !(HIDInterfaceInfo->State.IdleMSRemaining)); - memcpy(PreviousReportINData, ReportINData, ReportINSize); + memcpy(HIDInterfaceInfo->State.PreviousReportINData, ReportINData, ReportINSize); if (ReportINSize && (StatesChanged || IdlePeriodElapsed)) { diff --git a/LUFA/Drivers/USB/Class/Device/HID.h b/LUFA/Drivers/USB/Class/Device/HID.h index 61f43a141f..ae68134fe3 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.h +++ b/LUFA/Drivers/USB/Class/Device/HID.h @@ -88,7 +88,9 @@ bool UsingReportProtocol; /**< Indicates if the HID interface is set to Boot or Report protocol mode */ uint16_t IdleCount; /**< Report idle period, in mS, set by the host */ uint16_t IdleMSRemaining; /**< Total number of mS remaining before the idle period elapsed - this should be - * decremented by the user application if non-zero each millisecond */ + * decremented by the user application if non-zero each millisecond */ + + uint8_t PreviousReportINData[HID_MAX_REPORT_SIZE]; /**< Previously generated report from the HID interface */ } State; /**< State data for the USB class interface within the device. All elements in this section * are reset to their defaults when the interface is enumerated. */