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:
Dean Camera 2009-08-11 11:19:22 +00:00
parent a7ade9f28d
commit df29aa37c0
5 changed files with 31 additions and 24 deletions

View file

@ -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)