diff --git a/include/usb/class/hid.h b/include/usb/class/hid.h new file mode 100644 index 00000000000..fe597f4ae69 --- /dev/null +++ b/include/usb/class/hid.h @@ -0,0 +1,630 @@ +/* + * Copyright (c) 2018 Intel Corporation + * Copyright (c) 2018,2021 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * @brief USB Human Interface Device (HID) common definitions header + * + * Header follows Device Class Definition for Human Interface Devices (HID) + * Version 1.11 document (HID1_11-1.pdf). + */ + +#ifndef ZEPHYR_INCLUDE_USB_CLASS_HID_H_ +#define ZEPHYR_INCLUDE_USB_CLASS_HID_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief hid.h API + * @defgroup usb_hid_definitions USB HID common definitions + * @{ + * @} + */ + +/** + * @defgroup usb_hid_types USB HID types and values + * @ingroup usb_hid_definitions + * @{ + */ + +/** USB HID Class HID descriptor type */ +#define USB_DESC_HID 0x21 +/** USB HID Class Report descriptor type */ +#define USB_DESC_HID_REPORT 0x22 +/** USB HID Class physical descriptor type */ +#define USB_DESC_HID_PHYSICAL 0x23 + +/** USB HID Class GetReport bRequest value */ +#define USB_HID_GET_REPORT 0x01 +/** USB HID Class GetIdle bRequest value */ +#define USB_HID_GET_IDLE 0x02 +/** USB HID Class GetProtocol bRequest value */ +#define USB_HID_GET_PROTOCOL 0x03 +/** USB HID Class SetReport bRequest value */ +#define USB_HID_SET_REPORT 0x09 +/** USB HID Class SetIdle bRequest value */ +#define USB_HID_SET_IDLE 0x0A +/** USB HID Class SetProtocol bRequest value */ +#define USB_HID_SET_PROTOCOL 0x0B + +/** USB HID Class Boot protocol code */ +#define HID_PROTOCOL_BOOT 0 +/** USB HID Class Report protocol code */ +#define HID_PROTOCOL_REPORT 1 + +/** HID Main item type */ +#define HID_ITEM_TYPE_MAIN 0x0 +/** HID Global item type */ +#define HID_ITEM_TYPE_GLOBAL 0x1 +/** HID Local item type */ +#define HID_ITEM_TYPE_LOCAL 0x2 + +/** HID Input item tag */ +#define HID_ITEM_TAG_INPUT 0x8 +/** HID Output item tag */ +#define HID_ITEM_TAG_OUTPUT 0x9 +/** HID Collection item tag */ +#define HID_ITEM_TAG_COLLECTION 0xA +/** HID Feature item tag */ +#define HID_ITEM_TAG_FEATURE 0xB +/** HID End Collection item tag */ +#define HID_ITEM_TAG_COLLECTION_END 0xC + +/** HID Usage Page item tag */ +#define HID_ITEM_TAG_USAGE_PAGE 0x0 +/** HID Logical Minimum item tag */ +#define HID_ITEM_TAG_LOGICAL_MIN 0x1 +/** HID Logical Maximum item tag */ +#define HID_ITEM_TAG_LOGICAL_MAX 0x2 +/** HID Physical Minimum item tag */ +#define HID_ITEM_TAG_PHYSICAL_MIN 0x3 +/** HID Physical Maximum item tag */ +#define HID_ITEM_TAG_PHYSICAL_MAX 0x4 +/** HID Unit Exponent item tag */ +#define HID_ITEM_TAG_UNIT_EXPONENT 0x5 +/** HID Unit item tag */ +#define HID_ITEM_TAG_UNIT 0x6 +/** HID Report Size item tag */ +#define HID_ITEM_TAG_REPORT_SIZE 0x7 +/** HID Report ID item tag */ +#define HID_ITEM_TAG_REPORT_ID 0x8 +/** HID Report count item tag */ +#define HID_ITEM_TAG_REPORT_COUNT 0x9 + +/** HID Usage item tag */ +#define HID_ITEM_TAG_USAGE 0x0 +/** HID Usage Minimum item tag */ +#define HID_ITEM_TAG_USAGE_MIN 0x1 +/** HID Usage Maximum item tag */ +#define HID_ITEM_TAG_USAGE_MAX 0x2 + +/** Physical collection type */ +#define HID_COLLECTION_PHYSICAL 0x00 +/** Application collection type */ +#define HID_COLLECTION_APPLICATION 0x01 + +/* Usage page and IDs from Universal Serial Bus HID Usage Tables */ + +/** HID Generic Desktop Controls Usage page */ +#define HID_USAGE_GEN_DESKTOP 0x01 +/** HID Keyboard Usage page */ +#define HID_USAGE_GEN_KEYBOARD 0x07 +/** HID LEDs Usage page */ +#define HID_USAGE_GEN_LEDS 0x08 +/** HID Button Usage page */ +#define HID_USAGE_GEN_BUTTON 0x09 + +/** HID Generic Desktop Undefined Usage ID */ +#define HID_USAGE_GEN_DESKTOP_UNDEFINED 0x00 +/** HID Generic Desktop Pointer Usage ID */ +#define HID_USAGE_GEN_DESKTOP_POINTER 0x01 +/** HID Generic Desktop Mouse Usage ID */ +#define HID_USAGE_GEN_DESKTOP_MOUSE 0x02 +/** HID Generic Desktop Joystick Usage ID */ +#define HID_USAGE_GEN_DESKTOP_JOYSTICK 0x04 +/** HID Generic Desktop Gamepad Usage ID */ +#define HID_USAGE_GEN_DESKTOP_GAMEPAD 0x05 +/** HID Generic Desktop Keyboard Usage ID */ +#define HID_USAGE_GEN_DESKTOP_KEYBOARD 0x06 +/** HID Generic Desktop Keypad Usage ID */ +#define HID_USAGE_GEN_DESKTOP_KEYPAD 0x07 +/** HID Generic Desktop X Usage ID */ +#define HID_USAGE_GEN_DESKTOP_X 0x30 +/** HID Generic Desktop Y Usage ID */ +#define HID_USAGE_GEN_DESKTOP_Y 0x31 +/** HID Generic Desktop Wheel Usage ID */ +#define HID_USAGE_GEN_DESKTOP_WHEEL 0x38 + +/** + * @} + */ + +/** + * @defgroup usb_hid_items USB HID Item helpers + * @ingroup usb_hid_definitions + * @{ + */ + +/** + * @brief Define HID short item. + * + * @param bTag Item tag + * @param bType Item type + * @param bSize Item data size + * @return HID Input item + */ +#define HID_ITEM(bTag, bType, bSize) (((bTag & 0xF) << 4) | \ + ((bType & 0x3) << 2) | (bSize & 0x3)) + +/** + * @brief Define HID Input item with the data length of one byte. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param a Input item data + * @return HID Input item + */ +#define HID_INPUT(a) \ + HID_ITEM(HID_ITEM_TAG_INPUT, HID_ITEM_TYPE_MAIN, 1), a + +/** + * @brief Define HID Output item with the data length of one byte. + * + * For usage examples, see @ref HID_KEYBOARD_REPORT_DESC() + * + * @param a Output item data + * @return HID Output item + */ +#define HID_OUTPUT(a) \ + HID_ITEM(HID_ITEM_TAG_OUTPUT, HID_ITEM_TYPE_MAIN, 1), a + +/** + * @brief Define HID Feature item with the data length of one byte. + * + * @param a Feature item data + * @return HID Feature item + */ +#define HID_FEATURE(a) \ + HID_ITEM(HID_ITEM_TAG_OUTPUT, HID_ITEM_TYPE_MAIN, 1), a + +/** + * @brief Define HID Collection item with the data length of one byte. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param a Collection item data + * @return HID Collection item + */ +#define HID_COLLECTION(a) \ + HID_ITEM(HID_ITEM_TAG_COLLECTION, HID_ITEM_TYPE_MAIN, 1), a + +/** + * @brief Define HID End Collection (non-data) item. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @return HID End Collection item + */ +#define HID_END_COLLECTION \ + HID_ITEM(HID_ITEM_TAG_COLLECTION_END, HID_ITEM_TYPE_MAIN, 0) + +/** + * @brief Define HID Usage Page item. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param page Usage Page + * @return HID Usage Page item + */ +#define HID_USAGE_PAGE(page) \ + HID_ITEM(HID_ITEM_TAG_USAGE_PAGE, HID_ITEM_TYPE_GLOBAL, 1), page + +/** + * @brief Define HID Logical Minimum item with the data length of one byte. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param a Minimum value in logical units + * @return HID Logical Minimum item + */ +#define HID_LOGICAL_MIN8(a) \ + HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 1), a + +/** + * @brief Define HID Logical Maximum item with the data length of one byte. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param a Maximum value in logical units + * @return HID Logical Maximum item + */ +#define HID_LOGICAL_MAX8(a) \ + HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 1), a + +/** + * @brief Define HID Logical Minimum item with the data length of two bytes. + * + * @param a Minimum value lower byte + * @param b Minimum value higher byte + * @return HID Logical Minimum item + */ +#define HID_LOGICAL_MIN16(a, b) \ + HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 2), a, b + +/** + * @brief Define HID Logical Maximum item with the data length of two bytes. + * + * @param a Minimum value lower byte + * @param b Minimum value higher byte + * @return HID Logical Maximum item + */ +#define HID_LOGICAL_MAX16(a, b) \ + HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 2), a, b + +/** + * @brief Define HID Logical Minimum item with the data length of four bytes. + * + * @param a Minimum value lower byte + * @param b Minimum value low middle byte + * @param c Minimum value high middle byte + * @param d Minimum value higher byte + * @return HID Logical Minimum item + */ +#define HID_LOGICAL_MIN32(a, b, c, d) \ + HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d + +/** + * @brief Define HID Logical Maximum item with the data length of four bytes. + * + * @param a Minimum value lower byte + * @param b Minimum value low middle byte + * @param c Minimum value high middle byte + * @param d Minimum value higher byte + * @return HID Logical Maximum item + */ +#define HID_LOGICAL_MAX32(a, b, c, d) \ + HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d + +/** + * @brief Define HID Report Size item with the data length of one byte. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param size Report field size in bits + * @return HID Report Size item + */ +#define HID_REPORT_SIZE(size) \ + HID_ITEM(HID_ITEM_TAG_REPORT_SIZE, HID_ITEM_TYPE_GLOBAL, 1), size + +/** + * @brief Define HID Report ID item with the data length of one byte. + * + * @param id Report ID + * @return HID Report ID item + */ +#define HID_REPORT_ID(id) \ + HID_ITEM(HID_ITEM_TAG_REPORT_ID, HID_ITEM_TYPE_GLOBAL, 1), id + +/** + * @brief Define HID Report Count item with the data length of one byte. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param count Number of data fields included in the report + * @return HID Report Count item + */ +#define HID_REPORT_COUNT(count) \ + HID_ITEM(HID_ITEM_TAG_REPORT_COUNT, HID_ITEM_TYPE_GLOBAL, 1), count + +/** + * @brief Define HID Usage Index item with the data length of one byte. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param idx Number of data fields included in the report + * @return HID Usage Index item + */ +#define HID_USAGE(idx) \ + HID_ITEM(HID_ITEM_TAG_USAGE, HID_ITEM_TYPE_LOCAL, 1), idx + +/** + * @brief Define HID Usage Minimum item with the data length of one byte. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param a Starting Usage + * @return HID Usage Minimum item + */ +#define HID_USAGE_MIN8(a) \ + HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 1), a + +/** + * @brief Define HID Usage Maximum item with the data length of one byte. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param a Ending Usage + * @return HID Usage Maximum item + */ +#define HID_USAGE_MAX8(a) \ + HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 1), a + +/** + * @brief Define HID Usage Minimum item with the data length of two bytes. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param a Starting Usage lower byte + * @param b Starting Usage higher byte + * @return HID Usage Minimum item + */ +#define HID_USAGE_MIN16(a, b) \ + HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 2), a, b + +/** + * @brief Define HID Usage Maximum item with the data length of two bytes. + * + * For usage examples, see @ref HID_MOUSE_REPORT_DESC(), + * @ref HID_KEYBOARD_REPORT_DESC() + * + * @param a Ending Usage lower byte + * @param b Ending Usage higher byte + * @return HID Usage Maximum item + */ +#define HID_USAGE_MAX16(a, b) \ + HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 2), a, b + +/** + * @} + */ + +/** + * @defgroup usb_hid_mk_report_desc Mouse and keyboard report descriptors + * @ingroup usb_hid_definitions + * @{ + */ + +/** + * @brief Simple HID mouse report descriptor for n button mouse. + * + * @param bcnt Button count. Allowed values from 1 to 8. + */ +#define HID_MOUSE_REPORT_DESC(bcnt) { \ + HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), \ + HID_USAGE(HID_USAGE_GEN_DESKTOP_MOUSE), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), \ + HID_USAGE(HID_USAGE_GEN_DESKTOP_POINTER), \ + HID_COLLECTION(HID_COLLECTION_PHYSICAL), \ + /* Bits used for button signalling */ \ + HID_USAGE_PAGE(HID_USAGE_GEN_BUTTON), \ + HID_USAGE_MIN8(1), \ + HID_USAGE_MAX8(bcnt), \ + HID_LOGICAL_MIN8(0), \ + HID_LOGICAL_MAX8(1), \ + HID_REPORT_SIZE(1), \ + HID_REPORT_COUNT(bcnt), \ + /* HID_INPUT (Data,Var,Abs) */ \ + HID_INPUT(0x02), \ + /* Unused bits */ \ + HID_REPORT_SIZE(8 - bcnt), \ + HID_REPORT_COUNT(1), \ + /* HID_INPUT (Cnst,Ary,Abs) */ \ + HID_INPUT(1), \ + /* X and Y axis, scroll */ \ + HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), \ + HID_USAGE(HID_USAGE_GEN_DESKTOP_X), \ + HID_USAGE(HID_USAGE_GEN_DESKTOP_Y), \ + HID_USAGE(HID_USAGE_GEN_DESKTOP_WHEEL), \ + HID_LOGICAL_MIN8(-127), \ + HID_LOGICAL_MAX8(127), \ + HID_REPORT_SIZE(8), \ + HID_REPORT_COUNT(3), \ + /* HID_INPUT (Data,Var,Rel) */ \ + HID_INPUT(0x06), \ + HID_END_COLLECTION, \ + HID_END_COLLECTION, \ +} + +/** + * @brief Simple HID keyboard report descriptor. + */ +#define HID_KEYBOARD_REPORT_DESC() { \ + HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP), \ + HID_USAGE(HID_USAGE_GEN_DESKTOP_KEYBOARD), \ + HID_COLLECTION(HID_COLLECTION_APPLICATION), \ + HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD), \ + /* HID_USAGE_MINIMUM(Keyboard LeftControl) */ \ + HID_USAGE_MIN8(0xE0), \ + /* HID_USAGE_MAXIMUM(Keyboard Right GUI) */ \ + HID_USAGE_MAX8(0xE7), \ + HID_LOGICAL_MIN8(0), \ + HID_LOGICAL_MAX8(1), \ + HID_REPORT_SIZE(1), \ + HID_REPORT_COUNT(8), \ + /* HID_INPUT(Data,Var,Abs) */ \ + HID_INPUT(0x02), \ + HID_REPORT_SIZE(8), \ + HID_REPORT_COUNT(1), \ + /* HID_INPUT(Cnst,Var,Abs) */ \ + HID_INPUT(0x03), \ + HID_REPORT_SIZE(1), \ + HID_REPORT_COUNT(5), \ + HID_USAGE_PAGE(HID_USAGE_GEN_LEDS), \ + /* HID_USAGE_MINIMUM(Num Lock) */ \ + HID_USAGE_MIN8(1), \ + /* HID_USAGE_MAXIMUM(Kana) */ \ + HID_USAGE_MAX8(5), \ + /* HID_OUTPUT(Data,Var,Abs) */ \ + HID_OUTPUT(0x02), \ + HID_REPORT_SIZE(3), \ + HID_REPORT_COUNT(1), \ + /* HID_OUTPUT(Cnst,Var,Abs) */ \ + HID_OUTPUT(0x03), \ + HID_REPORT_SIZE(8), \ + HID_REPORT_COUNT(6), \ + HID_LOGICAL_MIN8(0), \ + HID_LOGICAL_MAX8(101), \ + HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD), \ + /* HID_USAGE_MIN8(Reserved) */ \ + HID_USAGE_MIN8(0), \ + /* HID_USAGE_MAX8(Keyboard Application) */ \ + HID_USAGE_MAX8(101), \ + /* HID_INPUT (Data,Ary,Abs) */ \ + HID_INPUT(0x00), \ + HID_END_COLLECTION, \ +} + +/** + * @brief HID keyboard button codes. + */ +enum hid_kbd_code { + HID_KEY_A = 4, + HID_KEY_B = 5, + HID_KEY_C = 6, + HID_KEY_D = 7, + HID_KEY_E = 8, + HID_KEY_F = 9, + HID_KEY_G = 10, + HID_KEY_H = 11, + HID_KEY_I = 12, + HID_KEY_J = 13, + HID_KEY_K = 14, + HID_KEY_L = 15, + HID_KEY_M = 16, + HID_KEY_N = 17, + HID_KEY_O = 18, + HID_KEY_P = 19, + HID_KEY_Q = 20, + HID_KEY_R = 21, + HID_KEY_S = 22, + HID_KEY_T = 23, + HID_KEY_U = 24, + HID_KEY_V = 25, + HID_KEY_W = 26, + HID_KEY_X = 27, + HID_KEY_Y = 28, + HID_KEY_Z = 29, + HID_KEY_1 = 30, + HID_KEY_2 = 31, + HID_KEY_3 = 32, + HID_KEY_4 = 33, + HID_KEY_5 = 34, + HID_KEY_6 = 35, + HID_KEY_7 = 36, + HID_KEY_8 = 37, + HID_KEY_9 = 38, + HID_KEY_0 = 39, + HID_KEY_ENTER = 40, + HID_KEY_ESC = 41, + HID_KEY_BACKSPACE = 42, + HID_KEY_TAB = 43, + HID_KEY_SPACE = 44, + HID_KEY_MINUS = 45, + HID_KEY_EQUAL = 46, + HID_KEY_LEFTBRACE = 47, + HID_KEY_RIGHTBRACE = 48, + HID_KEY_BACKSLASH = 49, + HID_KEY_HASH = 50, /* Non-US # and ~ */ + HID_KEY_SEMICOLON = 51, + HID_KEY_APOSTROPHE = 52, + HID_KEY_GRAVE = 53, + HID_KEY_COMMA = 54, + HID_KEY_DOT = 55, + HID_KEY_SLASH = 56, + HID_KEY_CAPSLOCK = 57, + HID_KEY_F1 = 58, + HID_KEY_F2 = 59, + HID_KEY_F3 = 60, + HID_KEY_F4 = 61, + HID_KEY_F5 = 62, + HID_KEY_F6 = 63, + HID_KEY_F7 = 64, + HID_KEY_F8 = 65, + HID_KEY_F9 = 66, + HID_KEY_F10 = 67, + HID_KEY_F11 = 68, + HID_KEY_F12 = 69, + HID_KEY_SYSRQ = 70, /* PRINTSCREEN */ + HID_KEY_SCROLLLOCK = 71, + HID_KEY_PAUSE = 72, + HID_KEY_INSERT = 73, + HID_KEY_HOME = 74, + HID_KEY_PAGEUP = 75, + HID_KEY_DELETE = 76, + HID_KEY_END = 77, + HID_KEY_PAGEDOWN = 78, + HID_KEY_RIGHT = 79, + HID_KEY_LEFT = 80, + HID_KEY_DOWN = 81, + HID_KEY_UP = 82, + HID_KEY_NUMLOCK = 83, + HID_KEY_KPSLASH = 84, /* NUMPAD DIVIDE */ + HID_KEY_KPASTERISK = 85, /* NUMPAD MULTIPLY */ + HID_KEY_KPMINUS = 86, + HID_KEY_KPPLUS = 87, + HID_KEY_KPENTER = 88, + HID_KEY_KP_1 = 89, + HID_KEY_KP_2 = 90, + HID_KEY_KP_3 = 91, + HID_KEY_KP_4 = 92, + HID_KEY_KP_5 = 93, + HID_KEY_KP_6 = 94, + HID_KEY_KP_7 = 95, + HID_KEY_KP_8 = 96, + HID_KEY_KP_9 = 97, + HID_KEY_KP_0 = 98, +}; + +/** + * @brief HID keyboard modifiers. + */ +enum hid_kbd_modifier { + HID_KBD_MODIFIER_NONE = 0x00, + HID_KBD_MODIFIER_LEFT_CTRL = 0x01, + HID_KBD_MODIFIER_LEFT_SHIFT = 0x02, + HID_KBD_MODIFIER_LEFT_ALT = 0x04, + HID_KBD_MODIFIER_LEFT_UI = 0x08, + HID_KBD_MODIFIER_RIGHT_CTRL = 0x10, + HID_KBD_MODIFIER_RIGHT_SHIFT = 0x20, + HID_KBD_MODIFIER_RIGHT_ALT = 0x40, + HID_KBD_MODIFIER_RIGHT_UI = 0x80, +}; + +/** + * @brief HID keyboard LEDs. + */ +enum hid_kbd_led { + HID_KBD_LED_NUM_LOCK = 0x01, + HID_KBD_LED_CAPS_LOCK = 0x02, + HID_KBD_LED_SCROLL_LOCK = 0x04, + HID_KBD_LED_COMPOSE = 0x08, + HID_KBD_LED_KANA = 0x10, +}; + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* ZEPHYR_INCLUDE_USB_CLASS_HID_H_ */ diff --git a/include/usb/class/usb_hid.h b/include/usb/class/usb_hid.h index be81e773ed6..777264e53e4 100644 --- a/include/usb/class/usb_hid.h +++ b/include/usb/class/usb_hid.h @@ -1,27 +1,31 @@ /* - * Human Interface Device (HID) USB class core header - * * Copyright (c) 2018 Intel Corporation - * Copyright (c) 2018 Nordic Semiconductor ASA + * Copyright (c) 2018,2021 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ /** * @file - * @brief USB Human Interface Device (HID) Class public header - * - * Header follows Device Class Definition for Human Interface Devices (HID) - * Version 1.11 document (HID1_11-1.pdf). + * @brief USB HID Class device API header */ -#ifndef ZEPHYR_INCLUDE_USB_CLASS_USB_HID_H_ -#define ZEPHYR_INCLUDE_USB_CLASS_USB_HID_H_ +#ifndef ZEPHYR_INCLUDE_USB_HID_CLASS_DEVICE_H_ +#define ZEPHYR_INCLUDE_USB_HID_CLASS_DEVICE_H_ + +#include #ifdef __cplusplus extern "C" { #endif +/** + * @brief usb_hid.h API + * @defgroup usb_hid_class USB HID class API + * @{ + * @} + */ + struct usb_hid_class_subdescriptor { uint8_t bDescriptorType; uint16_t wDescriptorLength; @@ -41,21 +45,11 @@ struct usb_hid_descriptor { struct usb_hid_class_subdescriptor subdesc[1]; } __packed; -/* HID Class Descriptor Types */ - -#define HID_CLASS_DESCRIPTOR_HID (REQTYPE_TYPE_CLASS << 5 | 0x01) -#define HID_CLASS_DESCRIPTOR_REPORT (REQTYPE_TYPE_CLASS << 5 | 0x02) - -/* HID Class Specific Requests */ - -#define HID_GET_REPORT 0x01 -#define HID_GET_IDLE 0x02 -#define HID_GET_PROTOCOL 0x03 -#define HID_SET_REPORT 0x09 -#define HID_SET_IDLE 0x0A -#define HID_SET_PROTOCOL 0x0B - -/* Public headers */ +/** + * @defgroup usb_hid_device_api HID class USB specific definitions + * @ingroup usb_hid_class + * @{ + */ typedef int (*hid_cb_t)(const struct device *dev, struct usb_setup_packet *setup, int32_t *len, @@ -64,6 +58,9 @@ typedef void (*hid_int_ready_callback)(const struct device *dev); typedef void (*hid_protocol_cb_t)(const struct device *dev, uint8_t protocol); typedef void (*hid_idle_cb_t)(const struct device *dev, uint16_t report_id); +/** + * @brief USB HID device interface + */ struct hid_ops { hid_cb_t get_report; hid_cb_t get_idle; @@ -85,370 +82,155 @@ struct hid_ops { #endif }; -/* HID Report Definitions */ - -/* HID Items types */ -#define ITEM_MAIN 0x0 -#define ITEM_GLOBAL 0x1 -#define ITEM_LOCAL 0x2 - -/* HID Main Items tags */ -#define ITEM_TAG_INPUT 0x8 -#define ITEM_TAG_OUTPUT 0x9 -#define ITEM_TAG_COLLECTION 0xA -#define ITEM_TAG_COLLECTION_END 0xC - -/* HID Global Items tags */ -#define ITEM_TAG_USAGE_PAGE 0x0 -#define ITEM_TAG_LOGICAL_MIN 0x1 -#define ITEM_TAG_LOGICAL_MAX 0x2 -#define ITEM_TAG_REPORT_SIZE 0x7 -#define ITEM_TAG_REPORT_ID 0x8 -#define ITEM_TAG_REPORT_COUNT 0x9 - -/* HID Local Items tags */ -#define ITEM_TAG_USAGE 0x0 -#define ITEM_TAG_USAGE_MIN 0x1 -#define ITEM_TAG_USAGE_MAX 0x2 - -#define HID_ITEM(bTag, bType, bSize) (((bTag & 0xF) << 4) | \ - ((bType & 0x3) << 2) | (bSize & 0x3)) - -#define HID_MAIN_ITEM(bTag, bSize) HID_ITEM(bTag, ITEM_MAIN, bSize) -#define HID_GLOBAL_ITEM(bTag, bSize) HID_ITEM(bTag, ITEM_GLOBAL, bSize) -#define HID_LOCAL_ITEM(bTag, bSize) HID_ITEM(bTag, ITEM_LOCAL, bSize) - -#define HID_MI_COLLECTION HID_MAIN_ITEM(ITEM_TAG_COLLECTION, 1) -#define HID_MI_COLLECTION_END HID_MAIN_ITEM(ITEM_TAG_COLLECTION_END, \ - 0) -#define HID_MI_INPUT HID_MAIN_ITEM(ITEM_TAG_INPUT, 1) -#define HID_MI_OUTPUT HID_MAIN_ITEM(ITEM_TAG_OUTPUT, 1) - -#define HID_GI_USAGE_PAGE HID_GLOBAL_ITEM(ITEM_TAG_USAGE_PAGE, 1) -#define HID_GI_LOGICAL_MIN(size) HID_GLOBAL_ITEM(ITEM_TAG_LOGICAL_MIN, \ - size) -#define HID_GI_LOGICAL_MAX(size) HID_GLOBAL_ITEM(ITEM_TAG_LOGICAL_MAX, \ - size) -#define HID_GI_REPORT_SIZE HID_GLOBAL_ITEM(ITEM_TAG_REPORT_SIZE, \ - 1) -#define HID_GI_REPORT_ID HID_GLOBAL_ITEM(ITEM_TAG_REPORT_ID, \ - 1) -#define HID_GI_REPORT_COUNT HID_GLOBAL_ITEM(ITEM_TAG_REPORT_COUNT, \ - 1) - -#define HID_LI_USAGE HID_LOCAL_ITEM(ITEM_TAG_USAGE, 1) -#define HID_LI_USAGE_MIN(size) HID_LOCAL_ITEM(ITEM_TAG_USAGE_MIN, \ - size) -#define HID_LI_USAGE_MAX(size) HID_LOCAL_ITEM(ITEM_TAG_USAGE_MAX, \ - size) - -/* Defined in Universal Serial Bus HID Usage Tables version 1.11 */ -#define USAGE_GEN_DESKTOP 0x01 -#define USAGE_GEN_KEYBOARD 0x07 -#define USAGE_GEN_LEDS 0x08 -#define USAGE_GEN_BUTTON 0x09 - -/* Generic Desktop Page usages */ -#define USAGE_GEN_DESKTOP_UNDEFINED 0x00 -#define USAGE_GEN_DESKTOP_POINTER 0x01 -#define USAGE_GEN_DESKTOP_MOUSE 0x02 -#define USAGE_GEN_DESKTOP_JOYSTICK 0x04 -#define USAGE_GEN_DESKTOP_GAMEPAD 0x05 -#define USAGE_GEN_DESKTOP_KEYBOARD 0x06 -#define USAGE_GEN_DESKTOP_KEYPAD 0x07 -#define USAGE_GEN_DESKTOP_X 0x30 -#define USAGE_GEN_DESKTOP_Y 0x31 -#define USAGE_GEN_DESKTOP_WHEEL 0x38 - -/* Collection types */ -#define COLLECTION_PHYSICAL 0x00 -#define COLLECTION_APPLICATION 0x01 - -/* Protocols */ -#define HID_PROTOCOL_BOOT 0x00 -#define HID_PROTOCOL_REPORT 0x01 - -/* Example HID report descriptors */ /** - * @brief Simple HID mouse report descriptor for n button mouse. + * @brief Register HID device * - * @param bcnt Button count. Allowed values from 1 to 8. + * @param[in] dev Pointer to USB HID device + * @param[in] desc Pointer to HID report descriptor + * @param[in] size Size of HID report descriptor + * @param[in] op Pointer to USB HID device interrupt struct */ -#define HID_MOUSE_REPORT_DESC(bcnt) { \ - /* USAGE_PAGE (Generic Desktop) */ \ - HID_GI_USAGE_PAGE, USAGE_GEN_DESKTOP, \ - /* USAGE (Mouse) */ \ - HID_LI_USAGE, USAGE_GEN_DESKTOP_MOUSE, \ - /* COLLECTION (Application) */ \ - HID_MI_COLLECTION, COLLECTION_APPLICATION, \ - /* USAGE (Pointer) */ \ - HID_LI_USAGE, USAGE_GEN_DESKTOP_POINTER, \ - /* COLLECTION (Physical) */ \ - HID_MI_COLLECTION, COLLECTION_PHYSICAL, \ - /* Bits used for button signalling */ \ - /* USAGE_PAGE (Button) */ \ - HID_GI_USAGE_PAGE, USAGE_GEN_BUTTON, \ - /* USAGE_MINIMUM (Button 1) */ \ - HID_LI_USAGE_MIN(1), 0x01, \ - /* USAGE_MAXIMUM (Button bcnt) */ \ - HID_LI_USAGE_MAX(1), bcnt, \ - /* LOGICAL_MINIMUM (0) */ \ - HID_GI_LOGICAL_MIN(1), 0x00, \ - /* LOGICAL_MAXIMUM (1) */ \ - HID_GI_LOGICAL_MAX(1), 0x01, \ - /* REPORT_SIZE (1) */ \ - HID_GI_REPORT_SIZE, 0x01, \ - /* REPORT_COUNT (bcnt) */ \ - HID_GI_REPORT_COUNT, bcnt, \ - /* INPUT (Data,Var,Abs) */ \ - HID_MI_INPUT, 0x02, \ - /* Unused bits */ \ - /* REPORT_SIZE (8 - bcnt) */ \ - HID_GI_REPORT_SIZE, (8 - bcnt), \ - /* REPORT_COUNT (1) */ \ - HID_GI_REPORT_COUNT, 0x01, \ - /* INPUT (Cnst,Ary,Abs) */ \ - HID_MI_INPUT, 0x01, \ - /* X and Y axis, scroll */ \ - /* USAGE_PAGE (Generic Desktop) */ \ - HID_GI_USAGE_PAGE, USAGE_GEN_DESKTOP, \ - /* USAGE (X) */ \ - HID_LI_USAGE, USAGE_GEN_DESKTOP_X, \ - /* USAGE (Y) */ \ - HID_LI_USAGE, USAGE_GEN_DESKTOP_Y, \ - /* USAGE (WHEEL) */ \ - HID_LI_USAGE, USAGE_GEN_DESKTOP_WHEEL, \ - /* LOGICAL_MINIMUM (-127) */ \ - HID_GI_LOGICAL_MIN(1), -127, \ - /* LOGICAL_MAXIMUM (127) */ \ - HID_GI_LOGICAL_MAX(1), 127, \ - /* REPORT_SIZE (8) */ \ - HID_GI_REPORT_SIZE, 0x08, \ - /* REPORT_COUNT (3) */ \ - HID_GI_REPORT_COUNT, 0x03, \ - /* INPUT (Data,Var,Rel) */ \ - HID_MI_INPUT, 0x06, \ - /* END_COLLECTION */ \ - HID_MI_COLLECTION_END, \ - /* END_COLLECTION */ \ - HID_MI_COLLECTION_END, \ -} - -/** - * @brief Simple HID keyboard report descriptor. - */ -#define HID_KEYBOARD_REPORT_DESC() { \ - /* USAGE_PAGE (Generic Desktop) */ \ - HID_GI_USAGE_PAGE, USAGE_GEN_DESKTOP, \ - /* USAGE (Keyboard) */ \ - HID_LI_USAGE, USAGE_GEN_DESKTOP_KEYBOARD, \ - /* COLLECTION (Application) */ \ - HID_MI_COLLECTION, COLLECTION_APPLICATION, \ - /* USAGE_PAGE (Keypad) */ \ - HID_GI_USAGE_PAGE, USAGE_GEN_DESKTOP_KEYPAD, \ - /* USAGE_MINIMUM (Keyboard LeftControl) */ \ - HID_LI_USAGE_MIN(1), 0xE0, \ - /* USAGE_MAXIMUM (Keyboard Right GUI) */ \ - HID_LI_USAGE_MAX(1), 0xE7, \ - /* LOGICAL_MINIMUM (0) */ \ - HID_GI_LOGICAL_MIN(1), 0x00, \ - /* LOGICAL_MAXIMUM (1) */ \ - HID_GI_LOGICAL_MAX(1), 0x01, \ - /* REPORT_SIZE (1) */ \ - HID_GI_REPORT_SIZE, 0x01, \ - /* REPORT_COUNT (8) */ \ - HID_GI_REPORT_COUNT, 0x08, \ - /* INPUT (Data,Var,Abs) */ \ - HID_MI_INPUT, 0x02, \ - /* REPORT_SIZE (8) */ \ - HID_GI_REPORT_SIZE, 0x08, \ - /* REPORT_COUNT (1) */ \ - HID_GI_REPORT_COUNT, 0x01, \ - /* INPUT (Cnst,Var,Abs) */ \ - HID_MI_INPUT, 0x03, \ - /* REPORT_SIZE (1) */ \ - HID_GI_REPORT_SIZE, 0x01, \ - /* REPORT_COUNT (5) */ \ - HID_GI_REPORT_COUNT, 0x05, \ - /* USAGE_PAGE (LEDs) */ \ - HID_GI_USAGE_PAGE, USAGE_GEN_LEDS, \ - /* USAGE_MINIMUM (Num Lock) */ \ - HID_LI_USAGE_MIN(1), 0x01, \ - /* USAGE_MAXIMUM (Kana) */ \ - HID_LI_USAGE_MAX(1), 0x05, \ - /* OUTPUT (Data,Var,Abs) */ \ - HID_MI_OUTPUT, 0x02, \ - /* REPORT_SIZE (3) */ \ - HID_GI_REPORT_SIZE, 0x03, \ - /* REPORT_COUNT (1) */ \ - HID_GI_REPORT_COUNT, 0x01, \ - /* OUTPUT (Cnst,Var,Abs) */ \ - HID_MI_OUTPUT, 0x03, \ - /* REPORT_SIZE (8) */ \ - HID_GI_REPORT_SIZE, 0x08, \ - /* REPORT_COUNT (6) */ \ - HID_GI_REPORT_COUNT, 0x06, \ - /* LOGICAL_MINIMUM (0) */ \ - HID_GI_LOGICAL_MIN(1), 0x00, \ - /* LOGICAL_MAXIMUM (101) */ \ - HID_GI_LOGICAL_MAX(1), 0x65, \ - /* USAGE_PAGE (Keypad) */ \ - HID_GI_USAGE_PAGE, USAGE_GEN_DESKTOP_KEYPAD, \ - /* USAGE_MINIMUM (Reserved) */ \ - HID_LI_USAGE_MIN(1), 0x00, \ - /* USAGE_MAXIMUM (Keyboard Application) */ \ - HID_LI_USAGE_MAX(1), 0x65, \ - /* INPUT (Data,Ary,Abs) */ \ - HID_MI_INPUT, 0x00, \ - /* END_COLLECTION */ \ - HID_MI_COLLECTION_END, \ -} - -/** - * @brief HID keyboard button codes. - */ -enum hid_kbd_code { - HID_KEY_A = 4, - HID_KEY_B = 5, - HID_KEY_C = 6, - HID_KEY_D = 7, - HID_KEY_E = 8, - HID_KEY_F = 9, - HID_KEY_G = 10, - HID_KEY_H = 11, - HID_KEY_I = 12, - HID_KEY_J = 13, - HID_KEY_K = 14, - HID_KEY_L = 15, - HID_KEY_M = 16, - HID_KEY_N = 17, - HID_KEY_O = 18, - HID_KEY_P = 19, - HID_KEY_Q = 20, - HID_KEY_R = 21, - HID_KEY_S = 22, - HID_KEY_T = 23, - HID_KEY_U = 24, - HID_KEY_V = 25, - HID_KEY_W = 26, - HID_KEY_X = 27, - HID_KEY_Y = 28, - HID_KEY_Z = 29, - HID_KEY_1 = 30, - HID_KEY_2 = 31, - HID_KEY_3 = 32, - HID_KEY_4 = 33, - HID_KEY_5 = 34, - HID_KEY_6 = 35, - HID_KEY_7 = 36, - HID_KEY_8 = 37, - HID_KEY_9 = 38, - HID_KEY_0 = 39, - HID_KEY_ENTER = 40, - HID_KEY_ESC = 41, - HID_KEY_BACKSPACE = 42, - HID_KEY_TAB = 43, - HID_KEY_SPACE = 44, - HID_KEY_MINUS = 45, - HID_KEY_EQUAL = 46, - HID_KEY_LEFTBRACE = 47, - HID_KEY_RIGHTBRACE = 48, - HID_KEY_BACKSLASH = 49, - HID_KEY_HASH = 50, /* Non-US # and ~ */ - HID_KEY_SEMICOLON = 51, - HID_KEY_APOSTROPHE = 52, - HID_KEY_GRAVE = 53, - HID_KEY_COMMA = 54, - HID_KEY_DOT = 55, - HID_KEY_SLASH = 56, - HID_KEY_CAPSLOCK = 57, - HID_KEY_F1 = 58, - HID_KEY_F2 = 59, - HID_KEY_F3 = 60, - HID_KEY_F4 = 61, - HID_KEY_F5 = 62, - HID_KEY_F6 = 63, - HID_KEY_F7 = 64, - HID_KEY_F8 = 65, - HID_KEY_F9 = 66, - HID_KEY_F10 = 67, - HID_KEY_F11 = 68, - HID_KEY_F12 = 69, - HID_KEY_SYSRQ = 70, /* PRINTSCREEN */ - HID_KEY_SCROLLLOCK = 71, - HID_KEY_PAUSE = 72, - HID_KEY_INSERT = 73, - HID_KEY_HOME = 74, - HID_KEY_PAGEUP = 75, - HID_KEY_DELETE = 76, - HID_KEY_END = 77, - HID_KEY_PAGEDOWN = 78, - HID_KEY_RIGHT = 79, - HID_KEY_LEFT = 80, - HID_KEY_DOWN = 81, - HID_KEY_UP = 82, - HID_KEY_NUMLOCK = 83, - HID_KEY_KPSLASH = 84, /* NUMPAD DIVIDE */ - HID_KEY_KPASTERISK = 85, /* NUMPAD MULTIPLY */ - HID_KEY_KPMINUS = 86, - HID_KEY_KPPLUS = 87, - HID_KEY_KPENTER = 88, - HID_KEY_KP_1 = 89, - HID_KEY_KP_2 = 90, - HID_KEY_KP_3 = 91, - HID_KEY_KP_4 = 92, - HID_KEY_KP_5 = 93, - HID_KEY_KP_6 = 94, - HID_KEY_KP_7 = 95, - HID_KEY_KP_8 = 96, - HID_KEY_KP_9 = 97, - HID_KEY_KP_0 = 98, -}; - -/** - * @brief HID keyboard modifiers. - */ -enum hid_kbd_modifier { - HID_KBD_MODIFIER_NONE = 0x00, - HID_KBD_MODIFIER_LEFT_CTRL = 0x01, - HID_KBD_MODIFIER_LEFT_SHIFT = 0x02, - HID_KBD_MODIFIER_LEFT_ALT = 0x04, - HID_KBD_MODIFIER_LEFT_UI = 0x08, - HID_KBD_MODIFIER_RIGHT_CTRL = 0x10, - HID_KBD_MODIFIER_RIGHT_SHIFT = 0x20, - HID_KBD_MODIFIER_RIGHT_ALT = 0x40, - HID_KBD_MODIFIER_RIGHT_UI = 0x80, -}; - -/** - * @brief HID keyboard LEDs. - */ -enum hid_kbd_led { - HID_KBD_LED_NUM_LOCK = 0x01, - HID_KBD_LED_CAPS_LOCK = 0x02, - HID_KBD_LED_SCROLL_LOCK = 0x04, - HID_KBD_LED_COMPOSE = 0x08, - HID_KBD_LED_KANA = 0x10, -}; - -/* Register HID device */ -void usb_hid_register_device(const struct device *dev, const uint8_t *desc, +void usb_hid_register_device(const struct device *dev, + const uint8_t *desc, size_t size, const struct hid_ops *op); -/* Write to hid interrupt endpoint */ -int hid_int_ep_write(const struct device *dev, const uint8_t *data, uint32_t data_len, +/** + * @brief Write to USB HID interrupt endpoint buffer + * + * @param[in] dev Pointer to USB HID device + * @param[in] data Pointer to data buffer + * @param[in] data_len Length of data to copy + * @param[out] bytes_ret Bytes written to the EP buffer. + * + * @return 0 on success, negative errno code on fail. + */ +int hid_int_ep_write(const struct device *dev, + const uint8_t *data, + uint32_t data_len, uint32_t *bytes_ret); -/* Read from hid interrupt endpoint */ -int hid_int_ep_read(const struct device *dev, uint8_t *data, uint32_t max_data_len, +/** + * @brief Read from USB HID interrupt endpoint buffer + * + * @param[in] dev Pointer to USB HID device + * @param[in] data Pointer to data buffer + * @param[in] max_data_len Max length of data to copy + * @param[out] ret_bytes 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. + * + * @return 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); -/* Initialize USB HID */ +/** + * @brief Initialize USB HID class support + * + * @param[in] dev Pointer to USB HID device + * + * @return 0 on success, negative errno code on fail. + */ int usb_hid_init(const struct device *dev); +/** + * @} + */ + +/* + * Macros below are deprecated in 2.6 release. + * Please replace with macros from common HID header, include/usb/class/hid.h + */ + +#define HID_CLASS_DESCRIPTOR_HID __DEPRECATED_MACRO USB_DESC_HID +#define HID_CLASS_DESCRIPTOR_REPORT __DEPRECATED_MACRO USB_DESC_HID_REPORT + +#define HID_GET_REPORT __DEPRECATED_MACRO USB_HID_GET_REPORT +#define HID_GET_IDLE __DEPRECATED_MACRO USB_HID_GET_IDLE +#define HID_GET_PROTOCOL __DEPRECATED_MACRO USB_HID_GET_PROTOCOL +#define HID_SET_REPORT __DEPRECATED_MACRO USB_HID_SET_REPORT +#define HID_SET_IDLE __DEPRECATED_MACRO USB_HID_SET_IDLE +#define HID_SET_PROTOCOL __DEPRECATED_MACRO USB_HID_SET_PROTOCOL + +#define ITEM_MAIN __DEPRECATED_MACRO 0x0 +#define ITEM_GLOBAL __DEPRECATED_MACRO 0x1 +#define ITEM_LOCAL __DEPRECATED_MACRO 0x2 + +#define ITEM_TAG_INPUT __DEPRECATED_MACRO 0x8 +#define ITEM_TAG_OUTPUT __DEPRECATED_MACRO 0x9 +#define ITEM_TAG_COLLECTION __DEPRECATED_MACRO 0xA +#define ITEM_TAG_COLLECTION_END __DEPRECATED_MACRO 0xC + +#define ITEM_TAG_USAGE_PAGE __DEPRECATED_MACRO 0x0 +#define ITEM_TAG_LOGICAL_MIN __DEPRECATED_MACRO 0x1 +#define ITEM_TAG_LOGICAL_MAX __DEPRECATED_MACRO 0x2 +#define ITEM_TAG_REPORT_SIZE __DEPRECATED_MACRO 0x7 +#define ITEM_TAG_REPORT_ID __DEPRECATED_MACRO 0x8 +#define ITEM_TAG_REPORT_COUNT __DEPRECATED_MACRO 0x9 + +#define ITEM_TAG_USAGE __DEPRECATED_MACRO 0x0 +#define ITEM_TAG_USAGE_MIN __DEPRECATED_MACRO 0x1 +#define ITEM_TAG_USAGE_MAX __DEPRECATED_MACRO 0x2 + +#define HID_MAIN_ITEM(bTag, bSize) \ + __DEPRECATED_MACRO HID_ITEM(bTag, ITEM_MAIN, bSize) +#define HID_GLOBAL_ITEM(bTag, bSize) \ + __DEPRECATED_MACRO HID_ITEM(bTag, ITEM_GLOBAL, bSize) +#define HID_LOCAL_ITEM(bTag, bSize) \ + __DEPRECATED_MACRO HID_ITEM(bTag, ITEM_LOCAL, bSize) + +#define HID_MI_COLLECTION \ + __DEPRECATED_MACRO HID_MAIN_ITEM(ITEM_TAG_COLLECTION, 1) +#define HID_MI_COLLECTION_END \ + __DEPRECATED_MACRO HID_MAIN_ITEM(ITEM_TAG_COLLECTION_END, 0) +#define HID_MI_INPUT \ + __DEPRECATED_MACRO HID_MAIN_ITEM(ITEM_TAG_INPUT, 1) +#define HID_MI_OUTPUT \ + __DEPRECATED_MACRO HID_MAIN_ITEM(ITEM_TAG_OUTPUT, 1) +#define HID_GI_USAGE_PAGE \ + __DEPRECATED_MACRO HID_GLOBAL_ITEM(ITEM_TAG_USAGE_PAGE, 1) +#define HID_GI_LOGICAL_MIN(size) \ + __DEPRECATED_MACRO HID_GLOBAL_ITEM(ITEM_TAG_LOGICAL_MIN, size) +#define HID_GI_LOGICAL_MAX(size) \ + __DEPRECATED_MACRO HID_GLOBAL_ITEM(ITEM_TAG_LOGICAL_MAX, size) +#define HID_GI_REPORT_SIZE \ + __DEPRECATED_MACRO HID_GLOBAL_ITEM(ITEM_TAG_REPORT_SIZE, 1) +#define HID_GI_REPORT_ID \ + __DEPRECATED_MACRO HID_GLOBAL_ITEM(ITEM_TAG_REPORT_ID, 1) +#define HID_GI_REPORT_COUNT \ + __DEPRECATED_MACRO HID_GLOBAL_ITEM(ITEM_TAG_REPORT_COUNT, 1) + +#define HID_LI_USAGE \ + __DEPRECATED_MACRO HID_LOCAL_ITEM(ITEM_TAG_USAGE, 1) +#define HID_LI_USAGE_MIN(size) \ + __DEPRECATED_MACRO HID_LOCAL_ITEM(ITEM_TAG_USAGE_MIN, size) +#define HID_LI_USAGE_MAX(size) \ + __DEPRECATED_MACRO HID_LOCAL_ITEM(ITEM_TAG_USAGE_MAX, size) + +#define USAGE_GEN_DESKTOP __DEPRECATED_MACRO 0x01 +#define USAGE_GEN_KEYBOARD __DEPRECATED_MACRO 0x07 +#define USAGE_GEN_LEDS __DEPRECATED_MACRO 0x08 +#define USAGE_GEN_BUTTON __DEPRECATED_MACRO 0x09 + +#define USAGE_GEN_DESKTOP_UNDEFINED __DEPRECATED_MACRO 0x00 +#define USAGE_GEN_DESKTOP_POINTER __DEPRECATED_MACRO 0x01 +#define USAGE_GEN_DESKTOP_MOUSE __DEPRECATED_MACRO 0x02 +#define USAGE_GEN_DESKTOP_JOYSTICK __DEPRECATED_MACRO 0x04 +#define USAGE_GEN_DESKTOP_GAMEPAD __DEPRECATED_MACRO 0x05 +#define USAGE_GEN_DESKTOP_KEYBOARD __DEPRECATED_MACRO 0x06 +#define USAGE_GEN_DESKTOP_KEYPAD __DEPRECATED_MACRO 0x07 +#define USAGE_GEN_DESKTOP_X __DEPRECATED_MACRO 0x30 +#define USAGE_GEN_DESKTOP_Y __DEPRECATED_MACRO 0x31 +#define USAGE_GEN_DESKTOP_WHEEL __DEPRECATED_MACRO 0x38 + +#define COLLECTION_PHYSICAL __DEPRECATED_MACRO 0x00 +#define COLLECTION_APPLICATION __DEPRECATED_MACRO 0x01 + #ifdef __cplusplus } #endif -#endif /* ZEPHYR_INCLUDE_USB_CLASS_USB_HID_H_ */ +#endif /* ZEPHYR_INCLUDE_USB_HID_CLASS_DEVICE_H_ */