summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2023-06-13 17:32:55 +0700
committerGitHub <[email protected]>2023-06-13 17:32:55 +0700
commit365c4169a5c996ff5dfd0329e2c9c85baf47c3e3 (patch)
treef1c98b5040e64a31c5962f8f5ed0df61b590aece
parentbbc76e77779a88fddcfc4d38a406edff2b4d09fb (diff)
parent9593ab7acc528814faf86c652b2a22209938128d (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.c12
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]);