uni project for eq system
Fork of AUDIO_DISCO_F746NG by
AUDIO_DISCO_F746NG.h
- Committer:
- adustm
- Date:
- 2016-03-24
- Revision:
- 0:6f035eff38e4
- Child:
- 1:7046ce26b7ed
File content as of revision 0:6f035eff38e4:
/* Copyright (c) 2010-2016 mbed.org, MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef __AUDIO_DISCO_F746NG_H #define __AUDIO_DISCO_F746NG_H #ifdef TARGET_DISCO_F746NG #include "mbed.h" #include "stm32746g_discovery_audio.h" /* This class drives the uSD card driver mounted on DISCO_F746NG board. Usage: #include "mbed.h" #include "AUDIO_DISCO_F746NG.h" AUDIO_DISCO_F746NG audio; int main() { audio.IN_OUT_Init(INPUT_DEVICE_DIGITAL_MICROPHONE_2, OUTPUT_DEVICE_HEADPHONE, 90, DEFAULT_AUDIO_IN_FREQ): audio.IN_Record((uint16_t*)AUDIO_BUFFER_IN, AUDIO_BLOCK_SIZE); audio.OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02); audio.OUT_Play((uint16_t*)AUDIO_BUFFER_OUT, AUDIO_BLOCK_SIZE * 2); while 1 {} } */ class AUDIO_DISCO_F746NG { public: //! Constructor AUDIO_DISCO_F746NG(); //! Destructor ~AUDIO_DISCO_F746NG(); /** * @brief Configures the audio peripherals. * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, * or OUTPUT_DEVICE_BOTH. * @param Volume: Initial volume level (from 0 (Mute); to 100 (Max)) * @param AudioFreq: Audio frequency used to play the audio stream. * @note The I2S PLL input clock must be done in the user application. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); /** * @brief Starts playing audio stream from a data buffer for a determined size. * @param pBuffer: Pointer to the buffer * @param Size: Number of audio data in BYTES unit. * In memory, first element is for left channel, second element is for right channel * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t OUT_Play(uint16_t* pBuffer, uint32_t Size); /** * @brief Sends n-Bytes on the SAI interface. * @param pData: pointer on data address * @param Size: number of data to be written * @retval None */ void OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); /** * @brief This function Pauses the audio file stream. In case * of using DMA, the DMA Pause feature is used. * @note When calling OUT_Pause(); function for pause, only * OUT_Resume(); function should be called for resume (use of BSP_AUDIO_OUT_Play() * function for resume could lead to unexpected behaviour);. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t OUT_Pause(void); /** * @brief This function Resumes the audio file stream. * @note When calling OUT_Pause(); function for pause, only * OUT_Resume(); function should be called for resume (use of BSP_AUDIO_OUT_Play() * function for resume could lead to unexpected behaviour);. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t OUT_Resume(void); /** * @brief Stops audio playing and Power down the Audio Codec. * @param Option: could be one of the following parameters * - CODEC_PDWN_SW: for software power off (by writing registers);. * Then no need to reconfigure the Codec after power on. * - CODEC_PDWN_HW: completely shut down the codec (physically);. * Then need to reconfigure the Codec after power on. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t OUT_Stop(uint32_t Option); /** * @brief Controls the current audio volume level. * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for * Mute and 100 for Max volume level);. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t OUT_SetVolume(uint8_t Volume); /** * @brief Enables or disables the MUTE mode by software * @param Cmd: Could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to * unmute the codec and restore previous volume level. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t OUT_SetMute(uint32_t Cmd); /** * @brief Switch dynamically (while audio file is played); the output target * (speaker or headphone);. * @param Output: The audio output target: OUTPUT_DEVICE_SPEAKER, * OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t OUT_SetOutputMode(uint8_t Output); /** * @brief Updates the audio frequency. * @param AudioFreq: Audio frequency used to play the audio stream. * @note This API should be called after the OUT_Init(); to adjust the * audio frequency. * @retval None */ void OUT_SetFrequency(uint32_t AudioFreq); /** * @brief Updates the Audio frame slot configuration. * @param AudioFrameSlot: specifies the audio Frame slot * This parameter can be one of the following values * @arg CODEC_AUDIOFRAME_SLOT_0123 * @arg CODEC_AUDIOFRAME_SLOT_02 * @arg CODEC_AUDIOFRAME_SLOT_13 * @note This API should be called after the OUT_Init(); to adjust the * audio frame slot. * @retval None */ void OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot); /** * @brief Deinit the audio peripherals. * @retval None */ void OUT_DeInit(void); /** * @brief Tx Transfer completed callbacks. * @param hsai: SAI handle * @retval None */ void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai); /** * @brief Tx Half Transfer completed callbacks. * @param hsai: SAI handle * @retval None */ void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai); /** * @brief SAI error callbacks. * @param hsai: SAI handle * @retval None */ void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai); /** * @brief Initializes the output Audio Codec audio interface (SAI);. * @param AudioFreq: Audio frequency to be configured for the SAI peripheral. * @note The default SlotActive configuration is set to CODEC_AUDIOFRAME_SLOT_0123 * and user can update this configuration using * @retval None */ static void SAIx_Out_Init(uint32_t AudioFreq); /** * @brief Deinitializes the output Audio Codec audio interface (SAI);. * @retval None */ static void SAIx_Out_DeInit(void); /** * @brief Initializes wave recording. * @param InputDevice: INPUT_DEVICE_DIGITAL_MICROPHONE_2 or INPUT_DEVICE_INPUT_LINE_1 * @param Volume: Initial volume level (in range 0(Mute);..80(+0dB)..100(+17.625dB)) * @param AudioFreq: Audio frequency to be configured for the SAI peripheral. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t IN_Init(uint16_t InputDevice, uint8_t Volume, uint32_t AudioFreq); /** * @brief Initializes wave recording and playback in parallel. * @param InputDevice: INPUT_DEVICE_DIGITAL_MICROPHONE_2 * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, * or OUTPUT_DEVICE_BOTH. * @param Volume: Initial volume level (in range 0(Mute);..80(+0dB)..100(+17.625dB)) * @param AudioFreq: Audio frequency to be configured for the SAI peripheral. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t IN_OUT_Init(uint16_t InputDevice, uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); /** * @brief Starts audio recording. * @param pbuf: Main buffer pointer for the recorded data storing * @param size: size of the recorded buffer in number of elements (typically number of half-words); * Be careful that it is not the same unit than OUT_Play function * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t IN_Record(uint16_t* pbuf, uint32_t size); /** * @brief Stops audio recording. * @param Option: could be one of the following parameters * - CODEC_PDWN_SW: for software power off (by writing registers);. * Then no need to reconfigure the Codec after power on. * - CODEC_PDWN_HW: completely shut down the codec (physically);. * Then need to reconfigure the Codec after power on. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t IN_Stop(uint32_t Option); /** * @brief Pauses the audio file stream. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t IN_Pause(void); /** * @brief Resumes the audio file stream. * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t IN_Resume(void); /** * @brief Controls the audio in volume level. * @param Volume: Volume level in range 0(Mute);..80(+0dB)..100(+17.625dB) * @retval AUDIO_OK if correct communication, else wrong communication */ uint8_t IN_SetVolume(uint8_t Volume); /** * @brief Deinit the audio IN peripherals. * @retval None */ void IN_DeInit(void); /** * @brief Rx Transfer completed callbacks. * @param hsai: SAI handle * @retval None */ void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai); /** * @brief Rx Half Transfer completed callbacks. * @param hsai: SAI handle * @retval None */ void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai); /** * @brief Initializes the input Audio Codec audio interface (SAI);. * @param SaiOutMode: SAI_MODEMASTER_TX (for record and playback in parallel); * or SAI_MODEMASTER_RX (for record only);. * @param SlotActive: CODEC_AUDIOFRAME_SLOT_02 or CODEC_AUDIOFRAME_SLOT_13 * @param AudioFreq: Audio frequency to be configured for the SAI peripheral. * @retval None */ static void SAIx_In_Init(uint32_t SaiOutMode, uint32_t SlotActive, uint32_t AudioFreq); /** * @brief Deinitializes the output Audio Codec audio interface (SAI);. * @retval None */ static void SAIx_In_DeInit(void); private: }; #else #error "This class must be used with DISCO_F746NG board only." #endif // TARGET_DISCO_F746NG #endif