xref: /nrf52832-nimble/rt-thread/components/drivers/usb/usbdevice/class/hid.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * Copyright (c) 2006-2018, RT-Thread Development Team
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2017-03-13     Urey         the first version
9*10465441SEvalZero  * 2017-11-16     ZYH          Update to common hid
10*10465441SEvalZero  */
11*10465441SEvalZero #ifndef _USBDEVICE_CLASS_HID_H_
12*10465441SEvalZero #define _USBDEVICE_CLASS_HID_H_
13*10465441SEvalZero 
14*10465441SEvalZero #ifdef __cplusplus
15*10465441SEvalZero extern "C" {
16*10465441SEvalZero #endif
17*10465441SEvalZero 
18*10465441SEvalZero #define HID_DESCRIPTOR_TYPE             0x21
19*10465441SEvalZero #define HID_DESCRIPTOR_SIZE             0x09
20*10465441SEvalZero #define HID_OFF_HID_DESC                0x12
21*10465441SEvalZero 
22*10465441SEvalZero #define USB_HID_SUBCLASS_BOOT           0x01
23*10465441SEvalZero #define USB_HID_SUBCLASS_NOBOOT         0x00
24*10465441SEvalZero 
25*10465441SEvalZero #define USB_HID_PROTOCOL_NONE           0x00
26*10465441SEvalZero #define USB_HID_PROTOCOL_KEYBOARD       0x01
27*10465441SEvalZero #define USB_HID_PROTOCOL_MOUSE          0x02
28*10465441SEvalZero 
29*10465441SEvalZero 
30*10465441SEvalZero #define USB_HID_REQ_GET_REPORT      0x01
31*10465441SEvalZero #define USB_HID_REQ_GET_IDLE        0x02
32*10465441SEvalZero #define USB_HID_REQ_GET_PROTOCOL    0x03
33*10465441SEvalZero #define USB_HID_REQ_SET_REPORT      0x09
34*10465441SEvalZero #define USB_HID_REQ_SET_IDLE        0x0a
35*10465441SEvalZero #define USB_HID_REQ_SET_PROTOCOL    0x0b
36*10465441SEvalZero 
37*10465441SEvalZero #define MAX_REPORT_SIZE             64
38*10465441SEvalZero #define HID_RX_BUFSIZE              64
39*10465441SEvalZero 
40*10465441SEvalZero /* HID Report Types */
41*10465441SEvalZero #define HID_REPORT_INPUT            0x01
42*10465441SEvalZero #define HID_REPORT_OUTPUT           0x02
43*10465441SEvalZero #define HID_REPORT_FEATURE          0x03
44*10465441SEvalZero 
45*10465441SEvalZero /* Usage Pages */
46*10465441SEvalZero #define USAGEPAGE_UNDEFINED        0x00
47*10465441SEvalZero #define USAGEPAGE_GENERIC          0x01
48*10465441SEvalZero #define USAGEPAGE_SIMULATION       0x02
49*10465441SEvalZero #define USAGEPAGE_VR               0x03
50*10465441SEvalZero #define USAGEPAGE_SPORT            0x04
51*10465441SEvalZero #define USAGEPAGE_GAME             0x05
52*10465441SEvalZero #define USAGEPAGE_DEV_CONTROLS     0x06
53*10465441SEvalZero #define USAGEPAGE_KEYBOARD         0x07
54*10465441SEvalZero #define USAGEPAGE_LED              0x08
55*10465441SEvalZero #define USAGEPAGE_BUTTON           0x09
56*10465441SEvalZero #define USAGEPAGE_ORDINAL          0x0A
57*10465441SEvalZero #define USAGEPAGE_TELEPHONY        0x0B
58*10465441SEvalZero #define USAGEPAGE_CONSUMER         0x0C
59*10465441SEvalZero #define USAGEPAGE_DIGITIZER        0x0D
60*10465441SEvalZero #define USAGEPAGE_PIDPAGE          0x0F
61*10465441SEvalZero #define USAGEPAGE_UNICODE          0x10
62*10465441SEvalZero #define USAGEPAGE_ALPHANUMERIC     0x14
63*10465441SEvalZero #define USAGEPAGE_BARCODESCANNER   0x8C
64*10465441SEvalZero 
65*10465441SEvalZero /* Generic Desktop Page (0x01) */
66*10465441SEvalZero #define USAGE_GENERIC_POINTER               0x01
67*10465441SEvalZero #define USAGE_GENERIC_MOUSE                 0x02
68*10465441SEvalZero #define USAGE_GENERIC_JOYSTICK              0x04
69*10465441SEvalZero #define USAGE_GENERIC_GAMEPAD               0x05
70*10465441SEvalZero #define USAGE_GENERIC_KEYBOARD              0x06
71*10465441SEvalZero #define USAGE_GENERIC_KEYPAD                0x07
72*10465441SEvalZero #define USAGE_GENERIC_X                     0x30
73*10465441SEvalZero #define USAGE_GENERIC_Y                     0x31
74*10465441SEvalZero #define USAGE_GENERIC_Z                     0x32
75*10465441SEvalZero #define USAGE_GENERIC_RX                    0x33
76*10465441SEvalZero #define USAGE_GENERIC_RY                    0x34
77*10465441SEvalZero #define USAGE_GENERIC_RZ                    0x35
78*10465441SEvalZero #define USAGE_GENERIC_SLIDER                0x36
79*10465441SEvalZero #define USAGE_GENERIC_DIAL                  0x37
80*10465441SEvalZero #define USAGE_GENERIC_WHEEL                 0x38
81*10465441SEvalZero #define USAGE_GENERIC_HATSWITCH             0x39
82*10465441SEvalZero #define USAGE_GENERIC_COUNTED_BUFFER        0x3A
83*10465441SEvalZero #define USAGE_GENERIC_BYTE_COUNT            0x3B
84*10465441SEvalZero #define USAGE_GENERIC_MOTION_WAKEUP         0x3C
85*10465441SEvalZero #define USAGE_GENERIC_VX                    0x40
86*10465441SEvalZero #define USAGE_GENERIC_VY                    0x41
87*10465441SEvalZero #define USAGE_GENERIC_VZ                    0x42
88*10465441SEvalZero #define USAGE_GENERIC_VBRX                  0x43
89*10465441SEvalZero #define USAGE_GENERIC_VBRY                  0x44
90*10465441SEvalZero #define USAGE_GENERIC_VBRZ                  0x45
91*10465441SEvalZero #define USAGE_GENERIC_VNO                   0x46
92*10465441SEvalZero #define USAGE_GENERIC_SYSTEM_CTL            0x80
93*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_POWER          0x81
94*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_SLEEP          0x82
95*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_WAKE           0x83
96*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_CONTEXT_MENU   0x84
97*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MAIN_MENU      0x85
98*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_APP_MENU       0x86
99*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_HELP_MENU      0x87
100*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_EXIT      0x88
101*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_SELECT    0x89
102*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_RIGHT     0x8A
103*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_LEFT      0x8B
104*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_UP        0x8C
105*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_DOWN      0x8D
106*10465441SEvalZero 
107*10465441SEvalZero /* Simulation Controls Page(0x02) */
108*10465441SEvalZero #define USAGE_SIMCTRL_THROTTLE              0xBB
109*10465441SEvalZero 
110*10465441SEvalZero /* HID Report Items */
111*10465441SEvalZero 
112*10465441SEvalZero /* Main Items */
113*10465441SEvalZero #define HID_Input(x)           0x81,x
114*10465441SEvalZero #define HID_Output(x)          0x91,x
115*10465441SEvalZero #define HID_Feature(x)         0xB1,x
116*10465441SEvalZero #define HID_Collection(x)      0xA1,x
117*10465441SEvalZero #define HID_EndCollection()    0xC0
118*10465441SEvalZero 
119*10465441SEvalZero /* Local Items */
120*10465441SEvalZero #define HID_Usage(x)           0x09,x
121*10465441SEvalZero #define HID_UsageMin(x)        0x19,x
122*10465441SEvalZero #define HID_UsageMax(x)        0x29,x
123*10465441SEvalZero 
124*10465441SEvalZero /* Global Items */
125*10465441SEvalZero #define HID_UsagePage(x)       0x05,x
126*10465441SEvalZero #define HID_UsagePageVendor(x) 0x06,x,0xFF
127*10465441SEvalZero #define HID_LogicalMin(x)      0x15,x
128*10465441SEvalZero #define HID_LogicalMinS(x)     0x16,(x&0xFF),((x>>8)&0xFF)
129*10465441SEvalZero #define HID_LogicalMinL(x)     0x17,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
130*10465441SEvalZero #define HID_LogicalMax(x)      0x25,x
131*10465441SEvalZero #define HID_LogicalMaxS(x)     0x26,(x&0xFF),((x>>8)&0xFF)
132*10465441SEvalZero #define HID_LogicalMaxL(x)     0x27,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
133*10465441SEvalZero #define HID_PhysicalMin(x)     0x35,x
134*10465441SEvalZero #define HID_PhysicalMinS(x)    0x36,(x&0xFF),((x>>8)&0xFF)
135*10465441SEvalZero #define HID_PhysicalMinL(x)    0x37,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
136*10465441SEvalZero #define HID_PhysicalMax(x)     0x45,x
137*10465441SEvalZero #define HID_PhysicalMaxS(x)    0x46,(x&0xFF),((x>>8)&0xFF)
138*10465441SEvalZero #define HID_PhysicalMaxL(x)    0x47,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
139*10465441SEvalZero #define HID_UnitExponent(x)    0x55,x
140*10465441SEvalZero #define HID_Unit(x)            0x65,x
141*10465441SEvalZero #define HID_UnitS(x)           0x66,(x&0xFF),((x>>8)&0xFF)
142*10465441SEvalZero #define HID_UnitL(x)           0x67,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
143*10465441SEvalZero #define HID_ReportSize(x)      0x75,x
144*10465441SEvalZero #define HID_ReportSizeS(x)     0x76,(x&0xFF),((x>>8)&0xFF))
145*10465441SEvalZero #define HID_ReportSizeL(x)     0x77,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
146*10465441SEvalZero #define HID_ReportID(x)        0x85,x
147*10465441SEvalZero #define HID_ReportCount(x)     0x95,x
148*10465441SEvalZero #define HID_ReportCountS(x)    0x96,(x&0xFF),((x>>8)&0xFF)
149*10465441SEvalZero #define HID_ReportCountL(x)    0x97,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
150*10465441SEvalZero #define HID_Push()             0xA4
151*10465441SEvalZero #define HID_Pop()              0xB4
152*10465441SEvalZero 
153*10465441SEvalZero /* Input, Output, Feature Data */
154*10465441SEvalZero #define HID_DATA               (0<<0)
155*10465441SEvalZero #define HID_CONST              (1<<0)
156*10465441SEvalZero #define HID_ARRAY              (0<<1)
157*10465441SEvalZero #define HID_VAR                (1<<1)
158*10465441SEvalZero #define HID_ABS                (0<<2)
159*10465441SEvalZero #define HID_REL                (1<<2)
160*10465441SEvalZero #define HID_NOWRAP             (0<<3)
161*10465441SEvalZero #define HID_WRAP               (1<<3)
162*10465441SEvalZero #define HID_LINEAR             (0<<4)
163*10465441SEvalZero #define HID_NONLINEAR          (1<<4)
164*10465441SEvalZero #define HID_PREFERREDSTATE     (0<<5)
165*10465441SEvalZero #define HID_NOPREFERRED        (1<<5)
166*10465441SEvalZero #define HID_NONULLPOSITION     (0<<6)
167*10465441SEvalZero #define HID_NULLSTATE          (1<<6)
168*10465441SEvalZero #define HID_NONVOLATILE        (0<<7)
169*10465441SEvalZero #define HID_VOLATILE           (1<<7)
170*10465441SEvalZero 
171*10465441SEvalZero /* Collection Data */
172*10465441SEvalZero #define HID_PHYSICAL           0x00
173*10465441SEvalZero #define HID_APPLICATION        0x01
174*10465441SEvalZero #define HID_LOGICAL            0x02
175*10465441SEvalZero #define HID_REPORT             0x03
176*10465441SEvalZero #define HID_NAMEDARRAY         0x04
177*10465441SEvalZero #define HID_USAGESWITCH        0x05
178*10465441SEvalZero #define HID_USAGEMODIFIER      0x06
179*10465441SEvalZero 
180*10465441SEvalZero //HID_MBED_DEFINE
181*10465441SEvalZero #define HID_VERSION_1_11    (0x0111)
182*10465441SEvalZero 
183*10465441SEvalZero /* HID Class */
184*10465441SEvalZero #define HID_CLASS             (3)
185*10465441SEvalZero #define HID_SUBCLASS_NONE     (0)
186*10465441SEvalZero #define HID_SUBCLASS_BOOT     (1)
187*10465441SEvalZero #define HID_PROTOCOL_NONE     (0)
188*10465441SEvalZero #define HID_PROTOCOL_KEYBOARD (1)
189*10465441SEvalZero #define HID_PROTOCOL_MOUSE    (2)
190*10465441SEvalZero 
191*10465441SEvalZero /* Descriptors */
192*10465441SEvalZero #define HID_DESCRIPTOR          (33)
193*10465441SEvalZero #define HID_DESCRIPTOR_LENGTH   (0x09)
194*10465441SEvalZero #define REPORT_DESCRIPTOR       (34)
195*10465441SEvalZero 
196*10465441SEvalZero /* Class requests */
197*10465441SEvalZero #define GET_REPORT (0x1)
198*10465441SEvalZero #define GET_IDLE   (0x2)
199*10465441SEvalZero #define SET_REPORT (0x9)
200*10465441SEvalZero #define SET_IDLE   (0xa)
201*10465441SEvalZero 
202*10465441SEvalZero /* HID Class Report Descriptor */
203*10465441SEvalZero /* Short items: size is 0, 1, 2 or 3 specifying 0, 1, 2 or 4 (four) bytes */
204*10465441SEvalZero /* of data as per HID Class standard */
205*10465441SEvalZero 
206*10465441SEvalZero /* Main items */
207*10465441SEvalZero #define INPUT(size)             (0x80 | size)
208*10465441SEvalZero #define OUTPUT(size)            (0x90 | size)
209*10465441SEvalZero #define FEATURE(size)           (0xb0 | size)
210*10465441SEvalZero #define COLLECTION(size)        (0xa0 | size)
211*10465441SEvalZero #define END_COLLECTION(size)    (0xc0 | size)
212*10465441SEvalZero 
213*10465441SEvalZero /* Global items */
214*10465441SEvalZero #define USAGE_PAGE(size)        (0x04 | size)
215*10465441SEvalZero #define LOGICAL_MINIMUM(size)   (0x14 | size)
216*10465441SEvalZero #define LOGICAL_MAXIMUM(size)   (0x24 | size)
217*10465441SEvalZero #define PHYSICAL_MINIMUM(size)  (0x34 | size)
218*10465441SEvalZero #define PHYSICAL_MAXIMUM(size)  (0x44 | size)
219*10465441SEvalZero #define UNIT_EXPONENT(size)     (0x54 | size)
220*10465441SEvalZero #define UNIT(size)              (0x64 | size)
221*10465441SEvalZero #define REPORT_SIZE(size)       (0x74 | size)
222*10465441SEvalZero #define REPORT_ID(size)         (0x84 | size)
223*10465441SEvalZero #define REPORT_COUNT(size)      (0x94 | size)
224*10465441SEvalZero #define PUSH(size)              (0xa4 | size)
225*10465441SEvalZero #define POP(size)               (0xb4 | size)
226*10465441SEvalZero 
227*10465441SEvalZero /* Local items */
228*10465441SEvalZero #define USAGE(size)                 (0x08 | size)
229*10465441SEvalZero #define USAGE_MINIMUM(size)         (0x18 | size)
230*10465441SEvalZero #define USAGE_MAXIMUM(size)         (0x28 | size)
231*10465441SEvalZero #define DESIGNATOR_INDEX(size)      (0x38 | size)
232*10465441SEvalZero #define DESIGNATOR_MINIMUM(size)    (0x48 | size)
233*10465441SEvalZero #define DESIGNATOR_MAXIMUM(size)    (0x58 | size)
234*10465441SEvalZero #define STRING_INDEX(size)          (0x78 | size)
235*10465441SEvalZero #define STRING_MINIMUM(size)        (0x88 | size)
236*10465441SEvalZero #define STRING_MAXIMUM(size)        (0x98 | size)
237*10465441SEvalZero #define DELIMITER(size)             (0xa8 | size)
238*10465441SEvalZero 
239*10465441SEvalZero #define LSB(n)  ((n)&0xff)
240*10465441SEvalZero #define MSB(n)  (((n)&0xff00)>>8)
241*10465441SEvalZero struct uhid_comm_descriptor
242*10465441SEvalZero {
243*10465441SEvalZero #ifdef RT_USB_DEVICE_COMPOSITE
244*10465441SEvalZero     struct uiad_descriptor iad_desc;
245*10465441SEvalZero #endif
246*10465441SEvalZero     struct uinterface_descriptor    intf_desc;
247*10465441SEvalZero     struct uhid_descriptor          hid_desc;
248*10465441SEvalZero     struct uendpoint_descriptor     ep_in_desc;
249*10465441SEvalZero     struct uendpoint_descriptor     ep_out_desc;
250*10465441SEvalZero };
251*10465441SEvalZero typedef struct uhid_comm_descriptor* uhid_comm_desc_t;
252*10465441SEvalZero 
253*10465441SEvalZero 
254*10465441SEvalZero #ifdef __cplusplus
255*10465441SEvalZero }
256*10465441SEvalZero #endif
257*10465441SEvalZero 
258*10465441SEvalZero #endif /* _USBDEVICE_CLASS_HID_H_ */
259