Fixed change usb config bug

In the standard atmel lib only one configuration was possible.
On a GETDESCRIPTOR request the board would always return the full buffer
with both configurations.

The USB driver requests each configuration one after another, using the
configuration index number.
The atmel lib did not support more than one USB configuration.
This commit is contained in:
Christina Quast committed 2015-02-20 14:35:36 +01:00
1 parent 6255ccca84
commit 49ba6bc1ba
7 files changed
+96 -21

No files matched your search

@@ -146,7 +146,7 @@ void AUDDSpeakerDriver_ConfigurationChangeHandler(uint8_t cfgnum)
if (USBD_HAL_IsHighSpeed() && pDescriptors->pHsConfiguration)
pDesc = (USBConfigurationDescriptor*)pDescriptors->pHsConfiguration;
else
pDesc = (USBConfigurationDescriptor*)pDescriptors->pFsConfiguration;
pDesc = (USBConfigurationDescriptor*)pDescriptors->pFsConfiguration[0];
AUDDSpeakerPhone_ParseInterfaces(pAudf,
(USBGenericDescriptor*)pDesc,
@@ -301,7 +301,7 @@ void AUDDSpeakerPhoneDriver_ConfigurationChangeHandler(uint8_t cfgnum)
if (USBD_HAL_IsHighSpeed() && pDescriptors->pHsConfiguration)
pDesc = (USBConfigurationDescriptor*)pDescriptors->pHsConfiguration;
else
pDesc = (USBConfigurationDescriptor*)pDescriptors->pFsConfiguration;
pDesc = (USBConfigurationDescriptor*)pDescriptors->pFsConfiguration[0];
USBGenericDescriptor_Parse((USBGenericDescriptor*)pDesc, pDesc->wTotalLength,
(USBDescriptorParseFunction)AUDDSpeakerPhone_Parse, pAudd);
@@ -92,7 +92,7 @@ static void SetConfiguration(USBDDriver *pDriver, uint8_t cfgnum)
}
else {
pConfiguration = pDriver->pDescriptors->pFsConfiguration;
pConfiguration = pDriver->pDescriptors->pFsConfiguration[0];
}
/* Set & save the desired configuration */
@@ -154,7 +154,7 @@ static void GetDeviceStatus(const USBDDriver *pDriver)
}
else {
pConfiguration = pDriver->pDescriptors->pFsConfiguration;
pConfiguration = pDriver->pDescriptors->pFsConfiguration[0];
}
/* Check current configuration for power mode (if device is configured) */
@@ -242,7 +242,7 @@ static void GetDescriptor(
TRACE_DEBUG("%s", "FS ");
pDevice = pDriver->pDescriptors->pFsDevice;
pConfiguration = pDriver->pDescriptors->pFsConfiguration;
pConfiguration = pDriver->pDescriptors->pFsConfiguration[indexRDesc];
pQualifier = pDriver->pDescriptors->pFsQualifier;
pOtherSpeed = pDriver->pDescriptors->pFsOtherSpeed;
}
@@ -477,7 +477,7 @@ USBConfigurationDescriptor *USBDDriver_GetCfgDescriptors(
if (USBD_HAL_IsHighSpeed() && pDescList->pHsConfiguration)
pCfg = (USBConfigurationDescriptor *)pDescList->pHsConfiguration;
else
pCfg = (USBConfigurationDescriptor *)pDescList->pFsConfiguration;
pCfg = (USBConfigurationDescriptor *)pDescList->pFsConfiguration[0];
return pCfg;
}
@@ -93,7 +93,7 @@ void HIDDKeyboardDriver_ConfigurationChangedHandler(uint8_t cfgnum)
if (USBD_HAL_IsHighSpeed() && pDescriptors->pHsConfiguration)
pDesc = (USBConfigurationDescriptor*)pDescriptors->pHsConfiguration;
else
pDesc = (USBConfigurationDescriptor*)pDescriptors->pFsConfiguration;
pDesc = (USBConfigurationDescriptor*)pDescriptors->pFsConfiguration[0];
HIDDKeyboard_ConfigureFunction((USBGenericDescriptor*)pDesc,
pDesc->wTotalLength);
}
@@ -183,7 +183,7 @@ static uint8_t HIDDTransferDriver_GetDescriptor(uint8_t type,
else {
pConfiguration =
pHidd->pUsbd->pDescriptors->pFsConfiguration;
pHidd->pUsbd->pDescriptors->pFsConfiguration[0];
}
/* Parse the device configuration to get the HID descriptor */
@@ -280,7 +280,7 @@ void HIDDTransferDriver_ConfigurationChangedHandler(uint8_t cfgnum)
if (USBD_HAL_IsHighSpeed() && pDescriptors->pHsConfiguration)
pDesc = (USBConfigurationDescriptor*)pDescriptors->pHsConfiguration;
else
pDesc = (USBConfigurationDescriptor*)pDescriptors->pFsConfiguration;
pDesc = (USBConfigurationDescriptor*)pDescriptors->pFsConfiguration[0];
HIDDFunction_ParseInterface(pHidd,
(USBGenericDescriptor*)pDesc,
pDesc->wTotalLength);