From deaab900899b90cc3fea4adb48cbc82e2dfe7de8 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
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 93c1e72a3..35a4ef90a 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 5760b6af8..238091321 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 26d537614..91ea0e265 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: */
-- 
GitLab