mirror of
https://github.com/gdsports/USBHost_t36
synced 2024-11-28 20:02:14 -05:00
Disallow claim of USBDriver with non-NULL device, even if on available_drivers list
This commit is contained in:
parent
c2adf01769
commit
1259027ebc
@ -372,7 +372,10 @@ protected:
|
|||||||
|
|
||||||
// The device this object instance is bound to. In words, this
|
// The device this object instance is bound to. In words, this
|
||||||
// is the specific device this driver is using. When not bound
|
// is the specific device this driver is using. When not bound
|
||||||
// to any device, this must be NULL.
|
// to any device, this must be NULL. Drivers may set this to
|
||||||
|
// any non-NULL value if they are in a state where they do not
|
||||||
|
// wish to claim any device or interface (eg, if getting data
|
||||||
|
// from the HID parser).
|
||||||
Device_t *device;
|
Device_t *device;
|
||||||
|
|
||||||
friend class USBHost;
|
friend class USBHost;
|
||||||
|
@ -292,6 +292,7 @@ void USBHost::claim_drivers(Device_t *dev)
|
|||||||
|
|
||||||
// first check if any driver wishes to claim the entire device
|
// first check if any driver wishes to claim the entire device
|
||||||
for (driver=available_drivers; driver != NULL; driver = driver->next) {
|
for (driver=available_drivers; driver != NULL; driver = driver->next) {
|
||||||
|
if (driver->device != NULL) continue;
|
||||||
if (driver->claim(dev, 0, enumbuf + 9, enumlen - 9)) {
|
if (driver->claim(dev, 0, enumbuf + 9, enumlen - 9)) {
|
||||||
if (prev) {
|
if (prev) {
|
||||||
prev->next = driver->next;
|
prev->next = driver->next;
|
||||||
@ -329,6 +330,7 @@ void USBHost::claim_drivers(Device_t *dev)
|
|||||||
// found an interface, ask available drivers if they want it
|
// found an interface, ask available drivers if they want it
|
||||||
prev = NULL;
|
prev = NULL;
|
||||||
for (driver=available_drivers; driver != NULL; driver = driver->next) {
|
for (driver=available_drivers; driver != NULL; driver = driver->next) {
|
||||||
|
if (driver->device != NULL) continue;
|
||||||
// TODO: should parse ahead and give claim()
|
// TODO: should parse ahead and give claim()
|
||||||
// an accurate length. (end - p) is the rest
|
// an accurate length. (end - p) is the rest
|
||||||
// of ALL descriptors, likely more interfaces
|
// of ALL descriptors, likely more interfaces
|
||||||
@ -402,6 +404,7 @@ void USBHost::disconnect_Device(Device_t *dev)
|
|||||||
for (USBDriver *p = dev->drivers; p; ) {
|
for (USBDriver *p = dev->drivers; p; ) {
|
||||||
println("disconnect driver ", (uint32_t)p, HEX);
|
println("disconnect driver ", (uint32_t)p, HEX);
|
||||||
p->disconnect();
|
p->disconnect();
|
||||||
|
p->device = NULL;
|
||||||
USBDriver *next = p->next;
|
USBDriver *next = p->next;
|
||||||
p->next = available_drivers;
|
p->next = available_drivers;
|
||||||
available_drivers = p;
|
available_drivers = p;
|
||||||
|
Loading…
Reference in New Issue
Block a user