diff options
| author | Ha Thach <[email protected]> | 2023-06-13 17:32:55 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-06-13 17:32:55 +0700 |
| commit | 365c4169a5c996ff5dfd0329e2c9c85baf47c3e3 (patch) | |
| tree | f1c98b5040e64a31c5962f8f5ed0df61b590aece | |
| parent | bbc76e77779a88fddcfc4d38a406edff2b4d09fb (diff) | |
| parent | 9593ab7acc528814faf86c652b2a22209938128d (diff) | |
Merge pull request #2107 from hathach/fix-usbh-enum-issue
fix usbh issue when device genreate multiple attach/detach/attach when plugging in
| -rw-r--r-- | src/host/usbh.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/host/usbh.c b/src/host/usbh.c index 98e959a12..f3e9d3858 100644 --- a/src/host/usbh.c +++ b/src/host/usbh.c @@ -411,7 +411,14 @@ void tuh_task_ext(uint32_t timeout_ms, bool in_isr) if ( _dev0.enumerating ) { TU_LOG_USBH("[%u:] USBH Defer Attach until current enumeration complete\r\n", event.rhport); + + bool is_empty = osal_queue_empty(_usbh_q); osal_queue_send(_usbh_q, &event, in_isr); + + if (is_empty) { + // Exit if this is the only event in the queue, otherwise we may loop forever + return; + } }else { TU_LOG_USBH("[%u:] USBH DEVICE ATTACH\r\n", event.rhport); @@ -1461,7 +1468,10 @@ static bool enum_new_device(hcd_event_t* event) hcd_port_reset_end( _dev0.rhport); // device unplugged while delaying - if ( !hcd_port_connect_status(_dev0.rhport) ) return true; + if ( !hcd_port_connect_status(_dev0.rhport) ) { + enum_full_complete(); + return true; + } _dev0.speed = hcd_port_speed_get(_dev0.rhport ); TU_LOG_USBH("%s Speed\r\n", tu_str_speed[_dev0.speed]); |
