@@ -1370,6 +1370,7 @@ enum {
13701370 ENUM_HUB_RERSET ,
13711371 ENUM_HUB_GET_STATUS_AFTER_RESET ,
13721372 ENUM_HUB_CLEAR_RESET ,
1373+ ENUM_HUB_CLEAR_RESET_COMPLETE ,
13731374
13741375 ENUM_ADDR0_DEVICE_DESC ,
13751376 ENUM_SET_ADDR ,
@@ -1511,19 +1512,33 @@ static void process_enumeration(tuh_xfer_t* xfer) {
15111512 case ENUM_HUB_CLEAR_RESET : {
15121513 hub_port_status_response_t port_status ;
15131514 hub_port_get_status_local (dev0_bus -> hub_addr , dev0_bus -> hub_port , & port_status );
1514- dev0_bus -> speed = (port_status .status .high_speed ) ? TUSB_SPEED_HIGH :
1515- (port_status .status .low_speed ) ? TUSB_SPEED_LOW : TUSB_SPEED_FULL ;
15161515
15171516 if (port_status .change .reset ) {
15181517 // Acknowledge Port Reset Change
1519- TU_ASSERT (hub_port_clear_reset_change (dev0_bus -> hub_addr , dev0_bus -> hub_port , process_enumeration , ENUM_ADDR0_DEVICE_DESC ),);
1518+ TU_ASSERT (hub_port_clear_reset_change (dev0_bus -> hub_addr , dev0_bus -> hub_port , process_enumeration , ENUM_HUB_CLEAR_RESET_COMPLETE ),);
15201519 } else {
15211520 // maybe retry if reset change not set but we need timeout to prevent infinite loop
1522- // TU_ASSERT(hub_port_get_status(dev0_bus->hub_addr, dev0_bus->hub_port, NULL, process_enumeration, ENUM_HUB_CLEAR_RESET ),);
1521+ // TU_ASSERT(hub_port_get_status(dev0_bus->hub_addr, dev0_bus->hub_port, NULL, process_enumeration, ENUM_HUB_CLEAR_RESET_COMPLETE ),);
15231522 }
15241523
15251524 break ;
15261525 }
1526+
1527+ case ENUM_HUB_CLEAR_RESET_COMPLETE : {
1528+ hub_port_status_response_t port_status ;
1529+ hub_port_get_status_local (dev0_bus -> hub_addr , dev0_bus -> hub_port , & port_status );
1530+
1531+ if (!port_status .status .connection ) {
1532+ TU_LOG_USBH ("Device unplugged from hub (not addressed yet)\r\n" );
1533+ enum_full_complete ();
1534+ return ;
1535+ }
1536+
1537+ dev0_bus -> speed = (port_status .status .high_speed ) ? TUSB_SPEED_HIGH :
1538+ (port_status .status .low_speed ) ? TUSB_SPEED_LOW : TUSB_SPEED_FULL ;
1539+
1540+ TU_ATTR_FALLTHROUGH ;
1541+ }
15271542 #endif
15281543
15291544 case ENUM_ADDR0_DEVICE_DESC : {
0 commit comments