Ensure that the previous HID reports in the HID device class driver are kept per-instance, rather than per-device.

pull/1469/head
Dean Camera 16 years ago
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))
{ {

@ -89,6 +89,8 @@
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…
Cancel
Save