diff options
| author | hathach <[email protected]> | 2013-12-19 13:55:22 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2013-12-19 13:55:22 +0700 |
| commit | d020c2f609750fd82a31cb91f3e35f3dd87d2ef7 (patch) | |
| tree | f1ea58956058a92b80b74d3b890352c10dd61e57 /tinyusb/host/usbh.c | |
| parent | cfcef0558a5b8ab797408f998074fa0ba6703ece (diff) | |
remove immediately reset when device plug.
check to make sure device is still plug after initial delay (200ms) before reset
remove blocking waiting when reset in ehci.c
Diffstat (limited to 'tinyusb/host/usbh.c')
| -rw-r--r-- | tinyusb/host/usbh.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c index 7b358e2f2..de9e15164 100644 --- a/tinyusb/host/usbh.c +++ b/tinyusb/host/usbh.c @@ -370,14 +370,19 @@ tusb_error_t enumeration_body_subtask(void) usbh_devices[0].hub_port = enum_entry.hub_port; usbh_devices[0].state = TUSB_DEVICE_STATE_UNPLUG; + //------------- connected/disconnected directly with roothub -------------// if ( usbh_devices[0].hub_addr == 0) - { // connected/disconnected directly with roothub + { if( hcd_port_connect_status(usbh_devices[0].core_id) ) { // connection event - osal_task_delay(200); // wait for port reset is complete & device is stable -// hcd_port_reset( usbh_devices[0].core_id ); // port must be reset to have correct speed operation -// osal_task_delay(50); // TODO reset is recommended to last 50 ms (NXP EHCI passes this) - usbh_devices[0].speed = hcd_port_speed_get( usbh_devices[0].core_id ); + osal_task_delay(200); // wait until device is stable + + if ( !hcd_port_connect_status(usbh_devices[0].core_id) ) SUBTASK_EXIT(TUSB_ERROR_NONE); // exit if device unplugged while delaying + + hcd_port_reset( usbh_devices[0].core_id ); // port must be reset to have correct speed operation + osal_task_delay(50); // USB Specs: reset is recommended to last 50 ms + + usbh_devices[0].speed = hcd_port_speed_get( usbh_devices[0].core_id ); } else { // disconnection event @@ -386,8 +391,9 @@ tusb_error_t enumeration_body_subtask(void) } } #if TUSB_CFG_HOST_HUB + //------------- connected/disconnected via hub -------------// else - { // connected/disconnected via hub + { //------------- Get Port Status -------------// 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), |
