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
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
|
/****************************************************************************
* include/nuttx/usb/hid.h
*
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* References:
* HID Universal Serial Bus (USB), Device Class Definition for Human
* Interface Devices (HID), Firmware Specification�6/27/01, Version
* 1.11.
*
* HuT Universal Serial Bus (USB), HID Usage Tables, 10/28/2004, Version
* 1.12
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#ifndef __INCLUDE_NUTTX_USB_HID_H
#define __INCLUDE_NUTTX_USB_HID_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/usb/usb.h>
/****************************************************************************
* Preprocessor definitions
****************************************************************************/
/* Subclass and Protocol ****************************************************/
/* Subclass codes (HID 4.2) */
#define USBHID_SUBCLASS_NONE 0 /* No subclass */
#define USBHID_SUBCLASS_BOOTIF 1 /* Boot Interface Subclass */
/* A variety of protocols are supported HID devices. The protocol member of
* an Interface descriptor only has meaning if the subclass member declares
* that the device supports a boot interface, otherwise it is 0. (HID 4.3)
*/
#define USBHID_PROTOCOL_NONE 0
#define USBHID_PROTOCOL_KEYBOARD 1
#define USBHID_PROTOCOL_MOUSE 2
/* Descriptor Requests ******************************************************/
/* "When a Get_Descriptor(Configuration) request is issued, it returns the
* Configuration descriptor, all Interface descriptors, all Endpoint
* descriptors, and the HID descriptor for each interface."
*/
/* Standard Requests (HID 7.1)
* GET_DESCRIPTOR (HID 7.1.1):
*
* bmRequestType (USB_REQ_DIR_IN | USB_REQ_TYPE_STANDARD | USB_REQ_RECIPIENT_INTERFACE)
* bRequest (USB_REQ_GETDESCRIPTOR)
* wValue Descriptor Type (MS) and Descriptor Index (LS)
* wIndex Interface Number
* wLength Descriptor Length
* Data Descriptor
*
* SET_DESCRIPTOR (HID 7.1.2):
*
* bmRequestType (USB_REQ_TYPE_STANDARD | USB_REQ_RECIPIENT_INTERFACE)
* bRequest (USB_REQ_SETDESCRIPTOR)
* wValue Descriptor Type (MS) and Descriptor Index (LS)
* wIndex Interface Number
* wLength Descriptor Length
* Data Descriptor
*/
/* Class Descriptor Types (HID 7.1) */
#define USBHID_DESCTYPE_HID 0x21 /* HID */
#define USBHID_DESCTYPE_REPORT 0x22 /* Report */
#define USBHID_DESCTYPE_PHYSICAL 0x23 /* Physical descriptor */
/* Class-specific requests (HID 7.2)
*
* bmRequestType ( USB_REQ_TYPE_CLASS | USB_REQ_RECIPIENT_INTERFACE) -or-
* (USB_REQ_DIR_IN | USB_REQ_TYPE_CLASS | USB_REQ_RECIPIENT_INTERFACE)
* bRequest Class-specific request
* wValue Varies according to request
* wIndex Varies according to request
* wLength Number of bytes to transfer in the data phase
* Data Data
*/
#define USBHID_REQUEST_GETREPORT 0x01
#define USBHID_REQUEST_GETIDLE 0x02
#define USBHID_REQUEST_GETPROTOCOL 0x03
#define USBHID_REQUEST_SETREPORT 0x09
#define USBHID_REQUEST_SETIDLE 0x0a
#define USBHID_REQUEST_SETPROTOCOL 0x0b
/* Report Type (MS byte of wValue for GET_REPORT) (HID 7.2.1) */
#define USBHID_REPORTTYPE_INPUT 0x01
#define USBHID_REPORTTYPE_OUTPUT 0x02
#define USBHID_REPORTTYPE_FEATURE 0x03
/* HID Descriptor ***********************************************************/
#define USBHID_COUNTRY_NONE 0x00 /* Not Supported */
#define USBHID_COUNTRY_ARABIC 0x01 /* Arabic */
#define USBHID_COUNTRY_BELGIAN 0x02 /* Belgian */
#define USBHID_COUNTRY_CANADA 0x03 /* Canadian-Bilingual */
#define USBHID_COUNTRY_CANADRFR 0x04 /* Canadian-French */
#define USBHID_COUNTRY_CZECH 0x05 /* Czech Republic */
#define USBHID_COUNTRY_DANISH 0x06 /* Danish */
#define USBHID_COUNTRY_FINNISH 0x07 /* Finnish */
#define USBHID_COUNTRY_FRENCH 0x08 /* French */
#define USBHID_COUNTRY_GERMAN 0x09 /* German */
#define USBHID_COUNTRY_GREEK 0x10 /* Greek */
#define USBHID_COUNTRY_HEBREW 0x11 /* Hebrew */
#define USBHID_COUNTRY_HUNGARY 0x12 /* Hungary */
#define USBHID_COUNTRY_ISO 0x13 /* International (ISO) */
#define USBHID_COUNTRY_ITALIAN 0x14 /* Italian */
#define USBHID_COUNTRY_JAPAN 0x15 /* Japan (Katakana) */
#define USBHID_COUNTRY_KOREAN 0x16 /* Korean */
#define USBHID_COUNTRY_LATINAM 0x17 /* Latin American */
#define USBHID_COUNTRY_DUTCH 0x18 /* Netherlands/Dutch */
#define USBHID_COUNTRY_NORWEGIAN 0x19 /* Norwegian */
#define USBHID_COUNTRY_PERSIAN 0x20 /* Persian (Farsi) */
#define USBHID_COUNTRY_POLAND 0x21 /* Poland */
#define USBHID_COUNTRY_PORTUGUESE 0x22 /* Portuguese */
#define USBHID_COUNTRY_RUSSIA 0x23 /* Russia */
#define USBHID_COUNTRY_SLOVAKIA 0x24 /* Slovakia */
#define USBHID_COUNTRY_SPANISH 0x25 /* Spanish */
#define USBHID_COUNTRY_SWEDISH 0x26 /* Swedish */
#define USBHID_COUNTRY_SWISSFR 0x27 /* Swiss/French */
#define USBHID_COUNTRY_SWISSGR 0x28 /* Swiss/German */
#define USBHID_COUNTRY_SWITZERLAND 0x29 /* Switzerland */
#define USBHID_COUNTRY_TAIWAN 0x30 /* Taiwan */
#define USBHID_COUNTRY_TURKISHQ 0x31 /* Turkish-Q */
#define USBHID_COUNTRY_UK 0x32 /* UK */
#define USBHID_COUNTRY_US 0x33 /* US */
#define USBHID_COUNTRY_YUGOSLAVIA 0x34 /* Yugoslavia */
#define USBHID_COUNTRY_TURKISHF 0x35 /* Turkish-F */
/* HID report items */
#define USBHID_RPTITEM_SIZE_MASK 0x03
# define USBHID_RPTITEM_SIZE_0 0x00 /* No data follows */
# define USBHID_RPTITEM_SIZE_1 0x01 /* 1 byte of data follows */
# define USBHID_RPTITEM_SIZE_2 0x02 /* 2 bytes of data follow */
# define USBHID_RPTITEM_SIZE_4 0x03 /* 4 bytes of data follow */
#define USBHID_RPTITEM_TYPE_MASK 0x0c
# define USBHID_RPTITEM_TYPE_MAIN 0x00
# define USBHID_RPTITEM_TYPE_GLOBAL 0x04
# define USBHID_RPTITEM_TYPE_LOCAL 0x08
#define USBHID_RPTITEM_TAG_MASK 0xf0
/* Main Items (HID 6.2.2.4) */
#define USBHID_MAIN_CONSTANT (1 << 0) /* Constant(1) vs Data(0) */
#define USBHID_MAIN_VARIABLE (1 << 1) /* Variable(1) vs Array(0) */
#define USBHID_MAIN_RELATIVE (1 << 2) /* Relative(1) vs Absolute(0) */
#define USBHID_MAIN_WRAP (1 << 3) /* Wrap(1) vs No Wrap(0) */
#define USBHID_MAIN_NONLINEAR (1 << 4) /* Non Linear(1) vs Linear(0) */
#define USBHID_MAIN_NOPREFERRED (1 << 5) /* No Preferred (1) vs Preferred State(0) */
#define USBHID_MAIN_NULLSTATE (1 << 6) /* Null state(1) vs No Null position(0) */
#define USBHID_MAIN_VOLATILE (1 << 7) /* Volatile(1) vs Non volatile(0) */
#define USBHID_MAIN_BUFFEREDBYTES (1 << 8) /* Buffered Bytes(1) vs Bit Field(0) */
#define USBHID_MAIN_SIZE(pfx) ((pfx) & USBHID_RPTITEM_SIZE_MASK)
#define USBHID_MAIN_INPUT_PREFIX 0x80
#define USBHID_MAIN_INPUT_CONSTANT USBHID_MAIN_CONSTANT
#define USBHID_MAIN_INPUT_VARIABLE USBHID_MAIN_VARIABLE
#define USBHID_MAIN_INPUT_RELATIVE USBHID_MAIN_RELATIVE
#define USBHID_MAIN_INPUT_WRAP USBHID_MAIN_WRAP
#define USBHID_MAIN_INPUT_NONLINEAR USBHID_MAIN_NONLINEAR
#define USBHID_MAIN_INPUT_NOPREFERRED USBHID_MAIN_NOPREFERRED
#define USBHID_MAIN_INPUT_NULLSTATE USBHID_MAIN_NULLSTATE
#define USBHID_MAIN_INPUT_BUFFEREDBYTES USBHID_MAIN_BUFFEREDBYTES
#define USBHID_MAIN_OUTPUT_PREFIX 0x90
#define USBHID_MAIN_OUTPUT_CONSTANT USBHID_MAIN_CONSTANT
#define USBHID_MAIN_OUTPUT_VARIABLE USBHID_MAIN_VARIABLE
#define USBHID_MAIN_OUTPUT_RELATIVE USBHID_MAIN_RELATIVE
#define USBHID_MAIN_OUTPUT_WRAP USBHID_MAIN_WRAP
#define USBHID_MAIN_OUTPUT_NONLINEAR USBHID_MAIN_NONLINEAR
#define USBHID_MAIN_OUTPUT_NOPREFERRED USBHID_MAIN_NOPREFERRED
#define USBHID_MAIN_OUTPUT_NULLSTATE USBHID_MAIN_NULLSTATE
#define USBHID_MAIN_OUTPUT_VOLATILE USBHID_MAIN_VOLATILE
#define USBHID_MAIN_OUTPUT_BUFFEREDBYTES USBHID_MAIN_BUFFEREDBYTES
#define USBHID_MAIN_FEATURE_PREFIX 0xb0
#define USBHID_MAIN_FEATURE_CONSTANT USBHID_MAIN_CONSTANT
#define USBHID_MAIN_FEATURE_VARIABLE USBHID_MAIN_VARIABLE
#define USBHID_MAIN_FEATURE_RELATIVE USBHID_MAIN_RELATIVE
#define USBHID_MAIN_FEATURE_WRAP USBHID_MAIN_WRAP
#define USBHID_MAIN_FEATURE_NONLINEAR USBHID_MAIN_NONLINEAR
#define USBHID_MAIN_FEATURE_NOPREFERRED USBHID_MAIN_NOPREFERRED
#define USBHID_MAIN_FEATURE_NULLSTATE USBHID_MAIN_NULLSTATE
#define USBHID_MAIN_FEATURE_VOLATILE USBHID_MAIN_VOLATILE
#define USBHID_MAIN_FEATURE_BUFFEREDBYTES USBHID_MAIN_BUFFEREDBYTES
#define USBHID_MAIN_COLLECTION_PREFIX 0xa0
#define USBHID_MAIN_COLLECTION_PHYSICAL 0x00 /* Physical (group of axes) */
#define USBHID_MAIN_COLLECTION_APPL 0x01 /* Application (mouse, keyboard) */
#define USBHID_MAIN_COLLECTION_LOGICAL 0x02 /* Logical (interrelated data) */
#define USBHID_MAIN_COLLECTION_REPORT 0x03 /* Report */
#define USBHID_MAIN_COLLECTION_ARRAY 0x04 /* Named Array */
#define USBHID_MAIN_COLLECTION_SWITCH 0x05 /* Usage Switch */
#define USBHID_MAIN_COLLECTION_MODIFIER 0x06 /* Usage Modifier */
#define USBHID_MAIN_ENDCOLLECTION_PREFIX 0xc0
/* Global Items (HID 6.2.2.7) */
#define USBHID_GLOBAL_SIZE(pfx) ((pfx) & USBHID_RPTITEM_SIZE_MASK)
#define USBHID_GLOBAL_USAGEPAGE_PREFIX 0x04 /* Usage Page */
#define USBHID_GLOBAL_LOGICALMIN_PREFIX 0x14 /* Logical Minimum */
#define USBHID_GLOBAL_LOGICALMAX_PREFIX 0x24 /* Logical Maximum */
#define USBHID_GLOBAL_PHYSICALMIN_PREFIX 0x34 /* Physical Minimum */
#define USBHID_GLOBAL_PHYSMICALAX_PREFIX 0x44 /* Physical Maximum */
#define USBHID_GLOBAL_UNITEXP_PREFIX 0x54 /* Unit Exponent */
#define USBHID_GLOBAL_UNIT_PREFIX 0x64 /* Unit */
#define USBHID_GLOBAL_REPORTSIZE_PREFIX 0x74 /* Report Size */
#define USBHID_GLOBAL_REPORTID_PREFIX 0x84 /* Report ID */
#define USBHID_GLOBAL_REPORTCOUNT_PREFIX 0x94 /* Report Count */
#define USBHID_GLOBAL_PUSH_PREFIX 0xa4 /* Push */
#define USBHID_GLOBAL_POP_PREFIX 0xb4 /* Pop */
/* Local Items (HID 6.2.2.8) */
#define USBHID_LOCAL_SIZE(pfx) ((pfx) & USBHID_RPTITEM_SIZE_MASK)
#define USBHID_LOCAL_USAGE_PREFIX 0x08 /* Usage */
#define USBHID_LOCAL_USAGEMIN_PREFIX 0x18 /* Usage Minimum */
#define USBHID_LOCAL_USAGEMAX_PREFIX 0x28 /* Usage Maximum */
#define USBHID_LOCAL_DESIGNATORIDX_PREFIX 0x38 /* Designator Index */
#define USBHID_LOCAL_DESIGNATORMIN_PREFIX 0x48 /* Designator Minimum */
#define USBHID_LOCAL_DESIGNATORMAX_PREFIX 0x58 /* Designator Maximum */
#define USBHID_LOCAL_STRINGIDX_PREFIX 0x78 /* String Index */
#define USBHID_LOCAL_STRINGMIN_PREFIX 0x88 /* String Minimum */
#define USBHID_LOCAL_STRINGMAX_PREFIX 0x98 /* xx */
#define USBHID_LOCAL_DELIMITER_PREFIX 0xa8 /*Delimiter */
/* Modifier Keys (HID 8.3) */
#define USBHID_MODIFER_LCTRL (1 << 0) /* Left Ctrl */
#define USBHID_MODIFER_LSHIFT (1 << 1) /* Left Shift */
#define USBHID_MODIFER_LALT (1 << 2) /* Left Alt */
#define USBHID_MODIFER_LGUI (1 << 3) /* Left GUI */
#define USBHID_MODIFER_RCTRL (1 << 4) /* Right Ctrl */
#define USBHID_MODIFER_RSHIFT (1 << 5) /* Right Shift */
#define USBHID_MODIFER_RALT (1 << 6) /* Right Alt */
#define USBHID_MODIFER_RGUI (1 << 7) /* Right GUI */
/* Keyboard output report (1 byte) (HID B.1) */
#define USBHID_KBDOUT_NUMLOCK (1 << 0)
#define USBHID_KBDOUT_CAPSLOCK (1 << 1)
#define USBHID_KBDOUT_SCROLLLOCK (1 << 2)
#define USBHID_KBDOUT_COMPOSE (1 << 3)
#define USBHID_KBDOUT_KANA (1 << 4)
/* Mouse input report (HID B.2) */
#define USBHID_MOUSEIN_BUTTON1 (1 << 0)
#define USBHID_MOUSEIN_BUTTON2 (1 << 1)
#define USBHID_MOUSEIN_BUTTON3 (1 << 2)
/* Joystick input report (4 bytes) (HID D.1) */
#define USBHID_JSIN_HATSWITCH_SHIFT (0)
#define USBHID_JSIN_HATSWITCH_MASK (15 << USBHID_JSIN_HATSWITCH_SHIFT)
#define USBHID_JSIN_BUTTON1 (1 << 4)
#define USBHID_JSIN_BUTTON2 (1 << 5)
#define USBHID_JSIN_BUTTON3 (1 << 6)
#define USBHID_JSIN_BUTTON4 (1 << 7)
/* Usage pages (HuT 3) */
#define USBHID_USAGE_PAGE_UNDEFINED 0x00 /* Undefined */
#define USBHID_USAGE_PAGE_GENERIC_DCTRL 0x01 /* Generic Desktop Controls */
#define USBHID_USAGE_PAGE_SIMCTRL 0x02 /* Simulation Controls */
#define USBHID_USAGE_PAGE_VRCTRL 0x03 /* VR Controls */
#define USBHID_USAGE_PAGE_SPORTCTRL 0x04 /* Sport Controls */
#define USBHID_USAGE_PAGE_GAMECTRL 0x05 /* Game Controls */
#define USBHID_USAGE_PAGE_GENERIC_DEVCTRL 0x06 /* Generic Device Controls */
#define USBHID_USAGE_PAGE_KBD 0x07 /* Keyboard/Keypad */
#define USBHID_USAGE_PAGE_LEDS 0x08 /* LEDs */
#define USBHID_USAGE_PAGE_BUTTON 0x09 /* Button */
#define USBHID_USAGE_PAGE_ORDINAL 0x0a /* Ordinal */
#define USBHID_USAGE_PAGE_TELEPHONY 0x0b /* Telephony */
#define USBHID_USAGE_PAGE_CONSUMER 0x0c /* Consumer */
#define USBHID_USAGE_PAGE_DIGITIZER 0x0d /* Digitizer */
/* 0x0e Reserved */
#define USBHID_USAGE_PAGE_PIDPAGE 0x0f /* PID Page USB Physical Interface Device */
#define USBHID_USAGE_PAGE_UNICODE 0x10 /* Unicode */
/* 0x11-13 Reserved */
#define USBHID_USAGE_PAGE_ALPHA_DISPLAY 0x14 /* Alphanumeric Display */
/* 0x15-3f Reserved */
#define USBHID_USAGE_PAGE_MEDICAL 0x40 /* Medical Instruments */
/* 0x41-7f Reserved */
/* 0x80-83 Monitor Devices */
/* 0x84-87 Power Devices */
/* 0x88-8b Reserved */
#define USBHID_USAGE_PAGE_BARCODE_SCANNER 0x8c /* Bar Code Scanner page */
#define USBHID_USAGE_PAGE_SCALE 0x8d /* Scale page */
#define USBHID_USAGE_PAGE_MSR 0x8e /* Magnetic Stripe Reading (MSR) Devices */
#define USBHID_USAGE_PAGE_POS 0x8f /* Point of Sale devices */
#define USBHID_USAGE_PAGE_CAMERA_CTRL 0x90 /* Camera Control Page */
/* Generic Desktop Page Usage IDs (HuT 4) */
#define USBHID_DCTRLUSE_UNDEFINED 0x00 /* Undefined */
#define USBHID_DCTRLUSE_POINTER 0x01 /* Pointer */
#define USBHID_DCTRLUSE_MOUSE 0x02 /* Mouse */
/* 0x03 Reserved */
#define USBHID_DCTRLUSE_JOYSTICK 0x04 /* Joystick */
#define USBHID_DCTRLUSE_GAMEPAD 0x05 /* Game Pad */
#define USBHID_DCTRLUSE_KEYBOARD 0x06 /* Keyboard */
#define USBHID_DCTRLUSE_KEYPAD 0x07 /* Keypad */
#define USBHID_DCTRLUSE_MULTIAXIS 0x08 /* Multi-axis Controller */
#define USBHID_DCTRLUSE_TABLET 0x09 /* Tablet PC System Controls */
/* 0x0a-2f Reserved */
#define USBHID_DCTRLUSE_X 0x30 /* X */
#define USBHID_DCTRLUSE_Y 0x31 /* Y */
#define USBHID_DCTRLUSE_Z 0x32 /* Z */
#define USBHID_DCTRLUSE_RX 0x33 /* Rx */
#define USBHID_DCTRLUSE_RY 0x34 /* Ry */
#define USBHID_DCTRLUSE_RZ 0x35 /* Rz */
#define USBHID_DCTRLUSE_SLIDER 0x36 /* Slider */
#define USBHID_DCTRLUSE_DIAL 0x37 /* Dial */
#define USBHID_DCTRLUSE_WHEEL 0x38 /* Wheel */
#define USBHID_DCTRLUSE_HATSWITCH 0x39 /* Hat switch */
#define USBHID_DCTRLUSE_COUNTED 0x3a /* Counted Buffer */
#define USBHID_DCTRLUSE_BYTECOUNT 0x3b /* Byte Count */
#define USBHID_DCTRLUSE_MOTION 0x3c /* Motion Wakeup */
#define USBHID_DCTRLUSE_START 0x3d /* Start */
#define USBHID_DCTRLUSE_SELECT 0x3e /* Select */
/* 0x3f Reserved */
#define USBHID_DCTRLUSE_VX 0x40 /* Vx */
#define USBHID_DCTRLUSE_VY 0x41 /* Vy */
#define USBHID_DCTRLUSE_VZ 0x42 /* Vz */
#define USBHID_DCTRLUSE_VBRX 0x43 /* Vbrx */
#define USBHID_DCTRLUSE_VBRY 0x44 /* Vbry */
#define USBHID_DCTRLUSE_VBRZ 0x45 /* Vbrz */
#define USBHID_DCTRLUSE_VNO 0x46 /* Vno */
#define USBHID_DCTRLUSE_FEATURE 0x47 /* Feature Notification */
#define USBHID_DCTRLUSE_RESOLUTION 0x48 /* Resolution Multiplier */
/* 0x49-7f Reserved */
#define USBHID_DCTRLUSE_CONTROL 0x80 /* System Control */
#define USBHID_DCTRLUSE_POWERDOWN 0x81 /* System Power Down */
#define USBHID_DCTRLUSE_SLEEP 0x82 /* System Sleep */
#define USBHID_DCTRLUSE_WAKEUP 0x83 /* System Wake Up */
#define USBHID_DCTRLUSE_CONTEXT_MENU 0x84 /* System Context Menu */
#define USBHID_DCTRLUSE_MAIN_MENU 0x85 /* System Main Menu */
#define USBHID_DCTRLUSE_APP_MENU 0x86 /* System App Menu */
#define USBHID_DCTRLUSE_MENU_HELP 0x87 /* System Menu Help */
#define USBHID_DCTRLUSE_MENU_EXIT 0x88 /* System Menu Exit */
#define USBHID_DCTRLUSE_MENU_SELECT 0x89 /* System Menu Select */
#define USBHID_DCTRLUSE_MENU_RIGHT 0x8a /* System Menu Right */
#define USBHID_DCTRLUSE_MENU_LEFT 0x8b /* System Menu Left */
#define USBHID_DCTRLUSE_MENU_UP 0x8c /* System Menu Up */
#define USBHID_DCTRLUSE_MENU_DOWN 0x8d /* System Menu Down */
#define USBHID_DCTRLUSE_COLD_RESTART 0x8e /* System Cold Restart */
#define USBHID_DCTRLUSE_WARM_RESTART 0x8f /* System Warm Restart */
#define USBHID_DCTRLUSE_DPAD_UP 0x90 /* D-pad Up */
#define USBHID_DCTRLUSE_DPAD_DOWN 0x91 /* D-pad Down */
#define USBHID_DCTRLUSE_DPAD_RIGHT 0x92 /* D-pad Right */
#define USBHID_DCTRLUSE_DPAD_LEFT 0x93 /* D-pad Left */
/* 0x94-9f Reserved */
#define USBHID_DCTRLUSE_DOCK 0xa0 /* System Dock */
#define USBHID_DCTRLUSE_UNDOCK 0xa1 /* System Undock */
#define USBHID_DCTRLUSE_SETUP 0xa2 /* System Setup */
#define USBHID_DCTRLUSE_BREAK 0xa3 /* System Break */
#define USBHID_DCTRLUSE_DEBUG_BREAK 0xa4 /* System Debugger Break */
#define USBHID_DCTRLUSE_APP_BREAK 0xa5 /* Application Break */
#define USBHID_DCTRLUSE_APP_DEBUG_BREAK 0xa6 /* Application Debugger Break */
#define USBHID_DCTRLUSE_MUTE 0xa7 /* System Speaker Mute */
#define USBHID_DCTRLUSE_HIBERNATE 0xa8 /* System Hibernate */
/* 0xa9-af Reserved */
#define USBHID_DCTRLUSE_DISPLAY_INVERT 0xb0 /* System Display Invert */
#define USBHID_DCTRLUSE_DISPALY_INTERNAL 0xb1 /* System Display Internal */
#define USBHID_DCTRLUSE_DISPLAY_EXTERNAL 0xb2 /* System Display External */
#define USBHID_DCTRLUSE_DISPLAY_BOTH 0xb3 /* System Display Both */
#define USBHID_DCTRLUSE_DISPLAY_DUAL 0xb4 /* System Display Dual */
#define USBHID_DCTRLUSE_DISPLAY_TOGGLE 0xb5 /* System Display Toggle Int/Ext */
#define USBHID_DCTRLUSE_DISPLAY_SWAP 0xb6 /* System Display Swap */
#define USBHID_DCTRLUSE_ 0xb7 /* System Display LCD Autoscale */
/* 0xb8-ffff Reserved */
/* Keyboard usage IDs (HuT 10) */
#define USBHID_KBDUSE_NONE 0x00 /* Reserved (no event indicated) */
#define USBHID_KBDUSE_ERRORROLLOVER 0x01 /* Keyboard ErrorRollOver */
#define USBHID_KBDUSE_POSTFAIL 0x02 /* Keyboard POSTFail */
#define USBHID_KBDUSE_ERRUNDEF 0x03 /* Keyboard ErrorUndefined */
#define USBHID_KBDUSE_A 0x04 /* Keyboard a or A (B-Z follow) */
#define USBHID_KBDUSE_1 0x1e /* Keyboard 1 (2-9 follow) */
#define USBHID_KBDUSE_EXCLAM 0x1e /* Keyboard 1 and ! */
#define USBHID_KBDUSE_AT 0x1f /* Keyboard 2 and @ */
#define USBHID_KBDUSE_POUND 0x20 /* Keyboard 3 and # */
#define USBHID_KBDUSE_DOLLAR 0x21 /* Keyboard 4 and $ */
#define USBHID_KBDUSE_PERCENT 0x22 /* Keyboard 5 and % */
#define USBHID_KBDUSE_CARAT 0x23 /* Keyboard 6 and ^ */
#define USBHID_KBDUSE_AMPERSAND 0x24 /* Keyboard 7 and & */
#define USBHID_KBDUSE_ASTERISK 0x25 /* Keyboard 8 and * */
#define USBHID_KBDUSE_LPAREN 0x26 /* Keyboard 9 and ( */
#define USBHID_KBDUSE_0 0x27 /* Keyboard 0 and ) */
#define USBHID_KBDUSE_RPAREN 0x27 /* Keyboard 0 and ) */
#define USBHID_KBDUSE_ENTER 0x28 /* Keyboard Return (ENTER) */
#define USBHID_KBDUSE_ESCAPE 0x29 /* Keyboard ESCAPE */
#define USBHID_KBDUSE_DELETE 0x2a /* Keyboard DELETE (Backspace) */
#define USBHID_KBDUSE_TAB 0x2b /* Keyboard Tab */
#define USBHID_KBDUSE_SPACE 0x2c /* Keyboard Spacebar */
#define USBHID_KBDUSE_HYPHEN 0x2d /* Keyboard - and (underscore) */
#define USBHID_KBDUSE_UNDERSCORE 0x2d /* Keyboard - and (underscore) */
#define USBHID_KBDUSE_EQUAL 0x2e /* Keyboard = and + */
#define USBHID_KBDUSE_PLUS 0x2e /* Keyboard = and + */
#define USBHID_KBDUSE_LBRACKET 0x2f /* Keyboard [ and { */
#define USBHID_KBDUSE_LBRACE 0x2f /* Keyboard [ and { */
#define USBHID_KBDUSE_RBRACKET 0x30 /* Keyboard ] and } */
#define USBHID_KBDUSE_RBRACE 0x30 /* Keyboard ] and } */
#define USBHID_KBDUSE_BSLASH 0x31 /* Keyboard \ and | */
#define USBHID_KBDUSE_VERTBAR 0x31 /* Keyboard \ and | */
#define USBHID_KBDUSE_NONUSPOUND 0x32 /* Keyboard Non-US # and ~ */
#define USBHID_KBDUSE_TILDE 0x32 /* Keyboard Non-US # and ~ */
#define USBHID_KBDUSE_SEMICOLON 0x33 /* Keyboard ; and : */
#define USBHID_KBDUSE_COLON 0x33 /* Keyboard ; and : */
#define USBHID_KBDUSE_SQUOTE 0x34 /* Keyboard ' and " */
#define USBHID_KBDUSE_DQUOUTE 0x34 /* Keyboard ' and " */
#define USBHID_KBDUSE_GACCENT 0x35 /* Keyboard Grave Accent and Tilde */
#define USBHID_KBDUSE_GTILDE 0x35 /* Keyboard Grave Accent and Tilde */
#define USBHID_KBDUSE_COMMON 0x36 /* Keyboard , and < */
#define USBHID_KBDUSE_LT 0x36 /* Keyboard , and < */
#define USBHID_KBDUSE_PERIOD 0x37 /* Keyboard . and > */
#define USBHID_KBDUSE_GT 0x37 /* Keyboard . and > */
#define USBHID_KBDUSE_DIV 0x38 /* Keyboard / and ? */
#define USBHID_KBDUSE_QUESTION 0x38 /* Keyboard / and ? */
#define USBHID_KBDUSE_CAPSLOCK 0x39 /* Keyboard Caps Lock */
#define USBHID_KBDUSE_F1 0x3a /* Keyboard F1 */
#define USBHID_KBDUSE_F2 0x3b /* Keyboard F2 */
#define USBHID_KBDUSE_F3 0x3c /* Keyboard F3 */
#define USBHID_KBDUSE_F4 0x3d /* Keyboard F4 */
#define USBHID_KBDUSE_F5 0x3e /* Keyboard F5 */
#define USBHID_KBDUSE_F6 0x3f /* Keyboard F6 */
#define USBHID_KBDUSE_F7 0x40 /* Keyboard F7 */
#define USBHID_KBDUSE_F8 0x41 /* Keyboard F8 */
#define USBHID_KBDUSE_F9 0x42 /* Keyboard F9 */
#define USBHID_KBDUSE_F10 0x43 /* Keyboard F10 */
#define USBHID_KBDUSE_F11 0x44 /* Keyboard F11 */
#define USBHID_KBDUSE_F12 0x45 /* Keyboard F12 */
#define USBHID_KBDUSE_PRINTSCN 0x46 /* Keyboard PrintScreen */
#define USBHID_KBDUSE_SCROLLLOCK 0x47 /* Keyboard Scroll Lock */
#define USBHID_KBDUSE_PAUSE 0x48 /* Keyboard Pause */
#define USBHID_KBDUSE_INSERT 0x49 /* Keyboard Insert */
#define USBHID_KBDUSE_HOME 0x4a /* Keyboard Home */
#define USBHID_KBDUSE_PAGEUP 0x4b /* Keyboard PageUp */
#define USBHID_KBDUSE_DELFWD 0x4c /* Keyboard Delete Forward */
#define USBHID_KBDUSE_END 0x4d /* Keyboard End */
#define USBHID_KBDUSE_PAGEDOWN 0x4e /* Keyboard PageDown */
#define USBHID_KBDUSE_RIGHT 0x4f /* eyboard RightArrow */
#define USBHID_KBDUSE_LEFT 0x50 /* Keyboard LeftArrow */
#define USBHID_KBDUSE_DOWN 0x5a /* Keyboard DownArrow */
#define USBHID_KBDUSE_UP 0x52 /* Keyboard UpArrow */
#define USBHID_KBDUSE_KPDNUMLOCK 0x53 /* Keypad Num Lock and Clear */
#define USBHID_KBDUSE_KPDNUMLOCKCLEAR 0x53 /* Keypad Num Lock and Clear */
#define USBHID_KBDUSE_KPDDIV 0x54 /* Keypad / */
#define USBHID_KBDUSE_KPDMUL 0x55 /* Keypad * */
#define USBHID_KBDUSE_KPDHMINUS 0x56 /* Keypad - */
#define USBHID_KBDUSE_KPDPLUS 0x57 /* Keypad + */
#define USBHID_KBDUSE_KPDEMTER 0x58 /* Keypad ENTER */
#define USBHID_KBDUSE_KPD1 0x59 /* Keypad 1 (2-9 follow) */
#define USBHID_KBDUSE_KPDEND 0x59 /* Keypad 1 and End */
#define USBHID_KBDUSE_KPDDOWN 0x5a /* Keypad 2 and Down Arrow */
#define USBHID_KBDUSE_KPDPAGEDN 0x5b /* Keypad 3 and PageDn */
#define USBHID_KBDUSE_KPDLEFT 0x5c /* Keypad 4 and Left Arrow */
#define USBHID_KBDUSE_KPDRIGHT 0x5e /* Keypad 6 and Right Arrow */
#define USBHID_KBDUSE_KPDHOME 0x5f /* Keypad 7 and Home */
#define USBHID_KBDUSE_KPDUP 0x60 /* Keypad 8 and Up Arrow */
#define USBHID_KBDUSE_KPDPAGEUP 0x61 /* Keypad 9 and PageUp */
#define USBHID_KBDUSE_KPD0 0x62 /* Keypad 0 and Insert */
#define USBHID_KBDUSE_KPDINSERT 0x62 /* Keypad 0 and Insert */
#define USBHID_KBDUSE_KPDDECIMALPT 0x63 /* Keypad . and Delete */
#define USBHID_KBDUSE_KPDDELETE 0x63 /* Keypad . and Delete */
#define USBHID_KBDUSE_NONUSBSLASH 0x64 /* Keyboard Non-US \ and | */
#define USBHID_KBDUSE_NONUSVERT 0x64 /* Keyboard Non-US \ and | */
#define USBHID_KBDUSE_APPLICATION 0x65 /* Keyboard Application */
#define USBHID_KBDUSE_POWER 0x66 /* Keyboard Power */
#define USBHID_KBDUSE_KPDEQUAL 0x67 /* Keypad = */
#define USBHID_KBDUSE_F13 0x68 /* Keyboard F13 */
#define USBHID_KBDUSE_F14 0x69 /* Keyboard F14 */
#define USBHID_KBDUSE_F15 0x6a /* Keyboard F15 */
#define USBHID_KBDUSE_F16 0x6b /* Keyboard F16 */
#define USBHID_KBDUSE_F17 0x6c /* Keyboard F17 */
#define USBHID_KBDUSE_F18 0x6d /* Keyboard F18 */
#define USBHID_KBDUSE_F19 0x6e /* Keyboard F19 */
#define USBHID_KBDUSE_F20 0x6f /* Keyboard F20 */
#define USBHID_KBDUSE_F21 0x70 /* Keyboard F21 */
#define USBHID_KBDUSE_F22 0x71 /* Keyboard F22 */
#define USBHID_KBDUSE_F23 0x72 /* Keyboard F23 */
#define USBHID_KBDUSE_F24 0x73 /* Keyboard F24 */
#define USBHID_KBDUSE_EXECUTE 0x74 /* Keyboard Execute */
#define USBHID_KBDUSE_HELP 0x75 /* Keyboard Help */
#define USBHID_KBDUSE_MENU 0x76 /* Keyboard Menu */
#define USBHID_KBDUSE_SELECT 0x77 /* Keyboard Select */
#define USBHID_KBDUSE_STOP 0x78 /* Keyboard Stop */
#define USBHID_KBDUSE_AGAIN 0x79 /* Keyboard Again */
#define USBHID_KBDUSE_UNDO 0x7a /* Keyboard Undo */
#define USBHID_KBDUSE_CUT 0x7b /* Keyboard Cut */
#define USBHID_KBDUSE_COPY 0x7c /* Keyboard Copy */
#define USBHID_KBDUSE_PASTE 0x7d /* Keyboard Paste */
#define USBHID_KBDUSE_FIND 0x7e /* Keyboard Find */
#define USBHID_KBDUSE_MUTE 0x7f /* Keyboard Mute */
#define USBHID_KBDUSE_VOLUP 0x80 /* Keyboard Volume Up */
#define USBHID_KBDUSE_VOLDOWN 0x81 /* Keyboard Volume Down */
#define USBHID_KBDUSE_LCAPSLOCK 0x82 /* Keyboard Locking Caps Lock */
#define USBHID_KBDUSE_LNUMLOCK 0x83 /* Keyboard Locking Num Lock */
#define USBHID_KBDUSE_LSCROLLLOCK 0x84 /* Keyboard Locking Scroll Lock */
#define USBHID_KBDUSE_KPDCOMMA 0x85 /* Keypad Comma */
#define USBHID_KBDUSE_KPDEQUALSIGN 0x86 /* Keypad Equal Sign */
#define USBHID_KBDUSE_INTERNATIONAL1 0x87 /* Keyboard International 1 */
#define USBHID_KBDUSE_INTERNATIONAL2 0x88 /* Keyboard International 2 */
#define USBHID_KBDUSE_INTERNATIONAL3 0x89 /* Keyboard International 3 */
#define USBHID_KBDUSE_INTERNATIONAL4 0x8a /* Keyboard International 4 */
#define USBHID_KBDUSE_INTERNATIONAL5 0x8b /* Keyboard International 5 */
#define USBHID_KBDUSE_INTERNATIONAL6 0x8c /* Keyboard International 6 */
#define USBHID_KBDUSE_INTERNATIONAL7 0x8d /* Keyboard International 7 */
#define USBHID_KBDUSE_INTERNATIONAL8 0x8e /* Keyboard International 8 */
#define USBHID_KBDUSE_INTERNATIONAL9 0x8f /* Keyboard International 9 */
#define USBHID_KBDUSE_LANG1 0x90 /* Keyboard LANG1 */
#define USBHID_KBDUSE_LANG2 0x91 /* Keyboard LANG2 */
#define USBHID_KBDUSE_LANG3 0x92 /* Keyboard LANG3 */
#define USBHID_KBDUSE_LANG4 0x93 /* Keyboard LANG4 */
#define USBHID_KBDUSE_LANG5 0x94 /* Keyboard LANG5 */
#define USBHID_KBDUSE_LANG6 0x95 /* Keyboard LANG6 */
#define USBHID_KBDUSE_LANG7 0x96 /* Keyboard LANG7 */
#define USBHID_KBDUSE_LANG8 0x97 /* Keyboard LANG8 */
#define USBHID_KBDUSE_LANG9 0x98 /* Keyboard LANG9 */
#define USBHID_KBDUSE_ALTERASE 0x99 /* Keyboard Alternate Erase */
#define USBHID_KBDUSE_SYSREQ 0x9a /* Keyboard SysReq/Attention */
#define USBHID_KBDUSE_CANCEL 0x9b /* Keyboard Cancel */
#define USBHID_KBDUSE_CLEAR 0x9c /* Keyboard Clear */
#define USBHID_KBDUSE_PRIOR 0x9d /* Keyboard Prior */
#define USBHID_KBDUSE_RETURN 0x9e /* Keyboard Return */
#define USBHID_KBDUSE_SEPARATOR 0x9f /* Keyboard Separator */
#define USBHID_KBDUSE_OUT 0xa0 /* Keyboard Out */
#define USBHID_KBDUSE_OPER 0xa1 /* Keyboard Oper */
#define USBHID_KBDUSE_CLEARAGAIN 0xa2 /* Keyboard Clear/Again */
#define USBHID_KBDUSE_CLRSEL 0xa3 /* Keyboard CrSel/Props */
#define USBHID_KBDUSE_EXSEL 0xa4 /* Keyboard ExSel */
#define USBHID_KBDUSE_KPD00 0xb0 /* Keypad 00 */
#define USBHID_KBDUSE_KPD000 0xb1 /* Keypad 000 */
#define USBHID_KBDUSE_THOUSEPARATOR 0xb2 /* Thousands Separator */
#define USBHID_KBDUSE_DECSEPARATOR 0xb3 /* Decimal Separator */
#define USBHID_KBDUSE_CURRUNIT 0xb4 /* Currency Unit */
#define USBHID_KBDUSE_CURRSUBUNIT 0xb5 /* Currency Sub-unit */
#define USBHID_KBDUSE_KPDLPAREN 0xb6 /* Keypad ( */
#define USBHID_KBDUSE_KPDRPAREN 0xb7 /* Keypad ) */
#define USBHID_KBDUSE_KPDLBRACE 0xb8 /* Keypad { */
#define USBHID_KBDUSE_KPDRBRACE 0xb9 /* Keypad } */
#define USBHID_KBDUSE_KPDTAB 0xba /* Keypad Tab */
#define USBHID_KBDUSE_KPDBACKSPACE 0xbb /* Keypad Backspace */
#define USBHID_KBDUSE_KPDA 0xbc /* Keypad A (B-F follow) */
#define USBHID_KBDUSE_KPDXOR 0xc2 /* Keypad XOR */
#define USBHID_KBDUSE_KPDEXP 0xc3 /* Keypad ^ */
#define USBHID_KBDUSE_KPDPERCENT 0xc4 /* Keypad % */
#define USBHID_KBDUSE_KPDLT 0xc5 /* Keypad < */
#define USBHID_KBDUSE_KPDGT 0xc6 /* Keypad > */
#define USBHID_KBDUSE_KPDAMPERSAND 0xc7 /* Keypad & */
#define USBHID_KBDUSE_KPDAND 0xc8 /* Keypad && */
#define USBHID_KBDUSE_KPDVERT 0xc9 /* Keypad | */
#define USBHID_KBDUSE_KPDOR 0xca /* Keypad || */
#define USBHID_KBDUSE_KPDCOLON 0xcb /* Keypad : */
#define USBHID_KBDUSE_KPDPOUND 0xcc /* Keypad # */
#define USBHID_KBDUSE_KPDSPACE 0xcd /* Keypad Space */
#define USBHID_KBDUSE_KPDAT 0xce /* Keypad @ */
#define USBHID_KBDUSE_KPDEXCLAM 0xcf /* Keypad ! */
#define USBHID_KBDUSE_KPDMEMSTORE 0xd0 /* Keypad Memory Store */
#define USBHID_KBDUSE_KPDMEMRECALL 0xd1 /* Keypad Memory Recall */
#define USBHID_KBDUSE_KPDMEMCLEAR 0xd2 /* Keypad Memory Clear */
#define USBHID_KBDUSE_KPDMEMADD 0xd3 /* Keypad Memory Add */
#define USBHID_KBDUSE_KPDMEMSUB 0xd4 /* Keypad Memory Subtract */
#define USBHID_KBDUSE_KPDMEMMULT 0xd5 /* Keypad Memory Multiply */
#define USBHID_KBDUSE_KPDMEMDIV 0xd6 /* Keypad Memory Divide */
#define USBHID_KBDUSE_KPDPLUSMINUS 0xd7 /* Keypad +/- */
#define USBHID_KBDUSE_KPDCLEAR 0xd8 /* Keypad Clear */
#define USBHID_KBDUSE_KPDCLEARENTRY 0xd9 /* Keypad Clear Entry */
#define USBHID_KBDUSE_KPDBINARY 0xda /* Keypad Binary */
#define USBHID_KBDUSE_KPDOCTAL 0xdb /* Keypad Octal */
#define USBHID_KBDUSE_KPDDECIMAL 0xdc /* Keypad Decimal */
#define USBHID_KBDUSE_KPDHEXADECIMAL 0xdd /* Keypad Hexadecimal */
#define USBHID_KBDUSE_LCTRL 0xe0 /* Keyboard LeftControl */
#define USBHID_KBDUSE_LSHIFT 0xe1 /* Keyboard LeftShift */
#define USBHID_KBDUSE_LALT 0xe2 /* Keyboard LeftAlt */
#define USBHID_KBDUSE_LGUI 0xe3 /* Keyboard Left GUI */
#define USBHID_KBDUSE_RCTRL 0xe4 /* Keyboard RightControl */
#define USBHID_KBDUSE_RSHIFT 0xe5 /* Keyboard RightShift */
#define USBHID_KBDUSE_RALT 0xe6 /* Keyboard RightAlt */
#define USBHID_KBDUSE_RGUI 0xe7 /* Keyboard Right GUI*/
#define USBHID_KBDUSE_MAX 0xe7
/****************************************************************************
* Public Types
****************************************************************************/
/* HID Descriptor (HID 6.2.1) ***********************************************/
struct usbhid_descriptor_s
{
uint8_t len; /* Size of the HID descriptor */
uint8_t type; /* HID descriptor type */
uint8_t hid[2]; /* HID class specification release */
uint8_t country; /* Country code */
uint8_t ndesc; /* Number of descriptors (>=1) */
uint8_t classdesc; /* Class descriptor type (See 7.1) */
uint8_t desclen[2]; /* Size of the report descriptor */
uint8_t optdesc; /* Type of optional descriptor */
uint8_t optlen[2]; /* Size of the optional descriptor */
};
/* Standard Reports *********************************************************/
/* Keyboard input report (8 bytes) (HID B.1) */
struct usbhid_kbdreport_s
{
uint8_t modifier; /* Modifier keys. See USBHID_MODIFIER_* definitions */
uint8_t reserved;
uint8_t key[6]; /* Keycode 1-6 */
};
/* Keyboard output report (1 byte) (HID B.1), see USBHID_KBDOUT_* definitions */
/* Mouse input report (HID B.2) */
struct usbhid_mousereport_s
{
uint8_t buttons; /* See USBHID_MOUSEIN_* definitions */
uint8_t xdisp; /* X displacement */
uint8_t ydisp; /* y displacement */
/* Device specific additional bytes may follow */
};
/* Joystick input report (1 bytes) (HID D.1) */
struct usbhid_jsreport_s
{
uint8_t xpos; /* X position */
uint8_t ypos; /* X position */
uint8_t buttons; /* See USBHID_JSIN_* definitions */
uint8_t throttle; /* Throttle */
};
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
#undef EXTERN
#if defined(__cplusplus)
# define EXTERN extern "C"
extern "C" {
#else
# define EXTERN extern
#endif
#undef EXTERN
#if defined(__cplusplus)
}
#endif
#endif /* __INCLUDE_NUTTX_USB_HID_H */
|