Files
99_7018_lmx/apps/earphone/audio_enc_mpt_cvp_ctr.c
2025-10-29 13:10:02 +08:00

599 lines
18 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
****************************************************************
* Audio Enc Mass production test self CVP control
* File : audio_enc_mpt_cvp_crl.c
* note : 自研ENC产测 CVP通话算法/MIC 控制层
****************************************************************
*/
#include "asm/includes.h"
#include "media/includes.h"
#include "system/includes.h"
#include "aec_user.h"
#include "app_main.h"
#include "audio_config.h"
#include "audio_enc.h"
#include "audio_enc_mpt_self.h"
#include "audio_anc.h"
#include "overlay_code.h"
#if AUDIO_ENC_MPT_SELF_ENABLE
/* #define DUT_CVP_LOG_ENABLE */
#ifdef DUT_CVP_LOG_ENABLE
#define dut_cvp_log(x, ...) printf("[enc_mpt_cvp]" x " ", ## __VA_ARGS__)
#else
#define dut_cvp_log(...)
#endif/*DUT_CVP_LOG_ENABLE*/
/*
暂不支持开ANC模式测试
1没有与ANC复用ADC BUFF
2没有开动态MIC增益
*/
extern struct adc_platform_data adc_data;
extern struct audio_dac_hdl dac_hdl;
extern struct audio_adc_hdl adc_hdl;
#define MIC_BUF_NUM 3
#define MIC_IRQ_POINTS 256
#define CVP_MIC_SR 16000 //采样率
#define CVP_MONITOR_DIS 0 //监听关闭
#define CVP_MONITOR_PROBE 1 //监听处理前数据
#define CVP_MONITOR_POST 2 //监听处理后数据
//默认监听选择
#define CVP_MONITOR_SEL CVP_MONITOR_DIS
typedef struct {
u8 dump_cnt;
u8 monitor;
u8 mic_num; //当前MIC个数
u16 mic_id[4];
u16 dut_mic_ch;
struct audio_adc_output_hdl adc_output;
struct adc_mic_ch mic_ch;
s16 *tmp_buf[3];
s16 *mic_buf;
} audio_cvp_t;
static audio_cvp_t *cvp_hdl = NULL;
/* 写卡使能控制, 需注意一下几点
1、需打开 AUDIO_PCM_DEBUG
2、AEC原本的写卡流程需关闭
3、测试流程需包含CVP_OUT测试, 因为写卡只能在线程写
*/
#define AUDIO_ENC_MPT_UART_DEBUG_EN 0
#define AUDIO_ENC_MPT_UART_DEBUG_CH 3 //写卡通道数
#define AUDIO_ENC_MPT_UART_DEBUG_LEN MIC_IRQ_POINTS * 2 //写卡长度
#ifdef AUDIO_PCM_DEBUG
extern int aec_uart_init();
extern int aec_uart_open(u8 nch, u16 single_size);
extern int aec_uart_fill(u8 ch, void *buf, u16 size);
extern void aec_uart_write(void);
extern int aec_uart_close(void);
#endif/*AUDIO_PCM_DEBUG*/
/*监听输出默认输出到dac*/
static int cvp_monitor_output(s16 *data, int len)
{
int wlen = audio_dac_write(&dac_hdl, data, len);
if (wlen != len) {
dut_cvp_log("monitor output full\n");
}
return wlen;
}
/*监听使能*/
static int cvp_monitor_en(u8 en, int sr)
{
dut_cvp_log("cvp_monitor_en:%d,sr:%d\n", en, sr);
if (en) {
app_audio_state_switch(APP_AUDIO_STATE_MUSIC, get_max_sys_vol());
dut_cvp_log("cur_vol:%d,max_sys_vol:%d\n", app_audio_get_volume(APP_AUDIO_STATE_MUSIC), get_max_sys_vol());
audio_dac_set_volume(&dac_hdl, app_audio_get_volume(APP_AUDIO_STATE_MUSIC));
audio_dac_set_sample_rate(&dac_hdl, sr);
audio_dac_start(&dac_hdl);
} else {
audio_dac_stop(&dac_hdl);
}
return 0;
}
/*
测试前的预处理,
如方案使用模拟开关复用ADC通道可以在此切换模拟开关
*/
static void audio_enc_mpt_fre_pre(u16 mic_ch)
{
#if 0
//测试算法或者TALK 主MIC
if (mic_ch & (AUDIO_ENC_MPT_CVP_OUT | AUDIO_ENC_MPT_TALK_MIC)) {
}
//测试算法或者TALK 副MIC
if (mic_ch & (AUDIO_ENC_MPT_CVP_OUT | AUDIO_ENC_MPT_SLAVE_MIC)) {
}
//测试算法或者TALK FBMIC
if (mic_ch & (AUDIO_ENC_MPT_CVP_OUT | AUDIO_ENC_MPT_TALK_FB_MIC)) {
}
//测试TWS FFMIC or 头戴式LFF MIC
if (mic_ch & AUDIO_ENC_MPT_FF_MIC) {
}
//测试TWS FBMIC or 头戴式LFB MIC
if (mic_ch & AUDIO_ENC_MPT_FB_MIC) {
}
//测试头戴式RFF MIC
if (mic_ch & AUDIO_ENC_MPT_RFF_MIC) {
}
//测试头戴式RFB MIC
if (mic_ch & AUDIO_ENC_MPT_RFB_MIC) {
}
#endif
}
/*mic adc原始数据输出*/
static void mic_output(void *priv, s16 *data, int len)
{
/* putchar('.'); */
s16 *mic_data[cvp_hdl->mic_num];
int i;
u8 talk_id_cnt = 0xff;
//ADC启动不稳定实测开头大约有50ms 杂音数据, 这里丢弃掉16*8 = 128ms
if (cvp_hdl->dump_cnt < 8) {
cvp_hdl->dump_cnt++;
return;
}
mic_data[0] = data;
//printf("mic_data:%x,%x,%d\n",data,mic1_data_pos,len);
if (cvp_hdl->mic_num == 2) {
mic_data[1] = cvp_hdl->tmp_buf[0];
for (u16 i = 0; i < (len >> 1); i++) {
mic_data[0][i] = data[i * 2];
mic_data[1][i] = data[i * 2 + 1];
}
mic_data[1] = data + (len / 2);
memcpy(mic_data[1], cvp_hdl->tmp_buf[0], len);
} else if (cvp_hdl->mic_num == 3) {
mic_data[1] = cvp_hdl->tmp_buf[0];
mic_data[2] = cvp_hdl->tmp_buf[1];
for (u16 i = 0; i < (len >> 1); i++) {
mic_data[0][i] = data[i * 3];
mic_data[1][i] = data[i * 3 + 1];
mic_data[2][i] = data[i * 3 + 2];
}
} else if (cvp_hdl->mic_num == 4) {
mic_data[1] = cvp_hdl->tmp_buf[0];
mic_data[2] = cvp_hdl->tmp_buf[1];
mic_data[3] = cvp_hdl->tmp_buf[2];
for (u16 i = 0; i < (len >> 1); i++) {
mic_data[0][i] = data[i * 4];
mic_data[1][i] = data[i * 4 + 1];
mic_data[2][i] = data[i * 4 + 2];
mic_data[3][i] = data[i * 4 + 3];
}
}
for (i = 0; i < cvp_hdl->mic_num; i++) {
#if AUDIO_ENC_MPT_UART_DEBUG_EN && (defined AUDIO_PCM_DEBUG)
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
aec_uart_fill(i, mic_data[i], 512);
}
#endif/*AUDIO_ENC_MPT_UART_DEBUG_EN*/
audio_enc_mpt_fre_response_inbuf(cvp_hdl->mic_id[i], mic_data[i], len);
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
#if TCFG_AUDIO_TRIPLE_MIC_ENABLE
if (cvp_hdl->mic_id[i] & AUDIO_ENC_MPT_TALK_FB_MIC) {
audio_aec_inbuf_ref_1(mic_data[i], len);
continue;
}
#endif/*TCFG_AUDIO_TRIPLE_MIC_ENABLE*/
#if TCFG_AUDIO_DUAL_MIC_ENABLE || TCFG_AUDIO_TRIPLE_MIC_ENABLE
if (cvp_hdl->mic_id[i] & AUDIO_ENC_MPT_SLAVE_MIC) {
audio_aec_inbuf_ref(mic_data[i], len);
continue;
}
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE || TCFG_AUDIO_TRIPLE_MIC_ENABLE*/
if (cvp_hdl->mic_id[i] & AUDIO_ENC_MPT_TALK_MIC) {
talk_id_cnt = i;
/* audio_aec_inbuf(mic_data[i], len); */
continue;
}
}
}
//主麦数据输入触发AEC线程最后处理
if (talk_id_cnt != 0xff) { //表示有算法主麦输入
audio_aec_inbuf(mic_data[talk_id_cnt], len);
}
#if CVP_MONITOR_SEL != CVP_MONITOR_DIS
if (cvp_hdl->monitor == CVP_MONITOR_PROBE) {
static u8 num = 0;
static int cnt = 0;
if (++cnt > 300) {
cnt = 0;
if (++num == cvp_hdl->mic_num) {
num = 0;
}
r_printf("num %d", num);
}
cvp_monitor_output(mic_data[num], len);
}
#endif/*CVP_MONITOR_SEL != CVP_MONITOR_DIS*/
}
static u16 audio_enc_mpt_anc_mic_query(u8 mic_type, u16 mic_id, u8 *mic_en, u16 *mic_id_tmp, u8 *gain)
{
#if TCFG_AUDIO_ANC_ENABLE
u8 i;
u8 mic_max = A_MIC3 + 1;
for (i = A_MIC0; i < mic_max; i++) {
if (mic_type == i) {
if (!mic_en[i]) {
//此MIC没有开过则使用ANC的MIC增益
gain[i] = audio_anc_mic_gain_get(i);
}
mic_en[i] = 1;
mic_id_tmp[i] |= mic_id;
dut_cvp_log("ANC mic%d: anc_id 0x%x, group_id 0x%x, en %x", mic_type, mic_id, mic_id_tmp[i], mic_en[i]);
return 0;
}
}
#endif/*TCFG_AUDIO_ANC_ENABLE*/
return 1;
}
/*根据mic通道值获取使用的第几个mic*/
static u8 get_mic_num(u8 bit)
{
u8 i = 0;
for (i = 0; i < 4; i++) {
if (bit & 0x1) {
return i;
}
bit >>= 1;
}
return 0;
}
static const u16 call_mic_id[2] = {AUDIO_ENC_MPT_TALK_MIC, AUDIO_ENC_MPT_SLAVE_MIC};
static int mic_open(u8 *mic_gain, int sr)
{
int i, j;
u8 mic_en[4] = {0};
u16 mic_id_tmp[4] = {0};
dut_cvp_log("mic open sr: %d,mic_gain:%d %d %d %d\n", sr, mic_gain[0], mic_gain[1], mic_gain[2], mic_gain[3]);
cvp_hdl->dump_cnt = 0;
//1.测试CVP的输出 or 通话MIC相关 MIC输出
if (cvp_hdl->dut_mic_ch & (AUDIO_ENC_MPT_CVP_OUT | AUDIO_ENC_MPT_TALK_MIC | \
AUDIO_ENC_MPT_SLAVE_MIC | AUDIO_ENC_MPT_TALK_FB_MIC)) {
#if TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_0
mic_en[0] = 1;
mic_id_tmp[0] = 1;
#endif
#if TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_1
mic_en[1] = 1;
mic_id_tmp[1] = 1;
#endif
#if TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_2
mic_en[2] = 1;
mic_id_tmp[2] = 1;
#endif
#if TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_3
mic_en[3] = 1;
mic_id_tmp[3] = 1;
#endif
#if TCFG_AUDIO_DUAL_MIC_ENABLE
//1.1 确定主副MIC-仅支持双麦定位,三麦目前还不支持
#if (TCFG_AUDIO_DMS_MIC_MANAGE == DMS_MASTER_MIC0)
u8 call_cnt = 0;
for (i = 0; i < 4; i++) {
if (mic_id_tmp[i]) {
mic_id_tmp[i] = call_mic_id[call_cnt++];
}
}
#else
u8 call_cnt = 1;
for (i = 0; i < 4; i++) {
if (mic_id_tmp[i]) {
mic_id_tmp[i] = call_mic_id[call_cnt--];
}
}
#endif
#elif TCFG_AUDIO_TRIPLE_MIC_ENABLE //三麦通话
//三麦通话目前需手动指定mic类型
mic_id_tmp[get_mic_num(app_var.talk_mic_ch)] = AUDIO_ENC_MPT_TALK_MIC;
mic_id_tmp[get_mic_num(app_var.talk_ref_mic_ch)] = AUDIO_ENC_MPT_SLAVE_MIC;
mic_id_tmp[get_mic_num(app_var.talk_fb_mic_ch)] = AUDIO_ENC_MPT_TALK_FB_MIC;
/* mic_id_tmp[3] = ; */
#else /*单麦通话*/
for (i = 0; i < 4; i++) {
if (mic_id_tmp[i]) {
mic_id_tmp[i] = AUDIO_ENC_MPT_TALK_MIC;
break;
}
}
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
}
//2.只测通话MIC不测试算法输出
if (!(cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT)) {
for (i = 0; i < 4; i++) {
//清除非目标MIC的使能
if (!(cvp_hdl->dut_mic_ch & mic_id_tmp[i])) {
mic_id_tmp[i] = 0;
mic_en[i] = 0;
}
}
}
//3.ANC MIC映射
#if TCFG_AUDIO_ANC_ENABLE
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_FF_MIC) {
#if TCFG_USER_TWS_ENABLE && (ANC_CH == ANC_R_CH)
audio_enc_mpt_anc_mic_query(ANCR_FF_MIC, AUDIO_ENC_MPT_FF_MIC, mic_en, mic_id_tmp, mic_gain);
#else
audio_enc_mpt_anc_mic_query(ANCL_FF_MIC, AUDIO_ENC_MPT_FF_MIC, mic_en, mic_id_tmp, mic_gain);
#endif/*TCFG_USER_TWS_ENABLE && (ANC_CH == ANC_R_CH)*/
}
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_FB_MIC) {
#if TCFG_USER_TWS_ENABLE && (ANC_CH == ANC_R_CH)
audio_enc_mpt_anc_mic_query(ANCR_FB_MIC, AUDIO_ENC_MPT_FB_MIC, mic_en, mic_id_tmp, mic_gain);
#else
audio_enc_mpt_anc_mic_query(ANCL_FB_MIC, AUDIO_ENC_MPT_FB_MIC, mic_en, mic_id_tmp, mic_gain);
#endif/*TCFG_USER_TWS_ENABLE && (ANC_CH == ANC_R_CH)*/
}
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_RFF_MIC) {
audio_enc_mpt_anc_mic_query(ANCR_FF_MIC, AUDIO_ENC_MPT_RFF_MIC, mic_en, mic_id_tmp, mic_gain);
}
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_RFB_MIC) {
audio_enc_mpt_anc_mic_query(ANCR_FB_MIC, AUDIO_ENC_MPT_RFB_MIC, mic_en, mic_id_tmp, mic_gain);
}
#endif/*TCFG_AUDIO_ANC_ENABLE*/
//4.重新排列数组, 兼容ADC_BUFF的缓存结构
j = 0;
for (i = 0; i < 4; i++) {
if (mic_id_tmp[i]) {
cvp_hdl->mic_id[j++] = mic_id_tmp[i];
}
}
//5.ADC初始化
audio_mic_pwr_ctl(MIC_PWR_ON);
if (cvp_hdl) {
if (mic_en[0]) {
cvp_hdl->mic_num++;
audio_adc_mic_open(&cvp_hdl->mic_ch, AUDIO_ADC_MIC_0, &adc_hdl);
audio_adc_mic_set_gain(&cvp_hdl->mic_ch, mic_gain[0]);
}
if (mic_en[1]) {
cvp_hdl->mic_num++;
audio_adc_mic1_open(&cvp_hdl->mic_ch, AUDIO_ADC_MIC_1, &adc_hdl);
audio_adc_mic1_set_gain(&cvp_hdl->mic_ch, mic_gain[1]);
}
if (mic_en[2]) {
cvp_hdl->mic_num++;
audio_adc_mic2_open(&cvp_hdl->mic_ch, AUDIO_ADC_MIC_2, &adc_hdl);
audio_adc_mic2_set_gain(&cvp_hdl->mic_ch, mic_gain[2]);
}
if (mic_en[3]) {
cvp_hdl->mic_num++;
audio_adc_mic3_open(&cvp_hdl->mic_ch, AUDIO_ADC_MIC_3, &adc_hdl);
audio_adc_mic3_set_gain(&cvp_hdl->mic_ch, mic_gain[3]);
}
if (!cvp_hdl->mic_num) {
dut_cvp_log("Error valid mic_num is zero!\n");
return 1;
}
//5.1 ADC临时BUFF、ISR BUFF申请
for (i = 1; i < cvp_hdl->mic_num; i++) {
cvp_hdl->tmp_buf[i - 1] = malloc(MIC_IRQ_POINTS * sizeof(short));
}
cvp_hdl->mic_buf = malloc(cvp_hdl->mic_num * MIC_BUF_NUM * MIC_IRQ_POINTS * sizeof(short));
audio_adc_mic_set_sample_rate(&cvp_hdl->mic_ch, sr);
audio_adc_mic_set_buffs(&cvp_hdl->mic_ch, cvp_hdl->mic_buf, MIC_IRQ_POINTS * 2, MIC_BUF_NUM);
cvp_hdl->adc_output.handler = mic_output;
audio_adc_add_output_handler(&adc_hdl, &cvp_hdl->adc_output);
audio_adc_mic_start(&cvp_hdl->mic_ch);
}
dut_cvp_log("mic_open succ mic_num %d\n", cvp_hdl->mic_num);
for (i = 0; i < 4; i++) {
dut_cvp_log("mic%d_id 0x%x, en %d, gain %d\n", i, cvp_hdl->mic_id[i], mic_en[i], mic_gain[i]);
}
return 0;
}
static void mic_close(void)
{
if (cvp_hdl) {
audio_adc_mic_close(&cvp_hdl->mic_ch);
audio_adc_del_output_handler(&adc_hdl, &cvp_hdl->adc_output);
for (int i = 1; i < cvp_hdl->mic_num; i++) {
free(cvp_hdl->tmp_buf[i - 1]);
}
free(cvp_hdl->mic_buf);
audio_mic_pwr_ctl(MIC_PWR_OFF);
}
}
/*清晰语音数据输出*/
static int cvp_output_hdl(s16 *data, u16 len)
{
/* putchar('o'); */
audio_enc_mpt_fre_response_inbuf(AUDIO_ENC_MPT_CVP_OUT, data, len);
#if AUDIO_ENC_MPT_UART_DEBUG_EN && (defined AUDIO_PCM_DEBUG)
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
aec_uart_fill(2, data, 512);
aec_uart_write();
}
#endif/*AUDIO_ENC_MPT_UART_DEBUG_EN*/
#if !AUDIO_ENC_MPT_FRERES_ASYNC
audio_enc_mpt_fre_response_post_run(0);
#endif/*AUDIO_ENC_MPT_FRERES_ASYNC*/
#if CVP_MONITOR_SEL != CVP_MONITOR_DIS
if (cvp_hdl->monitor == CVP_MONITOR_POST) {
cvp_monitor_output(data, len);
}
#endif/*CVP_MONITOR_SEL != CVP_MONITOR_DIS*/
return len;
}
int audio_enc_mpt_cvp_close(void)
{
if (cvp_hdl != NULL) {
#if AUDIO_ENC_MPT_UART_DEBUG_EN && (defined AUDIO_PCM_DEBUG)
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
aec_uart_close();
}
#endif/*AUDIO_ENC_MPT_UART_DEBUG_EN*/
#if CVP_MONITOR_SEL != CVP_MONITOR_DIS
if (cvp_hdl->monitor) {
cvp_monitor_en(0, CVP_MIC_SR);
}
#endif/* CVP_MONITOR_SEL != CVP_MONITOR_DIS*/
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
audio_aec_close();
}
//先关AEC再关MIC
mic_close();
free(cvp_hdl);
cvp_hdl = NULL;
dut_cvp_log("cvp_hdl close\n");
}
return 0;
}
int audio_enc_mpt_cvp_open(u16 mic_ch)
{
int ret = 0;
u8 mic_gain[4];
if (cvp_hdl) {
//支持重入
audio_enc_mpt_cvp_close();
dut_cvp_log("dut_cvp start again\n");
}
#if AUDIO_ENC_MPT_UART_DEBUG_EN && (defined AUDIO_PCM_DEBUG)
if (mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
aec_uart_open(AUDIO_ENC_MPT_UART_DEBUG_CH, AUDIO_ENC_MPT_UART_DEBUG_LEN);
}
#endif/*AUDIO_ENC_MPT_UART_DEBUG_EN*/
dut_cvp_log("cvp_hdl open, mic_ch %x\n", mic_ch);
cvp_hdl = zalloc(sizeof(audio_cvp_t));
ASSERT(cvp_hdl);
audio_enc_mpt_fre_pre(mic_ch);
#if CVP_MONITOR_SEL != CVP_MONITOR_DIS
cvp_hdl->monitor = CVP_MONITOR_SEL;
if (cvp_hdl->monitor) {
cvp_monitor_en(1, CVP_MIC_SR);
}
#endif/* CVP_MONITOR_SEL != CVP_MONITOR_DIS*/
cvp_hdl->dut_mic_ch = mic_ch;
mic_gain[0] = app_var.aec_mic_gain;
mic_gain[1] = app_var.aec_mic1_gain;
mic_gain[2] = app_var.aec_mic2_gain;
mic_gain[3] = app_var.aec_mic3_gain;
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
overlay_load_code(OVERLAY_AEC);
audio_aec_open(CVP_MIC_SR, -1, cvp_output_hdl);
#if 1//TCFG_AUDIO_CVP_NS_MODE == CVP_DNS_MODE
//默认关闭DNS
audio_cvp_ioctl(CVP_NS_SWITCH, 0, NULL); //降噪关
#endif/*TCFG_AUDIO_CVP_NS_MODE*/
}
ret = mic_open(mic_gain, CVP_MIC_SR);
//由于产测对时钟设置不敏感因此暂定128M
if (clk_get("sys") < 128 * 1000000L) {
clk_set("sys", 128 * 1000000L);
}
return ret;
}
void audio_enc_mpt_fre_response_open(u16 mic_ch)
{
#if TCFG_AUDIO_ANC_ENABLE
//设置为ANC产测模式
audio_anc_prodution_mode_set(1);
#endif/*TCFG_AUDIO_ANC_ENABLE*/
audio_enc_mpt_fre_response_start(mic_ch);
if (audio_enc_mpt_cvp_open(mic_ch)) {
audio_enc_mpt_fre_response_release();
}
}
void audio_enc_mpt_fre_response_close(void)
{
audio_enc_mpt_fre_response_stop();
audio_enc_mpt_cvp_close();
}
static u8 audio_cvp_idle_query()
{
return (cvp_hdl == NULL) ? 1 : 0;
}
REGISTER_LP_TARGET(audio_cvp_lp_target) = {
.name = "audio_cvp",
.is_idle = audio_cvp_idle_query,
};
//测试func
void audio_enc_mpt_cvp_key_test()
{
static u8 cnt = 0;
u16 mic_ch = 0;
dut_cvp_log("cnt %d\n", cnt);
mem_stats();
switch (cnt) {
case 0:
app_var.aec_mic_gain = 15;
app_var.aec_mic1_gain = 15;
app_var.aec_mic2_gain = 15;
app_var.aec_mic3_gain = 15;
mic_ch |= AUDIO_ENC_MPT_CVP_OUT;
mic_ch |= AUDIO_ENC_MPT_TALK_MIC;
/* mic_ch |= AUDIO_ENC_MPT_SLAVE_MIC; */
/* mic_ch |= AUDIO_ENC_MPT_TALK_FB_MIC; */
/* mic_ch |= AUDIO_ENC_MPT_FF_MIC; */
/* mic_ch |= AUDIO_ENC_MPT_FB_MIC; */
/* mic_ch |= AUDIO_ENC_MPT_RFF_MIC; */
/* mic_ch |= AUDIO_ENC_MPT_RFB_MIC; */
audio_enc_mpt_fre_response_open(mic_ch);
break;
case 1:
audio_enc_mpt_fre_response_close();
break;
case 2:
u8 *buf;
audio_enc_mpt_fre_response_file_get(&buf);
break;
case 3:
audio_enc_mpt_fre_response_release();
break;
}
cnt++;
if (cnt > 3) {
cnt = 0;
}
}
#endif/*AUDIO_ENC_MPT_SELF_ENABLE*/