mirror of https://github.com/OpenIPC/firmware.git
391 lines
16 KiB
C
391 lines
16 KiB
C
/******************************************************************************
|
||
|
||
Copyright (C), 2015-2025, XM Tech. Co., Ltd.
|
||
|
||
******************************************************************************
|
||
File Name : xm_comm_aio.h
|
||
Version : Initial Draft
|
||
Author : XM multimedia software group
|
||
Created : 2015/9/17
|
||
Description :
|
||
******************************************************************************/
|
||
|
||
|
||
#ifndef __XM_COMM_AIO_H__
|
||
#define __XM_COMM_AIO_H__
|
||
|
||
#include "xm_common.h"
|
||
#include "xm_errno.h"
|
||
|
||
#ifdef __cplusplus
|
||
#if __cplusplus
|
||
extern "C"{
|
||
#endif
|
||
#endif /* End of #ifdef __cplusplus */
|
||
|
||
|
||
#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 /*31/21 AO support 4096 framelen*/
|
||
#define MIN_AUDIO_POINT_NUM 80 /*min sample per frame*/
|
||
|
||
/*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)
|
||
|
||
/*max length of audio stream by bytes */
|
||
#define MAX_AUDIO_STREAM_LEN MAX_AUDIO_FRAME_LEN
|
||
|
||
#define MAX_AI_USRFRM_DEPTH 30 /*max depth of user frame buf */
|
||
|
||
typedef enum xmAUDIO_SAMPLE_RATE_E
|
||
{
|
||
AUDIO_SAMPLE_RATE_8000 = 8000, /* 8K samplerate*/
|
||
AUDIO_SAMPLE_RATE_12000 = 12000, /* 12K samplerate*/
|
||
AUDIO_SAMPLE_RATE_11025 = 11025, /* 11.025K samplerate*/
|
||
AUDIO_SAMPLE_RATE_16000 = 16000, /* 16K samplerate*/
|
||
AUDIO_SAMPLE_RATE_22050 = 22050, /* 22.050K samplerate*/
|
||
AUDIO_SAMPLE_RATE_24000 = 24000, /* 24K samplerate*/
|
||
AUDIO_SAMPLE_RATE_32000 = 32000, /* 32K samplerate*/
|
||
AUDIO_SAMPLE_RATE_44100 = 44100, /* 44.1K samplerate*/
|
||
AUDIO_SAMPLE_RATE_48000 = 48000, /* 48K samplerate*/
|
||
AUDIO_SAMPLE_RATE_BUTT,
|
||
} AUDIO_SAMPLE_RATE_E;
|
||
|
||
typedef enum xmAUDIO_BIT_WIDTH_E
|
||
{
|
||
AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */
|
||
AUDIO_BIT_WIDTH_16 = 1, /* 16bit width*/
|
||
AUDIO_BIT_WIDTH_32 = 2, /* 32bit width*/
|
||
AUDIO_BIT_WIDTH_BUTT,
|
||
} AUDIO_BIT_WIDTH_E;
|
||
|
||
typedef enum xmAIO_MODE_E
|
||
{
|
||
AIO_MODE_I2S_MASTER = 0, /* SIO I2S master mode */
|
||
AIO_MODE_I2S_SLAVE, /* SIO I2S slave mode */
|
||
AIO_MODE_PCM_SLAVE_STD, /* SIO PCM slave standard mode */
|
||
AIO_MODE_PCM_SLAVE_NSTD, /* SIO PCM slave non-standard mode */
|
||
AIO_MODE_PCM_MASTER_STD, /* SIO PCM master standard mode */
|
||
AIO_MODE_PCM_MASTER_NSTD, /* SIO PCM master non-standard mode */
|
||
AIO_MODE_BUTT
|
||
} AIO_MODE_E;
|
||
|
||
typedef enum xmAIO_SOUND_MODE_E
|
||
{
|
||
AUDIO_SOUND_MODE_MONO =0,/*mono*/
|
||
AUDIO_SOUND_MODE_STEREO =1,/*stereo*/
|
||
AUDIO_SOUND_MODE_BUTT
|
||
} AUDIO_SOUND_MODE_E;
|
||
|
||
/*
|
||
An example of the packing scheme for G726-32 codewords is as shown, and bit A3 is the least significant bit of the first codeword:
|
||
RTP G726-32:
|
||
0 1
|
||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|
||
|B B B B|A A A A|D D D D|C C C C| ...
|
||
|0 1 2 3|0 1 2 3|0 1 2 3|0 1 2 3|
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|
||
|
||
MEDIA G726-32:
|
||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|
||
|A A A A|B B B B|C C C C|D D D D| ...
|
||
|3 2 1 0|3 2 1 0|3 2 1 0|3 2 1 0|
|
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|
||
*/
|
||
typedef enum xmG726_BPS_E
|
||
{
|
||
G726_16K = 0, /* G726 16kbps, see RFC3551.txt 4.5.4 G726-16 */
|
||
G726_24K, /* G726 24kbps, see RFC3551.txt 4.5.4 G726-24 */
|
||
G726_32K, /* G726 32kbps, see RFC3551.txt 4.5.4 G726-32 */
|
||
G726_40K, /* G726 40kbps, see RFC3551.txt 4.5.4 G726-40 */
|
||
MEDIA_G726_16K, /* G726 16kbps for ASF ... */
|
||
MEDIA_G726_24K, /* G726 24kbps for ASF ... */
|
||
MEDIA_G726_32K, /* G726 32kbps for ASF ... */
|
||
MEDIA_G726_40K, /* G726 40kbps for ASF ... */
|
||
G726_BUTT,
|
||
} G726_BPS_E;
|
||
|
||
typedef enum xmADPCM_TYPE_E
|
||
{
|
||
/* see DVI4 diiffers in three respects from the IMA ADPCM at RFC3551.txt 4.5.1 DVI4 */
|
||
|
||
ADPCM_TYPE_DVI4 = 0, /* 32kbps ADPCM(DVI4) for RTP */
|
||
ADPCM_TYPE_IMA, /* 32kbps ADPCM(IMA),NOTICE:point num must be 161/241/321/481 */
|
||
ADPCM_TYPE_ORG_DVI4,
|
||
ADPCM_TYPE_BUTT,
|
||
} ADPCM_TYPE_E;
|
||
|
||
#define AI_EXPAND 0x01
|
||
|
||
typedef struct xmAIO_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*/
|
||
XM_U32 u32EXFlag; /* expand 8bit to 16bit,use AI_EXPAND(only valid for AI 8bit) */
|
||
XM_U32 u32FrmNum; /* frame num in buf[2,MAX_AUDIO_FRAME_NUM]*/
|
||
XM_U32 u32PtNumPerFrm; /* point num per frame (80/160/240/320/480/1024/2048)
|
||
(ADPCM IMA should add 1 point, AMR only support 160)*/
|
||
XM_U32 u32ChnCnt; /* channle number on FS, valid value:2/4/8/16 */
|
||
XM_U32 u32ClkSel; /* clock select, meaning is diffrent when master and slave mode,
|
||
if sio slave mode:
|
||
0: AD and DA clock of codec is separate
|
||
1: AD and DA clock of codec is inseparate
|
||
else sio master mode:
|
||
0:ACKOUT clock is from sio 0
|
||
1:ACKOUT clock is from sio 1/2
|
||
*/
|
||
} AIO_ATTR_S;
|
||
|
||
typedef struct xmAI_CHN_PARAM_S
|
||
{
|
||
XM_U32 u32UsrFrmDepth;
|
||
XM_S32 s32Rev;
|
||
} AI_CHN_PARAM_S;
|
||
|
||
typedef struct xmAUDIO_FRAME_S
|
||
{
|
||
AUDIO_BIT_WIDTH_E enBitwidth; /*audio frame bitwidth*/
|
||
AUDIO_SOUND_MODE_E enSoundmode; /*audio frame momo or stereo mode*/
|
||
XM_VOID *pVirAddr[2];
|
||
XM_U32 u32PhyAddr[2];
|
||
XM_U64 u64TimeStamp; /*audio frame timestamp*/
|
||
XM_U32 u32Seq; /*audio frame seq*/
|
||
XM_U32 u32Len; /*data lenth per channel in frame*/
|
||
XM_U32 u32PoolId[2];
|
||
} AUDIO_FRAME_S;
|
||
|
||
typedef struct xmAEC_FRAME_S
|
||
{
|
||
AUDIO_FRAME_S stRefFrame; /* AEC reference audio frame */
|
||
XM_BOOL bValid; /* whether frame is valid */
|
||
XM_BOOL bSysBind; /* whether is sysbind */
|
||
} AEC_FRAME_S;
|
||
|
||
typedef struct xmAUDIO_FRAME_COMBINE_S
|
||
{
|
||
AUDIO_FRAME_S stFrm; /* audio frame */
|
||
AEC_FRAME_S stRefFrm; /* AEC reference audio frame */
|
||
} AUDIO_FRAME_COMBINE_S;
|
||
|
||
typedef struct xmAUDIO_FRAME_INFO_S
|
||
{
|
||
AUDIO_FRAME_S *pstFrame;/*frame ptr*/
|
||
XM_U32 u32Id; /*frame id*/
|
||
} AUDIO_FRAME_INFO_S;
|
||
|
||
typedef struct xmAUDIO_STREAM_S
|
||
{
|
||
XM_U8 *pStream; /* the virtual address of stream */
|
||
XM_U32 u32PhyAddr; /* the physics address of stream */
|
||
XM_U32 u32Len; /* stream lenth, by bytes */
|
||
XM_U64 u64TimeStamp; /* frame time stamp*/
|
||
XM_U32 u32Seq; /* frame seq,if stream is not a valid frame,u32Seq is 0*/
|
||
} AUDIO_STREAM_S;
|
||
|
||
typedef enum xmAUDIO_RESAMPLE_TYPE_E
|
||
{
|
||
AUDIO_RESAMPLE_1X2 = 0x1,
|
||
AUDIO_RESAMPLE_2X1 = 0x2,
|
||
AUDIO_RESAMPLE_1X4 = 0x3,
|
||
AUDIO_RESAMPLE_4X1 = 0x4,
|
||
AUDIO_RESAMPLE_1X6 = 0x5,
|
||
AUDIO_RESAMPLE_6X1 = 0x6,
|
||
AUDIO_RESAMPLE_BUTT
|
||
} AUDIO_RESAMPLE_TYPE_E;
|
||
|
||
typedef struct xmAUDIO_RESAMPLE_ATTR_S
|
||
{
|
||
XM_U32 u32InPointNum; /* input point number of frame */
|
||
AUDIO_SAMPLE_RATE_E enInSampleRate; /* input sample rate */
|
||
AUDIO_RESAMPLE_TYPE_E enReSampleType; /* resample type */
|
||
} AUDIO_RESAMPLE_ATTR_S;
|
||
|
||
typedef struct xmAUDIO_RESAMPLE_ATTR_EX_S
|
||
{
|
||
XM_U32 u32InPointNum; /* input point number of frame */
|
||
AUDIO_SAMPLE_RATE_E enInSampleRate; /* input sample rate */
|
||
AUDIO_SAMPLE_RATE_E enOutSampleRate; /* output sample rate */
|
||
} AUDIO_RESAMPLE_ATTR_EX_S;
|
||
|
||
typedef struct xmAO_CHN_STATE_S
|
||
{
|
||
XM_U32 u32ChnTotalNum; /* total number of channel buffer */
|
||
XM_U32 u32ChnFreeNum; /* free number of channel buffer */
|
||
XM_U32 u32ChnBusyNum; /* busy number of channel buffer */
|
||
} AO_CHN_STATE_S;
|
||
|
||
typedef struct xmAIO_RESMP_INFO_S
|
||
{
|
||
XM_BOOL bReSmpEnable; /* resample enable or disable */
|
||
XM_BOOL bReSmpEnableEx; /*advanced resample enable or disable */
|
||
AUDIO_RESAMPLE_ATTR_S stResmpAttr;
|
||
AUDIO_RESAMPLE_ATTR_EX_S stResmpAttrEx;
|
||
} AIO_RESMP_INFO_S;
|
||
|
||
typedef struct xmAI_ANR_INFO_S
|
||
{
|
||
XM_BOOL bAnrEnable; /* noise reduce enable or disable */
|
||
} AI_ANR_INFO_S;
|
||
|
||
typedef enum xmAUDIO_AEC_MODE_E
|
||
{
|
||
AUDIO_AEC_MODE_RECEIVER = 0,
|
||
AUDIO_AEC_MODE_SPEAKER = 1,
|
||
AUDIO_AEC_MODE_HEADPHONE = 2,
|
||
|
||
AUDIO_AEC_MODE_BUTT
|
||
} AUDIO_AEC_MODE_E;
|
||
|
||
/**Defines the configure parameters of ALC.*/
|
||
typedef struct xmAI_ALC_CONFIG_S
|
||
{
|
||
XM_S32 s32MaxLev; /*s32MaxLev<65><76>[-23dBm0, -4dBm0]<5D><>default: -4dBm0*/
|
||
XM_S32 s32MinLev; /*s32MinLev<65><76> [-23dBm0, -4dBm0]<5D><>default: -16dBm0*/
|
||
XM_U32 u32MaxGain; /*u32MaxGain<69><6E>[3dB,12dB]<5D><>default: 12dB*/
|
||
} AI_ALC_CONFIG_S;
|
||
|
||
/**Defines the configure parameters of AEC.*/
|
||
typedef struct xmAI_AEC_CONFIG_S
|
||
{
|
||
AUDIO_AEC_MODE_E enAecMode; /* AEC mode, default is speaker, 0:receiver 1:speaker 2:headphone */
|
||
XM_S32 s32Reserved;
|
||
} AI_AEC_CONFIG_S;
|
||
|
||
|
||
/**Defines the configure parameters of ANR.*/
|
||
typedef struct xmAI_ANR_CONFIG_S
|
||
{
|
||
XM_S32 s32Reserved;
|
||
} AI_ANR_CONFIG_S;
|
||
|
||
/**Defines the configure parameters of VQE.*/
|
||
typedef struct xmAI_VQE_CONFIG_S
|
||
{
|
||
XM_S32 bAecOpen;
|
||
XM_S32 bAnrOpen;
|
||
XM_S32 bAgcOpen;
|
||
XM_S32 s32SampleRate; /* Sample Rate<74><65>8KHz/11.025K/12K/16KHz<48><7A>default: 8KHz*/
|
||
XM_S32 s32FrameSample; /* VQE frame length<74><68>
|
||
sample rate 8KHz: VQE frame length: 80/160/240/320/400/480<38><30> default: 160;
|
||
sample rate 11.025K/12K/16KHz: VQE frame length: 160/320/480/960<36><30> default: 160 */
|
||
AI_AEC_CONFIG_S stAecCfg;
|
||
AI_ANR_CONFIG_S stAnrCfg;
|
||
AI_ALC_CONFIG_S stAlcCfg;
|
||
} AI_VQE_CONFIG_S;
|
||
|
||
typedef struct xmAI_VQE_INFO_S
|
||
{
|
||
AI_VQE_CONFIG_S stVqeConfig; /*vqe config*/
|
||
XM_BOOL bVqeEnable; /* vqe enable or disable */
|
||
} AI_VQE_INFO_S;
|
||
|
||
/**Defines the configure parameters of AI saving file.*/
|
||
typedef struct xmAUDIO_SAVE_FILE_INFO_S
|
||
{
|
||
XM_BOOL bCfg;
|
||
XM_CHAR aFilePath[256];
|
||
//AI_SAVE_FILE_COMMOND_E eSaveFileCommond;
|
||
XM_U32 u32FileSize; /*in KB*/
|
||
} AUDIO_SAVE_FILE_INFO_S;
|
||
|
||
typedef enum xmAUDIO_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 struct xmAUDIO_FADE_S
|
||
{
|
||
XM_BOOL bFade;
|
||
AUDIO_FADE_RATE_E enFadeInRate;
|
||
AUDIO_FADE_RATE_E enFadeOutRate;
|
||
} AUDIO_FADE_S;
|
||
|
||
typedef void(*fAudioInPreCallBack) (unsigned char *buf, unsigned int len);
|
||
|
||
#define XM_TRACE_AI(level, fmt...) XM_TRACE(level, XM_ID_AI,##fmt)
|
||
#define XM_TRACE_AO(level, fmt...) XM_TRACE(level, XM_ID_AO,##fmt)
|
||
|
||
/* invlalid device ID */
|
||
#define XM_ERR_AI_INVALID_DEVID XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
|
||
/* invlalid channel ID */
|
||
#define XM_ERR_AI_INVALID_CHNID XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
|
||
/* at lease one parameter is illagal ,eg, an illegal enumeration value */
|
||
#define XM_ERR_AI_ILLEGAL_PARAM XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
|
||
/* using a NULL point */
|
||
#define XM_ERR_AI_NULL_PTR XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
|
||
/* try to enable or initialize system,device or channel, before configing attribute */
|
||
#define XM_ERR_AI_NOT_CONFIG XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG)
|
||
/* operation is not supported by NOW */
|
||
#define XM_ERR_AI_NOT_SUPPORT XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
|
||
/* operation is not permitted ,eg, try to change stati attribute */
|
||
#define XM_ERR_AI_NOT_PERM XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
|
||
/* the devide is not enabled */
|
||
#define XM_ERR_AI_NOT_ENABLED XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
|
||
/* failure caused by malloc memory */
|
||
#define XM_ERR_AI_NOMEM XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
|
||
/* failure caused by malloc buffer */
|
||
#define XM_ERR_AI_NOBUF XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
|
||
/* no data in buffer */
|
||
#define XM_ERR_AI_BUF_EMPTY XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
|
||
/* no buffer for new data */
|
||
#define XM_ERR_AI_BUF_FULL XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
|
||
/* system is not ready,had not initialed or loaded*/
|
||
#define XM_ERR_AI_SYS_NOTREADY XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
|
||
|
||
#define XM_ERR_AI_BUSY XM_DEF_ERR(XM_ID_AI, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
|
||
|
||
/* invlalid device ID */
|
||
#define XM_ERR_AO_INVALID_DEVID XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
|
||
/* invlalid channel ID */
|
||
#define XM_ERR_AO_INVALID_CHNID XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
|
||
/* at lease one parameter is illagal ,eg, an illegal enumeration value */
|
||
#define XM_ERR_AO_ILLEGAL_PARAM XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
|
||
/* using a NULL point */
|
||
#define XM_ERR_AO_NULL_PTR XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
|
||
/* try to enable or initialize system,device or channel, before configing attribute */
|
||
#define XM_ERR_AO_NOT_CONFIG XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG)
|
||
/* operation is not supported by NOW */
|
||
#define XM_ERR_AO_NOT_SUPPORT XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
|
||
/* operation is not permitted ,eg, try to change stati attribute */
|
||
#define XM_ERR_AO_NOT_PERM XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
|
||
/* the devide is not enabled */
|
||
#define XM_ERR_AO_NOT_ENABLED XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
|
||
/* failure caused by malloc memory */
|
||
#define XM_ERR_AO_NOMEM XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
|
||
/* failure caused by malloc buffer */
|
||
#define XM_ERR_AO_NOBUF XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
|
||
/* no data in buffer */
|
||
#define XM_ERR_AO_BUF_EMPTY XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
|
||
/* no buffer for new data */
|
||
#define XM_ERR_AO_BUF_FULL XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
|
||
/* system is not ready,had not initialed or loaded*/
|
||
#define XM_ERR_AO_SYS_NOTREADY XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
|
||
|
||
#define XM_ERR_AO_BUSY XM_DEF_ERR(XM_ID_AO, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
|
||
|
||
|
||
#ifdef __cplusplus
|
||
#if __cplusplus
|
||
}
|
||
#endif
|
||
#endif /* End of #ifdef __cplusplus */
|
||
|
||
#endif /* End of #ifndef __XM_COMM_AI_H__ */
|
||
|