/** ****************************************************************************** * @file wm8994.h * @author MCD Application Team * @brief This file contains all the functions prototypes for the * wm8994.c driver. ****************************************************************************** * @attention * *

© Copyright (c) 2014 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef WM8994_H #define WM8994_H /* Includes ------------------------------------------------------------------*/ #include "wm8994_reg.h" #include /** @addtogroup BSP * @{ */ /** @addtogroup Component * @{ */ /** @addtogroup WM8994 * @{ */ /** @defgroup WM8994_Exported_Types Exported Types * @{ */ typedef int32_t (*WM8994_Init_Func) (void); typedef int32_t (*WM8994_DeInit_Func) (void); typedef int32_t (*WM8994_GetTick_Func) (void); typedef int32_t (*WM8994_Delay_Func) (uint32_t); typedef int32_t (*WM8994_WriteReg_Func)(uint16_t, uint16_t, uint8_t*, uint16_t); typedef int32_t (*WM8994_ReadReg_Func) (uint16_t, uint16_t, uint8_t*, uint16_t); typedef struct { WM8994_Init_Func Init; WM8994_DeInit_Func DeInit; uint16_t Address; WM8994_WriteReg_Func WriteReg; WM8994_ReadReg_Func ReadReg; WM8994_GetTick_Func GetTick; } WM8994_IO_t; typedef struct { WM8994_IO_t IO; wm8994_ctx_t Ctx; uint8_t IsInitialized; } WM8994_Object_t; typedef struct { uint32_t InputDevice; uint32_t OutputDevice; uint32_t Frequency; uint32_t Resolution; uint32_t Volume; } WM8994_Init_t; typedef struct { int32_t ( *Init ) ( WM8994_Object_t *, WM8994_Init_t* ); int32_t ( *DeInit ) ( WM8994_Object_t * ); int32_t ( *ReadID ) ( WM8994_Object_t *, uint32_t * ); int32_t ( *Play ) ( WM8994_Object_t * ); int32_t ( *Pause ) ( WM8994_Object_t * ); int32_t ( *Resume ) ( WM8994_Object_t * ); int32_t ( *Stop ) ( WM8994_Object_t *, uint32_t ); int32_t ( *SetFrequency ) ( WM8994_Object_t *, uint32_t ); int32_t ( *GetFrequency ) ( WM8994_Object_t *, uint32_t*); int32_t ( *SetVolume ) ( WM8994_Object_t *, uint32_t, uint8_t ); int32_t ( *GetVolume ) ( WM8994_Object_t *, uint32_t, uint8_t*); int32_t ( *SetMute ) ( WM8994_Object_t *, uint32_t ); int32_t ( *SetOutputMode ) ( WM8994_Object_t *, uint32_t ); int32_t ( *SetResolution ) ( WM8994_Object_t *, uint32_t ); int32_t ( *GetResolution ) ( WM8994_Object_t *, uint32_t*); int32_t ( *SetProtocol ) ( WM8994_Object_t *, uint32_t ); int32_t ( *GetProtocol ) ( WM8994_Object_t *, uint32_t*); int32_t ( *Reset ) ( WM8994_Object_t * ); } WM8994_Drv_t; /** * @} */ /** @defgroup WM8994_Exported_Constants Exported Constants * @{ */ #define WM8994_OK (0) #define WM8994_ERROR (-1) /******************************************************************************/ /*************************** Codec User defines ******************************/ /******************************************************************************/ /* Audio Input Device */ #define WM8994_IN_NONE 0x00U #define WM8994_IN_MIC1 0x01U #define WM8994_IN_MIC2 0x02U #define WM8994_IN_LINE1 0x03U #define WM8994_IN_LINE2 0x04U #define WM8994_IN_MIC1_MIC2 0x05U /* Audio Output Device */ #define WM8994_OUT_NONE 0x00U #define WM8994_OUT_SPEAKER 0x01U #define WM8994_OUT_HEADPHONE 0x02U #define WM8994_OUT_BOTH 0x03U #define WM8994_OUT_AUTO 0x04U /* AUDIO FREQUENCY */ #define WM8994_FREQUENCY_192K 192000 #define WM8994_FREQUENCY_176K 176400 #define WM8994_FREQUENCY_96K 96000 #define WM8994_FREQUENCY_88K 88200 #define WM8994_FREQUENCY_48K 48000 #define WM8994_FREQUENCY_44K 44100 #define WM8994_FREQUENCY_32K 32000 #define WM8994_FREQUENCY_22K 22050 #define WM8994_FREQUENCY_16K 16000 #define WM8994_FREQUENCY_11K 11025 #define WM8994_FREQUENCY_8K 8000 /* AUDIO RESOLUTION */ #define WM8994_RESOLUTION_16b 0x00U #define WM8994_RESOLUTION_20b 0x01U #define WM8994_RESOLUTION_24b 0x02U #define WM8994_RESOLUTION_32b 0x03U /* Codec stop options */ #define WM8994_PDWN_HW 0x00U #define WM8994_PDWN_SW 0x01U /* Volume Input Output selection */ #define VOLUME_INPUT 0U #define VOLUME_OUTPUT 1U /* MUTE commands */ #define WM8994_MUTE_ON 1U #define WM8994_MUTE_OFF 0U /* AUDIO PROTOCOL */ #define WM8994_PROTOCOL_R_JUSTIFIED ((uint16_t)0x0000) #define WM8994_PROTOCOL_L_JUSTIFIED ((uint16_t)0x0001) #define WM8994_PROTOCOL_I2S ((uint16_t)0x0002) #define WM8994_PROTOCOL_DSP ((uint16_t)0x0003) #define VOLUME_OUT_INVERT(Volume) ((uint8_t)(((Volume) * 100) / 63)) #define VOLUME_IN_INVERT(Volume) ((uint8_t)(((Volume) * 100) / 239)) /** * @brief WM8994 ID */ #define WM8994_ID 0x8994U /** * @} */ /** @addtogroup WM8994_Exported_Variables * @{ */ /* Audio driver structure */ extern WM8994_Drv_t WM8994_Driver; /** * @} */ /** @addtogroup WM8994_Exported_Functions * @{ */ /*------------------------------------------------------------------------------ Audio Codec functions ------------------------------------------------------------------------------*/ /* High Layer codec functions */ int32_t WM8994_RegisterBusIO (WM8994_Object_t *pObj, WM8994_IO_t *pIO); int32_t WM8994_Init(WM8994_Object_t *pObj, WM8994_Init_t *pInit); int32_t WM8994_DeInit(WM8994_Object_t *pObj); int32_t WM8994_ReadID(WM8994_Object_t *pObj, uint32_t *Id); int32_t WM8994_Play(WM8994_Object_t *pObj); int32_t WM8994_Pause(WM8994_Object_t *pObj); int32_t WM8994_Resume(WM8994_Object_t *pObj); int32_t WM8994_Stop(WM8994_Object_t *pObj, uint32_t CodecPdwnMode); int32_t WM8994_SetVolume(WM8994_Object_t *pObj, uint32_t InputOutput, uint8_t Volume); int32_t WM8994_GetVolume(WM8994_Object_t *pObj, uint32_t InputOutput, uint8_t *Volume); int32_t WM8994_SetMute(WM8994_Object_t *pObj, uint32_t Cmd); int32_t WM8994_SetOutputMode(WM8994_Object_t *pObj, uint32_t Output); int32_t WM8994_SetResolution(WM8994_Object_t *pObj, uint32_t Resolution); int32_t WM8994_GetResolution(WM8994_Object_t *pObj, uint32_t *Resolution); int32_t WM8994_SetProtocol(WM8994_Object_t *pObj, uint32_t Protocol); int32_t WM8994_GetProtocol(WM8994_Object_t *pObj, uint32_t *Protocol); int32_t WM8994_SetFrequency(WM8994_Object_t *pObj, uint32_t AudioFreq); int32_t WM8994_GetFrequency(WM8994_Object_t *pObj, uint32_t *AudioFreq); int32_t WM8994_Reset(WM8994_Object_t *pObj); /** * @} */ #endif /* WM8994_H */ /** * @} */ /** * @} */ /** * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/