From 30a5b024c3485ba4de1271ffc3eedbf14c55bf71 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 31 Jul 2011 18:09:42 +0200 Subject: USBD: Add support for up to 4 configurations per device This is implemented by using a pointer array for the config descriptors --- at91lib/usb/device/ccid/cciddriver.c | 8 ++++---- at91lib/usb/device/cdc-serial/CDCDSerialDriverDescriptors.c | 8 ++++---- at91lib/usb/device/composite/COMPOSITEDDriverDescriptors.c | 8 ++++---- at91lib/usb/device/core/USBDDriver.c | 8 ++++---- at91lib/usb/device/core/USBDDriverDescriptors.h | 10 ++++++---- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/at91lib/usb/device/ccid/cciddriver.c b/at91lib/usb/device/ccid/cciddriver.c index 989345e..3db9065 100644 --- a/at91lib/usb/device/ccid/cciddriver.c +++ b/at91lib/usb/device/ccid/cciddriver.c @@ -597,14 +597,14 @@ static const unsigned char *stringDescriptors[] = { const USBDDriverDescriptors ccidDriverDescriptors = { &deviceDescriptor, // FS - (USBConfigurationDescriptor *) &configurationDescriptorsFS, + { (USBConfigurationDescriptor *) &configurationDescriptorsFS }, #ifdef BOARD_USB_UDPHS (USBDeviceQualifierDescriptor *) &deviceQualifierDescriptor, // FS - (USBConfigurationDescriptor *) &sOtherSpeedConfigurationFS, + { (USBConfigurationDescriptor *) &sOtherSpeedConfigurationFS }, &deviceDescriptor, // HS - (USBConfigurationDescriptor *) &configurationDescriptorsHS, + { (USBConfigurationDescriptor *) &configurationDescriptorsHS }, (USBDeviceQualifierDescriptor *) &deviceQualifierDescriptor, // HS - (USBConfigurationDescriptor *) &sOtherSpeedConfigurationHS, + { (USBConfigurationDescriptor *) &sOtherSpeedConfigurationHS }, #else 0, // No qualifier descriptor FS 0, // No other-speed configuration FS diff --git a/at91lib/usb/device/cdc-serial/CDCDSerialDriverDescriptors.c b/at91lib/usb/device/cdc-serial/CDCDSerialDriverDescriptors.c index 349380c..dd3f38e 100644 --- a/at91lib/usb/device/cdc-serial/CDCDSerialDriverDescriptors.c +++ b/at91lib/usb/device/cdc-serial/CDCDSerialDriverDescriptors.c @@ -608,14 +608,14 @@ const unsigned char *stringDescriptors[] = { USBDDriverDescriptors cdcdSerialDriverDescriptors = { &deviceDescriptor, - (USBConfigurationDescriptor *) &(configurationDescriptors), + { (USBConfigurationDescriptor *) &(configurationDescriptors) }, #ifdef BOARD_USB_UDPHS &qualifierDescriptor, - (USBConfigurationDescriptor *) &(otherSpeedDescriptorsFS), + { (USBConfigurationDescriptor *) &(otherSpeedDescriptorsFS) }, &deviceDescriptor, - (USBConfigurationDescriptor *) &(configurationDescriptorsHS), + { (USBConfigurationDescriptor *) &(configurationDescriptorsHS) }, &qualifierDescriptor, - (USBConfigurationDescriptor *) &(otherSpeedDescriptorsHS), + { (USBConfigurationDescriptor *) &(otherSpeedDescriptorsHS) }, #else 0, // No full-speed device qualifier descriptor 0, // No full-speed other speed configuration diff --git a/at91lib/usb/device/composite/COMPOSITEDDriverDescriptors.c b/at91lib/usb/device/composite/COMPOSITEDDriverDescriptors.c index 1769769..3229385 100644 --- a/at91lib/usb/device/composite/COMPOSITEDDriverDescriptors.c +++ b/at91lib/usb/device/composite/COMPOSITEDDriverDescriptors.c @@ -884,14 +884,14 @@ const unsigned char *stringDescriptors[] = { const USBDDriverDescriptors compositedDriverDescriptors = { &deviceDescriptor, - (const USBConfigurationDescriptor *) &configurationDescriptors, + { (const USBConfigurationDescriptor *) &configurationDescriptors }, #ifdef BOARD_USB_UDPHS &qualifierDescriptor, - (const USBConfigurationDescriptor *) &configurationDescriptors, + { (const USBConfigurationDescriptor *) &configurationDescriptors }, &deviceDescriptor, - (const USBConfigurationDescriptor *) &configurationDescriptors, + { (const USBConfigurationDescriptor *) &configurationDescriptors }, &qualifierDescriptor, - (const USBConfigurationDescriptor *) &configurationDescriptors, + { (const USBConfigurationDescriptor *) &configurationDescriptors }, #else 0, 0, 0, 0, 0, 0, #endif diff --git a/at91lib/usb/device/core/USBDDriver.c b/at91lib/usb/device/core/USBDDriver.c index 83cbd9e..f84f6c6 100644 --- a/at91lib/usb/device/core/USBDDriver.c +++ b/at91lib/usb/device/core/USBDDriver.c @@ -58,9 +58,9 @@ static const USBConfigurationDescriptor *GetCurConfigDesc(USBDDriver *pDriver) // Use different descriptor depending on device speed if (USBD_IsHighSpeed()) - return &pDriver->pDescriptors->pHsConfiguration[cfgidx]; + return pDriver->pDescriptors->pHsConfiguration[cfgidx]; else - return &pDriver->pDescriptors->pFsConfiguration[cfgidx]; + return pDriver->pDescriptors->pFsConfiguration[cfgidx]; } static const USBConfigurationDescriptor *GetCurOtherSpeedDesc(USBDDriver *pDriver) @@ -72,9 +72,9 @@ static const USBConfigurationDescriptor *GetCurOtherSpeedDesc(USBDDriver *pDrive // Use different descriptor depending on device speed if (USBD_IsHighSpeed()) - return &pDriver->pDescriptors->pHsOtherSpeed[cfgidx]; + return pDriver->pDescriptors->pHsOtherSpeed[cfgidx]; else - return &pDriver->pDescriptors->pFsOtherSpeed[cfgidx]; + return pDriver->pDescriptors->pFsOtherSpeed[cfgidx]; } diff --git a/at91lib/usb/device/core/USBDDriverDescriptors.h b/at91lib/usb/device/core/USBDDriverDescriptors.h index f1064e4..29e5eb7 100644 --- a/at91lib/usb/device/core/USBDDriverDescriptors.h +++ b/at91lib/usb/device/core/USBDDriverDescriptors.h @@ -47,6 +47,8 @@ #include #include +#define USBD_NUM_CONFIGS 4 + //------------------------------------------------------------------------------ // Types //------------------------------------------------------------------------------ @@ -62,19 +64,19 @@ typedef struct { /// Pointer to the full-speed device descriptor. const USBDeviceDescriptor *pFsDevice; /// Pointer to the full-speed configuration descriptor. - const USBConfigurationDescriptor *pFsConfiguration; + const USBConfigurationDescriptor *pFsConfiguration[USBD_NUM_CONFIGS]; /// Pointer to the full-speed qualifier descriptor. const USBDeviceQualifierDescriptor *pFsQualifier; /// Pointer to the full-speed other speed configuration descriptor. - const USBConfigurationDescriptor *pFsOtherSpeed; + const USBConfigurationDescriptor *pFsOtherSpeed[USBD_NUM_CONFIGS]; /// Pointer to the high-speed device descriptor. const USBDeviceDescriptor *pHsDevice; /// Pointer to the high-speed configuration descriptor. - const USBConfigurationDescriptor *pHsConfiguration; + const USBConfigurationDescriptor *pHsConfiguration[USBD_NUM_CONFIGS]; /// Pointer to the high-speed qualifier descriptor. const USBDeviceQualifierDescriptor *pHsQualifier; /// Pointer to the high-speed other speed configuration descriptor. - const USBConfigurationDescriptor *pHsOtherSpeed; + const USBConfigurationDescriptor *pHsOtherSpeed[USBD_NUM_CONFIGS]; /// Pointer to the list of string descriptors. const unsigned char **pStrings; /// Number of string descriptors in list. -- cgit v1.2.3