USB Human Interface Devices (HID) support¶
Since the USB HID specification is not only used by the USB subsystem, the USB HID API is split into two header files include/usb/class/hid.h and include/usb/class/usb_hid.h. The second includes a specific part for HID support in the USB device stack.
HID Item helpers¶
HID item helper macros can be used to compose a HID Report Descriptor. The names correspond to those used in the USB HID Specification.
Example of a HID Report Descriptor:
static const uint8_t hid_report_desc[] = {
HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),
HID_USAGE(HID_USAGE_GEN_DESKTOP_UNDEFINED),
HID_COLLECTION(HID_COLLECTION_APPLICATION),
HID_LOGICAL_MIN8(0),
/* logical maximum 255 */
HID_LOGICAL_MAX16(0xFF, 0x00),
HID_REPORT_ID(1),
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_USAGE(HID_USAGE_GEN_DESKTOP_UNDEFINED),
/* HID_INPUT (Data, Variable, Absolute) */
HID_INPUT(0x02),
HID_END_COLLECTION,
};
HID items reference¶
-
group
usb_hid_items
Defines
-
HID_ITEM
(bTag, bType, bSize)¶ Define HID short item.
- Parameters
bTag – Item tag
bType – Item type
bSize – Item data size
- Returns
HID Input item
-
HID_INPUT
(a)¶ Define HID Input item with the data length of one byte.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
a – Input item data
- Returns
HID Input item
-
HID_OUTPUT
(a)¶ Define HID Output item with the data length of one byte.
For usage examples, see HID_KEYBOARD_REPORT_DESC()
- Parameters
a – Output item data
- Returns
HID Output item
-
HID_FEATURE
(a)¶ Define HID Feature item with the data length of one byte.
- Parameters
a – Feature item data
- Returns
HID Feature item
-
HID_COLLECTION
(a)¶ Define HID Collection item with the data length of one byte.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
a – Collection item data
- Returns
HID Collection item
-
HID_END_COLLECTION
¶ Define HID End Collection (non-data) item.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Returns
HID End Collection item
-
HID_USAGE_PAGE
(page)¶ Define HID Usage Page item.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
page – Usage Page
- Returns
HID Usage Page item
-
HID_LOGICAL_MIN8
(a)¶ Define HID Logical Minimum item with the data length of one byte.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
a – Minimum value in logical units
- Returns
HID Logical Minimum item
-
HID_LOGICAL_MAX8
(a)¶ Define HID Logical Maximum item with the data length of one byte.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
a – Maximum value in logical units
- Returns
HID Logical Maximum item
-
HID_LOGICAL_MIN16
(a, b)¶ Define HID Logical Minimum item with the data length of two bytes.
- Parameters
a – Minimum value lower byte
b – Minimum value higher byte
- Returns
HID Logical Minimum item
-
HID_LOGICAL_MAX16
(a, b)¶ Define HID Logical Maximum item with the data length of two bytes.
- Parameters
a – Minimum value lower byte
b – Minimum value higher byte
- Returns
HID Logical Maximum item
-
HID_LOGICAL_MIN32
(a, b, c, d)¶ Define HID Logical Minimum item with the data length of four bytes.
- Parameters
a – Minimum value lower byte
b – Minimum value low middle byte
c – Minimum value high middle byte
d – Minimum value higher byte
- Returns
HID Logical Minimum item
-
HID_LOGICAL_MAX32
(a, b, c, d)¶ Define HID Logical Maximum item with the data length of four bytes.
- Parameters
a – Minimum value lower byte
b – Minimum value low middle byte
c – Minimum value high middle byte
d – Minimum value higher byte
- Returns
HID Logical Maximum item
-
HID_REPORT_SIZE
(size)¶ Define HID Report Size item with the data length of one byte.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
size – Report field size in bits
- Returns
HID Report Size item
-
HID_REPORT_ID
(id)¶ Define HID Report ID item with the data length of one byte.
- Parameters
id – Report ID
- Returns
HID Report ID item
-
HID_REPORT_COUNT
(count)¶ Define HID Report Count item with the data length of one byte.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
count – Number of data fields included in the report
- Returns
HID Report Count item
-
HID_USAGE
(idx)¶ Define HID Usage Index item with the data length of one byte.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
idx – Number of data fields included in the report
- Returns
HID Usage Index item
-
HID_USAGE_MIN8
(a)¶ Define HID Usage Minimum item with the data length of one byte.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
a – Starting Usage
- Returns
HID Usage Minimum item
-
HID_USAGE_MAX8
(a)¶ Define HID Usage Maximum item with the data length of one byte.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
a – Ending Usage
- Returns
HID Usage Maximum item
-
HID_USAGE_MIN16
(a, b)¶ Define HID Usage Minimum item with the data length of two bytes.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
a – Starting Usage lower byte
b – Starting Usage higher byte
- Returns
HID Usage Minimum item
-
HID_USAGE_MAX16
(a, b)¶ Define HID Usage Maximum item with the data length of two bytes.
For usage examples, see HID_MOUSE_REPORT_DESC(), HID_KEYBOARD_REPORT_DESC()
- Parameters
a – Ending Usage lower byte
b – Ending Usage higher byte
- Returns
HID Usage Maximum item
-
HID types reference¶
-
group
usb_hid_types
Defines
-
USB_DESC_HID
¶ USB HID Class HID descriptor type
-
USB_DESC_HID_REPORT
¶ USB HID Class Report descriptor type
-
USB_DESC_HID_PHYSICAL
¶ USB HID Class physical descriptor type
-
USB_HID_GET_REPORT
¶ USB HID Class GetReport bRequest value
-
USB_HID_GET_IDLE
¶ USB HID Class GetIdle bRequest value
-
USB_HID_GET_PROTOCOL
¶ USB HID Class GetProtocol bRequest value
-
USB_HID_SET_REPORT
¶ USB HID Class SetReport bRequest value
-
USB_HID_SET_IDLE
¶ USB HID Class SetIdle bRequest value
-
USB_HID_SET_PROTOCOL
¶ USB HID Class SetProtocol bRequest value
-
HID_BOOT_IFACE_CODE_NONE
¶ USB HID Boot Interface Protocol (bInterfaceProtocol) Code None
-
HID_BOOT_IFACE_CODE_KEYBOARD
¶ USB HID Boot Interface Protocol (bInterfaceProtocol) Code Keyboard
-
HID_BOOT_IFACE_CODE_MOUSE
¶ USB HID Boot Interface Protocol (bInterfaceProtocol) Code Mouse
-
HID_PROTOCOL_BOOT
¶ USB HID Class Boot protocol code
-
HID_PROTOCOL_REPORT
¶ USB HID Class Report protocol code
-
HID_ITEM_TYPE_MAIN
¶ HID Main item type
-
HID_ITEM_TYPE_GLOBAL
¶ HID Global item type
-
HID_ITEM_TYPE_LOCAL
¶ HID Local item type
-
HID_ITEM_TAG_INPUT
¶ HID Input item tag
-
HID_ITEM_TAG_OUTPUT
¶ HID Output item tag
-
HID_ITEM_TAG_COLLECTION
¶ HID Collection item tag
-
HID_ITEM_TAG_FEATURE
¶ HID Feature item tag
-
HID_ITEM_TAG_COLLECTION_END
¶ HID End Collection item tag
-
HID_ITEM_TAG_USAGE_PAGE
¶ HID Usage Page item tag
-
HID_ITEM_TAG_LOGICAL_MIN
¶ HID Logical Minimum item tag
-
HID_ITEM_TAG_LOGICAL_MAX
¶ HID Logical Maximum item tag
-
HID_ITEM_TAG_PHYSICAL_MIN
¶ HID Physical Minimum item tag
-
HID_ITEM_TAG_PHYSICAL_MAX
¶ HID Physical Maximum item tag
-
HID_ITEM_TAG_UNIT_EXPONENT
¶ HID Unit Exponent item tag
-
HID_ITEM_TAG_UNIT
¶ HID Unit item tag
-
HID_ITEM_TAG_REPORT_SIZE
¶ HID Report Size item tag
-
HID_ITEM_TAG_REPORT_ID
¶ HID Report ID item tag
-
HID_ITEM_TAG_REPORT_COUNT
¶ HID Report count item tag
-
HID_ITEM_TAG_USAGE
¶ HID Usage item tag
-
HID_ITEM_TAG_USAGE_MIN
¶ HID Usage Minimum item tag
-
HID_ITEM_TAG_USAGE_MAX
¶ HID Usage Maximum item tag
-
HID_COLLECTION_PHYSICAL
¶ Physical collection type
-
HID_COLLECTION_APPLICATION
¶ Application collection type
-
HID_USAGE_GEN_DESKTOP
¶ HID Generic Desktop Controls Usage page
-
HID_USAGE_GEN_KEYBOARD
¶ HID Keyboard Usage page
-
HID_USAGE_GEN_LEDS
¶ HID LEDs Usage page
-
HID_USAGE_GEN_BUTTON
¶ HID Button Usage page
-
HID_USAGE_GEN_DESKTOP_UNDEFINED
¶ HID Generic Desktop Undefined Usage ID
-
HID_USAGE_GEN_DESKTOP_POINTER
¶ HID Generic Desktop Pointer Usage ID
-
HID_USAGE_GEN_DESKTOP_MOUSE
¶ HID Generic Desktop Mouse Usage ID
-
HID_USAGE_GEN_DESKTOP_JOYSTICK
¶ HID Generic Desktop Joystick Usage ID
-
HID_USAGE_GEN_DESKTOP_GAMEPAD
¶ HID Generic Desktop Gamepad Usage ID
-
HID_USAGE_GEN_DESKTOP_KEYBOARD
¶ HID Generic Desktop Keyboard Usage ID
-
HID_USAGE_GEN_DESKTOP_KEYPAD
¶ HID Generic Desktop Keypad Usage ID
-
HID_USAGE_GEN_DESKTOP_X
¶ HID Generic Desktop X Usage ID
-
HID_USAGE_GEN_DESKTOP_Y
¶ HID Generic Desktop Y Usage ID
-
HID_USAGE_GEN_DESKTOP_WHEEL
¶ HID Generic Desktop Wheel Usage ID
-
HID Mouse and Keyboard report descriptors¶
The pre-defined Mouse and Keyboard report descriptors can be used by a HID device implementation or simply as examples.
-
group
usb_hid_mk_report_desc
Defines
-
HID_MOUSE_REPORT_DESC
(bcnt)¶ Simple HID mouse report descriptor for n button mouse.
- Parameters
bcnt – Button count. Allowed values from 1 to 8.
-
HID_KEYBOARD_REPORT_DESC
()¶ Simple HID keyboard report descriptor.
Enums
-
enum
hid_kbd_code
¶ HID keyboard button codes.
Values:
-
enumerator
HID_KEY_A
= 4¶
-
enumerator
HID_KEY_B
= 5¶
-
enumerator
HID_KEY_C
= 6¶
-
enumerator
HID_KEY_D
= 7¶
-
enumerator
HID_KEY_E
= 8¶
-
enumerator
HID_KEY_F
= 9¶
-
enumerator
HID_KEY_G
= 10¶
-
enumerator
HID_KEY_H
= 11¶
-
enumerator
HID_KEY_I
= 12¶
-
enumerator
HID_KEY_J
= 13¶
-
enumerator
HID_KEY_K
= 14¶
-
enumerator
HID_KEY_L
= 15¶
-
enumerator
HID_KEY_M
= 16¶
-
enumerator
HID_KEY_N
= 17¶
-
enumerator
HID_KEY_O
= 18¶
-
enumerator
HID_KEY_P
= 19¶
-
enumerator
HID_KEY_Q
= 20¶
-
enumerator
HID_KEY_R
= 21¶
-
enumerator
HID_KEY_S
= 22¶
-
enumerator
HID_KEY_T
= 23¶
-
enumerator
HID_KEY_U
= 24¶
-
enumerator
HID_KEY_V
= 25¶
-
enumerator
HID_KEY_W
= 26¶
-
enumerator
HID_KEY_X
= 27¶
-
enumerator
HID_KEY_Y
= 28¶
-
enumerator
HID_KEY_Z
= 29¶
-
enumerator
HID_KEY_1
= 30¶
-
enumerator
HID_KEY_2
= 31¶
-
enumerator
HID_KEY_3
= 32¶
-
enumerator
HID_KEY_4
= 33¶
-
enumerator
HID_KEY_5
= 34¶
-
enumerator
HID_KEY_6
= 35¶
-
enumerator
HID_KEY_7
= 36¶
-
enumerator
HID_KEY_8
= 37¶
-
enumerator
HID_KEY_9
= 38¶
-
enumerator
HID_KEY_0
= 39¶
-
enumerator
HID_KEY_ENTER
= 40¶
-
enumerator
HID_KEY_ESC
= 41¶
-
enumerator
HID_KEY_BACKSPACE
= 42¶
-
enumerator
HID_KEY_TAB
= 43¶
-
enumerator
HID_KEY_SPACE
= 44¶
-
enumerator
HID_KEY_MINUS
= 45¶
-
enumerator
HID_KEY_EQUAL
= 46¶
-
enumerator
HID_KEY_LEFTBRACE
= 47¶
-
enumerator
HID_KEY_RIGHTBRACE
= 48¶
-
enumerator
HID_KEY_BACKSLASH
= 49¶
-
enumerator
HID_KEY_HASH
= 50¶
-
enumerator
HID_KEY_SEMICOLON
= 51¶
-
enumerator
HID_KEY_APOSTROPHE
= 52¶
-
enumerator
HID_KEY_GRAVE
= 53¶
-
enumerator
HID_KEY_COMMA
= 54¶
-
enumerator
HID_KEY_DOT
= 55¶
-
enumerator
HID_KEY_SLASH
= 56¶
-
enumerator
HID_KEY_CAPSLOCK
= 57¶
-
enumerator
HID_KEY_F1
= 58¶
-
enumerator
HID_KEY_F2
= 59¶
-
enumerator
HID_KEY_F3
= 60¶
-
enumerator
HID_KEY_F4
= 61¶
-
enumerator
HID_KEY_F5
= 62¶
-
enumerator
HID_KEY_F6
= 63¶
-
enumerator
HID_KEY_F7
= 64¶
-
enumerator
HID_KEY_F8
= 65¶
-
enumerator
HID_KEY_F9
= 66¶
-
enumerator
HID_KEY_F10
= 67¶
-
enumerator
HID_KEY_F11
= 68¶
-
enumerator
HID_KEY_F12
= 69¶
-
enumerator
HID_KEY_SYSRQ
= 70¶
-
enumerator
HID_KEY_SCROLLLOCK
= 71¶
-
enumerator
HID_KEY_PAUSE
= 72¶
-
enumerator
HID_KEY_INSERT
= 73¶
-
enumerator
HID_KEY_HOME
= 74¶
-
enumerator
HID_KEY_PAGEUP
= 75¶
-
enumerator
HID_KEY_DELETE
= 76¶
-
enumerator
HID_KEY_END
= 77¶
-
enumerator
HID_KEY_PAGEDOWN
= 78¶
-
enumerator
HID_KEY_RIGHT
= 79¶
-
enumerator
HID_KEY_LEFT
= 80¶
-
enumerator
HID_KEY_DOWN
= 81¶
-
enumerator
HID_KEY_UP
= 82¶
-
enumerator
HID_KEY_NUMLOCK
= 83¶
-
enumerator
HID_KEY_KPSLASH
= 84¶
-
enumerator
HID_KEY_KPASTERISK
= 85¶
-
enumerator
HID_KEY_KPMINUS
= 86¶
-
enumerator
HID_KEY_KPPLUS
= 87¶
-
enumerator
HID_KEY_KPENTER
= 88¶
-
enumerator
HID_KEY_KP_1
= 89¶
-
enumerator
HID_KEY_KP_2
= 90¶
-
enumerator
HID_KEY_KP_3
= 91¶
-
enumerator
HID_KEY_KP_4
= 92¶
-
enumerator
HID_KEY_KP_5
= 93¶
-
enumerator
HID_KEY_KP_6
= 94¶
-
enumerator
HID_KEY_KP_7
= 95¶
-
enumerator
HID_KEY_KP_8
= 96¶
-
enumerator
HID_KEY_KP_9
= 97¶
-
enumerator
HID_KEY_KP_0
= 98¶
-
enumerator
-
enum
hid_kbd_modifier
¶ HID keyboard modifiers.
Values:
-
enumerator
HID_KBD_MODIFIER_NONE
= 0x00¶
-
enumerator
HID_KBD_MODIFIER_LEFT_CTRL
= 0x01¶
-
enumerator
HID_KBD_MODIFIER_LEFT_SHIFT
= 0x02¶
-
enumerator
HID_KBD_MODIFIER_LEFT_ALT
= 0x04¶
-
enumerator
HID_KBD_MODIFIER_LEFT_UI
= 0x08¶
-
enumerator
HID_KBD_MODIFIER_RIGHT_CTRL
= 0x10¶
-
enumerator
HID_KBD_MODIFIER_RIGHT_SHIFT
= 0x20¶
-
enumerator
HID_KBD_MODIFIER_RIGHT_ALT
= 0x40¶
-
enumerator
HID_KBD_MODIFIER_RIGHT_UI
= 0x80¶
-
enumerator
-
HID Class Device API reference¶
USB HID devices like mouse, keyboard, or any other specific device use this API.
-
group
usb_hid_device_api
Typedefs
Functions
-
void
usb_hid_register_device
(const struct device *dev, const uint8_t *desc, size_t size, const struct hid_ops *op)¶ Register HID device.
- Parameters
dev – [in] Pointer to USB HID device
desc – [in] Pointer to HID report descriptor
size – [in] Size of HID report descriptor
op – [in] Pointer to USB HID device interrupt struct
-
int
hid_int_ep_write
(const struct device *dev, const uint8_t *data, uint32_t data_len, uint32_t *bytes_ret)¶ Write to USB HID interrupt endpoint buffer.
- Parameters
dev – [in] Pointer to USB HID device
data – [in] Pointer to data buffer
data_len – [in] Length of data to copy
bytes_ret – [out] Bytes written to the EP buffer.
- Returns
0 on success, negative errno code on fail.
-
int
hid_int_ep_read
(const struct device *dev, uint8_t *data, uint32_t max_data_len, uint32_t *ret_bytes)¶ Read from USB HID interrupt endpoint buffer.
- Parameters
dev – [in] Pointer to USB HID device
data – [in] Pointer to data buffer
max_data_len – [in] Max length of data to copy
ret_bytes – [out] Number of bytes to copy. If data is NULL and ret_bytes is 0 the number of bytes available in the buffer will be returned.
- Returns
0 on success, negative errno code on fail.
-
int
usb_hid_set_proto_code
(const struct device *dev, uint8_t proto_code)¶ Set USB HID class Protocol Code.
Should be called before usb_hid_init().
- Parameters
dev – [in] Pointer to USB HID device
proto_code – [in] Protocol Code to be used for bInterfaceProtocol
- Returns
0 on success, negative errno code on fail.
-
struct
hid_ops
¶ - #include <usb_hid.h>
USB HID device interface.
-
void