From 000841f6e85427abc4972b3f80a45df4d33c067a Mon Sep 17 00:00:00 2001 From: Robert Fisk Date: Mon, 24 Oct 2016 11:45:41 +1300 Subject: [PATCH] Refactor and improve HID report item parsing --- Downstream/Inc/downstream_hid.h | 2 +- Downstream/Src/downstream_hid.c | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Downstream/Inc/downstream_hid.h b/Downstream/Inc/downstream_hid.h index cc36c5b..b011aa8 100644 --- a/Downstream/Inc/downstream_hid.h +++ b/Downstream/Inc/downstream_hid.h @@ -32,7 +32,7 @@ //Stuff for parsing HID descriptors: -#define HID_ITEM_LONG 0xFE +#define HID_ITEM_LONG 0xFC #define HID_ITEM_MASK 0xFC #define HID_ITEM_LENGTH_MASK 0x03 diff --git a/Downstream/Src/downstream_hid.c b/Downstream/Src/downstream_hid.c index 236a314..effcf72 100644 --- a/Downstream/Src/downstream_hid.c +++ b/Downstream/Src/downstream_hid.c @@ -93,7 +93,7 @@ static HAL_StatusTypeDef Downstream_HID_Mouse_ParseReportDescriptor(void) (ReportYBitLength == 0) || (ReportWheelBitLength == 0))) { - switch (ItemHeader & HID_ITEM_MASK) + switch (ItemHeader) { case HID_ITEM_USAGE_PAGE: currentUsagePage = ItemData; @@ -239,8 +239,14 @@ static HAL_StatusTypeDef Downstream_HID_GetNextReportItem(void) return HAL_ERROR; } - ItemHeader = *ReportDataPointer++; - itemLength = ItemHeader & HID_ITEM_LENGTH_MASK; + ItemHeader = *ReportDataPointer & HID_ITEM_MASK; + itemLength = *ReportDataPointer & HID_ITEM_LENGTH_MASK; + ReportDataPointer++; + + if (itemLength == 3) + { + itemLength = 4; //Length = 3 actually means 4 bytes + } if (ItemHeader == HID_ITEM_LONG) {