|
|
|
|
|
|
|
|
port_doing_reset = port; |
|
|
port_doing_reset = port; |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
|
|
|
stop_debounce_timer(port); |
|
|
state = PORT_DISCONNECT; |
|
|
state = PORT_DISCONNECT; |
|
|
} |
|
|
} |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
else if (status & 0x0400) speed = 2; |
|
|
else if (status & 0x0400) speed = 2; |
|
|
port_doing_reset_speed = speed; |
|
|
port_doing_reset_speed = speed; |
|
|
resettimer.start(25000); |
|
|
resettimer.start(25000); |
|
|
|
|
|
} else if (!(status & 0x0001)) { |
|
|
|
|
|
send_clearstatus_connect(port); |
|
|
|
|
|
USBHub::reset_busy = false; |
|
|
|
|
|
state = PORT_DISCONNECT; |
|
|
} |
|
|
} |
|
|
break; |
|
|
break; |
|
|
case PORT_RECOVERY: |
|
|
case PORT_RECOVERY: |
|
|
|
|
|
if (!(status & 0x0001)) { |
|
|
|
|
|
send_clearstatus_connect(port); |
|
|
|
|
|
USBHub::reset_busy = false; |
|
|
|
|
|
state = PORT_DISCONNECT; |
|
|
|
|
|
} |
|
|
break; |
|
|
break; |
|
|
case PORT_ACTIVE: |
|
|
case PORT_ACTIVE: |
|
|
|
|
|
if (!(status & 0x0001)) { |
|
|
|
|
|
disconnect_Device(devicelist[port-1]); |
|
|
|
|
|
devicelist[port-1] = NULL; |
|
|
|
|
|
send_clearstatus_connect(port); |
|
|
|
|
|
state = PORT_DISCONNECT; |
|
|
|
|
|
} |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// TODO: testing only!!! |
|
|
// 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) |
|
|
void USBHub::start_debounce_timer(uint32_t port) |