]> git.friedersdorff.com Git - max/tmk_keyboard.git/blob - tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/hidescriptorparser.h
lufa: usb-usb: Use LUFA startup instead of cusotom
[max/tmk_keyboard.git] / tmk_core / protocol / usb_hid / USB_Host_Shield_2.0 / hidescriptorparser.h
1 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
2
3 This software may be distributed and modified under the terms of the GNU
4 General Public License version 2 (GPL2) as published by the Free Software
5 Foundation and appearing in the file GPL2.TXT included in the packaging of
6 this file. Please note that GPL2 Section 2[b] requires that all works based
7 on this software must also be made publicly available under the terms of
8 the GPL2 ("Copyleft").
9
10 Contact information
11 -------------------
12
13 Circuits At Home, LTD
14 Web      :  http://www.circuitsathome.com
15 e-mail   :  support@circuitsathome.com
16  */
17 #if !defined(__HIDDESCRIPTORPARSER_H__)
18 #define __HIDDESCRIPTORPARSER_H__
19
20 #include "hid.h"
21
22 class ReportDescParserBase : public USBReadParser {
23 public:
24         typedef void (*UsagePageFunc)(uint16_t usage);
25
26         static void PrintGenericDesktopPageUsage(uint16_t usage);
27         static void PrintSimulationControlsPageUsage(uint16_t usage);
28         static void PrintVRControlsPageUsage(uint16_t usage);
29         static void PrintSportsControlsPageUsage(uint16_t usage);
30         static void PrintGameControlsPageUsage(uint16_t usage);
31         static void PrintGenericDeviceControlsPageUsage(uint16_t usage);
32         static void PrintLEDPageUsage(uint16_t usage);
33         static void PrintButtonPageUsage(uint16_t usage);
34         static void PrintOrdinalPageUsage(uint16_t usage);
35         static void PrintTelephonyPageUsage(uint16_t usage);
36         static void PrintConsumerPageUsage(uint16_t usage);
37         static void PrintDigitizerPageUsage(uint16_t usage);
38         static void PrintAlphanumDisplayPageUsage(uint16_t usage);
39         static void PrintMedicalInstrumentPageUsage(uint16_t usage);
40
41         static void PrintValue(uint8_t *p, uint8_t len);
42         static void PrintByteValue(uint8_t data);
43
44         static void PrintItemTitle(uint8_t prefix);
45
46         static const char * const usagePageTitles0[];
47         static const char * const usagePageTitles1[];
48         static const char * const genDesktopTitles0[];
49         static const char * const genDesktopTitles1[];
50         static const char * const genDesktopTitles2[];
51         static const char * const genDesktopTitles3[];
52         static const char * const genDesktopTitles4[];
53         static const char * const simuTitles0[];
54         static const char * const simuTitles1[];
55         static const char * const simuTitles2[];
56         static const char * const vrTitles0[];
57         static const char * const vrTitles1[];
58         static const char * const sportsCtrlTitles0[];
59         static const char * const sportsCtrlTitles1[];
60         static const char * const sportsCtrlTitles2[];
61         static const char * const gameTitles0[];
62         static const char * const gameTitles1[];
63         static const char * const genDevCtrlTitles[];
64         static const char * const ledTitles[];
65         static const char * const telTitles0[];
66         static const char * const telTitles1[];
67         static const char * const telTitles2[];
68         static const char * const telTitles3[];
69         static const char * const telTitles4[];
70         static const char * const telTitles5[];
71         static const char * const consTitles0[];
72         static const char * const consTitles1[];
73         static const char * const consTitles2[];
74         static const char * const consTitles3[];
75         static const char * const consTitles4[];
76         static const char * const consTitles5[];
77         static const char * const consTitles6[];
78         static const char * const consTitles7[];
79         static const char * const consTitles8[];
80         static const char * const consTitles9[];
81         static const char * const consTitlesA[];
82         static const char * const consTitlesB[];
83         static const char * const consTitlesC[];
84         static const char * const consTitlesD[];
85         static const char * const consTitlesE[];
86         static const char * const digitTitles0[];
87         static const char * const digitTitles1[];
88         static const char * const digitTitles2[];
89         static const char * const aplphanumTitles0[];
90         static const char * const aplphanumTitles1[];
91         static const char * const aplphanumTitles2[];
92         static const char * const medInstrTitles0[];
93         static const char * const medInstrTitles1[];
94         static const char * const medInstrTitles2[];
95         static const char * const medInstrTitles3[];
96         static const char * const medInstrTitles4[];
97
98 protected:
99         static UsagePageFunc usagePageFunctions[];
100
101         MultiValueBuffer theBuffer;
102         MultiByteValueParser valParser;
103         ByteSkipper theSkipper;
104         uint8_t varBuffer[sizeof (USB_CONFIGURATION_DESCRIPTOR)];
105
106         uint8_t itemParseState; // Item parser state variable
107         uint8_t itemSize; // Item size
108         uint8_t itemPrefix; // Item prefix (first byte)
109         uint8_t rptSize; // Report Size
110         uint8_t rptCount; // Report Count
111
112         uint16_t totalSize; // Report size in bits
113
114         // Method should be defined here if virtual.
115         virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn);
116
117         UsagePageFunc pfUsage;
118
119         static void PrintUsagePage(uint16_t page);
120         void SetUsagePage(uint16_t page);
121
122 public:
123
124         ReportDescParserBase() :
125         itemParseState(0),
126         itemSize(0),
127         itemPrefix(0),
128         rptSize(0),
129         rptCount(0),
130         pfUsage(NULL) {
131                 theBuffer.pValue = varBuffer;
132                 valParser.Initialize(&theBuffer);
133                 theSkipper.Initialize(&theBuffer);
134         };
135
136         void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset);
137
138         enum {
139                 enErrorSuccess = 0
140                 , enErrorIncomplete // value or record is partialy read in buffer
141                 , enErrorBufferTooSmall
142         };
143 };
144
145 class ReportDescParser : public ReportDescParserBase {
146 };
147
148 class ReportDescParser2 : public ReportDescParserBase {
149         uint8_t rptId; // Report ID
150         uint8_t useMin; // Usage Minimum
151         uint8_t useMax; // Usage Maximum
152         uint8_t fieldCount; // Number of field being currently processed
153
154         void OnInputItem(uint8_t itm); // Method which is called every time Input item is found
155
156         uint8_t *pBuf; // Report buffer pointer
157         uint8_t bLen; // Report length
158
159 protected:
160         // Method should be defined here if virtual.
161         virtual uint8_t ParseItem(uint8_t **pp, uint16_t *pcntdn);
162
163 public:
164
165         ReportDescParser2(uint16_t len, uint8_t *pbuf) :
166         ReportDescParserBase(), rptId(0), useMin(0), useMax(0), fieldCount(0), pBuf(pbuf), bLen(len) {
167         };
168 };
169
170 class UniversalReportParser : public HIDReportParser {
171 public:
172         // Method should be defined here if virtual.
173         virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
174 };
175
176 #endif // __HIDDESCRIPTORPARSER_H__