LCOV - code coverage report
Current view: top level - zephyr/usb/class - hid.h Coverage Total Hit
Test: new.info Lines: 97.0 % 100 97
Test Date: 2025-09-05 20:47:19

            Line data    Source code
       1            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              : 
       8              : /**
       9              :  * @file
      10              :  * @brief USB Human Interface Device (HID) common definitions header
      11              :  *
      12              :  * Header follows Device Class Definition for Human Interface Devices (HID)
      13              :  * Version 1.11 document (HID1_11-1.pdf).
      14              :  */
      15              : 
      16              : #ifndef ZEPHYR_INCLUDE_USB_CLASS_HID_H_
      17              : #define ZEPHYR_INCLUDE_USB_CLASS_HID_H_
      18              : 
      19              : #ifdef __cplusplus
      20              : extern "C" {
      21              : #endif
      22              : 
      23              : /**
      24              :  * @brief hid.h API
      25              :  * @defgroup usb_hid_definitions USB HID common definitions
      26              :  * @ingroup usb
      27              :  * @since 1.11
      28              :  * @version 1.0.0
      29              :  * @{
      30              :  */
      31              : 
      32              : /**
      33              :  * @name USB HID types and values
      34              :  * @{
      35              :  */
      36              : 
      37              : /** HID Specification release v1.11 */
      38            1 : #define USB_HID_VERSION                 0x0111
      39              : 
      40              : /** USB HID Class HID descriptor type */
      41            1 : #define USB_DESC_HID                    0x21
      42              : /** USB HID Class Report descriptor type */
      43            1 : #define USB_DESC_HID_REPORT             0x22
      44              : /** USB HID Class physical descriptor type */
      45            1 : #define USB_DESC_HID_PHYSICAL           0x23
      46              : 
      47              : /** USB HID Class GetReport bRequest value */
      48            1 : #define USB_HID_GET_REPORT              0x01
      49              : /** USB HID Class GetIdle bRequest value */
      50            1 : #define USB_HID_GET_IDLE                0x02
      51              : /** USB HID Class GetProtocol bRequest value */
      52            1 : #define USB_HID_GET_PROTOCOL            0x03
      53              : /** USB HID Class SetReport bRequest value */
      54            1 : #define USB_HID_SET_REPORT              0x09
      55              : /** USB HID Class SetIdle bRequest value */
      56            1 : #define USB_HID_SET_IDLE                0x0A
      57              : /** USB HID Class SetProtocol bRequest value */
      58            1 : #define USB_HID_SET_PROTOCOL            0x0B
      59              : 
      60              : /** USB HID Boot Interface Protocol (bInterfaceProtocol) Code None */
      61            1 : #define HID_BOOT_IFACE_CODE_NONE        0
      62              : /** USB HID Boot Interface Protocol (bInterfaceProtocol) Code Keyboard */
      63            1 : #define HID_BOOT_IFACE_CODE_KEYBOARD    1
      64              : /** USB HID Boot Interface Protocol (bInterfaceProtocol) Code Mouse */
      65            1 : #define HID_BOOT_IFACE_CODE_MOUSE       2
      66              : 
      67              : /** USB HID Class Boot protocol code */
      68            1 : #define HID_PROTOCOL_BOOT               0
      69              : /** USB HID Class Report protocol code */
      70            1 : #define HID_PROTOCOL_REPORT             1
      71              : 
      72              : /** HID Main item type */
      73            1 : #define HID_ITEM_TYPE_MAIN              0x0
      74              : /** HID Global item type */
      75            1 : #define HID_ITEM_TYPE_GLOBAL            0x1
      76              : /** HID Local item type */
      77            1 : #define HID_ITEM_TYPE_LOCAL             0x2
      78              : 
      79              : /** HID Input item tag */
      80            1 : #define HID_ITEM_TAG_INPUT              0x8
      81              : /** HID Output item tag */
      82            1 : #define HID_ITEM_TAG_OUTPUT             0x9
      83              : /** HID Collection item tag */
      84            1 : #define HID_ITEM_TAG_COLLECTION         0xA
      85              : /** HID Feature item tag */
      86            1 : #define HID_ITEM_TAG_FEATURE            0xB
      87              : /** HID End Collection item tag */
      88            1 : #define HID_ITEM_TAG_COLLECTION_END     0xC
      89              : 
      90              : /** HID Usage Page item tag */
      91            1 : #define HID_ITEM_TAG_USAGE_PAGE         0x0
      92              : /** HID Logical Minimum item tag */
      93            1 : #define HID_ITEM_TAG_LOGICAL_MIN        0x1
      94              : /** HID Logical Maximum item tag */
      95            1 : #define HID_ITEM_TAG_LOGICAL_MAX        0x2
      96              : /** HID Physical Minimum item tag */
      97            1 : #define HID_ITEM_TAG_PHYSICAL_MIN       0x3
      98              : /** HID Physical Maximum item tag */
      99            1 : #define HID_ITEM_TAG_PHYSICAL_MAX       0x4
     100              : /** HID Unit Exponent item tag */
     101            1 : #define HID_ITEM_TAG_UNIT_EXPONENT      0x5
     102              : /** HID Unit item tag */
     103            1 : #define HID_ITEM_TAG_UNIT               0x6
     104              : /** HID Report Size item tag */
     105            1 : #define HID_ITEM_TAG_REPORT_SIZE        0x7
     106              : /** HID Report ID item tag */
     107            1 : #define HID_ITEM_TAG_REPORT_ID          0x8
     108              : /** HID Report count item tag */
     109            1 : #define HID_ITEM_TAG_REPORT_COUNT       0x9
     110              : 
     111              : /** HID Usage item tag */
     112            1 : #define HID_ITEM_TAG_USAGE              0x0
     113              : /** HID Usage Minimum item tag */
     114            1 : #define HID_ITEM_TAG_USAGE_MIN          0x1
     115              : /** HID Usage Maximum item tag */
     116            1 : #define HID_ITEM_TAG_USAGE_MAX          0x2
     117              : 
     118              : /** Physical collection type */
     119            1 : #define HID_COLLECTION_PHYSICAL         0x00
     120              : /** Application collection type */
     121            1 : #define HID_COLLECTION_APPLICATION      0x01
     122              : /** Logical collection type */
     123            1 : #define HID_COLLECTION_LOGICAL          0x02
     124              : /** Report collection type */
     125            1 : #define HID_COLLECTION_REPORT           0x03
     126              : /** Named Array collection type */
     127            1 : #define HID_COLLECTION_NAMED_ARRAY      0x04
     128              : /** Usage Switch collection type */
     129            1 : #define HID_COLLECTION_USAGE_SWITCH     0x05
     130              : /** Modifier collection type */
     131            1 : #define HID_COLLECTION_MODIFIER         0x06
     132              : 
     133              : 
     134              : /* Usage page and IDs from Universal Serial Bus HID Usage Tables */
     135              : 
     136              : /** HID Generic Desktop Controls Usage page */
     137            1 : #define HID_USAGE_GEN_DESKTOP           0x01
     138              : /** HID Keyboard Usage page */
     139            1 : #define HID_USAGE_GEN_KEYBOARD          0x07
     140              : /** HID LEDs Usage page */
     141            1 : #define HID_USAGE_GEN_LEDS              0x08
     142              : /** HID Button Usage page */
     143            1 : #define HID_USAGE_GEN_BUTTON            0x09
     144              : /** HID Sensors Usage page */
     145            1 : #define HID_USAGE_SENSORS               0x20
     146              : 
     147              : /** HID Generic Desktop Undefined Usage ID */
     148            1 : #define HID_USAGE_GEN_DESKTOP_UNDEFINED 0x00
     149              : /** HID Generic Desktop Pointer Usage ID */
     150            1 : #define HID_USAGE_GEN_DESKTOP_POINTER   0x01
     151              : /** HID Generic Desktop Mouse Usage ID */
     152            1 : #define HID_USAGE_GEN_DESKTOP_MOUSE     0x02
     153              : /** HID Generic Desktop Joystick Usage ID */
     154            1 : #define HID_USAGE_GEN_DESKTOP_JOYSTICK  0x04
     155              : /** HID Generic Desktop Gamepad Usage ID */
     156            1 : #define HID_USAGE_GEN_DESKTOP_GAMEPAD   0x05
     157              : /** HID Generic Desktop Keyboard Usage ID */
     158            1 : #define HID_USAGE_GEN_DESKTOP_KEYBOARD  0x06
     159              : /** HID Generic Desktop Keypad Usage ID */
     160            1 : #define HID_USAGE_GEN_DESKTOP_KEYPAD    0x07
     161              : /** HID Generic Desktop X Usage ID */
     162            1 : #define HID_USAGE_GEN_DESKTOP_X         0x30
     163              : /** HID Generic Desktop Y Usage ID */
     164            1 : #define HID_USAGE_GEN_DESKTOP_Y         0x31
     165              : /** HID Generic Desktop Wheel Usage ID */
     166            1 : #define HID_USAGE_GEN_DESKTOP_WHEEL     0x38
     167              : 
     168              : /** HID Sensors Collection Usage ID */
     169            1 : #define HID_USAGE_SENSOR_TYPE_COLLECTION                        0x001
     170              : /** HID Sensors Environmental Temperature Type Usage ID */
     171            1 : #define HID_USAGE_SENSORS_TYPE_ENVIRONMENTAL_TEMPERATURE        0x033
     172              : /** HID Sensors Event Sensor State Usage ID */
     173            1 : #define HID_USAGE_SENSORS_EVENT_SENSOR_STATE                    0x201
     174              : /** HID Sensors Friendly Name Property Usage ID */
     175            1 : #define HID_USAGE_SENSORS_PROPERTY_FRIENDLY_NAME                0x301
     176              : /** HID Sensors Enviromental Temperature Data Usage ID */
     177            1 : #define HID_USAGE_SENSORS_DATA_ENVIRONMENTAL_TEMPERATURE        0x434
     178              : /** HID Sensors Timestamp Property Usage ID */
     179            1 : #define HID_USAGE_SENSORS_PROPERTY_TIMESTAMP                    0x529
     180              : /** HID Sensors Sensor State Undefined Usage ID */
     181            1 : #define HID_USAGE_SENSORS_SENSOR_STATE_UNDEFINED                0x800
     182              : /** HID Sensors Sensor State Ready Usage ID */
     183            1 : #define HID_USAGE_SENSORS_SENSOR_STATE_READY                    0x801
     184              : /** HID Sensors Sensor State Not Available Usage ID */
     185            1 : #define HID_USAGE_SENSORS_SENSOR_STATE_NOT_AVAILABLE            0x802
     186              : /** HID Sensors Sensor State No Data Usage ID */
     187            1 : #define HID_USAGE_SENSORS_SENSOR_STATE_NO_DATA                  0x803
     188              : /** HID Sensors Sensor State Initializing Usage ID */
     189            1 : #define HID_USAGE_SENSORS_SENSOR_STATE_INITIALIZING             0x804
     190              : /** HID Sensors Sensor State Access Denied Usage ID */
     191            1 : #define HID_USAGE_SENSORS_SENSOR_STATE_ACCESS_DENIED            0x805
     192              : /** HID Sensors Sensor State Error Usage ID */
     193            1 : #define HID_USAGE_SENSORS_SENSOR_STATE_ERROR                    0x806
     194              : 
     195              : /**
     196              :  * @}
     197              :  */
     198              : 
     199              : /**
     200              :  * @defgroup usb_hid_items USB HID Item helpers
     201              :  * @{
     202              :  */
     203              : 
     204              : /**
     205              :  * @brief Define HID short item.
     206              :  *
     207              :  * @param bTag  Item tag
     208              :  * @param bType Item type
     209              :  * @param bSize Item data size
     210              :  * @return      HID Input item
     211              :  */
     212            1 : #define HID_ITEM(bTag, bType, bSize)    (((bTag & 0xF) << 4) | \
     213              :                                          ((bType & 0x3) << 2) | (bSize & 0x3))
     214              : 
     215              : /**
     216              :  * @brief  Define HID Input item with the data length of one byte.
     217              :  *
     218              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     219              :  * @ref HID_KEYBOARD_REPORT_DESC()
     220              :  *
     221              :  * @param a Input item data
     222              :  * @return  HID Input item
     223              :  */
     224            1 : #define HID_INPUT(a)                    \
     225              :         HID_ITEM(HID_ITEM_TAG_INPUT, HID_ITEM_TYPE_MAIN, 1), a
     226              : 
     227              : /**
     228              :  * @brief Define HID Output item with the data length of one byte.
     229              :  *
     230              :  * For usage examples, see @ref HID_KEYBOARD_REPORT_DESC()
     231              :  *
     232              :  * @param a Output item data
     233              :  * @return  HID Output item
     234              :  */
     235            1 : #define HID_OUTPUT(a)                   \
     236              :         HID_ITEM(HID_ITEM_TAG_OUTPUT, HID_ITEM_TYPE_MAIN, 1), a
     237              : 
     238              : /**
     239              :  * @brief Define HID Feature item with the data length of one byte.
     240              :  *
     241              :  * @param a Feature item data
     242              :  * @return  HID Feature item
     243              :  */
     244            1 : #define HID_FEATURE(a)                  \
     245              :         HID_ITEM(HID_ITEM_TAG_FEATURE, HID_ITEM_TYPE_MAIN, 1), a
     246              : 
     247              : /**
     248              :  * @brief Define HID Collection item with the data length of one byte.
     249              :  *
     250              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     251              :  * @ref HID_KEYBOARD_REPORT_DESC()
     252              :  *
     253              :  * @param a Collection item data
     254              :  * @return  HID Collection item
     255              :  */
     256            1 : #define HID_COLLECTION(a)               \
     257              :         HID_ITEM(HID_ITEM_TAG_COLLECTION, HID_ITEM_TYPE_MAIN, 1), a
     258              : 
     259              : /**
     260              :  * @brief Define HID End Collection (non-data) item.
     261              :  *
     262              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     263              :  * @ref HID_KEYBOARD_REPORT_DESC()
     264              :  *
     265              :  * @return  HID End Collection item
     266              :  */
     267            1 : #define HID_END_COLLECTION              \
     268              :         HID_ITEM(HID_ITEM_TAG_COLLECTION_END, HID_ITEM_TYPE_MAIN, 0)
     269              : 
     270              : /**
     271              :  * @brief Define HID Usage Page item.
     272              :  *
     273              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     274              :  * @ref HID_KEYBOARD_REPORT_DESC()
     275              :  *
     276              :  * @param page Usage Page
     277              :  * @return     HID Usage Page item
     278              :  */
     279            1 : #define HID_USAGE_PAGE(page)            \
     280              :         HID_ITEM(HID_ITEM_TAG_USAGE_PAGE, HID_ITEM_TYPE_GLOBAL, 1), page
     281              : 
     282              : /**
     283              :  * @brief Define HID Logical Minimum item with the data length of one byte.
     284              :  *
     285              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     286              :  * @ref HID_KEYBOARD_REPORT_DESC()
     287              :  *
     288              :  * @param a Minimum value in logical units
     289              :  * @return  HID Logical Minimum item
     290              :  */
     291            1 : #define HID_LOGICAL_MIN8(a)             \
     292              :         HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 1), a
     293              : 
     294              : /**
     295              :  * @brief Define HID Logical Maximum item with the data length of one byte.
     296              :  *
     297              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     298              :  * @ref HID_KEYBOARD_REPORT_DESC()
     299              :  *
     300              :  * @param a Maximum value in logical units
     301              :  * @return  HID Logical Maximum item
     302              :  */
     303            1 : #define HID_LOGICAL_MAX8(a)             \
     304              :         HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 1), a
     305              : 
     306              : /**
     307              :  * @brief Define HID Logical Minimum item with the data length of two bytes.
     308              :  *
     309              :  * @param a Minimum value lower byte
     310              :  * @param b Minimum value higher byte
     311              :  * @return  HID Logical Minimum item
     312              :  */
     313            1 : #define HID_LOGICAL_MIN16(a, b)         \
     314              :         HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 2), a, b
     315              : 
     316              : /**
     317              :  * @brief Define HID Logical Maximum item with the data length of two bytes.
     318              :  *
     319              :  * @param a Minimum value lower byte
     320              :  * @param b Minimum value higher byte
     321              :  * @return  HID Logical Maximum item
     322              :  */
     323            1 : #define HID_LOGICAL_MAX16(a, b)         \
     324              :         HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 2), a, b
     325              : 
     326              : /**
     327              :  * @brief Define HID Logical Minimum item with the data length of four bytes.
     328              :  *
     329              :  * @param a Minimum value lower byte
     330              :  * @param b Minimum value low middle byte
     331              :  * @param c Minimum value high middle byte
     332              :  * @param d Minimum value higher byte
     333              :  * @return  HID Logical Minimum item
     334              :  */
     335            1 : #define HID_LOGICAL_MIN32(a, b, c, d)   \
     336              :         HID_ITEM(HID_ITEM_TAG_LOGICAL_MIN, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d
     337              : 
     338              : /**
     339              :  * @brief Define HID Logical Maximum item with the data length of four bytes.
     340              :  *
     341              :  * @param a Minimum value lower byte
     342              :  * @param b Minimum value low middle byte
     343              :  * @param c Minimum value high middle byte
     344              :  * @param d Minimum value higher byte
     345              :  * @return  HID Logical Maximum item
     346              :  */
     347            1 : #define HID_LOGICAL_MAX32(a, b, c, d)   \
     348              :         HID_ITEM(HID_ITEM_TAG_LOGICAL_MAX, HID_ITEM_TYPE_GLOBAL, 3), a, b, c, d
     349              : 
     350              : /**
     351              :  * @brief Define HID Report Size item with the data length of one byte.
     352              :  *
     353              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     354              :  * @ref HID_KEYBOARD_REPORT_DESC()
     355              :  *
     356              :  * @param size Report field size in bits
     357              :  * @return     HID Report Size item
     358              :  */
     359            1 : #define HID_REPORT_SIZE(size)           \
     360              :         HID_ITEM(HID_ITEM_TAG_REPORT_SIZE, HID_ITEM_TYPE_GLOBAL, 1), size
     361              : 
     362              : /**
     363              :  * @brief Define HID Report ID item with the data length of one byte.
     364              :  *
     365              :  * @param id Report ID
     366              :  * @return   HID Report ID item
     367              :  */
     368            1 : #define HID_REPORT_ID(id)               \
     369              :         HID_ITEM(HID_ITEM_TAG_REPORT_ID, HID_ITEM_TYPE_GLOBAL, 1), id
     370              : 
     371              : /**
     372              :  * @brief Define HID Report Count item with the data length of one byte.
     373              :  *
     374              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     375              :  * @ref HID_KEYBOARD_REPORT_DESC()
     376              :  *
     377              :  * @param count Number of data fields included in the report
     378              :  * @return      HID Report Count item
     379              :  */
     380            1 : #define HID_REPORT_COUNT(count)         \
     381              :         HID_ITEM(HID_ITEM_TAG_REPORT_COUNT, HID_ITEM_TYPE_GLOBAL, 1), count
     382              : 
     383              : /**
     384              :  * @brief Define HID Usage Index item with the data length of one byte.
     385              :  *
     386              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     387              :  * @ref HID_KEYBOARD_REPORT_DESC()
     388              :  *
     389              :  * @param idx HID Usage ID per the HID Usage Table
     390              :  * @return    HID Usage Index item
     391              :  */
     392            1 : #define HID_USAGE(idx)                  \
     393              :         HID_ITEM(HID_ITEM_TAG_USAGE, HID_ITEM_TYPE_LOCAL, 1), idx
     394              : 
     395              : /**
     396              :  * @brief Define HID Usage Index item with the data length of two bytes.
     397              :  *
     398              :  * @param idx HID Usage ID per the HID Usage Table
     399              :  * @return    HID Usage Index item
     400              :  */
     401            1 : #define HID_USAGE16(idx)                \
     402              :         HID_ITEM(HID_ITEM_TAG_USAGE, HID_ITEM_TYPE_LOCAL, 2), (uint8_t)idx, (idx >> 8)
     403              : 
     404              : /**
     405              :  * @brief Define HID Usage Minimum item with the data length of one byte.
     406              :  *
     407              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     408              :  * @ref HID_KEYBOARD_REPORT_DESC()
     409              :  *
     410              :  * @param a Starting Usage
     411              :  * @return  HID Usage Minimum item
     412              :  */
     413            1 : #define HID_USAGE_MIN8(a)               \
     414              :         HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 1), a
     415              : 
     416              : /**
     417              :  * @brief Define HID Usage Maximum item with the data length of one byte.
     418              :  *
     419              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     420              :  * @ref HID_KEYBOARD_REPORT_DESC()
     421              :  *
     422              :  * @param a Ending Usage
     423              :  * @return  HID Usage Maximum item
     424              :  */
     425            1 : #define HID_USAGE_MAX8(a)               \
     426              :         HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 1), a
     427              : 
     428              : /**
     429              :  * @brief Define HID Usage Minimum item with the data length of two bytes.
     430              :  *
     431              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     432              :  * @ref HID_KEYBOARD_REPORT_DESC()
     433              :  *
     434              :  * @param a Starting Usage lower byte
     435              :  * @param b Starting Usage higher byte
     436              :  * @return  HID Usage Minimum item
     437              :  */
     438            1 : #define HID_USAGE_MIN16(a, b)           \
     439              :         HID_ITEM(HID_ITEM_TAG_USAGE_MIN, HID_ITEM_TYPE_LOCAL, 2), a, b
     440              : 
     441              : /**
     442              :  * @brief Define HID Usage Maximum item with the data length of two bytes.
     443              :  *
     444              :  * For usage examples, see @ref HID_MOUSE_REPORT_DESC(),
     445              :  * @ref HID_KEYBOARD_REPORT_DESC()
     446              :  *
     447              :  * @param a Ending Usage lower byte
     448              :  * @param b Ending Usage higher byte
     449              :  * @return  HID Usage Maximum item
     450              :  */
     451            1 : #define HID_USAGE_MAX16(a, b)           \
     452              :         HID_ITEM(HID_ITEM_TAG_USAGE_MAX, HID_ITEM_TYPE_LOCAL, 2), a, b
     453              : 
     454              : /**
     455              :  * @brief Define HID Unit Exponent item.
     456              :  *
     457              :  * @param  exp Unit exponent, refer to the HID Unit Exponent table
     458              :  *             in the specification for usage
     459              :  * @return  HID Unit Exponent item
     460              :  */
     461            1 : #define HID_UNIT_EXPONENT(exp) HID_ITEM(HID_ITEM_TAG_UNIT_EXPONENT, HID_ITEM_TYPE_GLOBAL, 1), exp
     462              : 
     463              : /**
     464              :  * @}
     465              :  */
     466              : 
     467              : /**
     468              :  * @defgroup usb_hid_mk_report_desc Mouse and keyboard report descriptors
     469              :  * @{
     470              :  */
     471              : 
     472              : /**
     473              :  * @brief Simple HID mouse report descriptor for n button mouse.
     474              :  *
     475              :  * @param bcnt Button count. Allowed values from 1 to 8.
     476              :  */
     477            1 : #define HID_MOUSE_REPORT_DESC(bcnt) {                           \
     478              :         HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),                  \
     479              :         HID_USAGE(HID_USAGE_GEN_DESKTOP_MOUSE),                 \
     480              :         HID_COLLECTION(HID_COLLECTION_APPLICATION),             \
     481              :                 HID_USAGE(HID_USAGE_GEN_DESKTOP_POINTER),       \
     482              :                 HID_COLLECTION(HID_COLLECTION_PHYSICAL),        \
     483              :                         /* Bits used for button signalling */   \
     484              :                         HID_USAGE_PAGE(HID_USAGE_GEN_BUTTON),   \
     485              :                         HID_USAGE_MIN8(1),                      \
     486              :                         HID_USAGE_MAX8(bcnt),                   \
     487              :                         HID_LOGICAL_MIN8(0),                    \
     488              :                         HID_LOGICAL_MAX8(1),                    \
     489              :                         HID_REPORT_SIZE(1),                     \
     490              :                         HID_REPORT_COUNT(bcnt),                 \
     491              :                         /* HID_INPUT (Data,Var,Abs) */          \
     492              :                         HID_INPUT(0x02),                        \
     493              :                         /* Unused bits */                       \
     494              :                         HID_REPORT_SIZE(8 - bcnt),              \
     495              :                         HID_REPORT_COUNT(1),                    \
     496              :                         /* HID_INPUT (Cnst,Ary,Abs) */          \
     497              :                         HID_INPUT(1),                           \
     498              :                         /* X and Y axis, scroll */              \
     499              :                         HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),  \
     500              :                         HID_USAGE(HID_USAGE_GEN_DESKTOP_X),     \
     501              :                         HID_USAGE(HID_USAGE_GEN_DESKTOP_Y),     \
     502              :                         HID_USAGE(HID_USAGE_GEN_DESKTOP_WHEEL), \
     503              :                         HID_LOGICAL_MIN8(-127),                 \
     504              :                         HID_LOGICAL_MAX8(127),                  \
     505              :                         HID_REPORT_SIZE(8),                     \
     506              :                         HID_REPORT_COUNT(3),                    \
     507              :                         /* HID_INPUT (Data,Var,Rel) */          \
     508              :                         HID_INPUT(0x06),                        \
     509              :                 HID_END_COLLECTION,                             \
     510              :         HID_END_COLLECTION,                                     \
     511              : }
     512              : 
     513              : /**
     514              :  * @brief Simple HID keyboard report descriptor.
     515              :  */
     516            1 : #define HID_KEYBOARD_REPORT_DESC() {                            \
     517              :         HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),                  \
     518              :         HID_USAGE(HID_USAGE_GEN_DESKTOP_KEYBOARD),              \
     519              :         HID_COLLECTION(HID_COLLECTION_APPLICATION),             \
     520              :                 HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD),   \
     521              :                 /* HID_USAGE_MINIMUM(Keyboard LeftControl) */   \
     522              :                 HID_USAGE_MIN8(0xE0),                           \
     523              :                 /* HID_USAGE_MAXIMUM(Keyboard Right GUI) */     \
     524              :                 HID_USAGE_MAX8(0xE7),                           \
     525              :                 HID_LOGICAL_MIN8(0),                            \
     526              :                 HID_LOGICAL_MAX8(1),                            \
     527              :                 HID_REPORT_SIZE(1),                             \
     528              :                 HID_REPORT_COUNT(8),                            \
     529              :                 /* HID_INPUT(Data,Var,Abs) */                   \
     530              :                 HID_INPUT(0x02),                                \
     531              :                 HID_REPORT_SIZE(8),                             \
     532              :                 HID_REPORT_COUNT(1),                            \
     533              :                 /* HID_INPUT(Cnst,Var,Abs) */                   \
     534              :                 HID_INPUT(0x03),                                \
     535              :                 HID_REPORT_SIZE(1),                             \
     536              :                 HID_REPORT_COUNT(5),                            \
     537              :                 HID_USAGE_PAGE(HID_USAGE_GEN_LEDS),             \
     538              :                 /* HID_USAGE_MINIMUM(Num Lock) */               \
     539              :                 HID_USAGE_MIN8(1),                              \
     540              :                 /* HID_USAGE_MAXIMUM(Kana) */                   \
     541              :                 HID_USAGE_MAX8(5),                              \
     542              :                 /* HID_OUTPUT(Data,Var,Abs) */                  \
     543              :                 HID_OUTPUT(0x02),                               \
     544              :                 HID_REPORT_SIZE(3),                             \
     545              :                 HID_REPORT_COUNT(1),                            \
     546              :                 /* HID_OUTPUT(Cnst,Var,Abs) */                  \
     547              :                 HID_OUTPUT(0x03),                               \
     548              :                 HID_REPORT_SIZE(8),                             \
     549              :                 HID_REPORT_COUNT(6),                            \
     550              :                 HID_LOGICAL_MIN8(0),                            \
     551              :                 HID_LOGICAL_MAX8(101),                          \
     552              :                 HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP_KEYPAD),   \
     553              :                 /* HID_USAGE_MIN8(Reserved) */                  \
     554              :                 HID_USAGE_MIN8(0),                              \
     555              :                 /* HID_USAGE_MAX8(Keyboard Application) */      \
     556              :                 HID_USAGE_MAX8(101),                            \
     557              :                 /* HID_INPUT (Data,Ary,Abs) */                  \
     558              :                 HID_INPUT(0x00),                                \
     559              :         HID_END_COLLECTION,                                     \
     560              : }
     561              : 
     562              : /**
     563              :  * @brief HID keyboard button codes.
     564              :  */
     565            0 : enum hid_kbd_code {
     566              :         HID_KEY_A               = 4,
     567              :         HID_KEY_B               = 5,
     568              :         HID_KEY_C               = 6,
     569              :         HID_KEY_D               = 7,
     570              :         HID_KEY_E               = 8,
     571              :         HID_KEY_F               = 9,
     572              :         HID_KEY_G               = 10,
     573              :         HID_KEY_H               = 11,
     574              :         HID_KEY_I               = 12,
     575              :         HID_KEY_J               = 13,
     576              :         HID_KEY_K               = 14,
     577              :         HID_KEY_L               = 15,
     578              :         HID_KEY_M               = 16,
     579              :         HID_KEY_N               = 17,
     580              :         HID_KEY_O               = 18,
     581              :         HID_KEY_P               = 19,
     582              :         HID_KEY_Q               = 20,
     583              :         HID_KEY_R               = 21,
     584              :         HID_KEY_S               = 22,
     585              :         HID_KEY_T               = 23,
     586              :         HID_KEY_U               = 24,
     587              :         HID_KEY_V               = 25,
     588              :         HID_KEY_W               = 26,
     589              :         HID_KEY_X               = 27,
     590              :         HID_KEY_Y               = 28,
     591              :         HID_KEY_Z               = 29,
     592              :         HID_KEY_1               = 30,
     593              :         HID_KEY_2               = 31,
     594              :         HID_KEY_3               = 32,
     595              :         HID_KEY_4               = 33,
     596              :         HID_KEY_5               = 34,
     597              :         HID_KEY_6               = 35,
     598              :         HID_KEY_7               = 36,
     599              :         HID_KEY_8               = 37,
     600              :         HID_KEY_9               = 38,
     601              :         HID_KEY_0               = 39,
     602              :         HID_KEY_ENTER           = 40,
     603              :         HID_KEY_ESC             = 41,
     604              :         HID_KEY_BACKSPACE       = 42,
     605              :         HID_KEY_TAB             = 43,
     606              :         HID_KEY_SPACE           = 44,
     607              :         HID_KEY_MINUS           = 45,
     608              :         HID_KEY_EQUAL           = 46,
     609              :         HID_KEY_LEFTBRACE       = 47,
     610              :         HID_KEY_RIGHTBRACE      = 48,
     611              :         HID_KEY_BACKSLASH       = 49,
     612              :         HID_KEY_HASH            = 50, /* Non-US # and ~ */
     613              :         HID_KEY_SEMICOLON       = 51,
     614              :         HID_KEY_APOSTROPHE      = 52,
     615              :         HID_KEY_GRAVE           = 53,
     616              :         HID_KEY_COMMA           = 54,
     617              :         HID_KEY_DOT             = 55,
     618              :         HID_KEY_SLASH           = 56,
     619              :         HID_KEY_CAPSLOCK        = 57,
     620              :         HID_KEY_F1              = 58,
     621              :         HID_KEY_F2              = 59,
     622              :         HID_KEY_F3              = 60,
     623              :         HID_KEY_F4              = 61,
     624              :         HID_KEY_F5              = 62,
     625              :         HID_KEY_F6              = 63,
     626              :         HID_KEY_F7              = 64,
     627              :         HID_KEY_F8              = 65,
     628              :         HID_KEY_F9              = 66,
     629              :         HID_KEY_F10             = 67,
     630              :         HID_KEY_F11             = 68,
     631              :         HID_KEY_F12             = 69,
     632              :         HID_KEY_SYSRQ           = 70, /* PRINTSCREEN */
     633              :         HID_KEY_SCROLLLOCK      = 71,
     634              :         HID_KEY_PAUSE           = 72,
     635              :         HID_KEY_INSERT          = 73,
     636              :         HID_KEY_HOME            = 74,
     637              :         HID_KEY_PAGEUP          = 75,
     638              :         HID_KEY_DELETE          = 76,
     639              :         HID_KEY_END             = 77,
     640              :         HID_KEY_PAGEDOWN        = 78,
     641              :         HID_KEY_RIGHT           = 79,
     642              :         HID_KEY_LEFT            = 80,
     643              :         HID_KEY_DOWN            = 81,
     644              :         HID_KEY_UP              = 82,
     645              :         HID_KEY_NUMLOCK         = 83,
     646              :         HID_KEY_KPSLASH         = 84, /* NUMPAD DIVIDE */
     647              :         HID_KEY_KPASTERISK      = 85, /* NUMPAD MULTIPLY */
     648              :         HID_KEY_KPMINUS         = 86,
     649              :         HID_KEY_KPPLUS          = 87,
     650              :         HID_KEY_KPENTER         = 88,
     651              :         HID_KEY_KP_1            = 89,
     652              :         HID_KEY_KP_2            = 90,
     653              :         HID_KEY_KP_3            = 91,
     654              :         HID_KEY_KP_4            = 92,
     655              :         HID_KEY_KP_5            = 93,
     656              :         HID_KEY_KP_6            = 94,
     657              :         HID_KEY_KP_7            = 95,
     658              :         HID_KEY_KP_8            = 96,
     659              :         HID_KEY_KP_9            = 97,
     660              :         HID_KEY_KP_0            = 98,
     661              : };
     662              : 
     663              : /**
     664              :  * @brief HID keyboard modifiers.
     665              :  */
     666            0 : enum hid_kbd_modifier {
     667              :         HID_KBD_MODIFIER_NONE           = 0x00,
     668              :         HID_KBD_MODIFIER_LEFT_CTRL      = 0x01,
     669              :         HID_KBD_MODIFIER_LEFT_SHIFT     = 0x02,
     670              :         HID_KBD_MODIFIER_LEFT_ALT       = 0x04,
     671              :         HID_KBD_MODIFIER_LEFT_UI        = 0x08,
     672              :         HID_KBD_MODIFIER_RIGHT_CTRL     = 0x10,
     673              :         HID_KBD_MODIFIER_RIGHT_SHIFT    = 0x20,
     674              :         HID_KBD_MODIFIER_RIGHT_ALT      = 0x40,
     675              :         HID_KBD_MODIFIER_RIGHT_UI       = 0x80,
     676              : };
     677              : 
     678              : /**
     679              :  * @brief HID keyboard LEDs.
     680              :  */
     681            0 : enum hid_kbd_led {
     682              :         HID_KBD_LED_NUM_LOCK    = 0x01,
     683              :         HID_KBD_LED_CAPS_LOCK   = 0x02,
     684              :         HID_KBD_LED_SCROLL_LOCK = 0x04,
     685              :         HID_KBD_LED_COMPOSE     = 0x08,
     686              :         HID_KBD_LED_KANA        = 0x10,
     687              : };
     688              : 
     689              : /**
     690              :  * @}
     691              :  */
     692              : 
     693              : /**
     694              :  * @}
     695              :  */
     696              : 
     697              : #ifdef __cplusplus
     698              : }
     699              : #endif
     700              : 
     701              : #endif /* ZEPHYR_INCLUDE_USB_CLASS_HID_H_ */
        

Generated by: LCOV version 2.0-1