summaryrefslogtreecommitdiff
path: root/lib/usbhost/USB_Host_Shield_2.0/hidescriptorparser.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/usbhost/USB_Host_Shield_2.0/hidescriptorparser.h')
-rw-r--r--lib/usbhost/USB_Host_Shield_2.0/hidescriptorparser.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/lib/usbhost/USB_Host_Shield_2.0/hidescriptorparser.h b/lib/usbhost/USB_Host_Shield_2.0/hidescriptorparser.h
new file mode 100644
index 0000000000..f3b496ffa5
--- /dev/null
+++ b/lib/usbhost/USB_Host_Shield_2.0/hidescriptorparser.h
@@ -0,0 +1,176 @@
+/* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
+
+This software may be distributed and modified under the terms of the GNU
+General Public License version 2 (GPL2) as published by the Free Software
+Foundation and appearing in the file GPL2.TXT included in the packaging of
+this file. Please note that GPL2 Section 2[b] requires that all works based
+on this software must also be made publicly available under the terms of
+the GPL2 ("Copyleft").
+
+Contact information
+-------------------
+
+Circuits At Home, LTD
+Web : http://www.circuitsathome.com
+e-mail : support@circuitsathome.com
+ */
+#if !defined(__HIDDESCRIPTORPARSER_H__)
+#define __HIDDESCRIPTORPARSER_H__
+
+#include "hid.h"
+
+class ReportDescParserBase : public USBReadParser {
+public:
+ typedef void (*UsagePageFunc)(uint16_t usage);
+
+ static void PrintGenericDesktopPageUsage(uint16_t usage);
+ static void PrintSimulationControlsPageUsage(uint16_t usage);
+ static void PrintVRControlsPageUsage(uint16_t usage);
+ static void PrintSportsControlsPageUsage(uint16_t usage);
+ static void PrintGameControlsPageUsage(uint16_t usage);
+ static void PrintGenericDeviceControlsPageUsage(uint16_t usage);
+ static void PrintLEDPageUsage(uint16_t usage);
+ static void PrintButtonPageUsage(uint16_t usage);
+ static void PrintOrdinalPageUsage(uint16_t usage);
+ static void PrintTelephonyPageUsage(uint16_t usage);
+ static void PrintConsumerPageUsage(uint16_t usage);
+ static void PrintDigitizerPageUsage(uint16_t usage);
+ static void PrintAlphanumDisplayPageUsage(uint16_t usage);
+ static void PrintMedicalInstrumentPageUsage(uint16_t usage);
+
+ static void PrintValue(uint8_t *p, uint8_t len);
+ static void PrintByteValue(uint8_t data);
+
+ static void PrintItemTitle(uint8_t prefix);
+
+ static const char * const usagePageTitles0[];
+ static const char * const usagePageTitles1[];
+ static const char * const genDesktopTitles0[];
+ static const char * const genDesktopTitles1[];
+ static const char * const genDesktopTitles2[];
+ static const char * const genDesktopTitles3[];
+ static const char * const genDesktopTitles4[];
+ static const char * const simuTitles0[];
+ static const char * const simuTitles1[];
+ static const char * const simuTitles2[];
+ static const char * const vrTitles0[];
+ static const char * const vrTitles1[];
+ static const char * const sportsCtrlTitles0[];
+ static const char * const sportsCtrlTitles1[];
+ static const char * const sportsCtrlTitles2[];
+ static const char * const gameTitles0[];
+ static const char * const gameTitles1[];
+ static const char * const genDevCtrlTitles[];
+ static const char * const ledTitles[];
+ static const char * const telTitles0[];
+ static const char * const telTitles1[];
+ static const char * const telTitles2[];
+ static const char * const telTitles3[];
+ static const char * const telTitles4[];
+ static const char * const telTitles5[];
+ static const char * const consTitles0[];
+ static const char * const consTitles1[];
+ static const char * const consTitles2[];
+ static const char * const consTitles3[];
+ static const char * const consTitles4[];
+ static const char * const consTitles5[];
+ static const char * const consTitles6[];
+ static const char * const consTitles7[];
+ static const char * const consTitles8[];
+ static const char * const consTitles9[];
+ static const char * const consTitlesA[];
+ static const char * const consTitlesB[];
+ static const char * const consTitlesC[];
+ static const char * const consTitlesD[];
+ static const char * const consTitlesE[];
+ static const char * const digitTitles0[];
+ static const char * const digitTitles1[];
+ static const char * const digitTitles2[];
+ static const char * const aplphanumTitles0[];
+ static const char * const aplphanumTitles1[];
+ static const char * const aplphanumTitles2[];
+ static const char * const medInstrTitles0[];
+ static const char * const medInstrTitles1[];
+ static const char * const medInstrTitles2[];
+ static const char * const medInstrTitles3[];
+ static const char * const medInstrTitles4[];
+
+protected:
+ static UsagePageFunc usagePageFunctions[];
+
+ MultiValueBuffer theBuffer;
+ MultiByteValueParser valParser;
+ ByteSkipper theSkipper;
+ uint8_t varBuffer[sizeof (USB_CONFIGURATION_DESCRIPTOR)];
+
+ uint8_t itemParseState; // Item parser state variable
+ uint8_t itemSize; // Item size
+ uint8_t itemPrefix; // Item prefix (first byte)
+ uint8_t rptSize; // Report Size
+ uint8_t rptCount; // Report Count
+
+ uint16_t totalSize; // Report size in bits
+
+ // Method should be defined here if virtual.
+ virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn);
+
+ UsagePageFunc pfUsage;
+
+ static void PrintUsagePage(uint16_t page);
+ void SetUsagePage(uint16_t page);
+
+public:
+
+ ReportDescParserBase() :
+ itemParseState(0),
+ itemSize(0),
+ itemPrefix(0),
+ rptSize(0),
+ rptCount(0),
+ pfUsage(NULL) {
+ theBuffer.pValue = varBuffer;
+ valParser.Initialize(&theBuffer);
+ theSkipper.Initialize(&theBuffer);
+ };
+
+ void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset);
+
+ enum {
+ enErrorSuccess = 0
+ , enErrorIncomplete // value or record is partialy read in buffer
+ , enErrorBufferTooSmall
+ };
+};
+
+class ReportDescParser : public ReportDescParserBase {
+};
+
+class ReportDescParser2 : public ReportDescParserBase {
+ uint8_t rptId; // Report ID
+ uint8_t useMin; // Usage Minimum
+ uint8_t useMax; // Usage Maximum
+ uint8_t fieldCount; // Number of field being currently processed
+
+ void OnInputItem(uint8_t itm); // Method which is called every time Input item is found
+
+ uint8_t *pBuf; // Report buffer pointer
+ uint8_t bLen; // Report length
+
+protected:
+ // Method should be defined here if virtual.
+ virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn);
+
+public:
+
+ ReportDescParser2(uint16_t len, uint8_t *pbuf) :
+ ReportDescParserBase(), rptId(0), useMin(0), useMax(0), fieldCount(0), pBuf(pbuf), bLen(len) {
+ };
+};
+
+class UniversalReportParser : public HIDReportParser {
+public:
+ // Method should be defined here if virtual.
+ virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
+};
+
+#endif // __HIDDESCRIPTORPARSER_H__