diff options
Diffstat (limited to 'thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Audio_Speaker/inc/i2s_codec.h')
-rw-r--r-- | thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Audio_Speaker/inc/i2s_codec.h | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Audio_Speaker/inc/i2s_codec.h b/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Audio_Speaker/inc/i2s_codec.h new file mode 100644 index 0000000..c392004 --- /dev/null +++ b/thirdparty/STM32_USB-FS-Device_Lib_V4.0.0/Projects/Audio_Speaker/inc/i2s_codec.h @@ -0,0 +1,193 @@ +/** + ****************************************************************************** + * @file i2s_codec.h + * @author MCD Application Team + * @version V4.0.0 + * @date 21-January-2013 + * @brief This file contains all the functions prototypes for the I2S codec + * firmware driver. + ****************************************************************************** + * @attention + * + * <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2> + * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ + + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __I2S_CODEC_H +#define __I2S_CODEC_H + +/* .WAV file format : + + Endian Offset Length Contents + big 0 4 bytes 'RIFF' // 0x52494646 + little 4 4 bytes <file length - 8> + big 8 4 bytes 'WAVE' // 0x57415645 + +Next, the fmt chunk describes the sample format: + + big 12 4 bytes 'fmt ' // 0x666D7420 + little 16 4 bytes 0x00000010 // Length of the fmt data (16 bytes) + little 20 2 bytes 0x0001 // Format tag: 1 = PCM + little 22 2 bytes <channels> // Channels: 1 = mono, 2 = stereo + little 24 4 bytes <sample rate> // Samples per second: e.g., 22050 + little 28 4 bytes <bytes/second> // sample rate * block align + little 32 2 bytes <block align> // channels * bits/sample / 8 + little 34 2 bytes <bits/sample> // 8 or 16 + +Finally, the data chunk contains the sample data: + + big 36 4 bytes 'data' // 0x64617461 + little 40 4 bytes <length of the data block> + little 44 * <sample data> + +*/ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/* Exported types ------------------------------------------------------------*/ + +/* Audio file information structure */ +typedef struct +{ + uint32_t RIFFchunksize; + uint16_t FormatTag; + uint16_t NumChannels; + uint32_t SampleRate; + uint32_t ByteRate; + uint16_t BlockAlign; + uint16_t BitsPerSample; + uint32_t DataSize; +} WAVE_FormatTypeDef; + +/* Error Identification structure */ +typedef enum +{ + Valid_WAVE_File = 0, + Unvalid_RIFF_ID, + Unvalid_WAVE_Format, + Unvalid_FormatChunk_ID, + Unsupporetd_FormatTag, + Unsupporetd_Number_Of_Channel, + Unsupporetd_Sample_Rate, + Unsupporetd_Bits_Per_Sample, + Unvalid_DataChunk_ID, + Unsupporetd_ExtraFormatBytes, + Unvalid_FactChunk_ID +} ErrorCode; + +/* Exported constants --------------------------------------------------------*/ + +/* Codec output DEVICE */ +#define OutputDevice_SPEAKER 1 +#define OutputDevice_HEADPHONE 2 +#define OutputDevice_BOTH 3 + +/* VOLUME control constants */ +#define DEFAULT_VOL 0x52 +#define VolumeDirection_HIGH 0xF +#define VolumeDirection_LOW 0xA +#define VolumeDirection_LEVEL 0x0 +#define VOLStep 4 + +/* Forward and Rewind constants */ +#define STEP_FORWARD 2 /* 2% of wave file data length*/ +#define STEP_BACK 6 /* 6% of wave file data length*/ + +/* Codec POWER DOWN modes */ +#define CodecPowerDown_HW 1 +#define CodecPowerDown_SW 2 + +/* Audio Play STATUS */ +#define AudioPlayStatus_STOPPED 0 +#define AudioPlayStatus_PLAYING 1 +#define AudioPlayStatus_PAUSED 2 + +/* MUTE commands */ +#define MUTE_ON 1 +#define MUTE_OFF 0 + +/* I2S configuration parameters */ +#define I2S_STANDARD I2S_Standard_Phillips +#define I2S_MCLKOUTPUT I2S_MCLKOutput_Enable + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + + /* CONFIGURATION */ +uint32_t I2S_CODEC_Init(uint32_t OutputDevice, uint32_t Address); +void I2S_CODEC_ReplayConfig(uint32_t Repetions); + + /* AUDIO CONTROL */ +uint32_t I2S_CODEC_Play(uint32_t AudioStartPosition); +uint32_t I2S_CODEC_Pause(void); +uint32_t I2S_CODEC_Stop(void); +uint32_t I2S_CODEC_ControlVolume(uint32_t direction, uint8_t volume); +void I2S_CODEC_Mute(uint32_t Command); +void I2S_CODEC_ForwardPlay(uint32_t Step); +void I2S_CODEC_RewindPlay(uint32_t Step); + + /* EXTRA CONTROLS */ +void I2S_CODEC_PowerDown(uint32_t CodecPowerDown_Mode); +void I2S_CODEC_Reset(void); +uint32_t I2S_CODEC_SpeakerHeadphoneSwap(uint32_t CODEC_AudioOutput, uint32_t Address); +uint8_t GetVar_CurrentVolume(void); + +/* Medium Layer Codec Functions ----------------------------------------------*/ +void I2S_CODEC_DataTransfer(void); +void I2S_CODEC_UpdateStatus(void); +uint32_t GetVar_DataStartAddr(void); +ErrorCode I2S_CODEC_WaveParsing(uint8_t* HeaderTab); +uint32_t GetVar_CurrentOutputDevice(void); + +uint32_t GetVar_AudioDataIndex(void); +void SetVar_AudioDataIndex(uint32_t value); +void ResetVar_AudioDataIndex(void); +void IncrementVar_AudioDataIndex(uint32_t IncrementNumber); +void DecrementVar_AudioDataIndex(uint32_t DecrementNumber); + +uint32_t GetVar_AudioReplay(void); +void Decrement_AudioReplay(void); + +uint32_t GetVar_AudioPlayStatus(void); +uint32_t SetVar_AudioPlayStatus(uint32_t Status); + +uint16_t GetVar_i2saudiofreq(void); +uint32_t GetVar_AudioDataLength(void); + +/* Low Layer Codec Function --------------------------------------------------*/ +uint32_t SetVar_SendDummyData(void); +uint32_t ResetVar_SendDummyData(void); +uint32_t GetVar_SendDummyData(void); +uint32_t AudioFile_Init(void); + +void I2S_GPIO_Config(void); +void I2S_Config(uint16_t Standard, uint16_t MCLKOutput, uint16_t AudioFreq); +uint32_t CODEC_Config(uint16_t AudioOutput, uint16_t I2S_Standard, uint16_t I2S_MCLKOutput, uint8_t Volume); + +uint32_t Media_Init(void); +void Media_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead); +void Media_StartReadSequence(uint32_t ReadAddr); +uint16_t Media_ReadHalfWord(uint32_t Offset); +uint8_t Media_ReadByte(uint32_t Offset); + +void delay(__IO uint32_t nCount); + +#endif /* __I2S_CODEC_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |