.. _usb_device_hid:

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 :zephyr_file:`include/zephyr/usb/class/hid.h`
and :zephyr_file:`include/zephyr/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:

.. code-block:: c

    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
*******************

.. doxygengroup:: usb_hid_items

HID types reference
*******************

.. doxygengroup:: usb_hid_types

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.

.. doxygengroup:: usb_hid_mk_report_desc

HID Class Device API reference
******************************

USB HID devices like mouse, keyboard, or any other specific device use this API.

.. doxygengroup:: usb_hid_device_api