29#if (CFG_TUH_ENABLED && CFG_TUH_HUB)
38#define TU_LOG_DRV(...) TU_LOG(HUB_DEBUG, __VA_ARGS__)
55CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN
static uint8_t
_hub_buffer[
sizeof(descriptor_hub_desc_t)];
63#if CFG_TUSB_DEBUG >= 2
113 TU_LOG2(
"HUB Clear Feature: %s, addr = %u port = %u\r\n",
_hub_feature_str[feature], hub_addr, hub_port);
145 TU_LOG2(
"HUB Set Feature: %s, addr = %u port = %u\r\n",
_hub_feature_str[feature], hub_addr, hub_port);
177 TU_LOG2(
"HUB Get Port Status: addr = %u port = %u\r\n", hub_addr, hub_port);
206 TU_ASSERT(drv_len <= max_len);
226 TU_VERIFY(
dev_addr > CFG_TUH_DEVICE_MAX, );
230 TU_LOG_DRV(
" HUB close addr = %d\r\n",
dev_addr);
252 TU_ASSERT(itf_num == p_hub->
itf_num);
266 .wLength =
sizeof(descriptor_hub_desc_t)
292 descriptor_hub_desc_t
const* desc_hub = (descriptor_hub_desc_t
const*)
_hub_buffer;
298 uint8_t
const hub_port = 1;
319 uint8_t
const hub_port = (uint8_t) (
xfer->setup->wIndex + 1);
335 (void) xferred_bytes;
342 TU_LOG2(
" Hub Status Change = 0x%02X\r\n", status_change);
344 if ( status_change == 0 ) {
360 for (uint8_t port=1; port <= p_hub->
port_count; port++) {
387 uint8_t
const port_num = (uint8_t) tu_le16toh(
xfer->setup->wIndex);
388 TU_ASSERT(port_num == 0 , );
394 TU_LOG2(
"HUB Local Power Change, addr = %u\r\n",
daddr);
399 TU_LOG1(
"HUB Over Current, addr = %u\r\n",
daddr);
410 uint8_t
const port_num = (uint8_t) tu_le16toh(
xfer->setup->wIndex);
457 uint8_t
const port_num = (uint8_t) tu_le16toh(
xfer->setup->wIndex);
469 .event_id = HCD_EVENT_DEVICE_REMOVE,
487 uint8_t
const port_num = (uint8_t) tu_le16toh(
xfer->setup->wIndex);
493 .event_id = HCD_EVENT_DEVICE_ATTACH,
xfer_td_t xfer[EP_CBI_COUNT+1][2]
bool hub_port_get_status(uint8_t hub_addr, uint8_t hub_port, void *resp, tuh_xfer_cb_t complete_cb, uintptr_t user_data)
void hub_close(uint8_t dev_addr)
bool hub_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, uint16_t max_len)
bool hub_port_clear_feature(uint8_t hub_addr, uint8_t hub_port, uint8_t feature, tuh_xfer_cb_t complete_cb, uintptr_t user_data)
bool hub_xfer_cb(uint8_t dev_addr, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
bool hub_edpt_status_xfer(uint8_t dev_addr)
bool hub_port_set_feature(uint8_t hub_addr, uint8_t hub_port, uint8_t feature, tuh_xfer_cb_t complete_cb, uintptr_t user_data)
bool hub_set_config(uint8_t dev_addr, uint8_t itf_num)
static TU_ATTR_ALWAYS_INLINE bool hub_port_reset(uint8_t hub_addr, uint8_t hub_port, tuh_xfer_cb_t complete_cb, uintptr_t user_data)
@ HUB_FEATURE_HUB_LOCAL_POWER_CHANGE
@ HUB_FEATURE_HUB_OVER_CURRENT_CHANGE
@ HUB_REQUEST_CLEAR_FEATURE
@ HUB_REQUEST_SET_FEATURE
@ HUB_REQUEST_GET_DESCRIPTOR
@ HUB_FEATURE_PORT_OVER_CURRENT
@ HUB_FEATURE_PORT_RESET_CHANGE
@ HUB_FEATURE_PORT_SUSPEND_CHANGE
@ HUB_FEATURE_PORT_LOW_SPEED
@ HUB_FEATURE_PORT_CONNECTION
@ HUB_FEATURE_PORT_ENABLE
@ HUB_FEATURE_PORT_ENABLE_CHANGE
@ HUB_FEATURE_PORT_CONNECTION_CHANGE
@ HUB_FEATURE_PORT_SUSPEND
@ HUB_FEATURE_PORT_OVER_CURRENT_CHANGE
@ HUB_FEATURE_PORT_INDICATOR
void hcd_event_handler(hcd_event_t const *event, bool in_isr)
static void hub_port_get_status_complete(tuh_xfer_t *xfer)
static void hub_clear_feature_complete_stub(tuh_xfer_t *xfer)
static void connection_port_reset_complete(tuh_xfer_t *xfer)
static void connection_clear_conn_change_complete(tuh_xfer_t *xfer)
static void config_port_power_complete(tuh_xfer_t *xfer)
static void hub_get_status_complete(tuh_xfer_t *xfer)
static TU_ATTR_ALWAYS_INLINE hub_interface_t * get_itf(uint8_t dev_addr)
static CFG_TUH_MEM_SECTION hub_interface_t hub_data[CFG_TUH_HUB]
static char const *const _hub_feature_str[]
static void config_set_port_power(tuh_xfer_t *xfer)
CFG_TUH_MEM_SECTION static CFG_TUH_MEM_ALIGN uint8_t _hub_buffer[sizeof(descriptor_hub_desc_t)]
AUDIO Channel Cluster Descriptor (4.1)
struct TU_ATTR_PACKED::@16::TU_ATTR_PACKED bmRequestType_bit
uint8_t bmAttributes
See: audio_clock_source_attribute_t.
uint8_t bDescriptorType
Descriptor Type. Value: TUSB_DESC_CS_INTERFACE.
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 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...
CFG_TUH_MEM_ALIGN uint8_t status_change
CFG_TUH_MEM_ALIGN hub_status_response_t hub_status
CFG_TUH_MEM_ALIGN hub_port_status_response_t port_status
union hub_port_status_response_t::@93 status
union hub_port_status_response_t::@93 change
union hub_status_response_t::@91 change
uint16_t local_power_source
static TU_ATTR_ALWAYS_INLINE bool tu_bit_test(uint32_t value, uint8_t pos)
struct TU_ATTR_PACKED tusb_desc_interface_t
USB Interface Descriptor.
static TU_ATTR_ALWAYS_INLINE uint8_t const * tu_desc_next(void const *desc)
void usbh_driver_set_config_complete(uint8_t dev_addr, uint8_t itf_num)
CFG_TUH_MEM_ALIGN tusb_control_request_t request
bool tuh_control_xfer(tuh_xfer_t *xfer)
tuh_xfer_cb_t complete_cb
bool tuh_edpt_open(uint8_t dev_addr, tusb_desc_endpoint_t const *desc_ep)
uint8_t usbh_get_rhport(uint8_t dev_addr)
void(* tuh_xfer_cb_t)(tuh_xfer_t *xfer)
static TU_ATTR_ALWAYS_INLINE bool usbh_edpt_xfer(uint8_t dev_addr, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes)