Handle disconnect device from hub

This commit is contained in:
PaulStoffregen 2017-03-03 06:04:02 -08:00
parent 920f71e768
commit 98701a268f
1 changed files with 18 additions and 2 deletions

20
hub.cpp
View File

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