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