From deaab900899b90cc3fea4adb48cbc82e2dfe7de8 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Mon, 13 Jun 2011 00:19:40 +0000 Subject: [PATCH] Ensure that only the requested Audio class pipes are mapped to endpoints within the device for a specific Audio Host Class driver instance. Fix const-correctness of the Audio Host Class driver. --- Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.c | 2 +- LUFA/Drivers/USB/Class/Host/Audio.c | 10 +++++++--- LUFA/Drivers/USB/Class/Host/Audio.h | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.c b/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.c index 93c1e72a3b..35a4ef90ae 100644 --- a/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.c +++ b/Demos/Host/ClassDriver/AudioInputHost/AudioInputHost.c @@ -104,7 +104,7 @@ int main(void) USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } - + USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000); if (Audio_GetSetEndpointProperty(&Microphone_Audio_Interface, Microphone_Audio_Interface.Config.DataINPipeNumber, AUDIO_REQ_SetCurrent, AUDIO_EPCONTROL_SamplingFreq, diff --git a/LUFA/Drivers/USB/Class/Host/Audio.c b/LUFA/Drivers/USB/Class/Host/Audio.c index 5760b6af82..238091321a 100644 --- a/LUFA/Drivers/USB/Class/Host/Audio.c +++ b/LUFA/Drivers/USB/Class/Host/Audio.c @@ -51,7 +51,8 @@ uint8_t Audio_Host_ConfigurePipes(USB_ClassInfo_Audio_Host_t* const AudioInterfa if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration) return AUDIO_ENUMERROR_InvalidConfigDescriptor; - while (!(DataINEndpoint) || !(DataOUTEndpoint)) + while ((AudioInterfaceInfo->Config.DataINPipeNumber && !(DataINEndpoint)) || + (AudioInterfaceInfo->Config.DataOUTPipeNumber && !(DataOUTEndpoint))) { if (!(AudioControlInterface) || USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData, @@ -77,6 +78,9 @@ uint8_t Audio_Host_ConfigurePipes(USB_ClassInfo_Audio_Host_t* const AudioInterfa } AudioStreamingInterface = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Interface_t); + + DataINEndpoint = NULL; + DataOUTEndpoint = NULL; continue; } @@ -195,7 +199,7 @@ static uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor) } uint8_t Audio_Host_StartStopStreaming(USB_ClassInfo_Audio_Host_t* const AudioInterfaceInfo, - bool EnableStreaming) + const bool EnableStreaming) { if (!(AudioInterfaceInfo->State.IsActive)) return HOST_SENDCONTROL_DeviceDisconnected; @@ -208,7 +212,7 @@ uint8_t Audio_GetSetEndpointProperty(USB_ClassInfo_Audio_Host_t* const AudioInte const uint8_t DataPipeIndex, const uint8_t EndpointProperty, const uint8_t EndpointControl, - uint16_t const DataLength, + const uint16_t DataLength, void* const Data) { if (!(AudioInterfaceInfo->State.IsActive)) diff --git a/LUFA/Drivers/USB/Class/Host/Audio.h b/LUFA/Drivers/USB/Class/Host/Audio.h index 26d537614c..91ea0e2650 100644 --- a/LUFA/Drivers/USB/Class/Host/Audio.h +++ b/LUFA/Drivers/USB/Class/Host/Audio.h @@ -145,7 +145,7 @@ * \return A value from the \ref USB_Host_SendControlErrorCodes_t enum. */ uint8_t Audio_Host_StartStopStreaming(USB_ClassInfo_Audio_Host_t* const AudioInterfaceInfo, - bool EnableStreaming); + const bool EnableStreaming); /** Gets or sets the specified property of a streaming audio class endpoint that is bound to a pipe in the given * class instance. @@ -165,7 +165,7 @@ const uint8_t DataPipeIndex, const uint8_t EndpointProperty, const uint8_t EndpointControl, - uint16_t const DataLength, + const uint16_t DataLength, void* const Data); /* Inline Functions: */