199 lines
6.5 KiB
C
199 lines
6.5 KiB
C
|
|
#ifndef __AIAO_HAL_H__
|
||
|
|
#define __AIAO_HAL_H__
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
#if __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif
|
||
|
|
#endif /* __cplusplus */
|
||
|
|
|
||
|
|
#include "audio_ao.h"
|
||
|
|
|
||
|
|
#define AIO_DATA_WIDTH_8BIT 0x0
|
||
|
|
#define AIO_DATA_WIDTH_16BIT 0x1
|
||
|
|
#define AIO_DATA_WIDTH_18BIT 0x2
|
||
|
|
#define AIO_DATA_WIDTH_20BIT 0x3
|
||
|
|
#define AIO_DATA_WIDTH_24BIT 0x4
|
||
|
|
#define AIO_DATA_WIDTH_32BIT 0x5
|
||
|
|
|
||
|
|
#define AIO_PCM_DATA_WIDTH_8BIT 0x0
|
||
|
|
#define AIO_PCM_DATA_WIDTH_16BIT 0x1
|
||
|
|
#define AIO_PCM_DATA_WIDTH_32BIT 0x2
|
||
|
|
#define AIO_PCM_DATA_WIDTH_64BIT 0x3
|
||
|
|
#define AIO_PCM_DATA_WIDTH_128BIT 0x4
|
||
|
|
|
||
|
|
|
||
|
|
#define AIO_CHN_NUM_2CHN 0x0
|
||
|
|
#define AIO_CHN_NUM_4CHN 0x1
|
||
|
|
#define AIO_CHN_NUM_8CHN 0x2
|
||
|
|
#define AIO_CHN_NUM_16CHN 0x3
|
||
|
|
|
||
|
|
#define AIO_ONE_FIFO_BITWIDTH 128
|
||
|
|
#define AIO_GET_BITCNT(enBitwidth) (8<<(enBitwidth))
|
||
|
|
#define AIO_TIME_DIFF_US(a, b) (((a.tv_sec) - (b.tv_sec))*1000000 + ((a.tv_usec) - (b.tv_usec)))
|
||
|
|
|
||
|
|
#define AIO_IS_PCM_MODE(mode) \
|
||
|
|
(AIO_MODE_PCM_SLAVE_STD == (mode) || AIO_MODE_PCM_SLAVE_NSTD == (mode) \
|
||
|
|
|| AIO_MODE_PCM_MASTER_STD == (mode) || AIO_MODE_PCM_MASTER_NSTD == (mode))
|
||
|
|
#define AIO_IS_I2S_MODE(mode) \
|
||
|
|
(AIO_MODE_I2S_MASTER == (mode) || AIO_MODE_I2S_SLAVE == (mode))
|
||
|
|
#define AIO_IS_MASTER_MODE(mode) \
|
||
|
|
(AIO_MODE_I2S_MASTER == (mode) || AIO_MODE_PCM_MASTER_STD == (mode) || AIO_MODE_PCM_MASTER_NSTD == (mode))
|
||
|
|
#define AIO_IS_SLAVE_MODE(mode) \
|
||
|
|
(AIO_MODE_I2S_SLAVE == (mode) || AIO_MODE_PCM_SLAVE_STD == (mode) || AIO_MODE_PCM_SLAVE_NSTD == (mode))
|
||
|
|
|
||
|
|
|
||
|
|
#define AIP0_INTMASK 1
|
||
|
|
#define AOP0_INTMASK 1
|
||
|
|
#define AOP1_INTMASK 1
|
||
|
|
|
||
|
|
#define AI_DEV_MAX_NUM 1
|
||
|
|
#define AO_DEV_MIN_NUM 0
|
||
|
|
#define AO_DEV_MAX_NUM 1
|
||
|
|
#define AIO_MAX_NUM 1
|
||
|
|
#define AIO_MAX_CHN_NUM 2
|
||
|
|
|
||
|
|
#define MAX_AUDIO_FRAME_NUM 50 /*max count of audio frame in Buffer */
|
||
|
|
#define MAX_AUDIO_POINT_BYTES 4 /*max bytes of one sample point(now 32bit max)*/
|
||
|
|
|
||
|
|
#define MAX_VOICE_POINT_NUM 480 /*max sample per frame for voice encode */
|
||
|
|
|
||
|
|
#define MAX_AUDIO_POINT_NUM 2048 /*max sample per frame for all encoder(aacplus:2048)*/
|
||
|
|
#define MAX_AO_POINT_NUM 4096 /* from h3:support 4096 framelen*/
|
||
|
|
#define MIN_AUDIO_POINT_NUM 80 /*min sample per frame*/
|
||
|
|
#define MAX_AI_POINT_NUM 2048 /*max sample per frame for all encoder(aacplus:2048)*/
|
||
|
|
|
||
|
|
/*max length of audio frame by bytes, one frame contain many sample point */
|
||
|
|
#define MAX_AUDIO_FRAME_LEN (MAX_AUDIO_POINT_BYTES*MAX_AO_POINT_NUM)
|
||
|
|
|
||
|
|
/* 1800M */
|
||
|
|
/*(MCLK0/AIO Clock Source Frequency) x 2^27*/
|
||
|
|
#define AIO_MCLK_48K_1800 0x000DFB24 /* 48k * 256 */
|
||
|
|
#define AIO_MCLK_441K_1800 0x000CD856 /* 44.1k * 256 */
|
||
|
|
#define AIO_MCLK_32K_1800 0x00095218 /* 32k * 256 */
|
||
|
|
|
||
|
|
typedef GK_S32 AUDIO_DEV;
|
||
|
|
|
||
|
|
typedef enum AIO_TYPE_E
|
||
|
|
{
|
||
|
|
AIO_TYPE_AI = 0,
|
||
|
|
AIO_TYPE_AO,
|
||
|
|
AIO_TYPE_BUTT
|
||
|
|
} AIO_TYPE_E;
|
||
|
|
|
||
|
|
typedef enum AIO_SOUND_MODE_E
|
||
|
|
{
|
||
|
|
AUDIO_SOUND_MODE_MONO =0,/*mono*/
|
||
|
|
AUDIO_SOUND_MODE_STEREO =1,/*stereo*/
|
||
|
|
AUDIO_SOUND_MODE_BUTT
|
||
|
|
} AUDIO_SOUND_MODE_E;
|
||
|
|
|
||
|
|
typedef enum AIO_MODE_E
|
||
|
|
{
|
||
|
|
AIO_MODE_I2S_MASTER = 0, /* AIO I2S master mode */
|
||
|
|
AIO_MODE_I2S_SLAVE, /* AIO I2S slave mode */
|
||
|
|
AIO_MODE_PCM_SLAVE_STD, /* AIO PCM slave standard mode */
|
||
|
|
AIO_MODE_PCM_SLAVE_NSTD, /* AIO PCM slave non-standard mode */
|
||
|
|
AIO_MODE_PCM_MASTER_STD, /* AIO PCM master standard mode */
|
||
|
|
AIO_MODE_PCM_MASTER_NSTD, /* AIO PCM master non-standard mode */
|
||
|
|
AIO_MODE_BUTT
|
||
|
|
} AIO_MODE_E;
|
||
|
|
|
||
|
|
typedef enum AUDIO_BIT_WIDTH_E
|
||
|
|
{
|
||
|
|
AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */
|
||
|
|
AUDIO_BIT_WIDTH_16 = 1, /* 16bit width*/
|
||
|
|
AUDIO_BIT_WIDTH_24 = 2, /* 24bit width*/
|
||
|
|
AUDIO_BIT_WIDTH_BUTT,
|
||
|
|
} AUDIO_BIT_WIDTH_E;
|
||
|
|
|
||
|
|
typedef enum AUDIO_FADE_RATE_E
|
||
|
|
{
|
||
|
|
AUDIO_FADE_RATE_1 = 0,
|
||
|
|
AUDIO_FADE_RATE_2 = 1,
|
||
|
|
AUDIO_FADE_RATE_4 = 2,
|
||
|
|
AUDIO_FADE_RATE_8 = 3,
|
||
|
|
AUDIO_FADE_RATE_16 = 4,
|
||
|
|
AUDIO_FADE_RATE_32 = 5,
|
||
|
|
AUDIO_FADE_RATE_64 = 6,
|
||
|
|
AUDIO_FADE_RATE_128 = 7,
|
||
|
|
|
||
|
|
AUDIO_FADE_RATE_BUTT
|
||
|
|
} AUDIO_FADE_RATE_E;
|
||
|
|
|
||
|
|
typedef enum AUDIO_TRACK_MODE_E
|
||
|
|
{
|
||
|
|
AUDIO_TRACK_NORMAL = 0,
|
||
|
|
AUDIO_TRACK_BOTH_LEFT = 1,
|
||
|
|
AUDIO_TRACK_BOTH_RIGHT = 2,
|
||
|
|
AUDIO_TRACK_EXCHANGE = 3,
|
||
|
|
AUDIO_TRACK_MIX = 4,
|
||
|
|
AUDIO_TRACK_LEFT_MUTE = 5,
|
||
|
|
AUDIO_TRACK_RIGHT_MUTE = 6,
|
||
|
|
AUDIO_TRACK_BOTH_MUTE = 7,
|
||
|
|
|
||
|
|
AUDIO_TRACK_BUTT
|
||
|
|
} AUDIO_TRACK_MODE_E;
|
||
|
|
|
||
|
|
typedef struct AUDIO_FADE_S
|
||
|
|
{
|
||
|
|
GK_BOOL bFade;
|
||
|
|
AUDIO_FADE_RATE_E enFadeInRate;
|
||
|
|
AUDIO_FADE_RATE_E enFadeOutRate;
|
||
|
|
} AUDIO_FADE_S;
|
||
|
|
|
||
|
|
typedef struct AIO_ATTR_S
|
||
|
|
{
|
||
|
|
AUDIO_SAMPLE_RATE_E enSamplerate; /* sample rate */
|
||
|
|
AUDIO_BIT_WIDTH_E enBitwidth; /* bitwidth */
|
||
|
|
AIO_MODE_E enWorkmode; /* master or slave mode */
|
||
|
|
AUDIO_SOUND_MODE_E enSoundmode; /* momo or steror */
|
||
|
|
GK_U32 u32EXFlag; /* expand 8bit to 16bit,use AI_EXPAND(only valid for AI 8bit) */
|
||
|
|
GK_U32 u32FrmNum; /* frame num in buf[2,MAX_AUDIO_FRAME_NUM] */
|
||
|
|
GK_U32 u32PtNumPerFrm; /* point num per frame (80/160/240/320/480/1024/2048)
|
||
|
|
(ADPCM IMA should add 1 point, AMR only support 160) */
|
||
|
|
GK_U32 u32ChnCnt; /* channle number on FS, valid value:1/2/4/8 */
|
||
|
|
GK_U32 u32ClkSel; /* 0: AI and AO clock is separate
|
||
|
|
1: AI and AO clock is inseparate, AI use AO's clock
|
||
|
|
*/
|
||
|
|
} AIO_ATTR_S;
|
||
|
|
|
||
|
|
typedef struct AIO_STATE_S
|
||
|
|
{
|
||
|
|
GK_BOOL bInitialized; /*initialed flag*/
|
||
|
|
GK_BOOL bAiConfig;
|
||
|
|
GK_BOOL bAoConfig;
|
||
|
|
AIO_ATTR_S stAiAttr;
|
||
|
|
AIO_ATTR_S stAoAttr;
|
||
|
|
} AIO_STATE_S;
|
||
|
|
|
||
|
|
|
||
|
|
/*****************************************************************************
|
||
|
|
Description : AIO IP Driver API
|
||
|
|
*****************************************************************************/
|
||
|
|
GK_U32 AIO_HAL_ReadReg(GK_U32 u32Offset);
|
||
|
|
GK_VOID AIO_HAL_WriteReg(GK_U32 u32Offset, GK_U32 u32Value);
|
||
|
|
|
||
|
|
GK_VOID AOP_HAL_SetBufferAddr(GK_U32 u32ChnId, GK_U32 u32Value);
|
||
|
|
GK_VOID AOP_HAL_SetBufferSize(GK_U32 u32ChnId, GK_U32 u32Value);
|
||
|
|
GK_VOID AOP_HAL_SetBuffWptr(GK_U32 u32ChnId, GK_U32 u32Value);
|
||
|
|
GK_VOID AOP_HAL_SetBuffRptr(GK_U32 u32ChnId, GK_U32 u32Value);
|
||
|
|
GK_VOID AOP_HAL_SetTransSize(GK_U32 u32ChnId, GK_U32 u32Value);
|
||
|
|
GK_S32 AOP_HAL_SetDevAttr(GK_U32 u32ChnId, AIO_ATTR_S *pstAttr);
|
||
|
|
GK_S32 AOP_HAL_DevEnable(GK_U32 u32ChnId);
|
||
|
|
GK_VOID AOP_HAL_DevDisable(GK_U32 u32ChnId);
|
||
|
|
GK_S32 AOP_HAL_SetVolume(GK_U32 u32ChnId, GK_S32 s32VolumeDb);
|
||
|
|
|
||
|
|
int AIAO_ModInit(void);
|
||
|
|
void AIAO_ModExit(void);
|
||
|
|
GK_S32 AIAO_HAL_SysInit(GK_VOID);
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
#if __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#endif /* __cplusplus */
|
||
|
|
|
||
|
|
|
||
|
|
#endif
|