41#ifndef CFG_TUD_TASK_QUEUE_SZ
42 #define CFG_TUD_TASK_QUEUE_SZ 16
78 (void) remote_wakeup_en;
125 uint8_t itf2drv[CFG_TUD_INTERFACE_MAX];
126 uint8_t ep2drv[CFG_TUD_ENDPPOINT_MAX][2];
138#if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL
139 #define DRIVER_NAME(_name) _name
141 #define DRIVER_NAME(_name) NULL
148 .
name = DRIVER_NAME(
"CDC"),
161 .name = DRIVER_NAME(
"MSC"),
174 .name = DRIVER_NAME(
"HID"),
187 .name = DRIVER_NAME(
"AUDIO"),
200 .name = DRIVER_NAME(
"VIDEO"),
213 .name = DRIVER_NAME(
"MIDI"),
226 .name = DRIVER_NAME(
"VENDOR"),
239 .name = DRIVER_NAME(
"TMC"),
250 #if CFG_TUD_DFU_RUNTIME
252 .name = DRIVER_NAME(
"DFU-RUNTIME"),
265 .name = DRIVER_NAME(
"DFU"),
276 #if CFG_TUD_ECM_RNDIS || CFG_TUD_NCM
278 .name = DRIVER_NAME(
"NET"),
291 .name = DRIVER_NAME(
"BTH"),
309#define TOTAL_DRIVER_COUNT (_app_driver_count + BUILTIN_DRIVER_COUNT)
318 }
else if ( drvid < TOTAL_DRIVER_COUNT && BUILTIN_DRIVER_COUNT > 0 ){
338#if OSAL_MUTEX_REQUIRED
342 #define _usbd_mutex NULL
362 TU_LOG_USBD(
" Enter Test Mode (test selector index: %d)\r\n", selector);
378#if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL
393 for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) {
396 TU_LOG_USBD(
"%s control complete\r\n", driver->
name);
457 TU_LOG_USBD(
"USBD init on controller %u, speed = %s\r\n", rhport,
460 TU_LOG_INT(CFG_TUD_LOG_LEVEL,
sizeof(
dcd_event_t));
461 TU_LOG_INT(CFG_TUD_LOG_LEVEL,
sizeof(
tu_fifo_t));
467#if OSAL_MUTEX_REQUIRED
483 for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) {
485 TU_ASSERT(driver && driver->
init);
486 TU_LOG_USBD(
"%s init\r\n", driver->
name);
493 TU_ASSERT(
dcd_init(rhport, rh_init));
504 TU_LOG_USBD(
"USBD deinit on controller %u\r\n", rhport);
512 for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) {
514 if(driver && driver->
deinit) {
515 TU_LOG_USBD(
"%s deinit\r\n", driver->
name);
524#if OSAL_MUTEX_REQUIRED
536 for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) {
539 driver->
reset(rhport);
583#if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL
584 if (event.event_id == DCD_EVENT_SETUP_RECEIVED) TU_LOG_USBD(
"\r\n");
585 TU_LOG_USBD(
"USBD %s ", event.event_id < DCD_EVENT_COUNT ?
_usbd_event_str[event.event_id] :
"CORRUPTED");
588 switch (event.event_id) {
589 case DCD_EVENT_BUS_RESET:
590 TU_LOG_USBD(
": %s Speed\r\n",
tu_str_speed[event.bus_reset.speed]);
595 case DCD_EVENT_UNPLUGGED:
601 case DCD_EVENT_SETUP_RECEIVED:
604 TU_LOG_BUF(CFG_TUD_LOG_LEVEL, &event.setup_received, 8);
606 TU_LOG_USBD(
" Skipped since there is other SETUP in queue\r\n");
622 TU_LOG_USBD(
" Stall EP0\r\n");
629 case DCD_EVENT_XFER_COMPLETE: {
631 uint8_t
const ep_addr =
event.xfer_complete.ep_addr;
635 TU_LOG_USBD(
"on EP %02X with %u bytes\r\n", ep_addr, (
unsigned int) event.xfer_complete.len);
642 event.xfer_complete.len);
647 TU_LOG_USBD(
" %s xfer callback\r\n", driver->
name);
648 driver->
xfer_cb(event.rhport, ep_addr, (
xfer_result_t) event.xfer_complete.result, event.xfer_complete.len);
653 case DCD_EVENT_SUSPEND:
658 TU_LOG_USBD(
": Remote Wakeup = %u\r\n",
_usbd_dev.remote_wakeup_en);
661 TU_LOG_USBD(
" Skipped\r\n");
665 case DCD_EVENT_RESUME:
670 TU_LOG_USBD(
" Skipped\r\n");
674 case USBD_EVENT_FUNC_CALL:
676 if (event.func_call.func)
event.func_call.func(event.func_call.param);
691#if CFG_TUSB_OS != OPT_OS_NONE && CFG_TUSB_OS != OPT_OS_PICO
705 TU_LOG_USBD(
" %s control request\r\n", driver->
name);
721#if CFG_TUSB_DEBUG >= CFG_TUD_LOG_LEVEL
766 uint8_t
const cfg_num = (uint8_t) p_request->
wValue;
772 TU_LOG_USBD(
" Clear current Configuration (%u) before switching\r\n",
_usbd_dev.
cfg_num);
813 switch(p_request->
wValue) {
815 TU_LOG_USBD(
" Enable Remote Wakeup\r\n");
821 #if CFG_TUD_TEST_MODE
836 default:
return false;
844 TU_LOG_USBD(
" Disable Remote Wakeup\r\n");
855 uint16_t status = (uint16_t) ((
_usbd_dev.self_powered ? 1u : 0u) | (
_usbd_dev.remote_wakeup_en ? 2u : 0u));
861 default: TU_BREAKPOINT();
return false;
887 uint8_t alternate = 0;
894 default:
return false;
979 uint8_t
const * desc_end = ((uint8_t
const*) desc_cfg) + tu_le16toh(desc_cfg->
wTotalLength);
981 while( p_desc < desc_end )
983 uint8_t assoc_itf_count = 1;
1002 uint16_t
const remaining_len = (uint16_t) (desc_end-p_desc);
1004 for (drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++)
1008 uint16_t
const drv_len = driver->
open(rhport, desc_itf, remaining_len);
1013 TU_LOG_USBD(
" %s opened\r\n", driver->
name);
1017 if ( assoc_itf_count == 1)
1027 #if CFG_TUD_BTH && CFG_TUD_BTH_ISO_ALT_COUNT
1033 for(uint8_t i=0; i<assoc_itf_count; i++)
1053 TU_ASSERT(drv_id < TOTAL_DRIVER_COUNT);
1068 TU_LOG_USBD(
" Device\r\n");
1071 TU_ASSERT(desc_device);
1080 mod_request.
wLength = CFG_TUD_ENDPOINT0_SIZE;
1082 return tud_control_xfer(rhport, &mod_request, desc_device, CFG_TUD_ENDPOINT0_SIZE);
1090 TU_LOG_USBD(
" BOS\r\n");
1094 TU_VERIFY(desc_bos);
1105 uintptr_t desc_config;
1108 TU_LOG_USBD(
" Configuration[%u]\r\n", desc_index);
1110 TU_ASSERT(desc_config);
1113 TU_LOG_USBD(
" Other Speed Configuration\r\n");
1115 TU_VERIFY(desc_config);
1121 return tud_control_xfer(rhport, p_request, (
void*) desc_config, total_len);
1127 TU_LOG_USBD(
" String[%u]\r\n", desc_index);
1131 TU_VERIFY(desc_str);
1139 TU_LOG_USBD(
" Device Qualifier\r\n");
1141 TU_VERIFY(desc_qualifier);
1146 default:
return false;
1155 switch (event->event_id) {
1156 case DCD_EVENT_UNPLUGGED:
1164 case DCD_EVENT_SUSPEND:
1175 case DCD_EVENT_RESUME:
1185 for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) {
1187 if (driver && driver->
sof) {
1188 driver->
sof(event->rhport, event->sof.frame_count);
1197 dcd_event_t const event_resume = {.rhport =
event->rhport, .event_id = DCD_EVENT_RESUME};
1202 dcd_event_t const event_sof = {.rhport =
event->rhport, .event_id = DCD_EVENT_SOF, .sof.frame_count =
event->sof.frame_count};
1207 case DCD_EVENT_SETUP_RECEIVED:
1238bool 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)
1240 for(
int i=0; i<ep_count; i++)
1265 .event_id = USBD_EVENT_FUNC_CALL,
1267 event.func_call.func = func;
1268 event.func_call.param = param;
1318 TU_LOG_USBD(
" Queue EP %02X with %u bytes ...\r\n", ep_addr,
total_bytes);
1319#if CFG_TUD_LOG_LEVEL >= 3
1338 TU_LOG_USBD(
"FAILED\r\n");
1354 TU_LOG_USBD(
" Queue ISO EP %02X with %u bytes ... ", ep_addr,
total_bytes);
1364 TU_LOG_USBD(
"OK\r\n");
1370 TU_LOG_USBD(
"failed\r\n");
1392 TU_LOG_USBD(
" Stall EP %02X\r\n", ep_addr);
1405 TU_LOG_USBD(
" Clear Stall EP %02X\r\n", ep_addr);
1425#ifdef TUP_DCD_EDPT_ISO_ALLOC
1426 (void) rhport; (void) ep_addr;
1431 TU_LOG_USBD(
" CLOSING Endpoint: 0x%02X\r\n", ep_addr);
1463#ifdef TUP_DCD_EDPT_ISO_ALLOC
1469 (void) rhport; (void) ep_addr; (void) largest_packet_size;
1475#ifdef TUP_DCD_EDPT_ISO_ALLOC
1481 TU_ASSERT(epnum < CFG_TUD_ENDPPOINT_MAX);
1489 (void) rhport; (void) desc_ep;
void btd_reset(uint8_t rhport)
bool btd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
bool btd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
uint16_t btd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
uint16_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
void cdcd_reset(uint8_t rhport)
bool cdcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
bool cdcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
bool dcd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep)
bool dcd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, uint16_t total_bytes) TU_ATTR_WEAK
void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr)
void dcd_edpt_close(uint8_t rhport, uint8_t ep_addr)
void dcd_enter_test_mode(uint8_t rhport, tusb_feature_test_mode_t test_selector)
void dcd_edpt_close_all(uint8_t rhport)
void dcd_int_disable(uint8_t rhport)
void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes)
void dcd_set_address(uint8_t rhport, uint8_t dev_addr)
bool dcd_init(uint8_t rhport, const tusb_rhport_init_t *rh_init)
bool dcd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size)
void dcd_int_enable(uint8_t rhport)
void dcd_remote_wakeup(uint8_t rhport)
void dcd_sof_enable(uint8_t rhport, bool en)
bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep)
void dfu_moded_init(void)
bool dfu_moded_deinit(void)
uint16_t dfu_moded_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
bool dfu_moded_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
void dfu_moded_reset(uint8_t rhport)
uint16_t dfu_rtd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
bool dfu_rtd_deinit(void)
bool dfu_rtd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
void dfu_rtd_reset(uint8_t rhport)
void netd_reset(uint8_t rhport)
uint16_t netd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
bool netd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
bool netd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
uint16_t const * tud_descriptor_string_cb(uint8_t index, uint16_t langid)
uint8_t const * tud_descriptor_device_cb(void)
uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
TU_ATTR_FAST_FUNC void audiod_sof_isr(uint8_t rhport, uint32_t frame_count)
bool audiod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
void audiod_reset(uint8_t rhport)
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 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 midid_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
uint16_t midid_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len)
void midid_reset(uint8_t rhport)
bool midid_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes)
void mscd_reset(uint8_t rhport)
bool mscd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
uint16_t mscd_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
static TU_ATTR_ALWAYS_INLINE bool osal_queue_empty(osal_queue_t qhdl)
static TU_ATTR_ALWAYS_INLINE osal_queue_t osal_queue_create(osal_queue_def_t *qdef)
StaticSemaphore_t osal_mutex_def_t
QueueHandle_t osal_queue_t
static TU_ATTR_ALWAYS_INLINE bool osal_queue_send(osal_queue_t qhdl, void const *data, bool in_isr)
static TU_ATTR_ALWAYS_INLINE bool osal_mutex_delete(osal_mutex_t mutex_hdl)
static TU_ATTR_ALWAYS_INLINE bool osal_queue_receive(osal_queue_t qhdl, void *data, uint32_t msec)
static TU_ATTR_ALWAYS_INLINE bool osal_queue_delete(osal_queue_t qhdl)
SemaphoreHandle_t osal_mutex_t
static TU_ATTR_ALWAYS_INLINE osal_mutex_t osal_mutex_create(osal_mutex_def_t *mdef)
AUDIO Channel Cluster Descriptor (4.1)
uint16_t wTotalLength
Total number of bytes returned for the class-specific AudioControl interface descriptor....
struct TU_ATTR_PACKED::@16::TU_ATTR_PACKED bmRequestType_bit
uint8_t bmAttributes
See: audio_clock_source_attribute_t.
uint8_t bInterfaceCount
Total number of associated interfaces.
uint8_t bDescriptorType
Descriptor Type. Value: TUSB_DESC_CS_INTERFACE.
uint8_t bRequest
Request type audio_cs_req_t.
uint8_t bInterfaceNumber
Number of this interface. Zero-based value identifying the index in the array of concurrent interface...
void(* sof)(uint8_t rhport, uint32_t frame_count)
void(* reset)(uint8_t rhport)
bool(* xfer_cb)(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
bool(* control_xfer_cb)(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
uint16_t(* open)(uint8_t rhport, tusb_desc_interface_t const *desc_intf, uint16_t max_len)
volatile uint8_t addressed
volatile uint8_t suspended
uint8_t remote_wakeup_support
volatile uint8_t connected
uint8_t ep2drv[CFG_TUD_ENDPPOINT_MAX][2]
tu_edpt_state_t ep_status[CFG_TUD_ENDPPOINT_MAX][2]
uint8_t itf2drv[CFG_TUD_INTERFACE_MAX]
volatile uint8_t sof_consumer
char const *const tu_str_speed[]
static TU_ATTR_ALWAYS_INLINE uint8_t tu_u16_low(uint16_t ui16)
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 bool tu_bit_test(uint32_t value, uint8_t pos)
char const *const tu_str_std_request[]
bool tu_edpt_validate(tusb_desc_endpoint_t const *desc_ep, tusb_speed_t speed)
bool tu_edpt_claim(tu_edpt_state_t *ep_state, osal_mutex_t mutex)
bool tu_edpt_release(tu_edpt_state_t *ep_state, osal_mutex_t mutex)
void tu_edpt_bind_driver(uint8_t ep2drv[][2], tusb_desc_interface_t const *p_desc, uint16_t desc_len, uint8_t driver_id)
@ TUSB_REQ_GET_DESCRIPTOR
@ TUSB_REQ_SET_CONFIGURATION
@ TUSB_REQ_GET_CONFIGURATION
tusb_speed_t
defined base on EHCI specs value for Endpoint Speed
static TU_ATTR_ALWAYS_INLINE uint8_t tu_edpt_number(uint8_t addr)
@ TUSB_FEATURE_TEST_FORCE_ENABLE
static TU_ATTR_ALWAYS_INLINE uint8_t tu_desc_len(void const *desc)
@ TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP
@ TUSB_DESC_CONFIG_ATT_SELF_POWERED
TU_ATTR_PACKED_BEGIN TU_ATTR_BIT_FIELD_ORDER_BEGIN struct TU_ATTR_PACKED tusb_desc_device_t
USB Device Descriptor.
@ TUSB_REQ_RCPT_INTERFACE
TU_ATTR_PACKED_END TU_ATTR_BIT_FIELD_ORDER_END static TU_ATTR_ALWAYS_INLINE tusb_dir_t tu_edpt_dir(uint8_t addr)
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)
tusb_desc_type_t
USB Descriptor Types.
@ TUSB_DESC_INTERFACE_ASSOCIATION
@ TUSB_DESC_CONFIGURATION
@ TUSB_DESC_DEVICE_QUALIFIER
@ TUSB_DESC_OTHER_SPEED_CONFIG
@ TUSB_REQ_FEATURE_EDPT_HALT
@ TUSB_REQ_FEATURE_REMOTE_WAKEUP
@ TUSB_REQ_FEATURE_TEST_MODE
struct TU_ATTR_PACKED tusb_desc_configuration_t
USB Configuration Descriptor.
tu_static osal_queue_t _usbd_q
static bool process_set_config(uint8_t rhport, uint8_t cfg_num)
tu_static char const *const _usbd_event_str[DCD_EVENT_COUNT]
void tud_sof_cb_enable(bool en)
bool tud_disconnect(void)
static bool process_test_mode_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
TU_ATTR_WEAK uint8_t const * tud_descriptor_device_qualifier_cb(void)
static void configuration_reset(uint8_t rhport)
void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
void usbd_control_set_request(tusb_control_request_t const *request)
void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr)
bool tud_deinit(uint8_t rhport)
tusb_speed_t tud_speed_get(void)
bool tud_remote_wakeup(void)
bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes)
void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr)
tu_static osal_mutex_def_t _ubsd_mutexdef
bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep)
static volatile uint8_t _usbd_queued_setup
tu_static uint8_t _usbd_rhport
bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr)
tu_static usbd_class_driver_t const * _app_driver
void usbd_driver_print_control_complete_name(usbd_control_xfer_cb_t callback)
void usbd_defer_func(osal_task_func_t func, void *param, bool in_isr)
tu_static osal_mutex_t _usbd_mutex
static bool invoke_class_control(uint8_t rhport, usbd_class_driver_t const *driver, tusb_control_request_t const *request)
TU_ATTR_WEAK uint8_t const * tud_descriptor_bos_cb(void)
void tud_task_ext(uint32_t timeout_ms, bool in_isr)
bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr)
tu_static usbd_class_driver_t const _usbd_driver[]
bool tud_rhport_init(uint8_t rhport, const tusb_rhport_init_t *rh_init)
static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const *p_request)
static TU_ATTR_ALWAYS_INLINE bool queue_event(dcd_event_t const *event, bool in_isr)
tu_static uint8_t _app_driver_count
bool tud_task_event_ready(void)
bool usbd_edpt_release(uint8_t rhport, uint8_t ep_addr)
TU_ATTR_WEAK uint8_t const * tud_descriptor_other_speed_configuration_cb(uint8_t index)
TU_ATTR_WEAK void tud_suspend_cb(bool remote_wakeup_en)
static bool process_control_request(uint8_t rhport, tusb_control_request_t const *p_request)
TU_ATTR_WEAK void tud_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr)
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)
TU_ATTR_WEAK void dcd_connect(uint8_t rhport)
tu_static usbd_device_t _usbd_dev
bool usbd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, uint16_t total_bytes)
TU_ATTR_FAST_FUNC void dcd_event_handler(dcd_event_t const *event, bool in_isr)
OSAL_QUEUE_DEF(usbd_int_set, _usbd_qdef, CFG_TUD_TASK_QUEUE_SZ, dcd_event_t)
void usbd_int_set(bool enabled)
TU_ATTR_WEAK void dcd_disconnect(uint8_t rhport)
void usbd_control_reset(void)
void usbd_control_set_complete_callback(usbd_control_xfer_cb_t fp)
void usbd_sof_enable(uint8_t rhport, sof_consumer_t consumer, bool en)
TU_ATTR_WEAK void tud_umount_cb(void)
TU_ATTR_WEAK bool dcd_deinit(uint8_t rhport)
bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr)
static void usbd_reset(uint8_t rhport)
bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep)
TU_ATTR_WEAK void tud_mount_cb(void)
static TU_ATTR_ALWAYS_INLINE usbd_class_driver_t const * get_driver(uint8_t drvid)
bool usbd_edpt_iso_alloc(uint8_t rhport, uint8_t ep_addr, uint16_t largest_packet_size)
bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t xferred_bytes)
TU_ATTR_WEAK bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
TU_ATTR_WEAK void tud_resume_cb(void)
TU_ATTR_WEAK void tud_sof_cb(uint32_t frame_count)
bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const *request, void *buffer, uint16_t len)
bool tud_control_status(uint8_t rhport, tusb_control_request_t const *request)
usbd_class_driver_t const * usbd_app_driver_get_cb(uint8_t *driver_count) TU_ATTR_WEAK
bool(* usbd_control_xfer_cb_t)(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
CFG_TUH_MEM_ALIGN tusb_control_request_t request
bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
void usbtmcd_init_cb(void)
uint16_t usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
bool usbtmcd_deinit(void)
void usbtmcd_reset_cb(uint8_t rhport)
bool usbtmcd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
bool vendord_deinit(void)
void vendord_reset(uint8_t rhport)
uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len)
bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
bool videod_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const *request)
void videod_reset(uint8_t rhport)
uint16_t videod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
bool videod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)