mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-17 13:12:08 +00:00
Ensure that the previous HID reports in the HID device class driver are kept per-instance, rather than per-device.
This commit is contained in:
parent
72932e2780
commit
7227e133a9
@ -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)
|
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)
|
if (USB_DeviceState != DEVICE_STATE_Configured)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -167,10 +165,10 @@ void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
|
|||||||
|
|
||||||
ReportINSize = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportINData);
|
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));
|
bool IdlePeriodElapsed = (HIDInterfaceInfo->State.IdleCount && !(HIDInterfaceInfo->State.IdleMSRemaining));
|
||||||
|
|
||||||
memcpy(PreviousReportINData, ReportINData, ReportINSize);
|
memcpy(HIDInterfaceInfo->State.PreviousReportINData, ReportINData, ReportINSize);
|
||||||
|
|
||||||
if (ReportINSize && (StatesChanged || IdlePeriodElapsed))
|
if (ReportINSize && (StatesChanged || IdlePeriodElapsed))
|
||||||
{
|
{
|
||||||
|
@ -88,7 +88,9 @@
|
|||||||
bool UsingReportProtocol; /**< Indicates if the HID interface is set to Boot or Report protocol mode */
|
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 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
|
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
|
} 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.
|
* are reset to their defaults when the interface is enumerated.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user