diff --git a/hub.cpp b/hub.cpp index d97a4aa..e9d3bb6 100644 --- a/hub.cpp +++ b/hub.cpp @@ -362,6 +362,7 @@ void USBHub::new_port_status(uint32_t port, uint32_t status) port_doing_reset = port; } } else { + stop_debounce_timer(port); state = PORT_DISCONNECT; } break; @@ -375,11 +376,26 @@ void USBHub::new_port_status(uint32_t port, uint32_t status) else if (status & 0x0400) speed = 2; port_doing_reset_speed = speed; resettimer.start(25000); + } else if (!(status & 0x0001)) { + send_clearstatus_connect(port); + USBHub::reset_busy = false; + state = PORT_DISCONNECT; } break; case PORT_RECOVERY: + if (!(status & 0x0001)) { + send_clearstatus_connect(port); + USBHub::reset_busy = false; + state = PORT_DISCONNECT; + } break; case PORT_ACTIVE: + if (!(status & 0x0001)) { + disconnect_Device(devicelist[port-1]); + devicelist[port-1] = NULL; + send_clearstatus_connect(port); + state = PORT_DISCONNECT; + } break; } } @@ -428,8 +444,8 @@ void USBHub::timer_event(USBDriverTimer *timer) } // TODO: testing only!!! - static uint32_t count=0; - if (++count > 36) while (1) ; // stop here + //static uint32_t count=0; + //if (++count > 36) while (1) ; // stop here } void USBHub::start_debounce_timer(uint32_t port)