@@ -1370,6 +1370,7 @@ enum {
1370
1370
ENUM_HUB_RERSET ,
1371
1371
ENUM_HUB_GET_STATUS_AFTER_RESET ,
1372
1372
ENUM_HUB_CLEAR_RESET ,
1373
+ ENUM_HUB_CLEAR_RESET_COMPLETE ,
1373
1374
1374
1375
ENUM_ADDR0_DEVICE_DESC ,
1375
1376
ENUM_SET_ADDR ,
@@ -1511,19 +1512,33 @@ static void process_enumeration(tuh_xfer_t* xfer) {
1511
1512
case ENUM_HUB_CLEAR_RESET : {
1512
1513
hub_port_status_response_t port_status ;
1513
1514
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 ;
1516
1515
1517
1516
if (port_status .change .reset ) {
1518
1517
// 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 ),);
1520
1519
} else {
1521
1520
// 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 ),);
1523
1522
}
1524
1523
1525
1524
break ;
1526
1525
}
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
+ }
1527
1542
#endif
1528
1543
1529
1544
case ENUM_ADDR0_DEVICE_DESC : {
0 commit comments