X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/f555ad7ced743a19eb1eefaf5eaf536fcbe58d80..2e76ad721e494f3a14ece73100ea9a2144c6fe8e:/LUFA/Drivers/USB/Class/Device/Audio.h diff --git a/LUFA/Drivers/USB/Class/Device/Audio.h b/LUFA/Drivers/USB/Class/Device/Audio.h index c674b6d94..cad87f3b6 100644 --- a/LUFA/Drivers/USB/Class/Device/Audio.h +++ b/LUFA/Drivers/USB/Class/Device/Audio.h @@ -38,7 +38,7 @@ */ /** \ingroup Group_USBClassAudio - * @defgroup Group_USBClassAudioDevice Audio Class Device Mode Driver + * \defgroup Group_USBClassAudioDevice Audio Class Device Mode Driver * * \section Sec_Dependencies Module Source Dependencies * The following files must be built with any user project that uses this module: @@ -57,8 +57,6 @@ #include "../../USB.h" #include "../Common/Audio.h" - #include - /* Enable C linkage for C++ Compilers: */ #if defined(__cplusplus) extern "C" { @@ -132,6 +130,35 @@ * \param[in,out] AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state. */ void Audio_Device_ProcessControlRequest(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1); + + /** Audio class driver callback for the setting and retrieval of streaming endpoint properties. This callback must be implemented + * in the user application to handle property manipulations on streaming audio endpoints. + * + * When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for + * the given endpoint index, and should return as fast as possible. When non-NULL, this value may be altered for GET operations + * to indicate the size of the retreived data. + * + * \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value + * of the \c DataLength parameter. + * + * \param[in,out] AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state. + * \param[in] EndpointProperty Property of the endpoint to get or set, a value from \ref Audio_ClassRequests_t. + * \param[in] EndpointAddress Address of the streaming endpoint whose property is being referenced. + * \param[in] EndpointControl Parameter of the endpoint to get or set, a value from \ref Audio_EndpointControls_t. + * \param[in,out] DataLength For SET operations, the length of the parameter data to set. For GET operations, the maximum + * length of the retrieved data. When NULL, the function should return whether the given property + * and parameter is valid for the requested endpoint without reading or modifying the Data buffer. + * \param[in,out] Data Pointer to a location where the parameter data is stored for SET operations, or where + * the retrieved data is to be stored for GET operations. + * + * \return Boolean true if the property get/set was successful, false otherwise + */ + bool CALLBACK_Audio_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, + const uint8_t EndpointProperty, + const uint8_t EndpointAddress, + const uint8_t EndpointControl, + uint16_t* const DataLength, + uint8_t* Data); /* Inline Functions: */ /** General management task for a given Audio class interface, required for the correct operation of the interface. This should @@ -191,7 +218,7 @@ /** Reads the next 8-bit audio sample from the current audio interface. * * \pre This should be preceded immediately by a call to the \ref Audio_Device_IsSampleReceived() function to ensure - * ensure the correct endpoint is selected and ready for data. + * that the correct endpoint is selected and ready for data. * * \param[in,out] AudioInterfaceInfo Pointer to a structure containing an Audio Class configuration and state. * @@ -205,7 +232,7 @@ (void)AudioInterfaceInfo; - Sample = Endpoint_Read_Byte(); + Sample = Endpoint_Read_8(); if (!(Endpoint_BytesInEndpoint())) Endpoint_ClearOUT(); @@ -230,7 +257,7 @@ (void)AudioInterfaceInfo; - Sample = (int16_t)Endpoint_Read_Word_LE(); + Sample = (int16_t)Endpoint_Read_16_LE(); if (!(Endpoint_BytesInEndpoint())) Endpoint_ClearOUT(); @@ -255,7 +282,7 @@ (void)AudioInterfaceInfo; - Sample = (((uint32_t)Endpoint_Read_Byte() << 16) | Endpoint_Read_Word_LE()); + Sample = (((uint32_t)Endpoint_Read_8() << 16) | Endpoint_Read_16_LE()); if (!(Endpoint_BytesInEndpoint())) Endpoint_ClearOUT(); @@ -276,7 +303,7 @@ static inline void Audio_Device_WriteSample8(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, const int8_t Sample) { - Endpoint_Write_Byte(Sample); + Endpoint_Write_8(Sample); if (Endpoint_BytesInEndpoint() == AudioInterfaceInfo->Config.DataINEndpointSize) Endpoint_ClearIN(); @@ -295,7 +322,7 @@ static inline void Audio_Device_WriteSample16(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, const int16_t Sample) { - Endpoint_Write_Word_LE(Sample); + Endpoint_Write_16_LE(Sample); if (Endpoint_BytesInEndpoint() == AudioInterfaceInfo->Config.DataINEndpointSize) Endpoint_ClearIN(); @@ -314,8 +341,8 @@ static inline void Audio_Device_WriteSample24(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo, const int32_t Sample) { - Endpoint_Write_Word_LE(Sample); - Endpoint_Write_Byte(Sample >> 16); + Endpoint_Write_16_LE(Sample); + Endpoint_Write_8(Sample >> 16); if (Endpoint_BytesInEndpoint() == AudioInterfaceInfo->Config.DataINEndpointSize) Endpoint_ClearIN();