X-Git-Url: http://git.linex4red.de/pub/lufa.git/blobdiff_plain/1f1d0710f379a8b08ef646cbadb63d92c35e47fb..6e0a26083ad76d2cea5aa934b530fdd8d6f4e7c1:/LUFA/Drivers/USB/Class/Host/Audio.h diff --git a/LUFA/Drivers/USB/Class/Host/Audio.h b/LUFA/Drivers/USB/Class/Host/Audio.h index 1cac3e7ac..26d537614 100644 --- a/LUFA/Drivers/USB/Class/Host/Audio.h +++ b/LUFA/Drivers/USB/Class/Host/Audio.h @@ -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 * must be set or the interface will fail to enumerate and operate correctly. */ @@ -194,10 +200,11 @@ bool SampleReceived = false; - Pipe_SelectPipe(AudioInterfaceInfo->Config.DataOUTPipeNumber); + Pipe_SelectPipe(AudioInterfaceInfo->Config.DataINPipeNumber); Pipe_Unfreeze(); SampleReceived = Pipe_IsINReceived(); Pipe_Freeze(); + return SampleReceived; } @@ -218,7 +225,7 @@ if ((USB_HostState != HOST_STATE_Configured) || !(AudioInterfaceInfo->State.IsActive)) return false; - Pipe_SelectPipe(AudioInterfaceInfo->Config.DataINPipeNumber); + Pipe_SelectPipe(AudioInterfaceInfo->Config.DataOUTPipeNumber); return Pipe_IsOUTReady(); } @@ -324,10 +331,11 @@ { Pipe_Write_8(Sample); - if (Pipe_BytesInPipe() == AudioInterfaceInfo->State.DataINPipeSize) + if (!(Pipe_IsReadWriteAllowed())) { Pipe_Unfreeze(); Pipe_ClearOUT(); + Pipe_WaitUntilReady(); Pipe_Freeze(); } } @@ -347,10 +355,11 @@ { Pipe_Write_16_LE(Sample); - if (Pipe_BytesInPipe() == AudioInterfaceInfo->State.DataINPipeSize) + if (!(Pipe_IsReadWriteAllowed())) { Pipe_Unfreeze(); Pipe_ClearOUT(); + Pipe_WaitUntilReady(); Pipe_Freeze(); } } @@ -371,10 +380,11 @@ Pipe_Write_16_LE(Sample); Pipe_Write_8(Sample >> 16); - if (Pipe_BytesInPipe() == AudioInterfaceInfo->State.DataINPipeSize) + if (!(Pipe_IsReadWriteAllowed())) { Pipe_Unfreeze(); Pipe_ClearOUT(); + Pipe_WaitUntilReady(); Pipe_Freeze(); } }