- uint16_t ReportOUTSize = Endpoint_BytesInEndpoint();\r
- uint8_t ReportOUTData[ReportOUTSize];\r
- \r
- if (ReportOUTSize)\r
- Endpoint_Read_Stream_LE(ReportOUTData, ReportOUTSize, NO_STREAM_CALLBACK);\r
- \r
- CALLBACK_USB_HID_ProcessReceivedHIDReport(HIDInterfaceInfo, ReportOUTData, ReportOUTSize);\r
+ StatesChanged = (memcmp(ReportINData, HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINSize) != 0);\r
+ memcpy(HIDInterfaceInfo->Config.PrevReportINBuffer, ReportINData, ReportINSize);\r
+ }\r
+\r
+ if (ReportINSize && (ForceSend || StatesChanged || IdlePeriodElapsed))\r
+ {\r
+ HIDInterfaceInfo->State.IdleMSRemaining = HIDInterfaceInfo->State.IdleCount;\r
+\r
+ Endpoint_SelectEndpoint(HIDInterfaceInfo->Config.ReportINEndpointNumber);\r
+\r
+ if (ReportID)\r
+ Endpoint_Write_Byte(ReportID);\r
+\r
+ Endpoint_Write_Stream_LE(ReportINData, ReportINSize, NO_STREAM_CALLBACK);\r