Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: UsbHostMAX3421E_Hello
hidescriptorparser.h
00001 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved. 00002 00003 This software may be distributed and modified under the terms of the GNU 00004 General Public License version 2 (GPL2) as published by the Free Software 00005 Foundation and appearing in the file GPL2.TXT included in the packaging of 00006 this file. Please note that GPL2 Section 2[b] requires that all works based 00007 on this software must also be made publicly available under the terms of 00008 the GPL2 ("Copyleft"). 00009 00010 Contact information 00011 ------------------- 00012 00013 Circuits At Home, LTD 00014 Web : http://www.circuitsathome.com 00015 e-mail : support@circuitsathome.com 00016 */ 00017 #if !defined(__HIDDESCRIPTORPARSER_H__) 00018 #define __HIDDESCRIPTORPARSER_H__ 00019 00020 #include "usbhid.h" 00021 00022 class ReportDescParserBase : public USBReadParser { 00023 public: 00024 typedef void (*UsagePageFunc)(uint16_t usage); 00025 00026 static void PrintGenericDesktopPageUsage(uint16_t usage); 00027 static void PrintSimulationControlsPageUsage(uint16_t usage); 00028 static void PrintVRControlsPageUsage(uint16_t usage); 00029 static void PrintSportsControlsPageUsage(uint16_t usage); 00030 static void PrintGameControlsPageUsage(uint16_t usage); 00031 static void PrintGenericDeviceControlsPageUsage(uint16_t usage); 00032 static void PrintLEDPageUsage(uint16_t usage); 00033 static void PrintButtonPageUsage(uint16_t usage); 00034 static void PrintOrdinalPageUsage(uint16_t usage); 00035 static void PrintTelephonyPageUsage(uint16_t usage); 00036 static void PrintConsumerPageUsage(uint16_t usage); 00037 static void PrintDigitizerPageUsage(uint16_t usage); 00038 static void PrintAlphanumDisplayPageUsage(uint16_t usage); 00039 static void PrintMedicalInstrumentPageUsage(uint16_t usage); 00040 00041 static void PrintValue(uint8_t *p, uint8_t len); 00042 static void PrintByteValue(uint8_t data); 00043 00044 static void PrintItemTitle(uint8_t prefix); 00045 00046 static const char * const usagePageTitles0[]; 00047 static const char * const usagePageTitles1[]; 00048 static const char * const genDesktopTitles0[]; 00049 static const char * const genDesktopTitles1[]; 00050 static const char * const genDesktopTitles2[]; 00051 static const char * const genDesktopTitles3[]; 00052 static const char * const genDesktopTitles4[]; 00053 static const char * const simuTitles0[]; 00054 static const char * const simuTitles1[]; 00055 static const char * const simuTitles2[]; 00056 static const char * const vrTitles0[]; 00057 static const char * const vrTitles1[]; 00058 static const char * const sportsCtrlTitles0[]; 00059 static const char * const sportsCtrlTitles1[]; 00060 static const char * const sportsCtrlTitles2[]; 00061 static const char * const gameTitles0[]; 00062 static const char * const gameTitles1[]; 00063 static const char * const genDevCtrlTitles[]; 00064 static const char * const ledTitles[]; 00065 static const char * const telTitles0[]; 00066 static const char * const telTitles1[]; 00067 static const char * const telTitles2[]; 00068 static const char * const telTitles3[]; 00069 static const char * const telTitles4[]; 00070 static const char * const telTitles5[]; 00071 static const char * const consTitles0[]; 00072 static const char * const consTitles1[]; 00073 static const char * const consTitles2[]; 00074 static const char * const consTitles3[]; 00075 static const char * const consTitles4[]; 00076 static const char * const consTitles5[]; 00077 static const char * const consTitles6[]; 00078 static const char * const consTitles7[]; 00079 static const char * const consTitles8[]; 00080 static const char * const consTitles9[]; 00081 static const char * const consTitlesA[]; 00082 static const char * const consTitlesB[]; 00083 static const char * const consTitlesC[]; 00084 static const char * const consTitlesD[]; 00085 static const char * const consTitlesE[]; 00086 static const char * const digitTitles0[]; 00087 static const char * const digitTitles1[]; 00088 static const char * const digitTitles2[]; 00089 static const char * const aplphanumTitles0[]; 00090 static const char * const aplphanumTitles1[]; 00091 static const char * const aplphanumTitles2[]; 00092 static const char * const medInstrTitles0[]; 00093 static const char * const medInstrTitles1[]; 00094 static const char * const medInstrTitles2[]; 00095 static const char * const medInstrTitles3[]; 00096 static const char * const medInstrTitles4[]; 00097 00098 protected: 00099 static UsagePageFunc usagePageFunctions[]; 00100 00101 MultiValueBuffer theBuffer; 00102 MultiByteValueParser valParser; 00103 ByteSkipper theSkipper; 00104 uint8_t varBuffer[sizeof (USB_CONFIGURATION_DESCRIPTOR)]; 00105 00106 uint8_t itemParseState; // Item parser state variable 00107 uint8_t itemSize; // Item size 00108 uint8_t itemPrefix; // Item prefix (first byte) 00109 uint8_t rptSize; // Report Size 00110 uint8_t rptCount; // Report Count 00111 00112 uint16_t totalSize; // Report size in bits 00113 00114 // Method should be defined here if virtual. 00115 virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn); 00116 00117 UsagePageFunc pfUsage; 00118 00119 static void PrintUsagePage(uint16_t page); 00120 void SetUsagePage(uint16_t page); 00121 00122 public: 00123 00124 ReportDescParserBase() : 00125 itemParseState(0), 00126 itemSize(0), 00127 itemPrefix(0), 00128 rptSize(0), 00129 rptCount(0), 00130 pfUsage(NULL) { 00131 theBuffer.pValue = varBuffer; 00132 valParser.Initialize(&theBuffer); 00133 theSkipper.Initialize(&theBuffer); 00134 }; 00135 00136 void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset); 00137 00138 enum { 00139 enErrorSuccess = 0 00140 , enErrorIncomplete // value or record is partialy read in buffer 00141 , enErrorBufferTooSmall 00142 }; 00143 }; 00144 00145 class ReportDescParser : public ReportDescParserBase { 00146 }; 00147 00148 class ReportDescParser2 : public ReportDescParserBase { 00149 uint8_t rptId; // Report ID 00150 uint8_t useMin; // Usage Minimum 00151 uint8_t useMax; // Usage Maximum 00152 uint8_t fieldCount; // Number of field being currently processed 00153 00154 void OnInputItem(uint8_t itm); // Method which is called every time Input item is found 00155 00156 uint8_t *pBuf; // Report buffer pointer 00157 uint8_t bLen; // Report length 00158 00159 protected: 00160 // Method should be defined here if virtual. 00161 virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn); 00162 00163 public: 00164 00165 ReportDescParser2(uint16_t len, uint8_t *pbuf) : 00166 ReportDescParserBase(), rptId(0), useMin(0), useMax(0), fieldCount(0), pBuf(pbuf), bLen(len) { 00167 }; 00168 }; 00169 00170 class UniversalReportParser : public HIDReportParser { 00171 public: 00172 // Method should be defined here if virtual. 00173 virtual void Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf); 00174 }; 00175 00176 #endif // __HIDDESCRIPTORPARSER_H__
Generated on Tue Jul 12 2022 18:12:04 by
1.7.2