summaryrefslogtreecommitdiff
path: root/src/host
diff options
context:
space:
mode:
authorWini-Buh <[email protected]>2021-06-29 00:19:30 +0200
committerWini-Buh <[email protected]>2021-06-29 00:19:30 +0200
commitcb0f1d98db3c4bcfdcba231a78b1c18805483ad8 (patch)
treefa88fc9cb41a59a2089ea2e43d8feac2b8987474 /src/host
parent970da35fb303f1aa44e6279b14b80418f3250f60 (diff)
parent6e939de9d673979721b83b0b3ab724ebd652770c (diff)
Merge remote-tracking branch 'origin/master' into CCRX_Port
# Conflicts: # src/portable/renesas/usba/dcd_usba.c # src/tusb_option.h
Diffstat (limited to 'src/host')
-rw-r--r--src/host/usbh.c75
-rw-r--r--src/host/usbh_control.c4
2 files changed, 43 insertions, 36 deletions
diff --git a/src/host/usbh.c b/src/host/usbh.c
index 8ecc87488..bad1aa61a 100644
--- a/src/host/usbh.c
+++ b/src/host/usbh.c
@@ -795,6 +795,8 @@ static bool enum_get_addr0_device_desc_complete(uint8_t dev_addr, tusb_control_r
return false;
}
+ TU_ASSERT(tu_desc_type(_usbh_ctrl_buf) == TUSB_DESC_DEVICE);
+
// Reset device again before Set Address
TU_LOG2("Port reset \r\n");
@@ -938,7 +940,7 @@ static bool enum_get_config_desc_complete(uint8_t dev_addr, tusb_control_request
// Parse configuration & set up drivers
// Driver open aren't allowed to make any usb transfer yet
- parse_configuration_descriptor(dev_addr, (tusb_desc_configuration_t*) _usbh_ctrl_buf);
+ TU_ASSERT( parse_configuration_descriptor(dev_addr, (tusb_desc_configuration_t*) _usbh_ctrl_buf) );
TU_LOG2("Set Configuration = %d\r\n", CONFIG_NUM);
tusb_control_request_t const new_request =
@@ -988,49 +990,54 @@ static bool parse_configuration_descriptor(uint8_t dev_addr, tusb_desc_configura
// parse each interfaces
while( p_desc < _usbh_ctrl_buf + desc_cfg->wTotalLength )
{
- // skip until we see interface descriptor
- if ( TUSB_DESC_INTERFACE != tu_desc_type(p_desc) )
+ // TODO Do we need to use IAD
+ // tusb_desc_interface_assoc_t const * desc_itf_assoc = NULL;
+
+ // Class will always starts with Interface Association (if any) and then Interface descriptor
+ if ( TUSB_DESC_INTERFACE_ASSOCIATION == tu_desc_type(p_desc) )
{
- p_desc = tu_desc_next(p_desc); // skip the descriptor, increase by the descriptor's length
- }else
+ // desc_itf_assoc = (tusb_desc_interface_assoc_t const *) p_desc;
+ p_desc = tu_desc_next(p_desc);
+ }
+
+ TU_ASSERT( TUSB_DESC_INTERFACE == tu_desc_type(p_desc) );
+
+ tusb_desc_interface_t const* desc_itf = (tusb_desc_interface_t const*) p_desc;
+
+ // Check if class is supported
+ uint8_t drv_id;
+ for (drv_id = 0; drv_id < USBH_CLASS_DRIVER_COUNT; drv_id++)
{
- tusb_desc_interface_t const* desc_itf = (tusb_desc_interface_t const*) p_desc;
+ if ( usbh_class_drivers[drv_id].class_code == desc_itf->bInterfaceClass ) break;
+ }
- // Check if class is supported
- uint8_t drv_id;
- for (drv_id = 0; drv_id < USBH_CLASS_DRIVER_COUNT; drv_id++)
- {
- if ( usbh_class_drivers[drv_id].class_code == desc_itf->bInterfaceClass ) break;
- }
+ if( drv_id >= USBH_CLASS_DRIVER_COUNT )
+ {
+ // skip unsupported class
+ p_desc = tu_desc_next(p_desc);
+ }
+ else
+ {
+ usbh_class_driver_t const * driver = &usbh_class_drivers[drv_id];
- if( drv_id >= USBH_CLASS_DRIVER_COUNT )
+ // Interface number must not be used already TODO alternate interface
+ TU_ASSERT( dev->itf2drv[desc_itf->bInterfaceNumber] == 0xff );
+ dev->itf2drv[desc_itf->bInterfaceNumber] = drv_id;
+
+ if (desc_itf->bInterfaceClass == TUSB_CLASS_HUB && dev->hub_addr != 0)
{
- // skip unsupported class
+ // TODO Attach hub to Hub is not currently supported
+ // skip this interface
p_desc = tu_desc_next(p_desc);
}
else
{
- usbh_class_driver_t const * driver = &usbh_class_drivers[drv_id];
-
- // Interface number must not be used already TODO alternate interface
- TU_ASSERT( dev->itf2drv[desc_itf->bInterfaceNumber] == 0xff );
- dev->itf2drv[desc_itf->bInterfaceNumber] = drv_id;
+ TU_LOG2("%s open\r\n", driver->name);
- if (desc_itf->bInterfaceClass == TUSB_CLASS_HUB && dev->hub_addr != 0)
- {
- // TODO Attach hub to Hub is not currently supported
- // skip this interface
- p_desc = tu_desc_next(p_desc);
- }
- else
- {
- TU_LOG2("%s open\r\n", driver->name);
-
- uint16_t itf_len = 0;
- TU_ASSERT( driver->open(dev->rhport, dev_addr, desc_itf, &itf_len) );
- TU_ASSERT( itf_len >= sizeof(tusb_desc_interface_t) );
- p_desc += itf_len;
- }
+ uint16_t itf_len = 0;
+ TU_ASSERT( driver->open(dev->rhport, dev_addr, desc_itf, &itf_len) );
+ TU_ASSERT( itf_len >= sizeof(tusb_desc_interface_t) );
+ p_desc += itf_len;
}
}
}
diff --git a/src/host/usbh_control.c b/src/host/usbh_control.c
index 53413b6e5..0bdb66fb5 100644
--- a/src/host/usbh_control.c
+++ b/src/host/usbh_control.c
@@ -68,7 +68,7 @@ bool tuh_control_xfer (uint8_t dev_addr, tusb_control_request_t const* request,
_ctrl_xfer.stage = STAGE_SETUP;
_ctrl_xfer.complete_cb = complete_cb;
- TU_LOG2("Control Setup: ");
+ TU_LOG2("Control Setup (addr = %u): ", dev_addr);
TU_LOG2_VAR(request);
TU_LOG2("\r\n");
@@ -119,7 +119,7 @@ bool usbh_control_xfer_cb (uint8_t dev_addr, uint8_t ep_addr, xfer_result_t resu
if (request->wLength)
{
- TU_LOG2("Control data:\r\n");
+ TU_LOG2("Control data (addr = %u):\r\n", dev_addr);
TU_LOG2_MEM(_ctrl_xfer.buffer, request->wLength, 2);
}