29#if (CFG_TUD_ENABLED && CFG_TUD_HID)
56 uint8_t ctrl_buf[CFG_TUD_HID_EP_BUFSIZE];
57 CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_HID_EP_BUFSIZE];
58 CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_HID_EP_BUFSIZE];
65 for (uint8_t i = 0; i < CFG_TUD_HID; i++) {
105 uint8_t
const rhport = 0;
110bool tud_hid_n_report(uint8_t instance, uint8_t report_id,
void const *report, uint16_t len) {
111 uint8_t
const rhport = 0;
152 uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal) {
165 uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal) {
177 int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) {
212 uint16_t
const drv_len = (uint16_t) (
sizeof(
tusb_desc_interface_t) +
sizeof(tusb_hid_descriptor_hid_t) +
214 TU_ASSERT(max_len >= drv_len, 0);
219 for (hid_id = 0; hid_id < CFG_TUD_HID; hid_id++) {
227 uint8_t
const *p_desc = (uint8_t
const *)desc_itf;
232 p_hid->
hid_descriptor = (tusb_hid_descriptor_hid_t
const *)p_desc;
266 TU_VERIFY(hid_itf < CFG_TUD_HID);
294 uint8_t* report_buf = p_hid->
ctrl_buf;
296 uint16_t xferlen = 0;
300 *report_buf++ = report_id;
306 TU_ASSERT(xferlen > 0);
320 uint8_t
const* report_buf = p_hid->
ctrl_buf;
380 if ((ep_addr == p_hid->
ep_out) || (ep_addr == p_hid->
ep_in)) {
386 if (ep_addr == p_hid->
ep_in) {
void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const *buffer, uint16_t bufsize)
uint8_t const * tud_hid_descriptor_report_cb(uint8_t itf)
uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t *buffer, uint16_t reqlen)
hid_report_type_t
HID Request Report Type.
@ HID_REQ_CONTROL_GET_PROTOCOL
Get Protocol.
@ HID_REQ_CONTROL_SET_REPORT
Set Report.
@ HID_REQ_CONTROL_GET_REPORT
Get Report.
@ HID_REQ_CONTROL_SET_PROTOCOL
Set Protocol.
@ HID_REQ_CONTROL_SET_IDLE
Set Idle.
@ HID_REQ_CONTROL_GET_IDLE
Get Idle.
@ HID_SUBCLASS_BOOT
Boot Interface Subclass.
@ HID_DESC_TYPE_REPORT
Report Descriptor.
@ HID_DESC_TYPE_HID
HID Descriptor.
@ HID_REPORT_TYPE_INPUT
Input.
@ HID_REPORT_TYPE_INVALID
@ HID_REPORT_TYPE_OUTPUT
Output.
void hidd_reset(uint8_t rhport)
uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len)
bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal)
TU_ATTR_WEAK bool tud_hid_set_idle_cb(uint8_t instance, uint8_t idle_rate)
uint8_t tud_hid_n_get_protocol(uint8_t instance)
CFG_TUD_MEM_SECTION tu_static hidd_interface_t _hidd_itf[CFG_TUD_HID]
TU_ATTR_WEAK void tud_hid_report_complete_cb(uint8_t instance, uint8_t const *report, uint16_t len)
uint8_t tud_hid_n_interface_protocol(uint8_t instance)
TU_ATTR_WEAK void tud_hid_set_protocol_cb(uint8_t instance, uint8_t protocol)
bool hidd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
bool hidd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal)
static TU_ATTR_ALWAYS_INLINE uint8_t get_index_by_itfnum(uint8_t itf_num)
bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id, int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons)
TU_ATTR_WEAK void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, uint8_t const *report, uint16_t xferred_bytes)
bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modifier, const uint8_t keycode[6])
bool tud_hid_n_report(uint8_t instance, uint8_t report_id, void const *report, uint16_t len)
bool tud_hid_n_ready(uint8_t instance)
static void * memcpy(void *dst, const void *src, size_t n)
AUDIO Channel Cluster Descriptor (4.1)
uint32_t buttons
Buttons mask for currently pressed buttons.
struct TU_ATTR_PACKED::@16::TU_ATTR_PACKED bmRequestType_bit
int8_t x
Delta x movement of left analog-stick.
uint8_t bInterfaceClass
Class code (assigned by the USB-IF).
uint8_t bInterfaceSubClass
Subclass code (assigned by the USB-IF). These codes are qualified by the value of the bInterfaceCla...
uint8_t bRequest
Request type audio_cs_req_t.
uint8_t bNumEndpoints
Number of endpoints used by this interface (excluding endpoint zero). If this value is zero,...
uint8_t bInterfaceProtocol
Protocol code (assigned by the USB). These codes are qualified by the value of the bInterfaceClass ...
uint8_t bInterfaceNumber
Number of this interface. Zero-based value identifying the index in the array of concurrent interface...
uint8_t ctrl_buf[CFG_TUD_HID_EP_BUFSIZE]
tusb_hid_descriptor_hid_t const * hid_descriptor
CFG_TUSB_MEM_ALIGN uint8_t epin_buf[CFG_TUD_HID_EP_BUFSIZE]
CFG_TUSB_MEM_ALIGN uint8_t epout_buf[CFG_TUD_HID_EP_BUFSIZE]
static TU_ATTR_ALWAYS_INLINE uint8_t tu_u16_low(uint16_t ui16)
static TU_ATTR_ALWAYS_INLINE uint16_t tu_min16(uint16_t x, uint16_t y)
static TU_ATTR_ALWAYS_INLINE uint8_t tu_u16_high(uint16_t ui16)
static TU_ATTR_ALWAYS_INLINE uint16_t tu_unaligned_read16(const void *mem)
static TU_ATTR_ALWAYS_INLINE int tu_memcpy_s(void *dest, size_t destsz, const void *src, size_t count)
@ TUSB_REQ_GET_DESCRIPTOR
@ TUSB_REQ_RCPT_INTERFACE
static TU_ATTR_ALWAYS_INLINE uint8_t tu_desc_type(void const *desc)
static TU_ATTR_ALWAYS_INLINE uint8_t const * tu_desc_next(void const *desc)
bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes)
bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr)
bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr)
bool usbd_open_edpt_pair(uint8_t rhport, uint8_t const *p_desc, uint8_t ep_count, uint8_t xfer_type, uint8_t *ep_out, uint8_t *ep_in)
bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const *request, void *buffer, uint16_t len)
static TU_ATTR_ALWAYS_INLINE bool tud_ready(void)
bool tud_control_status(uint8_t rhport, tusb_control_request_t const *request)
CFG_TUH_MEM_ALIGN tusb_control_request_t request