Added new Printer Host mode Class driver.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Host / HIDParser.c
index 3090774..81062b1 100644 (file)
@@ -39,8 +39,8 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
        HID_StateTable_t*     CurrStateTable          = &StateTable[0];\r
        HID_CollectionPath_t* CurrCollectionPath      = NULL;\r
        HID_ReportSizeInfo_t* CurrReportIDInfo        = &ParserData->ReportIDSizes[0];                  \r
-       uint16_t              UsageStack[HID_USAGE_STACK_DEPTH];\r
-       uint8_t               UsageStackSize          = 0;\r
+       uint16_t              UsageList[HID_USAGE_STACK_DEPTH];\r
+       uint8_t               UsageListSize          = 0;\r
 \r
        memset(ParserData,       0x00, sizeof(HID_ReportInfo_t));\r
        memset(CurrStateTable,   0x00, sizeof(HID_StateTable_t));\r
@@ -138,23 +138,23 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
                                        \r
                                        if (CurrReportIDInfo == NULL)\r
                                        {\r
-                                               if (ParserData->TotalDeviceReports++ > HID_MAX_REPORT_IDS)\r
+                                               if (ParserData->TotalDeviceReports == HID_MAX_REPORT_IDS)\r
                                                  return HID_PARSE_InsufficientReportIDItems;\r
                                        \r
-                                               CurrReportIDInfo = &ParserData->ReportIDSizes[ParserData->TotalDeviceReports - 1];\r
+                                               CurrReportIDInfo = &ParserData->ReportIDSizes[ParserData->TotalDeviceReports++];\r
                                                memset(CurrReportIDInfo, 0x00, sizeof(HID_ReportSizeInfo_t));\r
                                        }\r
                                }\r
 \r
                                ParserData->UsingReportIDs = true;                              \r
 \r
-                               CurrReportIDInfo->ReportID     = CurrStateTable->ReportID;\r
+                               CurrReportIDInfo->ReportID = CurrStateTable->ReportID;\r
                                break;\r
                        case (TYPE_LOCAL | TAG_LOCAL_USAGE):\r
-                               if (UsageStackSize == HID_USAGE_STACK_DEPTH)\r
-                                 return HID_PARSE_UsageStackOverflow;\r
+                               if (UsageListSize == HID_USAGE_STACK_DEPTH)\r
+                                 return HID_PARSE_UsageListOverflow;\r
                        \r
-                               UsageStack[UsageStackSize++] = ReportItemData;\r
+                               UsageList[UsageListSize++] = ReportItemData;\r
                                break;\r
                        case (TYPE_LOCAL | TAG_LOCAL_USAGEMIN):\r
                                CurrStateTable->Attributes.Usage.MinMax.Minimum = ReportItemData;\r
@@ -187,14 +187,14 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
                                CurrCollectionPath->Type = ReportItemData;\r
                                CurrCollectionPath->Usage.Page = CurrStateTable->Attributes.Usage.Page;\r
                                \r
-                               if (UsageStackSize)\r
+                               if (UsageListSize)\r
                                {\r
-                                       CurrCollectionPath->Usage.Usage = UsageStack[0];\r
+                                       CurrCollectionPath->Usage.Usage = UsageList[0];\r
 \r
-                                       for (uint8_t i = 0; i < UsageStackSize; i++)\r
-                                         UsageStack[i] = UsageStack[i + 1];\r
+                                       for (uint8_t i = 0; i < UsageListSize; i++)\r
+                                         UsageList[i] = UsageList[i + 1];\r
                                          \r
-                                       UsageStackSize--;\r
+                                       UsageListSize--;\r
                                }\r
                                \r
                                break;\r
@@ -219,28 +219,24 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
                                        NewReportItem.CollectionPath = CurrCollectionPath;\r
                                        NewReportItem.ReportID       = CurrStateTable->ReportID;\r
 \r
-                                       if (UsageStackSize)\r
+                                       if (UsageListSize)\r
                                        {\r
-                                               NewReportItem.Attributes.Usage.Usage = UsageStack[0];\r
+                                               NewReportItem.Attributes.Usage.Usage = UsageList[0];\r
 \r
-                                               for (uint8_t i = 0; i < UsageStackSize; i++)\r
-                                                 UsageStack[i] = UsageStack[i + 1];\r
+                                               for (uint8_t i = 0; i < UsageListSize; i++)\r
+                                                 UsageList[i] = UsageList[i + 1];\r
                                                  \r
-                                               UsageStackSize--;\r
+                                               UsageListSize--;\r
                                        }\r
 \r
-                                       switch (HIDReportItem & TAG_MASK)\r
-                                       {\r
-                                               case TAG_MAIN_INPUT:\r
-                                                       NewReportItem.ItemType  = REPORT_ITEM_TYPE_In;\r
-                                                       break;\r
-                                               case TAG_MAIN_OUTPUT:\r
-                                                       NewReportItem.ItemType  = REPORT_ITEM_TYPE_Out;\r
-                                                       break;\r
-                                               case TAG_MAIN_FEATURE:\r
-                                                       NewReportItem.ItemType  = REPORT_ITEM_TYPE_Feature;                                             \r
-                                                       break;\r
-                                       }\r
+                                       uint8_t ItemTag = (HIDReportItem & TAG_MASK);\r
+\r
+                                       if (ItemTag == TAG_MAIN_INPUT)\r
+                                         NewReportItem.ItemType = REPORT_ITEM_TYPE_In;\r
+                                       else if (ItemTag == TAG_MAIN_OUTPUT)\r
+                                         NewReportItem.ItemType = REPORT_ITEM_TYPE_Out;\r
+                                       else\r
+                                         NewReportItem.ItemType = REPORT_ITEM_TYPE_Feature;\r
                                        \r
                                        NewReportItem.BitOffset = CurrReportIDInfo->ReportSizeBits[NewReportItem.ItemType];\r
 \r
@@ -268,7 +264,7 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
                {\r
                        CurrStateTable->Attributes.Usage.MinMax.Minimum = 0;\r
                        CurrStateTable->Attributes.Usage.MinMax.Maximum = 0;\r
-                       UsageStackSize = 0;\r
+                       UsageListSize = 0;\r
                }\r
        }\r
        \r