From 26fa6f2e341c14625af20683b71bdf5dbe1812f0 Mon Sep 17 00:00:00 2001 From: PaulStoffregen Date: Sun, 12 Feb 2017 00:22:50 -0800 Subject: [PATCH] Use linked list for device's drivers, not fixed size array --- USBHost.h | 3 ++- enumeration.cpp | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/USBHost.h b/USBHost.h index ae28786..184de5d 100644 --- a/USBHost.h +++ b/USBHost.h @@ -63,7 +63,8 @@ struct Device_struct { Pipe_t *control_pipe; Device_t *next; setup_t setup; - USBHostDriver *driver[6]; + //USBHostDriver *driver[6]; + USBHostDriver *drivers; uint8_t speed; // 0=12, 1=1.5, 2=480 Mbit/sec uint8_t address; uint8_t hub_address; diff --git a/enumeration.cpp b/enumeration.cpp index 12b29c9..8740bfb 100644 --- a/enumeration.cpp +++ b/enumeration.cpp @@ -219,9 +219,8 @@ void USBHost::enumeration(const Transfer_t *transfer) return; case 15: // control transfers for other stuff? // TODO: handle other standard control: set/clear feature, etc - for (unsigned int i=0; i < 6; i++) { - if (dev->driver[i] == NULL) break; // no more drivers - if (dev->driver[i]->control_callback(transfer)) { + for (USBHostDriver *d = dev->drivers; d != NULL; d = d->next) { + if (d->control_callback(transfer)) { // this driver processed the control transfer reply return; } @@ -245,7 +244,7 @@ static void claim_drivers(Device_t *dev) available_drivers = driver->next; } driver->next = NULL; - dev->driver[0] = driver; + dev->drivers = driver; return; } prev = driver;