Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
hid.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 Intel Corporation
3 * Copyright (c) 2018,2021 Nordic Semiconductor ASA
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
15
16#ifndef ZEPHYR_INCLUDE_USB_CLASS_HID_H_
17#define ZEPHYR_INCLUDE_USB_CLASS_HID_H_
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
31
36
38#define USB_HID_VERSION 0x0111
39
41#define USB_DESC_HID 0x21
43#define USB_DESC_HID_REPORT 0x22
45#define USB_DESC_HID_PHYSICAL 0x23
46
48#define USB_HID_GET_REPORT 0x01
50#define USB_HID_GET_IDLE 0x02
52#define USB_HID_GET_PROTOCOL 0x03
54#define USB_HID_SET_REPORT 0x09
56#define USB_HID_SET_IDLE 0x0A
58#define USB_HID_SET_PROTOCOL 0x0B
59
61#define HID_BOOT_IFACE_CODE_NONE 0
63#define HID_BOOT_IFACE_CODE_KEYBOARD 1
65#define HID_BOOT_IFACE_CODE_MOUSE 2
66
68#define HID_PROTOCOL_BOOT 0
70#define HID_PROTOCOL_REPORT 1
71
73#define HID_ITEM_TYPE_MAIN 0x0
75#define HID_ITEM_TYPE_GLOBAL 0x1
77#define HID_ITEM_TYPE_LOCAL 0x2
78
80#define HID_ITEM_TAG_INPUT 0x8
82#define HID_ITEM_TAG_OUTPUT 0x9
84#define HID_ITEM_TAG_COLLECTION 0xA
86#define HID_ITEM_TAG_FEATURE 0xB
88#define HID_ITEM_TAG_COLLECTION_END 0xC
89
91#define HID_ITEM_TAG_USAGE_PAGE 0x0
93#define HID_ITEM_TAG_LOGICAL_MIN 0x1
95#define HID_ITEM_TAG_LOGICAL_MAX 0x2
97#define HID_ITEM_TAG_PHYSICAL_MIN 0x3
99#define HID_ITEM_TAG_PHYSICAL_MAX 0x4
101#define HID_ITEM_TAG_UNIT_EXPONENT 0x5
103#define HID_ITEM_TAG_UNIT 0x6
105#define HID_ITEM_TAG_REPORT_SIZE 0x7
107#define HID_ITEM_TAG_REPORT_ID 0x8
109#define HID_ITEM_TAG_REPORT_COUNT 0x9
110
112#define HID_ITEM_TAG_USAGE 0x0
114#define HID_ITEM_TAG_USAGE_MIN 0x1
116#define HID_ITEM_TAG_USAGE_MAX 0x2
117
119#define HID_COLLECTION_PHYSICAL 0x00
121#define HID_COLLECTION_APPLICATION 0x01
123#define HID_COLLECTION_LOGICAL 0x02
125#define HID_COLLECTION_REPORT 0x03
127#define HID_COLLECTION_NAMED_ARRAY 0x04
129#define HID_COLLECTION_USAGE_SWITCH 0x05
131#define HID_COLLECTION_MODIFIER 0x06
132
133
134/* Usage page and IDs from Universal Serial Bus HID Usage Tables */
135
137#define HID_USAGE_GEN_DESKTOP 0x01
139#define HID_USAGE_GEN_KEYBOARD 0x07
141#define HID_USAGE_GEN_LEDS 0x08
143#define HID_USAGE_GEN_BUTTON 0x09
145#define HID_USAGE_SENSORS 0x20
146
148#define HID_USAGE_GEN_DESKTOP_UNDEFINED 0x00
150#define HID_USAGE_GEN_DESKTOP_POINTER 0x01
152#define HID_USAGE_GEN_DESKTOP_MOUSE 0x02
154#define HID_USAGE_GEN_DESKTOP_JOYSTICK 0x04
156#define HID_USAGE_GEN_DESKTOP_GAMEPAD 0x05
158#define HID_USAGE_GEN_DESKTOP_KEYBOARD 0x06
160#define HID_USAGE_GEN_DESKTOP_KEYPAD 0x07
162#define HID_USAGE_GEN_DESKTOP_X 0x30
164#define HID_USAGE_GEN_DESKTOP_Y 0x31
166#define HID_USAGE_GEN_DESKTOP_WHEEL 0x38
167
169#define HID_USAGE_SENSOR_TYPE_COLLECTION 0x001
171#define HID_USAGE_SENSORS_TYPE_ENVIRONMENTAL_TEMPERATURE 0x033
173#define HID_USAGE_SENSORS_EVENT_SENSOR_STATE 0x201
175#define HID_USAGE_SENSORS_PROPERTY_FRIENDLY_NAME 0x301
177#define HID_USAGE_SENSORS_DATA_ENVIRONMENTAL_TEMPERATURE 0x434
179#define HID_USAGE_SENSORS_PROPERTY_TIMESTAMP 0x529
181#define HID_USAGE_SENSORS_SENSOR_STATE_UNDEFINED 0x800
183#define HID_USAGE_SENSORS_SENSOR_STATE_READY 0x801
185#define HID_USAGE_SENSORS_SENSOR_STATE_NOT_AVAILABLE 0x802
187#define HID_USAGE_SENSORS_SENSOR_STATE_NO_DATA 0x803
189#define HID_USAGE_SENSORS_SENSOR_STATE_INITIALIZING 0x804
191#define HID_USAGE_SENSORS_SENSOR_STATE_ACCESS_DENIED 0x805
193#define HID_USAGE_SENSORS_SENSOR_STATE_ERROR 0x806
194
198
203
212#define HID_ITEM(bTag, bType, bSize) (((bTag & 0xF) << 4) | \
213 ((bType & 0x3) << 2) | (bSize & 0x3))
214
224#define HID_INPUT(a) \
225 HID_ITEM(HID_ITEM_TAG_INPUT, HID_ITEM_TYPE_MAIN, 1), a
226
235#define HID_OUTPUT(a) \
236 HID_ITEM(HID_ITEM_TAG_OUTPUT, HID_ITEM_TYPE_MAIN, 1), a
237
244#define HID_FEATURE(a) \
245 HID_ITEM(HID_ITEM_TAG_FEATURE, HID_ITEM_TYPE_MAIN, 1), a
246
256#define HID_COLLECTION(a) \
257 HID_ITEM(HID_ITEM_TAG_COLLECTION, HID_ITEM_TYPE_MAIN, 1), a
258
267#define HID_END_COLLECTION \
268 HID_ITEM(HID_ITEM_TAG_COLLECTION_END, HID_ITEM_TYPE_MAIN, 0)
269
279#define HID_USAGE_PAGE(page) \
280 HID_ITEM(HID_ITEM_TAG_USAGE_PAGE, HID_ITEM_TYPE_GLOBAL, 1), page
281
288#define HID_USAGE_PAGE16(page) \
289 HID_ITEM(HID_ITEM_TAG_USAGE_PAGE, HID_ITEM_TYPE_GLOBAL, 2), (uint8_t)page, (page >> 8)
290
300#define HID_LOGICAL_MIN8(a) \
301 HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 1), a
302
312#define HID_LOGICAL_MAX8(a) \
313 HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 1), a
314
322#define HID_LOGICAL_MIN16(a, b) \
323 HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 2), a, b
324
332#define HID_LOGICAL_MAX16(a, b) \
333 HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 2), a, b
334
344#define HID_LOGICAL_MIN32(a, b, c, d) \
345 HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d
346
356#define HID_LOGICAL_MAX32(a, b, c, d) \
357 HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d
358
368#define HID_REPORT_SIZE(size) \
369 HID_ITEM(HID_ITEM_TAG_REPORT_SIZE, HID_ITEM_TYPE_GLOBAL, 1), size
370
377#define HID_REPORT_ID(id) \
378 HID_ITEM(HID_ITEM_TAG_REPORT_ID, HID_ITEM_TYPE_GLOBAL, 1), id
379
389#define HID_REPORT_COUNT(count) \
390 HID_ITEM(HID_ITEM_TAG_REPORT_COUNT, HID_ITEM_TYPE_GLOBAL, 1), count
391
401#define HID_USAGE(idx) \
402 HID_ITEM(HID_ITEM_TAG_USAGE, HID_ITEM_TYPE_LOCAL, 1), idx
403
410#define HID_USAGE16(idx) \
411 HID_ITEM(HID_ITEM_TAG_USAGE, HID_ITEM_TYPE_LOCAL, 2), (uint8_t)idx, (idx >> 8)
412
422#define HID_USAGE_MIN8(a) \
423 HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 1), a
424
434#define HID_USAGE_MAX8(a) \
435 HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 1), a
436
447#define HID_USAGE_MIN16(a, b) \
448 HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 2), a, b
449
460#define HID_USAGE_MAX16(a, b) \
461 HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 2), a, b
462
470#define HID_UNIT_EXPONENT(exp) HID_ITEM(HID_ITEM_TAG_UNIT_EXPONENT, HID_ITEM_TYPE_GLOBAL, 1), exp
471
475
480
486#define HID_MOUSE_REPORT_DESC(bcnt) { \
487 HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), \
488 HID_USAGE(HID_USAGE_GEN_DESKTOP_MOUSE), \
489 HID_COLLECTION(HID_COLLECTION_APPLICATION), \
490 HID_USAGE(HID_USAGE_GEN_DESKTOP_POINTER), \
491 HID_COLLECTION(HID_COLLECTION_PHYSICAL), \
492 /* Bits used for button signalling */ \
493 HID_USAGE_PAGE(HID_USAGE_GEN_BUTTON), \
494 HID_USAGE_MIN8(1), \
495 HID_USAGE_MAX8(bcnt), \
496 HID_LOGICAL_MIN8(0), \
497 HID_LOGICAL_MAX8(1), \
498 HID_REPORT_SIZE(1), \
499 HID_REPORT_COUNT(bcnt), \
500 /* HID_INPUT (Data,Var,Abs) */ \
501 HID_INPUT(0x02), \
502 /* Unused bits */ \
503 HID_REPORT_SIZE(8 - bcnt), \
504 HID_REPORT_COUNT(1), \
505 /* HID_INPUT (Cnst,Ary,Abs) */ \
506 HID_INPUT(1), \
507 /* X and Y axis, scroll */ \
508 HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), \
509 HID_USAGE(HID_USAGE_GEN_DESKTOP_X), \
510 HID_USAGE(HID_USAGE_GEN_DESKTOP_Y), \
511 HID_USAGE(HID_USAGE_GEN_DESKTOP_WHEEL), \
512 HID_LOGICAL_MIN8(-127), \
513 HID_LOGICAL_MAX8(127), \
514 HID_REPORT_SIZE(8), \
515 HID_REPORT_COUNT(3), \
516 /* HID_INPUT (Data,Var,Rel) */ \
517 HID_INPUT(0x06), \
518 HID_END_COLLECTION, \
519 HID_END_COLLECTION, \
520}
521
525#define HID_KEYBOARD_REPORT_DESC() { \
526 HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), \
527 HID_USAGE(HID_USAGE_GEN_DESKTOP_KEYBOARD), \
528 HID_COLLECTION(HID_COLLECTION_APPLICATION), \
529 HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD), \
530 /* HID_USAGE_MINIMUM(Keyboard LeftControl) */ \
531 HID_USAGE_MIN8(0xE0), \
532 /* HID_USAGE_MAXIMUM(Keyboard Right GUI) */ \
533 HID_USAGE_MAX8(0xE7), \
534 HID_LOGICAL_MIN8(0), \
535 HID_LOGICAL_MAX8(1), \
536 HID_REPORT_SIZE(1), \
537 HID_REPORT_COUNT(8), \
538 /* HID_INPUT(Data,Var,Abs) */ \
539 HID_INPUT(0x02), \
540 HID_REPORT_SIZE(8), \
541 HID_REPORT_COUNT(1), \
542 /* HID_INPUT(Cnst,Var,Abs) */ \
543 HID_INPUT(0x03), \
544 HID_REPORT_SIZE(1), \
545 HID_REPORT_COUNT(5), \
546 HID_USAGE_PAGE(HID_USAGE_GEN_LEDS), \
547 /* HID_USAGE_MINIMUM(Num Lock) */ \
548 HID_USAGE_MIN8(1), \
549 /* HID_USAGE_MAXIMUM(Kana) */ \
550 HID_USAGE_MAX8(5), \
551 /* HID_OUTPUT(Data,Var,Abs) */ \
552 HID_OUTPUT(0x02), \
553 HID_REPORT_SIZE(3), \
554 HID_REPORT_COUNT(1), \
555 /* HID_OUTPUT(Cnst,Var,Abs) */ \
556 HID_OUTPUT(0x03), \
557 HID_REPORT_SIZE(8), \
558 HID_REPORT_COUNT(6), \
559 HID_LOGICAL_MIN8(0), \
560 HID_LOGICAL_MAX8(101), \
561 HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD), \
562 /* HID_USAGE_MIN8(Reserved) */ \
563 HID_USAGE_MIN8(0), \
564 /* HID_USAGE_MAX8(Keyboard Application) */ \
565 HID_USAGE_MAX8(101), \
566 /* HID_INPUT (Data,Ary,Abs) */ \
567 HID_INPUT(0x00), \
568 HID_END_COLLECTION, \
569}
570
621 HID_KEY_HASH = 50, /* Non-US # and ~ */
641 HID_KEY_SYSRQ = 70, /* PRINTSCREEN */
655 HID_KEY_KPSLASH = 84, /* NUMPAD DIVIDE */
656 HID_KEY_KPASTERISK = 85, /* NUMPAD MULTIPLY */
670};
671
686
697
701
705
706#ifdef __cplusplus
707}
708#endif
709
710#endif /* ZEPHYR_INCLUDE_USB_CLASS_HID_H_ */
hid_kbd_modifier
HID keyboard modifiers.
Definition hid.h:675
hid_kbd_code
HID keyboard button codes.
Definition hid.h:574
hid_kbd_led
HID keyboard LEDs.
Definition hid.h:690
@ HID_KBD_MODIFIER_RIGHT_UI
Definition hid.h:684
@ HID_KBD_MODIFIER_LEFT_CTRL
Definition hid.h:677
@ HID_KBD_MODIFIER_LEFT_UI
Definition hid.h:680
@ HID_KBD_MODIFIER_NONE
Definition hid.h:676
@ HID_KBD_MODIFIER_LEFT_ALT
Definition hid.h:679
@ HID_KBD_MODIFIER_RIGHT_ALT
Definition hid.h:683
@ HID_KBD_MODIFIER_RIGHT_CTRL
Definition hid.h:681
@ HID_KBD_MODIFIER_LEFT_SHIFT
Definition hid.h:678
@ HID_KBD_MODIFIER_RIGHT_SHIFT
Definition hid.h:682
@ HID_KEY_V
Definition hid.h:596
@ HID_KEY_R
Definition hid.h:592
@ HID_KEY_1
Definition hid.h:601
@ HID_KEY_Q
Definition hid.h:591
@ HID_KEY_HASH
Definition hid.h:621
@ HID_KEY_4
Definition hid.h:604
@ HID_KEY_8
Definition hid.h:608
@ HID_KEY_PAUSE
Definition hid.h:643
@ HID_KEY_KP_5
Definition hid.h:664
@ HID_KEY_KP_7
Definition hid.h:666
@ HID_KEY_INSERT
Definition hid.h:644
@ HID_KEY_F7
Definition hid.h:635
@ HID_KEY_G
Definition hid.h:581
@ HID_KEY_PAGEUP
Definition hid.h:646
@ HID_KEY_SLASH
Definition hid.h:627
@ HID_KEY_BACKSLASH
Definition hid.h:620
@ HID_KEY_J
Definition hid.h:584
@ HID_KEY_KPPLUS
Definition hid.h:658
@ HID_KEY_SEMICOLON
Definition hid.h:622
@ HID_KEY_DOT
Definition hid.h:626
@ HID_KEY_KP_3
Definition hid.h:662
@ HID_KEY_KPSLASH
Definition hid.h:655
@ HID_KEY_KP_4
Definition hid.h:663
@ HID_KEY_KP_0
Definition hid.h:669
@ HID_KEY_H
Definition hid.h:582
@ HID_KEY_RIGHT
Definition hid.h:650
@ HID_KEY_Y
Definition hid.h:599
@ HID_KEY_K
Definition hid.h:585
@ HID_KEY_CAPSLOCK
Definition hid.h:628
@ HID_KEY_M
Definition hid.h:587
@ HID_KEY_F8
Definition hid.h:636
@ HID_KEY_A
Definition hid.h:575
@ HID_KEY_7
Definition hid.h:607
@ HID_KEY_F9
Definition hid.h:637
@ HID_KEY_TAB
Definition hid.h:614
@ HID_KEY_HOME
Definition hid.h:645
@ HID_KEY_KP_2
Definition hid.h:661
@ HID_KEY_KPMINUS
Definition hid.h:657
@ HID_KEY_APOSTROPHE
Definition hid.h:623
@ HID_KEY_9
Definition hid.h:609
@ HID_KEY_ESC
Definition hid.h:612
@ HID_KEY_F3
Definition hid.h:631
@ HID_KEY_F11
Definition hid.h:639
@ HID_KEY_KP_1
Definition hid.h:660
@ HID_KEY_0
Definition hid.h:610
@ HID_KEY_T
Definition hid.h:594
@ HID_KEY_GRAVE
Definition hid.h:624
@ HID_KEY_END
Definition hid.h:648
@ HID_KEY_KP_6
Definition hid.h:665
@ HID_KEY_C
Definition hid.h:577
@ HID_KEY_F1
Definition hid.h:629
@ HID_KEY_F2
Definition hid.h:630
@ HID_KEY_DOWN
Definition hid.h:652
@ HID_KEY_X
Definition hid.h:598
@ HID_KEY_MINUS
Definition hid.h:616
@ HID_KEY_Z
Definition hid.h:600
@ HID_KEY_COMMA
Definition hid.h:625
@ HID_KEY_F4
Definition hid.h:632
@ HID_KEY_U
Definition hid.h:595
@ HID_KEY_F12
Definition hid.h:640
@ HID_KEY_N
Definition hid.h:588
@ HID_KEY_KPENTER
Definition hid.h:659
@ HID_KEY_B
Definition hid.h:576
@ HID_KEY_D
Definition hid.h:578
@ HID_KEY_F6
Definition hid.h:634
@ HID_KEY_LEFTBRACE
Definition hid.h:618
@ HID_KEY_F10
Definition hid.h:638
@ HID_KEY_EQUAL
Definition hid.h:617
@ HID_KEY_P
Definition hid.h:590
@ HID_KEY_F
Definition hid.h:580
@ HID_KEY_KP_9
Definition hid.h:668
@ HID_KEY_F5
Definition hid.h:633
@ HID_KEY_O
Definition hid.h:589
@ HID_KEY_KP_8
Definition hid.h:667
@ HID_KEY_W
Definition hid.h:597
@ HID_KEY_6
Definition hid.h:606
@ HID_KEY_SCROLLLOCK
Definition hid.h:642
@ HID_KEY_SYSRQ
Definition hid.h:641
@ HID_KEY_S
Definition hid.h:593
@ HID_KEY_DELETE
Definition hid.h:647
@ HID_KEY_2
Definition hid.h:602
@ HID_KEY_ENTER
Definition hid.h:611
@ HID_KEY_RIGHTBRACE
Definition hid.h:619
@ HID_KEY_5
Definition hid.h:605
@ HID_KEY_SPACE
Definition hid.h:615
@ HID_KEY_3
Definition hid.h:603
@ HID_KEY_L
Definition hid.h:586
@ HID_KEY_UP
Definition hid.h:653
@ HID_KEY_PAGEDOWN
Definition hid.h:649
@ HID_KEY_LEFT
Definition hid.h:651
@ HID_KEY_I
Definition hid.h:583
@ HID_KEY_BACKSPACE
Definition hid.h:613
@ HID_KEY_NUMLOCK
Definition hid.h:654
@ HID_KEY_KPASTERISK
Definition hid.h:656
@ HID_KEY_E
Definition hid.h:579
@ HID_KBD_LED_NUM_LOCK
Definition hid.h:691
@ HID_KBD_LED_SCROLL_LOCK
Definition hid.h:693
@ HID_KBD_LED_CAPS_LOCK
Definition hid.h:692
@ HID_KBD_LED_COMPOSE
Definition hid.h:694
@ HID_KBD_LED_KANA
Definition hid.h:695