summaryrefslogtreecommitdiff
path: root/components/drivers/usb/usbdevice/class/hid.h
blob: 99da810ce846aba17086315d6cd72abfa0c0bf2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
/*
 * Copyright (c) 2006-2023, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2017-03-13     Urey         the first version
 * 2017-11-16     ZYH          Update to common hid
 */
#ifndef _USBDEVICE_CLASS_HID_H_
#define _USBDEVICE_CLASS_HID_H_

#ifdef __cplusplus
extern "C" {
#endif

#define HID_DESCRIPTOR_TYPE             0x21
#define HID_DESCRIPTOR_SIZE             0x09
#define HID_OFF_HID_DESC                0x12

#define USB_HID_SUBCLASS_BOOT           0x01
#define USB_HID_SUBCLASS_NOBOOT         0x00

#define USB_HID_PROTOCOL_NONE           0x00
#define USB_HID_PROTOCOL_KEYBOARD       0x01
#define USB_HID_PROTOCOL_MOUSE          0x02


#define USB_HID_REQ_GET_REPORT      0x01
#define USB_HID_REQ_GET_IDLE        0x02
#define USB_HID_REQ_GET_PROTOCOL    0x03
#define USB_HID_REQ_SET_REPORT      0x09
#define USB_HID_REQ_SET_IDLE        0x0a
#define USB_HID_REQ_SET_PROTOCOL    0x0b

#define MAX_REPORT_SIZE             64
#define HID_RX_BUFSIZE              64

/* HID Report Types */
#define HID_REPORT_INPUT            0x01
#define HID_REPORT_OUTPUT           0x02
#define HID_REPORT_FEATURE          0x03

/* Usage Pages */
#define USAGEPAGE_UNDEFINED        0x00
#define USAGEPAGE_GENERIC          0x01
#define USAGEPAGE_SIMULATION       0x02
#define USAGEPAGE_VR               0x03
#define USAGEPAGE_SPORT            0x04
#define USAGEPAGE_GAME             0x05
#define USAGEPAGE_DEV_CONTROLS     0x06
#define USAGEPAGE_KEYBOARD         0x07
#define USAGEPAGE_LED              0x08
#define USAGEPAGE_BUTTON           0x09
#define USAGEPAGE_ORDINAL          0x0A
#define USAGEPAGE_TELEPHONY        0x0B
#define USAGEPAGE_CONSUMER         0x0C
#define USAGEPAGE_DIGITIZER        0x0D
#define USAGEPAGE_PIDPAGE          0x0F
#define USAGEPAGE_UNICODE          0x10
#define USAGEPAGE_ALPHANUMERIC     0x14
#define USAGEPAGE_BARCODESCANNER   0x8C

/* Generic Desktop Page (0x01) */
#define USAGE_GENERIC_POINTER               0x01
#define USAGE_GENERIC_MOUSE                 0x02
#define USAGE_GENERIC_JOYSTICK              0x04
#define USAGE_GENERIC_GAMEPAD               0x05
#define USAGE_GENERIC_KEYBOARD              0x06
#define USAGE_GENERIC_KEYPAD                0x07
#define USAGE_GENERIC_X                     0x30
#define USAGE_GENERIC_Y                     0x31
#define USAGE_GENERIC_Z                     0x32
#define USAGE_GENERIC_RX                    0x33
#define USAGE_GENERIC_RY                    0x34
#define USAGE_GENERIC_RZ                    0x35
#define USAGE_GENERIC_SLIDER                0x36
#define USAGE_GENERIC_DIAL                  0x37
#define USAGE_GENERIC_WHEEL                 0x38
#define USAGE_GENERIC_HATSWITCH             0x39
#define USAGE_GENERIC_COUNTED_BUFFER        0x3A
#define USAGE_GENERIC_BYTE_COUNT            0x3B
#define USAGE_GENERIC_MOTION_WAKEUP         0x3C
#define USAGE_GENERIC_VX                    0x40
#define USAGE_GENERIC_VY                    0x41
#define USAGE_GENERIC_VZ                    0x42
#define USAGE_GENERIC_VBRX                  0x43
#define USAGE_GENERIC_VBRY                  0x44
#define USAGE_GENERIC_VBRZ                  0x45
#define USAGE_GENERIC_VNO                   0x46
#define USAGE_GENERIC_SYSTEM_CTL            0x80
#define USAGE_GENERIC_SYSCTL_POWER          0x81
#define USAGE_GENERIC_SYSCTL_SLEEP          0x82
#define USAGE_GENERIC_SYSCTL_WAKE           0x83
#define USAGE_GENERIC_SYSCTL_CONTEXT_MENU   0x84
#define USAGE_GENERIC_SYSCTL_MAIN_MENU      0x85
#define USAGE_GENERIC_SYSCTL_APP_MENU       0x86
#define USAGE_GENERIC_SYSCTL_HELP_MENU      0x87
#define USAGE_GENERIC_SYSCTL_MENU_EXIT      0x88
#define USAGE_GENERIC_SYSCTL_MENU_SELECT    0x89
#define USAGE_GENERIC_SYSCTL_MENU_RIGHT     0x8A
#define USAGE_GENERIC_SYSCTL_MENU_LEFT      0x8B
#define USAGE_GENERIC_SYSCTL_MENU_UP        0x8C
#define USAGE_GENERIC_SYSCTL_MENU_DOWN      0x8D

/* Simulation Controls Page(0x02) */
#define USAGE_SIMCTRL_THROTTLE              0xBB

/* HID Report Items */

/* Main Items */
#define HID_Input(x)           0x81,x
#define HID_Output(x)          0x91,x
#define HID_Feature(x)         0xB1,x
#define HID_Collection(x)      0xA1,x
#define HID_EndCollection()    0xC0

/* Local Items */
#define HID_Usage(x)           0x09,x
#define HID_UsageMin(x)        0x19,x
#define HID_UsageMax(x)        0x29,x

/* Global Items */
#define HID_UsagePage(x)       0x05,x
#define HID_UsagePageVendor(x) 0x06,x,0xFF
#define HID_LogicalMin(x)      0x15,x
#define HID_LogicalMinS(x)     0x16,(x&0xFF),((x>>8)&0xFF)
#define HID_LogicalMinL(x)     0x17,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_LogicalMax(x)      0x25,x
#define HID_LogicalMaxS(x)     0x26,(x&0xFF),((x>>8)&0xFF)
#define HID_LogicalMaxL(x)     0x27,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_PhysicalMin(x)     0x35,x
#define HID_PhysicalMinS(x)    0x36,(x&0xFF),((x>>8)&0xFF)
#define HID_PhysicalMinL(x)    0x37,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_PhysicalMax(x)     0x45,x
#define HID_PhysicalMaxS(x)    0x46,(x&0xFF),((x>>8)&0xFF)
#define HID_PhysicalMaxL(x)    0x47,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_UnitExponent(x)    0x55,x
#define HID_Unit(x)            0x65,x
#define HID_UnitS(x)           0x66,(x&0xFF),((x>>8)&0xFF)
#define HID_UnitL(x)           0x67,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_ReportSize(x)      0x75,x
#define HID_ReportSizeS(x)     0x76,(x&0xFF),((x>>8)&0xFF))
#define HID_ReportSizeL(x)     0x77,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_ReportID(x)        0x85,x
#define HID_ReportCount(x)     0x95,x
#define HID_ReportCountS(x)    0x96,(x&0xFF),((x>>8)&0xFF)
#define HID_ReportCountL(x)    0x97,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_Push()             0xA4
#define HID_Pop()              0xB4

/* Input, Output, Feature Data */
#define HID_DATA               (0<<0)
#define HID_CONST              (1<<0)
#define HID_ARRAY              (0<<1)
#define HID_VAR                (1<<1)
#define HID_ABS                (0<<2)
#define HID_REL                (1<<2)
#define HID_NOWRAP             (0<<3)
#define HID_WRAP               (1<<3)
#define HID_LINEAR             (0<<4)
#define HID_NONLINEAR          (1<<4)
#define HID_PREFERREDSTATE     (0<<5)
#define HID_NOPREFERRED        (1<<5)
#define HID_NONULLPOSITION     (0<<6)
#define HID_NULLSTATE          (1<<6)
#define HID_NONVOLATILE        (0<<7)
#define HID_VOLATILE           (1<<7)

/* Collection Data */
#define HID_PHYSICAL           0x00
#define HID_APPLICATION        0x01
#define HID_LOGICAL            0x02
#define HID_REPORT             0x03
#define HID_NAMEDARRAY         0x04
#define HID_USAGESWITCH        0x05
#define HID_USAGEMODIFIER      0x06

//HID_MBED_DEFINE
#define HID_VERSION_1_11    (0x0111)

/* HID Class */
#define HID_CLASS             (3)
#define HID_SUBCLASS_NONE     (0)
#define HID_SUBCLASS_BOOT     (1)
#define HID_PROTOCOL_NONE     (0)
#define HID_PROTOCOL_KEYBOARD (1)
#define HID_PROTOCOL_MOUSE    (2)

/* Descriptors */
#define HID_DESCRIPTOR          (33)
#define HID_DESCRIPTOR_LENGTH   (0x09)
#define REPORT_DESCRIPTOR       (34)

/* Class requests */
#define GET_REPORT (0x1)
#define GET_IDLE   (0x2)
#define SET_REPORT (0x9)
#define SET_IDLE   (0xa)

/* HID Class Report Descriptor */
/* Short items: size is 0, 1, 2 or 3 specifying 0, 1, 2 or 4 (four) bytes */
/* of data as per HID Class standard */

/* Main items */
#define INPUT(size)             (0x80 | size)
#define OUTPUT(size)            (0x90 | size)
#define FEATURE(size)           (0xb0 | size)
#define COLLECTION(size)        (0xa0 | size)
#define END_COLLECTION(size)    (0xc0 | size)

/* Global items */
#define USAGE_PAGE(size)        (0x04 | size)
#define LOGICAL_MINIMUM(size)   (0x14 | size)
#define LOGICAL_MAXIMUM(size)   (0x24 | size)
#define PHYSICAL_MINIMUM(size)  (0x34 | size)
#define PHYSICAL_MAXIMUM(size)  (0x44 | size)
#define UNIT_EXPONENT(size)     (0x54 | size)
#define UNIT(size)              (0x64 | size)
#define REPORT_SIZE(size)       (0x74 | size)
#define REPORT_ID(size)         (0x84 | size)
#define REPORT_COUNT(size)      (0x94 | size)
#define PUSH(size)              (0xa4 | size)
#define POP(size)               (0xb4 | size)

/* Local items */
#define USAGE(size)                 (0x08 | size)
#define USAGE_MINIMUM(size)         (0x18 | size)
#define USAGE_MAXIMUM(size)         (0x28 | size)
#define DESIGNATOR_INDEX(size)      (0x38 | size)
#define DESIGNATOR_MINIMUM(size)    (0x48 | size)
#define DESIGNATOR_MAXIMUM(size)    (0x58 | size)
#define STRING_INDEX(size)          (0x78 | size)
#define STRING_MINIMUM(size)        (0x88 | size)
#define STRING_MAXIMUM(size)        (0x98 | size)
#define DELIMITER(size)             (0xa8 | size)

#define LSB(n)  ((n)&0xff)
#define MSB(n)  (((n)&0xff00)>>8)
struct uhid_comm_descriptor
{
#ifdef RT_USB_DEVICE_COMPOSITE
    struct uiad_descriptor iad_desc;
#endif
    struct uinterface_descriptor    intf_desc;
    struct uhid_descriptor          hid_desc;
    struct uendpoint_descriptor     ep_in_desc;
    struct uendpoint_descriptor     ep_out_desc;
};
typedef struct uhid_comm_descriptor* uhid_comm_desc_t;


#ifdef __cplusplus
}
#endif

#endif /* _USBDEVICE_CLASS_HID_H_ */