#ifndef CRC_8_H_
#define CRC_8_H_
#include "Stdafw.h"
u8 get_crc8(const u8* pp_Data, u32 vp_len);
u8 calc_crc8(u8 vp_crc, const u8* pp_Data, u32 vp_len);
#endif
#ifndef EC20_AUD_PROTOCOL_H_
#define EC20_AUD_PROTOCOL_H_
#include "Stdafw.h"
/*起始头*/
#define PROTOCOL_HEAD_CODE 0xAA
/*传输协议帧*/
struct t_aud_frame
{
u8 m_Head; //起始头
u8 m_Crc; //crc校验
u8 m_CmdId; //命令id
u16 m_DataLen;//数据长度
u8* m_Data; //数据指针
BOOL m_Valid; //有效性 +++
};
/*协议字段*/
typedef enum {
PROTOCOL_HEAD = 0,
PROTOCOL_CRC,
PROTOCOL_ID,
PROTOCOL_DLEN,
PROTOCOL_DATA
}E_PROTOCOL_TYPE;
/*协议命令*/
typedef enum
{
// record
START_RECORDER_REQ = 0X1,
START_RECORDER_RSP = 0X2,
STOP_RECORDER_REQ,
STOP_RECORDER_RSP,
DATA_RECORDER_IND,
// audio play
START_PLAY_AUDIO_REQ = 0x6,
START_PLAY_AUDIO_RSP,
STOP_PLAY_AUDIO_REQ,
STOP_PLAY_AUDIO_RSP,
AUDIO_DATA_IND,
AUDIO_DATA_OVER_RSP,
AUDIO_PLAY_RSP
}E_AUD_CMDID;
/*应答类型*/
typedef enum
{
AUD_TYPE_RSP = 0,
RECORDER_TYPE_RSP,
STOP_REC_TYPE_RSP,
}E_TYPE_RSP;
/*应答帧*/
struct t_rsp_code
{
i32 m_PlayResult;
u32 m_ContextId;
};
/*错误码定义*/
typedef enum
{
AUD_RET_OK = 0,
AUD_ERR_PARAM = -1,
AUD_ERR_BUSY = -2,
AUD_ERR_INVAILD_DATA = -3,
AUD_ERR_MEM_NOT_ENOUGH = -4, // 内存不足
AUD_ERR_INVAILD_OPERATE = -5,
AUD_ERR_UNKNOWN = -6,
AUD_ERR_TIMEOUT = -7,
AUD_ERR_SRV_NOT_CONNECTED = -8,
AUD_ERR_NOSUPPORT = -9,
AUD_ERR_RES_CONFLICT = -10, // 资源冲突
AUD_ERR_RES_OVER = -11 // 资源不足
}E_ERRCODE;
/*命令执行函数映射表结构*/
struct t_cmd_hander
{
u8 m_CmdId;
BOOL(*m_handler)(struct t_aud_frame*, E_ERRCODE*);
};
/* =============================协议 接口======================================*/
/*audio协议帧解析*/
BOOL aud_protocol_parse(const void* pp_ptr, u32 vp_ulen, struct t_aud_frame** pp_aud_frame_out, E_PROTOCOL_TYPE** vp_status_out,BOOL* pp_exc_status);
/*audio协议帧执行*/
BOOL aud_protocol_excute(struct t_aud_frame* pp_aud_frame, struct t_cmd_hander* vp_cmd_handler_tbl, u8 vp_tab_len, E_ERRCODE* vp_errcode);
/*audio发送帧*/
u32 protocol_send_frame(u8 vp_CmdId, struct t_rsp_code* pp_rspcode, const E_TYPE_RSP vp_type_rsp);
/*audio释放帧*/
void aud_destory_frame(struct t_aud_frame* pp_aud_frame);
/*audio获取帧校验*/
u8 aud_get_crc8(struct t_aud_frame* pp_aud_frame);
/*audio帧应答*/
BOOL aud_protocol_response(struct t_aud_frame* pp_aud_frame, E_ERRCODE vp_errcode, struct t_rsp_code* pp_rspcode);
#endif
#ifndef EC20_AUD_MANAGE_H_
#define EC20_AUD_MANAGE_H_
#include "aud_protocol.h"
#include "aud_config.h"
#include "Stdafw.h"
/*音频播放状态*/
typedef enum
{
PLAY_STATUS = 0,// 播放状态
TRANS_STATUS, // 数据传输状态
STOP_STATUS, // 停止状态
}E_AUD_STATUS;
/*录音状态*/
typedef enum
{
RECORDER_START_STATUS = 0,// 录音状态
RECORDER_STOP_STATUS, // 停止状态
}E_RECORD_STATUS;
/*音频格式*/
typedef enum {
MP3_FMT = 0,
AMR_FMT,
PCM_FMT,
}E_PCM_FORMAT;
/*音频数据属性*/
struct t_aud_media_inf
{
u8 m_Crc; //音频数据校验
u32 m_MediaId; //媒体标志id
E_PCM_FORMAT m_Format; //音频格式
u8 m_Volume; //音频音量
u32 m_TotalSize; //音频总大小
u32 m_CurrentSize; //当前音频大小
};
/*音频缓冲区*/
struct t_aud_media_buffer
{
struct t_aud_media_inf m_Media_info; //音频数据属性
u8 m_Databuffer[AUD_DATABUF_MAX_SIZE]; //数据缓冲区
};
/* =============================音频应用 接口======================================*/
/*音频数据处理*/
BOOL aud_excute_rev(const void * pp_ptr, u32 vp_ulen);
/*音频超时扫描*/
void audio_scan_1hz(void);
/*音频初始化*/
BOOL audio_app_init(void);
/*音频回调结果*/
base_EEventResult pfv_aud_cb(base_EAudioKind vp_AudioKind, base_EAudioState vp_State);
/*录音回调结果*/
base_EEventResult pfv_record_cb(const u8 *pp_Pcm_Data, u32 vp_DataLen, t_ywCbContext vp_Ctx);
#endif
#ifndef AUD_CFG_H_
#define AUD_CFG_H_
#define AUD_AMR_POWIO base_IO_GPIO4 //功放引脚
#define TIMEOUT_MAX_SEC 10 //超时最大限制时间
#define AUD_DATABUF_MAX_SIZE 1*1024*1024 //1Mbyte //音频缓存BUF大小
#define REC_DATABUF_MAX_SIZE 64*1024 //64Kbyte //录音缓存BUF大小
#define USE_AUDIO_SCI sci_seqThird //音频应用使用的串口
#define AUD_DEBUG //打印调试信息开关
#ifdef AUD_DEBUG
#define AUD_TRACE(format, ...) printf (format, ##__VA_ARGS__)
#else
#define AUD_TRACE(format, ...)
#endif
#endif