|
|
@@ -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) |