You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
7.2 KiB
225 lines
7.2 KiB
/* |
|
* Copyright (c) 2018 Intel Corporation |
|
* Copyright (c) 2018,2021 Nordic Semiconductor ASA |
|
* |
|
* SPDX-License-Identifier: Apache-2.0 |
|
*/ |
|
|
|
/** |
|
* @file |
|
* @brief USB HID Class device API header |
|
*/ |
|
|
|
#ifndef ZEPHYR_INCLUDE_USB_HID_CLASS_DEVICE_H_ |
|
#define ZEPHYR_INCLUDE_USB_HID_CLASS_DEVICE_H_ |
|
|
|
#include <usb/class/hid.h> |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/** |
|
* @brief usb_hid.h API |
|
* @defgroup usb_hid_class USB HID class API |
|
* @{ |
|
* @} |
|
*/ |
|
|
|
/** |
|
* @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, |
|
uint8_t **data); |
|
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 set_report; |
|
hid_protocol_cb_t protocol_change; |
|
hid_idle_cb_t on_idle; |
|
/* |
|
* int_in_ready is an optional callback that is called when |
|
* the current interrupt IN transfer has completed. This can |
|
* be used to wait for the endpoint to go idle or to trigger |
|
* the next transfer. |
|
*/ |
|
hid_int_ready_callback int_in_ready; |
|
#ifdef CONFIG_ENABLE_HID_INT_OUT_EP |
|
hid_int_ready_callback int_out_ready; |
|
#endif |
|
}; |
|
|
|
/** |
|
* @brief Register HID device |
|
* |
|
* @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 |
|
*/ |
|
void usb_hid_register_device(const struct device *dev, |
|
const uint8_t *desc, |
|
size_t size, |
|
const struct hid_ops *op); |
|
|
|
/** |
|
* @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); |
|
|
|
/** |
|
* @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); |
|
|
|
/** |
|
* @brief Set USB HID class Protocol Code |
|
* |
|
* @details Should be called before usb_hid_init(). |
|
* |
|
* @param[in] dev Pointer to USB HID device |
|
* @param[in] proto_code Protocol Code to be used for bInterfaceProtocol |
|
* |
|
* @return 0 on success, negative errno code on fail. |
|
*/ |
|
int usb_hid_set_proto_code(const struct device *dev, uint8_t proto_code); |
|
|
|
/** |
|
* @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_HID_CLASS_DEVICE_H_ */
|
|
|