Browse Source

Disallow claim of USBDriver with non-NULL device, even if on available_drivers list

main
PaulStoffregen 7 years ago
parent
commit
1259027ebc
2 changed files with 7 additions and 1 deletions
  1. +4
    -1
      USBHost_t36.h
  2. +3
    -0
      enumeration.cpp

+ 4
- 1
USBHost_t36.h View File

@@ -372,7 +372,10 @@ protected:

// The device this object instance is bound to. In words, this
// 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;

friend class USBHost;

+ 3
- 0
enumeration.cpp View File

@@ -292,6 +292,7 @@ void USBHost::claim_drivers(Device_t *dev)

// first check if any driver wishes to claim the entire device
for (driver=available_drivers; driver != NULL; driver = driver->next) {
if (driver->device != NULL) continue;
if (driver->claim(dev, 0, enumbuf + 9, enumlen - 9)) {
if (prev) {
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
prev = NULL;
for (driver=available_drivers; driver != NULL; driver = driver->next) {
if (driver->device != NULL) continue;
// TODO: should parse ahead and give claim()
// an accurate length. (end - p) is the rest
// of ALL descriptors, likely more interfaces
@@ -402,6 +404,7 @@ void USBHost::disconnect_Device(Device_t *dev)
for (USBDriver *p = dev->drivers; p; ) {
println("disconnect driver ", (uint32_t)p, HEX);
p->disconnect();
p->device = NULL;
USBDriver *next = p->next;
p->next = available_drivers;
available_drivers = p;

Loading…
Cancel
Save