Added flag to the HID report parser to indicate if a device has multiple reports.
SetIdle requests to the HID device driver with a 0 idle period (send changes only) now only affect the requested HID interface within the device, not all HID interfaces. Apply correct fix to the HID report parser for PUSH items - current HID item attribute stack was being copied in the wrong direction. Fixed HID report parser not resetting the FEATURE item count when a REPORT ID item is encountered.
This commit is contained in:
parent
a7ade9f28d
commit
df29aa37c0
5 changed files with 31 additions and 24 deletions
|
@ -81,8 +81,8 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
|
|||
if (CurrStateTable == &StateTable[HID_STATETABLE_STACK_DEPTH - 1])
|
||||
return HID_PARSE_HIDStackOverflow;
|
||||
|
||||
memcpy(CurrStateTable,
|
||||
(CurrStateTable + 1),
|
||||
memcpy((CurrStateTable + 1),
|
||||
CurrStateTable,
|
||||
sizeof(HID_ReportItem_t));
|
||||
|
||||
CurrStateTable++;
|
||||
|
@ -122,8 +122,13 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
|
|||
break;
|
||||
case (TYPE_GLOBAL | TAG_GLOBAL_REPORTID):
|
||||
CurrStateTable->ReportID = ReportItemData;
|
||||
BitOffsetIn = 0;
|
||||
BitOffsetOut = 0;
|
||||
ParserData->UsingMultipleReports = true;
|
||||
BitOffsetIn = 0;
|
||||
BitOffsetOut = 0;
|
||||
|
||||
#if defined(HID_ENABLE_FEATURE_PROCESSING)
|
||||
BitOffsetFeature = 0;
|
||||
#endif
|
||||
break;
|
||||
case (TYPE_LOCAL | TAG_LOCAL_USAGE):
|
||||
if (UsageStackSize == HID_USAGE_STACK_DEPTH)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue