16#ifndef ZEPHYR_INCLUDE_USB_CLASS_HID_H_ 
   17#define ZEPHYR_INCLUDE_USB_CLASS_HID_H_ 
   36#define USB_HID_VERSION                 0x0111 
   39#define USB_DESC_HID                    0x21 
   41#define USB_DESC_HID_REPORT             0x22 
   43#define USB_DESC_HID_PHYSICAL           0x23 
   46#define USB_HID_GET_REPORT              0x01 
   48#define USB_HID_GET_IDLE                0x02 
   50#define USB_HID_GET_PROTOCOL            0x03 
   52#define USB_HID_SET_REPORT              0x09 
   54#define USB_HID_SET_IDLE                0x0A 
   56#define USB_HID_SET_PROTOCOL            0x0B 
   59#define HID_BOOT_IFACE_CODE_NONE        0 
   61#define HID_BOOT_IFACE_CODE_KEYBOARD    1 
   63#define HID_BOOT_IFACE_CODE_MOUSE       2 
   66#define HID_PROTOCOL_BOOT               0 
   68#define HID_PROTOCOL_REPORT             1 
   71#define HID_ITEM_TYPE_MAIN              0x0 
   73#define HID_ITEM_TYPE_GLOBAL            0x1 
   75#define HID_ITEM_TYPE_LOCAL             0x2 
   78#define HID_ITEM_TAG_INPUT              0x8 
   80#define HID_ITEM_TAG_OUTPUT             0x9 
   82#define HID_ITEM_TAG_COLLECTION         0xA 
   84#define HID_ITEM_TAG_FEATURE            0xB 
   86#define HID_ITEM_TAG_COLLECTION_END     0xC 
   89#define HID_ITEM_TAG_USAGE_PAGE         0x0 
   91#define HID_ITEM_TAG_LOGICAL_MIN        0x1 
   93#define HID_ITEM_TAG_LOGICAL_MAX        0x2 
   95#define HID_ITEM_TAG_PHYSICAL_MIN       0x3 
   97#define HID_ITEM_TAG_PHYSICAL_MAX       0x4 
   99#define HID_ITEM_TAG_UNIT_EXPONENT      0x5 
  101#define HID_ITEM_TAG_UNIT               0x6 
  103#define HID_ITEM_TAG_REPORT_SIZE        0x7 
  105#define HID_ITEM_TAG_REPORT_ID          0x8 
  107#define HID_ITEM_TAG_REPORT_COUNT       0x9 
  110#define HID_ITEM_TAG_USAGE              0x0 
  112#define HID_ITEM_TAG_USAGE_MIN          0x1 
  114#define HID_ITEM_TAG_USAGE_MAX          0x2 
  117#define HID_COLLECTION_PHYSICAL         0x00 
  119#define HID_COLLECTION_APPLICATION      0x01 
  121#define HID_COLLECTION_LOGICAL          0x02 
  123#define HID_COLLECTION_REPORT           0x03 
  125#define HID_COLLECTION_NAMED_ARRAY      0x04 
  127#define HID_COLLECTION_USAGE_SWITCH     0x05 
  129#define HID_COLLECTION_MODIFIER         0x06 
  135#define HID_USAGE_GEN_DESKTOP           0x01 
  137#define HID_USAGE_GEN_KEYBOARD          0x07 
  139#define HID_USAGE_GEN_LEDS              0x08 
  141#define HID_USAGE_GEN_BUTTON            0x09 
  144#define HID_USAGE_GEN_DESKTOP_UNDEFINED 0x00 
  146#define HID_USAGE_GEN_DESKTOP_POINTER   0x01 
  148#define HID_USAGE_GEN_DESKTOP_MOUSE     0x02 
  150#define HID_USAGE_GEN_DESKTOP_JOYSTICK  0x04 
  152#define HID_USAGE_GEN_DESKTOP_GAMEPAD   0x05 
  154#define HID_USAGE_GEN_DESKTOP_KEYBOARD  0x06 
  156#define HID_USAGE_GEN_DESKTOP_KEYPAD    0x07 
  158#define HID_USAGE_GEN_DESKTOP_X         0x30 
  160#define HID_USAGE_GEN_DESKTOP_Y         0x31 
  162#define HID_USAGE_GEN_DESKTOP_WHEEL     0x38 
  181#define HID_ITEM(bTag, bType, bSize)    (((bTag & 0xF) << 4) | \ 
  182                                         ((bType & 0x3) << 2) | (bSize & 0x3)) 
  193#define HID_INPUT(a)                    \ 
  194        HID_ITEM(HID_ITEM_TAG_INPUT, HID_ITEM_TYPE_MAIN, 1), a 
  204#define HID_OUTPUT(a)                   \ 
  205        HID_ITEM(HID_ITEM_TAG_OUTPUT, HID_ITEM_TYPE_MAIN, 1), a 
  213#define HID_FEATURE(a)                  \ 
  214        HID_ITEM(HID_ITEM_TAG_FEATURE, HID_ITEM_TYPE_MAIN, 1), a 
  225#define HID_COLLECTION(a)               \ 
  226        HID_ITEM(HID_ITEM_TAG_COLLECTION, HID_ITEM_TYPE_MAIN, 1), a 
  236#define HID_END_COLLECTION              \ 
  237        HID_ITEM(HID_ITEM_TAG_COLLECTION_END, HID_ITEM_TYPE_MAIN, 0) 
  248#define HID_USAGE_PAGE(page)            \ 
  249        HID_ITEM(HID_ITEM_TAG_USAGE_PAGE, HID_ITEM_TYPE_GLOBAL, 1), page 
  260#define HID_LOGICAL_MIN8(a)             \ 
  261        HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 1), a 
  272#define HID_LOGICAL_MAX8(a)             \ 
  273        HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 1), a 
  282#define HID_LOGICAL_MIN16(a, b)         \ 
  283        HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 2), a, b 
  292#define HID_LOGICAL_MAX16(a, b)         \ 
  293        HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 2), a, b 
  304#define HID_LOGICAL_MIN32(a, b, c, d)   \ 
  305        HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d 
  316#define HID_LOGICAL_MAX32(a, b, c, d)   \ 
  317        HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d 
  328#define HID_REPORT_SIZE(size)           \ 
  329        HID_ITEM(HID_ITEM_TAG_REPORT_SIZE, HID_ITEM_TYPE_GLOBAL, 1), size 
  337#define HID_REPORT_ID(id)               \ 
  338        HID_ITEM(HID_ITEM_TAG_REPORT_ID, HID_ITEM_TYPE_GLOBAL, 1), id 
  349#define HID_REPORT_COUNT(count)         \ 
  350        HID_ITEM(HID_ITEM_TAG_REPORT_COUNT, HID_ITEM_TYPE_GLOBAL, 1), count 
  361#define HID_USAGE(idx)                  \ 
  362        HID_ITEM(HID_ITEM_TAG_USAGE, HID_ITEM_TYPE_LOCAL, 1), idx 
  373#define HID_USAGE_MIN8(a)               \ 
  374        HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 1), a 
  385#define HID_USAGE_MAX8(a)               \ 
  386        HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 1), a 
  398#define HID_USAGE_MIN16(a, b)           \ 
  399        HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 2), a, b 
  411#define HID_USAGE_MAX16(a, b)           \ 
  412        HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 2), a, b 
  428#define HID_MOUSE_REPORT_DESC(bcnt) {                           \ 
  429        HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),                  \ 
  430        HID_USAGE(HID_USAGE_GEN_DESKTOP_MOUSE),                 \ 
  431        HID_COLLECTION(HID_COLLECTION_APPLICATION),             \ 
  432                HID_USAGE(HID_USAGE_GEN_DESKTOP_POINTER),       \ 
  433                HID_COLLECTION(HID_COLLECTION_PHYSICAL),        \ 
  435                        HID_USAGE_PAGE(HID_USAGE_GEN_BUTTON),   \ 
  437                        HID_USAGE_MAX8(bcnt),                   \ 
  438                        HID_LOGICAL_MIN8(0),                    \ 
  439                        HID_LOGICAL_MAX8(1),                    \ 
  440                        HID_REPORT_SIZE(1),                     \ 
  441                        HID_REPORT_COUNT(bcnt),                 \ 
  445                        HID_REPORT_SIZE(8 - bcnt),              \ 
  446                        HID_REPORT_COUNT(1),                    \ 
  450                        HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),  \ 
  451                        HID_USAGE(HID_USAGE_GEN_DESKTOP_X),     \ 
  452                        HID_USAGE(HID_USAGE_GEN_DESKTOP_Y),     \ 
  453                        HID_USAGE(HID_USAGE_GEN_DESKTOP_WHEEL), \ 
  454                        HID_LOGICAL_MIN8(-127),                 \ 
  455                        HID_LOGICAL_MAX8(127),                  \ 
  456                        HID_REPORT_SIZE(8),                     \ 
  457                        HID_REPORT_COUNT(3),                    \ 
  460                HID_END_COLLECTION,                             \ 
  461        HID_END_COLLECTION,                                     \ 
  467#define HID_KEYBOARD_REPORT_DESC() {                            \ 
  468        HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),                  \ 
  469        HID_USAGE(HID_USAGE_GEN_DESKTOP_KEYBOARD),              \ 
  470        HID_COLLECTION(HID_COLLECTION_APPLICATION),             \ 
  471                HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD),   \ 
  473                HID_USAGE_MIN8(0xE0),                           \ 
  475                HID_USAGE_MAX8(0xE7),                           \ 
  476                HID_LOGICAL_MIN8(0),                            \ 
  477                HID_LOGICAL_MAX8(1),                            \ 
  478                HID_REPORT_SIZE(1),                             \ 
  479                HID_REPORT_COUNT(8),                            \ 
  482                HID_REPORT_SIZE(8),                             \ 
  483                HID_REPORT_COUNT(1),                            \ 
  486                HID_REPORT_SIZE(1),                             \ 
  487                HID_REPORT_COUNT(5),                            \ 
  488                HID_USAGE_PAGE(HID_USAGE_GEN_LEDS),             \ 
  495                HID_REPORT_SIZE(3),                             \ 
  496                HID_REPORT_COUNT(1),                            \ 
  499                HID_REPORT_SIZE(8),                             \ 
  500                HID_REPORT_COUNT(6),                            \ 
  501                HID_LOGICAL_MIN8(0),                            \ 
  502                HID_LOGICAL_MAX8(101),                          \ 
  503                HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD),   \ 
  507                HID_USAGE_MAX8(101),                            \ 
  510        HID_END_COLLECTION,                                     \ 
hid_kbd_modifier
HID keyboard modifiers.
Definition: hid.h:617
 
hid_kbd_code
HID keyboard button codes.
Definition: hid.h:516
 
hid_kbd_led
HID keyboard LEDs.
Definition: hid.h:632
 
@ HID_KBD_MODIFIER_RIGHT_UI
Definition: hid.h:626
 
@ HID_KBD_MODIFIER_LEFT_CTRL
Definition: hid.h:619
 
@ HID_KBD_MODIFIER_LEFT_UI
Definition: hid.h:622
 
@ HID_KBD_MODIFIER_NONE
Definition: hid.h:618
 
@ HID_KBD_MODIFIER_LEFT_ALT
Definition: hid.h:621
 
@ HID_KBD_MODIFIER_RIGHT_ALT
Definition: hid.h:625
 
@ HID_KBD_MODIFIER_RIGHT_CTRL
Definition: hid.h:623
 
@ HID_KBD_MODIFIER_LEFT_SHIFT
Definition: hid.h:620
 
@ HID_KBD_MODIFIER_RIGHT_SHIFT
Definition: hid.h:624
 
@ HID_KEY_V
Definition: hid.h:538
 
@ HID_KEY_R
Definition: hid.h:534
 
@ HID_KEY_1
Definition: hid.h:543
 
@ HID_KEY_Q
Definition: hid.h:533
 
@ HID_KEY_HASH
Definition: hid.h:563
 
@ HID_KEY_4
Definition: hid.h:546
 
@ HID_KEY_8
Definition: hid.h:550
 
@ HID_KEY_PAUSE
Definition: hid.h:585
 
@ HID_KEY_KP_5
Definition: hid.h:606
 
@ HID_KEY_KP_7
Definition: hid.h:608
 
@ HID_KEY_INSERT
Definition: hid.h:586
 
@ HID_KEY_F7
Definition: hid.h:577
 
@ HID_KEY_G
Definition: hid.h:523
 
@ HID_KEY_PAGEUP
Definition: hid.h:588
 
@ HID_KEY_SLASH
Definition: hid.h:569
 
@ HID_KEY_BACKSLASH
Definition: hid.h:562
 
@ HID_KEY_J
Definition: hid.h:526
 
@ HID_KEY_KPPLUS
Definition: hid.h:600
 
@ HID_KEY_SEMICOLON
Definition: hid.h:564
 
@ HID_KEY_DOT
Definition: hid.h:568
 
@ HID_KEY_KP_3
Definition: hid.h:604
 
@ HID_KEY_KPSLASH
Definition: hid.h:597
 
@ HID_KEY_KP_4
Definition: hid.h:605
 
@ HID_KEY_KP_0
Definition: hid.h:611
 
@ HID_KEY_H
Definition: hid.h:524
 
@ HID_KEY_RIGHT
Definition: hid.h:592
 
@ HID_KEY_Y
Definition: hid.h:541
 
@ HID_KEY_K
Definition: hid.h:527
 
@ HID_KEY_CAPSLOCK
Definition: hid.h:570
 
@ HID_KEY_M
Definition: hid.h:529
 
@ HID_KEY_F8
Definition: hid.h:578
 
@ HID_KEY_A
Definition: hid.h:517
 
@ HID_KEY_7
Definition: hid.h:549
 
@ HID_KEY_F9
Definition: hid.h:579
 
@ HID_KEY_TAB
Definition: hid.h:556
 
@ HID_KEY_HOME
Definition: hid.h:587
 
@ HID_KEY_KP_2
Definition: hid.h:603
 
@ HID_KEY_KPMINUS
Definition: hid.h:599
 
@ HID_KEY_APOSTROPHE
Definition: hid.h:565
 
@ HID_KEY_9
Definition: hid.h:551
 
@ HID_KEY_ESC
Definition: hid.h:554
 
@ HID_KEY_F3
Definition: hid.h:573
 
@ HID_KEY_F11
Definition: hid.h:581
 
@ HID_KEY_KP_1
Definition: hid.h:602
 
@ HID_KEY_0
Definition: hid.h:552
 
@ HID_KEY_T
Definition: hid.h:536
 
@ HID_KEY_GRAVE
Definition: hid.h:566
 
@ HID_KEY_END
Definition: hid.h:590
 
@ HID_KEY_KP_6
Definition: hid.h:607
 
@ HID_KEY_C
Definition: hid.h:519
 
@ HID_KEY_F1
Definition: hid.h:571
 
@ HID_KEY_F2
Definition: hid.h:572
 
@ HID_KEY_DOWN
Definition: hid.h:594
 
@ HID_KEY_X
Definition: hid.h:540
 
@ HID_KEY_MINUS
Definition: hid.h:558
 
@ HID_KEY_Z
Definition: hid.h:542
 
@ HID_KEY_COMMA
Definition: hid.h:567
 
@ HID_KEY_F4
Definition: hid.h:574
 
@ HID_KEY_U
Definition: hid.h:537
 
@ HID_KEY_F12
Definition: hid.h:582
 
@ HID_KEY_N
Definition: hid.h:530
 
@ HID_KEY_KPENTER
Definition: hid.h:601
 
@ HID_KEY_B
Definition: hid.h:518
 
@ HID_KEY_D
Definition: hid.h:520
 
@ HID_KEY_F6
Definition: hid.h:576
 
@ HID_KEY_LEFTBRACE
Definition: hid.h:560
 
@ HID_KEY_F10
Definition: hid.h:580
 
@ HID_KEY_EQUAL
Definition: hid.h:559
 
@ HID_KEY_P
Definition: hid.h:532
 
@ HID_KEY_F
Definition: hid.h:522
 
@ HID_KEY_KP_9
Definition: hid.h:610
 
@ HID_KEY_F5
Definition: hid.h:575
 
@ HID_KEY_O
Definition: hid.h:531
 
@ HID_KEY_KP_8
Definition: hid.h:609
 
@ HID_KEY_W
Definition: hid.h:539
 
@ HID_KEY_6
Definition: hid.h:548
 
@ HID_KEY_SCROLLLOCK
Definition: hid.h:584
 
@ HID_KEY_SYSRQ
Definition: hid.h:583
 
@ HID_KEY_S
Definition: hid.h:535
 
@ HID_KEY_DELETE
Definition: hid.h:589
 
@ HID_KEY_2
Definition: hid.h:544
 
@ HID_KEY_ENTER
Definition: hid.h:553
 
@ HID_KEY_RIGHTBRACE
Definition: hid.h:561
 
@ HID_KEY_5
Definition: hid.h:547
 
@ HID_KEY_SPACE
Definition: hid.h:557
 
@ HID_KEY_3
Definition: hid.h:545
 
@ HID_KEY_L
Definition: hid.h:528
 
@ HID_KEY_UP
Definition: hid.h:595
 
@ HID_KEY_PAGEDOWN
Definition: hid.h:591
 
@ HID_KEY_LEFT
Definition: hid.h:593
 
@ HID_KEY_I
Definition: hid.h:525
 
@ HID_KEY_BACKSPACE
Definition: hid.h:555
 
@ HID_KEY_NUMLOCK
Definition: hid.h:596
 
@ HID_KEY_KPASTERISK
Definition: hid.h:598
 
@ HID_KEY_E
Definition: hid.h:521
 
@ HID_KBD_LED_NUM_LOCK
Definition: hid.h:633
 
@ HID_KBD_LED_SCROLL_LOCK
Definition: hid.h:635
 
@ HID_KBD_LED_CAPS_LOCK
Definition: hid.h:634
 
@ HID_KBD_LED_COMPOSE
Definition: hid.h:636
 
@ HID_KBD_LED_KANA
Definition: hid.h:637