673 lines
22 KiB
C
673 lines
22 KiB
C
#include "audio_aec_online.h"
|
||
#include "app_online_cfg.h"
|
||
#include "config/config_target.h"
|
||
#include "system/includes.h"
|
||
#include "online_db_deal.h"
|
||
#include "timer.h"
|
||
#include "aec_user.h"
|
||
#include "audio_adc.h"
|
||
|
||
#if 1
|
||
extern void put_float(double fv);
|
||
#define AEC_ONLINE_LOG y_printf
|
||
#define AEC_ONLINE_FLOG put_float
|
||
#else
|
||
#define AEC_ONLINE_LOG(...)
|
||
#define AEC_ONLINE_FLOG(...)
|
||
#endif
|
||
|
||
#if TCFG_AEC_TOOL_ONLINE_ENABLE
|
||
extern int esco_enc_mic_gain_set(u8 gain);
|
||
extern int esco_enc_mic1_gain_set(u8 gain);
|
||
extern int esco_enc_mic2_gain_set(u8 gain);
|
||
extern int esco_enc_mic3_gain_set(u8 gain);
|
||
extern int esco_dec_dac_gain_set(u8 gain);
|
||
enum {
|
||
AEC_UPDATE_CLOSE,
|
||
AEC_UPDATE_INIT,
|
||
AEC_UPDATE_ONLINE,
|
||
};
|
||
|
||
typedef struct {
|
||
u8 update;
|
||
u8 reserved;
|
||
u16 timer;
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
#if (TCFG_AUDIO_DMS_SEL == DMS_NORMAL)
|
||
AEC_DMS_CONFIG cfg;
|
||
#else/*TCFG_AUDIO_DMS_SEL == DMS_FLEXIBLE*/
|
||
DMS_FLEXIBLE_CONFIG cfg;
|
||
#endif/*TCFG_AUDIO_DMS_SEL*/
|
||
#else/*SINGLE MIC*/
|
||
AEC_CONFIG cfg;
|
||
u8 agc_en;
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
} aec_update_t;
|
||
aec_update_t *aec_update = NULL;
|
||
|
||
static void aec_update_timer_deal(void *priv)
|
||
{
|
||
AEC_ONLINE_LOG("aec_update_timer_deal");
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
aec_dms_cfg_update(&aec_update->cfg);
|
||
#else
|
||
aec_cfg_update(&aec_update->cfg);
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
sys_timer_del(aec_update->timer);
|
||
aec_update->timer = 0;
|
||
}
|
||
|
||
int aec_cfg_online_update(int root_cmd, void *packet)
|
||
{
|
||
if ((root_cmd != 0x3000) && (root_cmd != 0x3100) &&
|
||
(root_cmd != 0x3200) && (root_cmd != 0x3300) &&
|
||
(root_cmd != 0x3400) && (root_cmd != 0x3500)) {
|
||
return -1;
|
||
}
|
||
if (aec_update->update == AEC_UPDATE_CLOSE) {
|
||
return 0;
|
||
}
|
||
u8 update = 1;
|
||
aec_online_t *cfg = packet;
|
||
int id = cfg->id;
|
||
//AEC_ONLINE_LOG("AEC_TYPE[0x30xx:SMS 0x31xx:DMS]:%x",root_cmd);
|
||
//AEC_ONLINE_LOG("aec_cfg_id:%x,val:%d", cfg->id, (int)cfg->val_int);
|
||
//AEC_ONLINE_FLOG(cfg->val_float);
|
||
if (id >= ENC_Process_MaxFreq) {
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
AEC_ONLINE_LOG("ENC cfg update\n");
|
||
switch (id) {
|
||
#if (TCFG_AUDIO_DMS_SEL == DMS_NORMAL)
|
||
case ENC_Process_MaxFreq:
|
||
AEC_ONLINE_LOG("ENC_Process_MaxFreq:%d\n", cfg->val_int);
|
||
aec_update->cfg.enc_process_maxfreq = cfg->val_int;
|
||
break;
|
||
case ENC_Process_MinFreq:
|
||
AEC_ONLINE_LOG("ENC_Process_MinFreq:%d\n", cfg->val_int);
|
||
aec_update->cfg.enc_process_minfreq = cfg->val_int;
|
||
break;
|
||
case ENC_SIR_MaxFreq:
|
||
AEC_ONLINE_LOG("ENC_SIR_MaxFreq:%d\n", cfg->val_int);
|
||
aec_update->cfg.sir_maxfreq = cfg->val_int;
|
||
break;
|
||
case ENC_MIC_Distance:
|
||
AEC_ONLINE_LOG("ENC_MIC_Distance:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.mic_distance = cfg->val_float;
|
||
break;
|
||
case ENC_Target_Signal_Degradation:
|
||
AEC_ONLINE_LOG("ENC_Target_Signal_Degradation:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.target_signal_degradation = cfg->val_float;
|
||
break;
|
||
case ENC_AggressFactor:
|
||
AEC_ONLINE_LOG("ENC_AggressFactor:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.enc_aggressfactor = cfg->val_float;
|
||
break;
|
||
case ENC_MinSuppress:
|
||
AEC_ONLINE_LOG("ENC_MinSuppress:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.enc_minsuppress = cfg->val_float;
|
||
break;
|
||
#else/*TCFG_AUDIO_DMS_SEL == DMS_FLEXIBLE*/
|
||
case ENC_Suppress_Pre:
|
||
AEC_ONLINE_LOG("ENC_Suppress_Pre:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.enc_suppress_pre = cfg->val_float;
|
||
break;
|
||
case ENC_Suppress_Post:
|
||
AEC_ONLINE_LOG("ENC_Suppress_Post:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.enc_suppress_post = cfg->val_float;
|
||
break;
|
||
case ENC_MinSuppress:
|
||
AEC_ONLINE_LOG("ENC_MinSuppress:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.enc_minsuppress = cfg->val_float;
|
||
break;
|
||
case ENC_Disconverge_Thr:
|
||
AEC_ONLINE_LOG("ENC_Disconverge_Thr:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.enc_disconverge_erle_thr = cfg->val_float;
|
||
break;
|
||
|
||
#endif/*TCFG_AUDIO_DMS_SEL*/
|
||
default:
|
||
AEC_ONLINE_LOG("enc param default:%x\n", id, cfg->val_int);
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
break;
|
||
}
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
} else if (id >= AGC_NDT_FADE_IN) {
|
||
AEC_ONLINE_LOG("AGC cfg update\n");
|
||
switch (id) {
|
||
case AGC_NDT_FADE_IN:
|
||
AEC_ONLINE_LOG("AGC_NDT_FADE_IN:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.ndt_fade_in = cfg->val_float;
|
||
break;
|
||
case AGC_NDT_FADE_OUT:
|
||
AEC_ONLINE_LOG("AGC_NDT_FADE_OUT:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.ndt_fade_out = cfg->val_float;
|
||
break;
|
||
case AGC_DT_FADE_IN:
|
||
AEC_ONLINE_LOG("AGC_DT_FADE_IN:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.dt_fade_in = cfg->val_float;
|
||
break;
|
||
case AGC_DT_FADE_OUT:
|
||
AEC_ONLINE_LOG("AGC_DT_FADE_OUT:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.dt_fade_out = cfg->val_float;
|
||
break;
|
||
case AGC_NDT_MAX_GAIN:
|
||
AEC_ONLINE_LOG("AGC_NDT_MAX_GAIN:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.ndt_max_gain = cfg->val_float;
|
||
break;
|
||
case AGC_NDT_MIN_GAIN:
|
||
AEC_ONLINE_LOG("AGC_NDT_MIN_GAIN:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.ndt_min_gain = cfg->val_float;
|
||
break;
|
||
case AGC_NDT_SPEECH_THR:
|
||
AEC_ONLINE_LOG("AGC_NDT_SPEECH_THR:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.ndt_speech_thr = cfg->val_float;
|
||
break;
|
||
case AGC_DT_MAX_GAIN:
|
||
AEC_ONLINE_LOG("AGC_DT_MAX_GAIN:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.dt_max_gain = cfg->val_float;
|
||
break;
|
||
case AGC_DT_MIN_GAIN:
|
||
AEC_ONLINE_LOG("AGC_DT_MIN_GAIN:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.dt_min_gain = cfg->val_float;
|
||
break;
|
||
case AGC_DT_SPEECH_THR:
|
||
AEC_ONLINE_LOG("AGC_DT_SPEECH_THR:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.dt_speech_thr = cfg->val_float;
|
||
break;
|
||
case AGC_ECHO_PRESENT_THR:
|
||
AEC_ONLINE_LOG("AGC_ECHO_PRESENT_THR:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.echo_present_thr = cfg->val_float;
|
||
break;
|
||
}
|
||
} else if (id >= ANS_AggressFactor) {
|
||
AEC_ONLINE_LOG("ANS cfg update\n");
|
||
switch (id) {
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
case ANS_AggressFactor:
|
||
AEC_ONLINE_LOG("ANS_AggressFactor:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.aggressfactor = cfg->val_float;
|
||
break;
|
||
case ANS_MinSuppress:
|
||
AEC_ONLINE_LOG("ANS_MinSuppress:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.minsuppress = cfg->val_float;
|
||
break;
|
||
case ANS_MicNoiseLevel:
|
||
AEC_ONLINE_LOG("ANS_MicNoiseLevel:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.init_noise_lvl = cfg->val_float;
|
||
break;
|
||
#else
|
||
case ANS_AGGRESS:
|
||
AEC_ONLINE_LOG("ANS_AGGRESS:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.ans_aggress = cfg->val_float;
|
||
break;
|
||
case ANS_SUPPRESS:
|
||
AEC_ONLINE_LOG("ANS_SUPPRESS:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.ans_suppress = cfg->val_float;
|
||
break;
|
||
case DNS_GainFloor:
|
||
AEC_ONLINE_LOG("DNS_GainFloor:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.ans_suppress = cfg->val_float;
|
||
break;
|
||
case DNS_OverDrive:
|
||
AEC_ONLINE_LOG("DNS_OverDrive:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.ans_aggress = cfg->val_float;
|
||
break;
|
||
#endif
|
||
}
|
||
} else if (id >= NLP_ProcessMaxFreq) {
|
||
AEC_ONLINE_LOG("NLP cfg update\n");
|
||
switch (id) {
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
case NLP_ProcessMaxFreq:
|
||
AEC_ONLINE_LOG("NLP_ProcessMaxFreq:%d\n", cfg->val_int);
|
||
aec_update->cfg.nlp_process_maxfrequency = cfg->val_int;
|
||
break;
|
||
case NLP_ProcessMinFreq:
|
||
AEC_ONLINE_LOG("NLP_ProcessMinFreq:%d\n", cfg->val_int);
|
||
aec_update->cfg.nlp_process_minfrequency = cfg->val_int;
|
||
break;
|
||
case NLP_OverDrive:
|
||
AEC_ONLINE_LOG("NLP_OverDrive:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.overdrive = cfg->val_float;
|
||
break;
|
||
#else/*SINGLE MIC*/
|
||
case NLP_AGGRESS_FACTOR:
|
||
AEC_ONLINE_LOG("NLP_AGGRESS_FACTOR:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.es_aggress_factor = cfg->val_float;
|
||
break;
|
||
case NLP_MIN_SUPPRESS:
|
||
AEC_ONLINE_LOG("NLP_MIN_SUPPRESS:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.es_min_suppress = cfg->val_float;
|
||
break;
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
}
|
||
} else if (id >= AEC_ProcessMaxFreq) {
|
||
switch (id) {
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
case AEC_ProcessMaxFreq:
|
||
AEC_ONLINE_LOG("AEC_ProcessMaxFreq:%d\n", cfg->val_int);
|
||
aec_update->cfg.aec_process_maxfrequency = cfg->val_int;
|
||
break;
|
||
case AEC_ProcessMinFreq:
|
||
AEC_ONLINE_LOG("AEC_ProcessMinFreq:%d\n", cfg->val_int);
|
||
aec_update->cfg.aec_process_minfrequency = cfg->val_int;
|
||
break;
|
||
case AEC_AF_Lenght:
|
||
AEC_ONLINE_LOG("AEC_AF_Lenght:%d\n", cfg->val_int);
|
||
aec_update->cfg.af_length = cfg->val_int;
|
||
break;
|
||
#else/*SINGLE MIC*/
|
||
case AEC_DT_AGGRESS:
|
||
AEC_ONLINE_LOG("AEC_DT_AGGRESS:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.aec_dt_aggress = cfg->val_float;
|
||
case AEC_REFENGTHR:
|
||
AEC_ONLINE_LOG("AEC_REFENGTHR:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.aec_refengthr = cfg->val_float;
|
||
break;
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
}
|
||
} else {
|
||
AEC_ONLINE_LOG("General cfg update\n");
|
||
switch (id) {
|
||
case GENERAL_DAC:
|
||
AEC_ONLINE_LOG("DAC_Gain:%d\n", cfg->val_int);
|
||
aec_update->cfg.dac_again = cfg->val_int;
|
||
esco_dec_dac_gain_set(cfg->val_int);
|
||
update = 0;
|
||
break;
|
||
case GENERAL_MIC:
|
||
AEC_ONLINE_LOG("Mic_Gain:%d\n", cfg->val_int);
|
||
aec_update->cfg.mic_again = cfg->val_int;
|
||
#if (TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_0)
|
||
esco_enc_mic_gain_set(cfg->val_int);
|
||
#endif/*TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_0*/
|
||
#if (TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_1)
|
||
esco_enc_mic1_gain_set(cfg->val_int);
|
||
#endif/*(TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_1)*/
|
||
#if (TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_2)
|
||
esco_enc_mic2_gain_set(cfg->val_int);
|
||
#endif/*(TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_2)*/
|
||
#if (TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_3)
|
||
esco_enc_mic3_gain_set(cfg->val_int);
|
||
#endif/*(TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_3)*/
|
||
update = 0;
|
||
break;
|
||
#if (TCFG_AUDIO_DMS_SEL == DMS_FLEXIBLE)
|
||
case GENERAL_MIC_1:
|
||
AEC_ONLINE_LOG("Mic1_Gain:%d\n", cfg->val_int);
|
||
aec_update->cfg.mic1_again = cfg->val_int;
|
||
esco_enc_mic1_gain_set(cfg->val_int);
|
||
update = 0;
|
||
break;
|
||
#endif/*TCFG_AUDIO_DMS_SEL*/
|
||
case GENERAL_ModuleEnable:
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
AEC_ONLINE_LOG("DMS EnableBit:%x", cfg->val_int);
|
||
aec_update->cfg.enable_module = cfg->val_int;
|
||
#else
|
||
AEC_ONLINE_LOG("SMS EnableBit:%x", cfg->val_int);
|
||
aec_update->cfg.aec_mode = cfg->val_int;
|
||
|
||
/*使用新配置工具后,兼容app在线调试*/
|
||
if (aec_update->cfg.aec_mode == 2) {
|
||
aec_update->cfg.aec_mode &= ~AEC_MODE_ADVANCE;
|
||
aec_update->cfg.aec_mode |= AEC_MODE_ADVANCE;
|
||
} else if (aec_update->cfg.aec_mode == 1) {
|
||
aec_update->cfg.aec_mode &= ~AEC_MODE_ADVANCE;
|
||
aec_update->cfg.aec_mode |= AEC_MODE_REDUCE;
|
||
} else {
|
||
aec_update->cfg.aec_mode &= ~AEC_MODE_ADVANCE;
|
||
}
|
||
if (aec_update->cfg.aec_mode) {
|
||
aec_update->cfg.aec_mode |= AGC_EN;
|
||
}
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
break;
|
||
case GENERAL_PC_ModuleEnable:
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
AEC_ONLINE_LOG("DMS EnableBit:%x", cfg->val_int);
|
||
aec_update->cfg.enable_module = cfg->val_int;
|
||
#else
|
||
AEC_ONLINE_LOG("SMS EnableBit:%x", cfg->val_int);
|
||
aec_update->cfg.aec_mode = cfg->val_int;
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
break;
|
||
case GENERAL_UL_EQ:
|
||
AEC_ONLINE_LOG("UL_EQ_EN:%d\n", cfg->val_int);
|
||
aec_update->cfg.ul_eq_en = cfg->val_int;
|
||
break;
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
#if (TCFG_AUDIO_DMS_SEL == DMS_NORMAL)
|
||
case GENERAL_Global_MinSuppress:
|
||
AEC_ONLINE_LOG("GlobalMinSuppress:");
|
||
AEC_ONLINE_FLOG(cfg->val_float);
|
||
aec_update->cfg.global_minsuppress = cfg->val_float;
|
||
break;
|
||
#endif/*TCFG_AUDIO_DMS_SEL*/
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
}
|
||
}
|
||
aec_update->update = AEC_UPDATE_ONLINE;
|
||
if (update && audio_aec_status()) {
|
||
if (aec_update->timer) {
|
||
sys_timer_modify(aec_update->timer, 500);
|
||
} else {
|
||
aec_update->timer = sys_timer_add(NULL, aec_update_timer_deal, 500);
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
int aec_cfg_online_init()
|
||
{
|
||
int ret = 0;
|
||
aec_update = zalloc(sizeof(aec_update_t));
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
#if (TCFG_AUDIO_DMS_SEL == DMS_NORMAL)
|
||
#if (TCFG_AUDIO_CVP_NS_MODE == CVP_ANS_MODE)
|
||
ret = syscfg_read(CFG_DMS_ID, &aec_update->cfg, sizeof(AEC_DMS_CONFIG));
|
||
#else/*CVP_DNS_MODE*/
|
||
ret = syscfg_read(CFG_DMS_DNS_ID, &aec_update->cfg, sizeof(AEC_DMS_CONFIG));
|
||
#endif/*TCFG_AUDIO_CVP_NS_MODE*/
|
||
if (ret == sizeof(AEC_DMS_CONFIG)) {
|
||
aec_update->update = AEC_UPDATE_INIT;
|
||
}
|
||
#else/*TCFG_AUDIO_DMS_SEL == DMS_FLEXIBLE*/
|
||
#if (TCFG_AUDIO_CVP_NS_MODE == CVP_ANS_MODE)
|
||
ret = syscfg_read(CFG_DMS_FLEXIBLE_ID, &aec_update->cfg, sizeof(DMS_FLEXIBLE_CONFIG));
|
||
#else/*CVP_DNS_MODE*/
|
||
ret = syscfg_read(CFG_DMS_DNS_FLEXIBLE_ID, &aec_update->cfg, sizeof(DMS_FLEXIBLE_CONFIG));
|
||
#endif/*TCFG_AUDIO_CVP_NS_MODE*/
|
||
if (ret == sizeof(DMS_FLEXIBLE_CONFIG)) {
|
||
aec_update->update = AEC_UPDATE_INIT;
|
||
}
|
||
#endif/*TCFG_AUDIO_DMS_SEL*/
|
||
#else/*SINGLE MIC*/
|
||
#if (TCFG_AUDIO_CVP_NS_MODE == CVP_ANS_MODE)
|
||
ret = syscfg_read(CFG_AEC_ID, &aec_update->cfg, sizeof(AEC_CONFIG));
|
||
#else/*CVP_DNS_MODE*/
|
||
ret = syscfg_read(CFG_SMS_DNS_ID, &aec_update->cfg, sizeof(AEC_CONFIG));
|
||
#endif/*TCFG_AUDIO_CVP_NS_MODE*/
|
||
if (ret == sizeof(AEC_CONFIG)) {
|
||
aec_update->update = AEC_UPDATE_INIT;
|
||
}
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
return 0;
|
||
}
|
||
|
||
/*return 1:有在线更新数据*/
|
||
/*return 0:没有在线更新数据*/
|
||
int aec_cfg_online_update_fill(void *cfg, u16 len)
|
||
{
|
||
if (aec_update && aec_update->update) {
|
||
memcpy(cfg, &aec_update->cfg, len);
|
||
|
||
return len;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
int aec_cfg_online_exit()
|
||
{
|
||
if (aec_update) {
|
||
free(aec_update);
|
||
aec_update = NULL;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
int get_aec_config(u8 *buf, int version)
|
||
{
|
||
#if 1/*每次获取update的配置*/
|
||
if (aec_update) {
|
||
printf("cfg_size:%d\n", sizeof(aec_update->cfg));
|
||
memcpy(buf, &aec_update->cfg, sizeof(aec_update->cfg));
|
||
|
||
#if (TCFG_AUDIO_DUAL_MIC_ENABLE == 0)
|
||
AEC_CONFIG *cfg = (AEC_CONFIG *)buf;
|
||
/*单麦aec_mode: app(旧)和pc端(兼容) */
|
||
if (version == 0x01) {
|
||
printf("APP version %d", version);
|
||
if (aec_update->cfg.aec_mode & AGC_EN) {
|
||
aec_update->agc_en = 1;
|
||
} else {
|
||
aec_update->agc_en = 0;
|
||
}
|
||
if ((aec_update->cfg.aec_mode & AEC_MODE_ADVANCE) == AEC_MODE_ADVANCE) {
|
||
cfg->aec_mode = 2;
|
||
} else if ((aec_update->cfg.aec_mode & AEC_MODE_ADVANCE) == AEC_MODE_REDUCE) {
|
||
cfg->aec_mode = 1;
|
||
} else {
|
||
cfg->aec_mode = 0;
|
||
}
|
||
} else if (version == 0x02) {
|
||
printf("PC version %d", version);
|
||
}
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
|
||
return sizeof(aec_update->cfg);
|
||
}
|
||
return 0;
|
||
#else/*每次获取原始配置*/
|
||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||
AEC_DMS_CONFIG cfg;
|
||
int ret = syscfg_read(CFG_DMS_ID, &cfg, sizeof(AEC_DMS_CONFIG));
|
||
if (ret == sizeof(AEC_DMS_CONFIG)) {
|
||
memcpy(buf, &cfg, sizeof(AEC_DMS_CONFIG));
|
||
return sizeof(AEC_DMS_CONFIG);
|
||
} else {
|
||
return 0;
|
||
}
|
||
#else
|
||
AEC_CONFIG cfg;
|
||
int ret = syscfg_read(CFG_AEC_ID, &cfg, sizeof(AEC_CONFIG));
|
||
if (ret == sizeof(AEC_CONFIG)) {
|
||
memcpy(buf, &cfg, sizeof(AEC_CONFIG));
|
||
return sizeof(AEC_CONFIG);
|
||
} else {
|
||
return 0;
|
||
}
|
||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||
#endif
|
||
}
|
||
#endif /*TCFG_AEC_TOOL_ONLINE_ENABLE*/
|
||
|
||
/*
|
||
***********************************************************************
|
||
* 导出通话过程的数据
|
||
*
|
||
*
|
||
***********************************************************************
|
||
*/
|
||
#if (TCFG_AUDIO_DATA_EXPORT_ENABLE == AUDIO_DATA_EXPORT_USE_SPP)
|
||
enum {
|
||
AEC_RECORD_COUNT = 0x200,
|
||
AEC_RECORD_START,
|
||
AEC_RECORD_STOP,
|
||
ONLINE_OP_QUERY_RECORD_PACKAGE_LENGTH,
|
||
};
|
||
|
||
enum {
|
||
AEC_ST_INIT,
|
||
AEC_ST_START,
|
||
AEC_ST_STOP,
|
||
};
|
||
|
||
#define AEC_RECORD_CH 2
|
||
#define AEC_RECORD_MTU 200
|
||
#define RECORD_CH0_LENGTH 644
|
||
#define RECORD_CH1_LENGTH 644
|
||
#define RECORD_CH2_LENGTH 644
|
||
|
||
typedef struct {
|
||
u8 state;
|
||
u8 ch; /*export data ch num*/
|
||
u16 send_timer;
|
||
u8 packet[256];
|
||
} aec_record_t;
|
||
aec_record_t *aec_rec = NULL;
|
||
|
||
typedef struct {
|
||
int cmd;
|
||
int data;
|
||
} rec_cmd_t;
|
||
|
||
extern int audio_capture_start(void);
|
||
extern void audio_capture_stop(void);
|
||
static int aec_online_parse(u8 *packet, u8 size, u8 *ext_data, u16 ext_size)
|
||
{
|
||
int res_data = 0;
|
||
rec_cmd_t rec_cmd;
|
||
int err = 0;
|
||
u8 parse_seq = ext_data[1];
|
||
//AEC_ONLINE_LOG("aec_spp_rx,seq:%d,size:%d\n", parse_seq, size);
|
||
//put_buf(packet, size);
|
||
memcpy(&rec_cmd, packet, sizeof(rec_cmd_t));
|
||
switch (rec_cmd.cmd) {
|
||
case AEC_RECORD_COUNT:
|
||
res_data = aec_rec->ch;
|
||
err = app_online_db_ack(parse_seq, (u8 *)&res_data, 4);
|
||
AEC_ONLINE_LOG("query record_ch num:%d\n", res_data);
|
||
break;
|
||
case AEC_RECORD_START:
|
||
err = app_online_db_ack(parse_seq, (u8 *)&res_data, 1); //该命令随便ack一个byte即可
|
||
aec_rec->state = AEC_ST_START;
|
||
audio_capture_start();
|
||
AEC_ONLINE_LOG("record_start\n");
|
||
break;
|
||
case AEC_RECORD_STOP:
|
||
AEC_ONLINE_LOG("record_stop\n");
|
||
audio_capture_stop();
|
||
aec_rec->state = AEC_ST_STOP;
|
||
app_online_db_ack(parse_seq, (u8 *)&res_data, 1); //该命令随便ack一个byte即可
|
||
break;
|
||
case ONLINE_OP_QUERY_RECORD_PACKAGE_LENGTH:
|
||
if (rec_cmd.data == 0) {
|
||
res_data = RECORD_CH0_LENGTH;
|
||
} else if (rec_cmd.data == 1) {
|
||
res_data = RECORD_CH1_LENGTH;
|
||
} else {
|
||
res_data = RECORD_CH2_LENGTH;
|
||
}
|
||
AEC_ONLINE_LOG("query record ch%d packet length:%d\n", rec_cmd.data, res_data);
|
||
err = app_online_db_ack(parse_seq, (u8 *)&res_data, 4); //回复对应的通道数据长度
|
||
break;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
static void aec_export_timer(void *priv)
|
||
{
|
||
int err = 0;
|
||
if (aec_rec->state) {
|
||
putchar('.');
|
||
#if 1
|
||
static u8 data = 0;
|
||
memset(aec_rec->packet, data, 128);
|
||
data++;
|
||
#endif
|
||
err = app_online_db_send(DB_PKT_TYPE_DAT_CH0, aec_rec->packet, AEC_RECORD_MTU);
|
||
if (err) {
|
||
printf("w0_err:%d", err);
|
||
}
|
||
err = app_online_db_send(DB_PKT_TYPE_DAT_CH1, aec_rec->packet, AEC_RECORD_MTU);
|
||
if (err) {
|
||
printf("w1_err:%d", err);
|
||
}
|
||
} else {
|
||
//putchar('S');
|
||
}
|
||
}
|
||
|
||
int spp_data_export(u8 ch, u8 *buf, u16 len)
|
||
{
|
||
u8 data_ch;
|
||
if (aec_rec->state == AEC_ST_START) {
|
||
putchar('.');
|
||
if (ch == 0) {
|
||
data_ch = DB_PKT_TYPE_DAT_CH0;
|
||
} else if (ch == 1) {
|
||
data_ch = DB_PKT_TYPE_DAT_CH1;
|
||
} else {
|
||
data_ch = DB_PKT_TYPE_DAT_CH2;
|
||
}
|
||
int err = app_online_db_send_more(data_ch, buf, len);
|
||
if (err) {
|
||
r_printf("tx_err:%d", err);
|
||
//return -1;
|
||
}
|
||
return len;
|
||
} else {
|
||
//putchar('x');
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
int aec_data_export_init(u8 ch)
|
||
{
|
||
aec_rec = zalloc(sizeof(aec_record_t));
|
||
//aec_rec->send_timer = sys_timer_add(NULL, aec_export_timer, 16);
|
||
aec_rec->ch = ch;
|
||
app_online_db_register_handle(DB_PKT_TYPE_EXPORT, aec_online_parse);
|
||
//app_online_db_register_handle(DB_PKT_TYPE_MIC_DUT, mic_dut_online_parse);
|
||
return 0;
|
||
}
|
||
|
||
int aec_data_export_exit()
|
||
{
|
||
if (aec_rec) {
|
||
if (aec_rec->send_timer) {
|
||
sys_timer_del(aec_rec->send_timer);
|
||
aec_rec->send_timer = 0;
|
||
}
|
||
free(aec_rec);
|
||
aec_rec = NULL;
|
||
}
|
||
return 0;
|
||
}
|
||
#endif /*TCFG_AUDIO_DATA_EXPORT_ENABLE*/
|
||
|
||
#if 0
|
||
static u8 aec_online_idle_query(void)
|
||
{
|
||
//return ((aec_rec == NULL) ? 1 : 0);
|
||
return 0;
|
||
}
|
||
|
||
REGISTER_LP_TARGET(aec_online_lp_target) = {
|
||
.name = "aec_online",
|
||
.is_idle = aec_online_idle_query,
|
||
};
|
||
#endif
|