Fix bugs in the Host mode Audio class driver.
This commit is contained in:
		
							parent
							
								
									6e2a3174a5
								
							
						
					
					
						commit
						6e0a26083a
					
				
					 4 changed files with 25 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -62,7 +62,7 @@ uint8_t Audio_Host_ConfigurePipes(USB_ClassInfo_Audio_Host_t* const AudioInterfa
 | 
			
		|||
			                              DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found)
 | 
			
		||||
			{
 | 
			
		||||
				if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
 | 
			
		||||
											  DComp_NextAudioControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
 | 
			
		||||
				                              DComp_NextAudioControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
 | 
			
		||||
				{
 | 
			
		||||
					return AUDIO_ENUMERROR_NoCompatibleInterfaceFound;
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -70,7 +70,7 @@ uint8_t Audio_Host_ConfigurePipes(USB_ClassInfo_Audio_Host_t* const AudioInterfa
 | 
			
		|||
				AudioControlInterface = DESCRIPTOR_PCAST(ConfigDescriptorData, USB_Descriptor_Interface_t);			
 | 
			
		||||
 | 
			
		||||
				if (USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
 | 
			
		||||
										  DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found)
 | 
			
		||||
				                              DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found)
 | 
			
		||||
				{
 | 
			
		||||
					return AUDIO_ENUMERROR_NoCompatibleInterfaceFound;
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -102,7 +102,7 @@ uint8_t Audio_Host_ConfigurePipes(USB_ClassInfo_Audio_Host_t* const AudioInterfa
 | 
			
		|||
			Size            = DataINEndpoint->EndpointSize;
 | 
			
		||||
			EndpointAddress = DataINEndpoint->EndpointAddress;
 | 
			
		||||
			Token           = PIPE_TOKEN_IN;
 | 
			
		||||
			Type            = EP_TYPE_BULK;
 | 
			
		||||
			Type            = EP_TYPE_ISOCHRONOUS;
 | 
			
		||||
			DoubleBanked    = true;
 | 
			
		||||
 | 
			
		||||
			AudioInterfaceInfo->State.DataINPipeSize = DataINEndpoint->EndpointSize;
 | 
			
		||||
| 
						 | 
				
			
			@ -211,6 +211,9 @@ uint8_t Audio_GetSetEndpointProperty(USB_ClassInfo_Audio_Host_t* const AudioInte
 | 
			
		|||
			                         uint16_t const DataLength,
 | 
			
		||||
			                         void* const Data)
 | 
			
		||||
{
 | 
			
		||||
	if (!(AudioInterfaceInfo->State.IsActive))
 | 
			
		||||
	  return HOST_SENDCONTROL_DeviceDisconnected;
 | 
			
		||||
 | 
			
		||||
	uint8_t RequestType;
 | 
			
		||||
	uint8_t EndpointAddress;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,8 +79,14 @@
 | 
			
		|||
			{
 | 
			
		||||
				const struct
 | 
			
		||||
				{
 | 
			
		||||
					uint8_t  DataINPipeNumber; /**< Pipe number of the Audio interface's IN data pipe. */
 | 
			
		||||
					uint8_t  DataOUTPipeNumber; /**< Pipe number of the Audio interface's OUT data pipe. */
 | 
			
		||||
					uint8_t  DataINPipeNumber; /**< Pipe number of the Audio interface's IN data pipe. If this interface should not
 | 
			
		||||
					                            *   bind to an IN endpoint, this may be set to 0 to disable audio input streaming for
 | 
			
		||||
					                            *   this driver instance.
 | 
			
		||||
					                            */
 | 
			
		||||
					uint8_t  DataOUTPipeNumber; /**< Pipe number of the Audio interface's OUT data pipe. If this interface should not
 | 
			
		||||
					                            *   bind to an OUT endpoint, this may be set to 0 to disable audio output streaming for
 | 
			
		||||
					                            *   this driver instance.
 | 
			
		||||
					                            */
 | 
			
		||||
				} Config; /**< Config data for the USB class interface within the device. All elements in this section
 | 
			
		||||
				           *   <b>must</b> be set or the interface will fail to enumerate and operate correctly.
 | 
			
		||||
				           */
 | 
			
		||||
| 
						 | 
				
			
			@ -325,10 +331,11 @@
 | 
			
		|||
			{
 | 
			
		||||
				Pipe_Write_8(Sample);
 | 
			
		||||
 | 
			
		||||
				if (Pipe_BytesInPipe() == AudioInterfaceInfo->State.DataOUTPipeSize)
 | 
			
		||||
				if (!(Pipe_IsReadWriteAllowed()))
 | 
			
		||||
				{
 | 
			
		||||
					Pipe_Unfreeze();
 | 
			
		||||
					Pipe_ClearOUT();
 | 
			
		||||
					Pipe_WaitUntilReady();
 | 
			
		||||
					Pipe_Freeze();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -348,10 +355,11 @@
 | 
			
		|||
			{
 | 
			
		||||
				Pipe_Write_16_LE(Sample);
 | 
			
		||||
 | 
			
		||||
				if (Pipe_BytesInPipe() == AudioInterfaceInfo->State.DataOUTPipeSize)
 | 
			
		||||
				if (!(Pipe_IsReadWriteAllowed()))
 | 
			
		||||
				{
 | 
			
		||||
					Pipe_Unfreeze();
 | 
			
		||||
					Pipe_ClearOUT();
 | 
			
		||||
					Pipe_WaitUntilReady();
 | 
			
		||||
					Pipe_Freeze();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -372,10 +380,11 @@
 | 
			
		|||
				Pipe_Write_16_LE(Sample);
 | 
			
		||||
				Pipe_Write_8(Sample >> 16);
 | 
			
		||||
 | 
			
		||||
				if (Pipe_BytesInPipe() == AudioInterfaceInfo->State.DataOUTPipeSize)
 | 
			
		||||
				if (!(Pipe_IsReadWriteAllowed()))
 | 
			
		||||
				{
 | 
			
		||||
					Pipe_Unfreeze();
 | 
			
		||||
					Pipe_ClearOUT();
 | 
			
		||||
					Pipe_WaitUntilReady();
 | 
			
		||||
					Pipe_Freeze();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue