summaryrefslogtreecommitdiff
path: root/tinyusb
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-09-30 16:59:41 +0700
committerhathach <[email protected]>2013-09-30 16:59:41 +0700
commit0f05d27ac9ecf63a6e4ad6b3a91ec4ad536d8dfb (patch)
tree41d9ac8fa94f828cd993f8d6fa425c2932367057 /tinyusb
parent9ecaec67b3a7ed9f6565840941c4b4cdb599fdba (diff)
refractor hub
Diffstat (limited to 'tinyusb')
-rw-r--r--tinyusb/host/hub.c55
1 files changed, 34 insertions, 21 deletions
diff --git a/tinyusb/host/hub.c b/tinyusb/host/hub.c
index 9235293cd..fc87ba141 100644
--- a/tinyusb/host/hub.c
+++ b/tinyusb/host/hub.c
@@ -98,6 +98,39 @@ tusb_error_t hub_port_clear_feature_subtask(uint8_t feature)
OSAL_SUBTASK_END
}
+tusb_error_t hub_port_reset_subtask()
+{
+ tusb_error_t error;
+
+ OSAL_SUBTASK_BEGIN
+
+ //------------- Set Port Reset -------------//
+ OSAL_SUBTASK_INVOKED_AND_WAIT(
+ usbh_control_xfer_subtask( usbh_devices[0].hub_addr, bm_request_type(TUSB_DIR_HOST_TO_DEV, TUSB_REQUEST_TYPE_CLASS, TUSB_REQUEST_RECIPIENT_OTHER),
+ HUB_REQUEST_SET_FEATURE, HUB_FEATURE_PORT_RESET, usbh_devices[0].hub_port,
+ 0, NULL ),
+ error
+ );
+ SUBTASK_ASSERT_STATUS( error );
+
+ osal_task_delay(200); // TODO Hub wait for Status Endpoint on Reset Change
+
+ //------------- Get Port Status to check if port is enabled, powered and reset_change -------------//
+ OSAL_SUBTASK_INVOKED_AND_WAIT(
+ usbh_control_xfer_subtask( usbh_devices[0].hub_addr, bm_request_type(TUSB_DIR_DEV_TO_HOST, TUSB_REQUEST_TYPE_CLASS, TUSB_REQUEST_RECIPIENT_OTHER),
+ HUB_REQUEST_GET_STATUS, 0, usbh_devices[0].hub_port,
+ 4, hub_enum_buffer ),
+ error
+ );
+ SUBTASK_ASSERT_STATUS( error );
+
+ hub_port_status_response_t * p_port_status = (hub_port_status_response_t *) hub_enum_buffer;
+ SUBTASK_ASSERT ( p_port_status->status_change.reset && p_port_status->status_current.connect_status &&
+ p_port_status->status_current.port_power && p_port_status->status_current.port_enable);
+
+ OSAL_SUBTASK_END
+}
+
tusb_error_t hub_enumerate_subtask(void)
{
tusb_error_t error;
@@ -131,30 +164,10 @@ tusb_error_t hub_enumerate_subtask(void)
//--------------------------------------------------------------------+
// PORT RESET & WAIT FOR STATUS ENDPOINT & GET STATUS & CLEAR RESET CHANGE
//--------------------------------------------------------------------+
- //------------- Set Port Reset -------------//
- OSAL_SUBTASK_INVOKED_AND_WAIT(
- usbh_control_xfer_subtask( usbh_devices[0].hub_addr, bm_request_type(TUSB_DIR_HOST_TO_DEV, TUSB_REQUEST_TYPE_CLASS, TUSB_REQUEST_RECIPIENT_OTHER),
- HUB_REQUEST_SET_FEATURE, HUB_FEATURE_PORT_RESET, usbh_devices[0].hub_port,
- 0, NULL ),
- error
- );
- SUBTASK_ASSERT_STATUS( error );
-
- osal_task_delay(200); // TODO Hub wait for Status Endpoint on Reset Change
-
- //------------- Get Port Status to check if port is enabled, powered and reset_change -------------//
- OSAL_SUBTASK_INVOKED_AND_WAIT(
- usbh_control_xfer_subtask( usbh_devices[0].hub_addr, bm_request_type(TUSB_DIR_DEV_TO_HOST, TUSB_REQUEST_TYPE_CLASS, TUSB_REQUEST_RECIPIENT_OTHER),
- HUB_REQUEST_GET_STATUS, 0, usbh_devices[0].hub_port,
- 4, hub_enum_buffer ),
- error
- );
+ OSAL_SUBTASK_INVOKED_AND_WAIT ( hub_port_reset_subtask(), error );
SUBTASK_ASSERT_STATUS( error );
p_port_status = (hub_port_status_response_t *) hub_enum_buffer;
- SUBTASK_ASSERT ( p_port_status->status_change.reset && p_port_status->status_current.connect_status &&
- p_port_status->status_current.port_power && p_port_status->status_current.port_enable);
-
usbh_devices[0].speed = (p_port_status->status_current.high_speed_device_attached) ? TUSB_SPEED_HIGH :
(p_port_status->status_current.low_speed_device_attached ) ? TUSB_SPEED_LOW : TUSB_SPEED_FULL;