504 lines
15 KiB
C
504 lines
15 KiB
C
|
|
#include "app_config.h"
|
||
|
|
#if ((defined TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN) && TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN && \
|
||
|
|
TCFG_AUDIO_ANC_ENABLE)
|
||
|
|
#include "system/task.h"
|
||
|
|
#include "icsd_adt.h"
|
||
|
|
#include "icsd_adt_app.h"
|
||
|
|
#include "classic/tws_api.h"
|
||
|
|
#include "icsd_anc.h"
|
||
|
|
#include "tone_player.h"
|
||
|
|
#include "icsd_anc_user.h"
|
||
|
|
|
||
|
|
#define ICSD_ADT_TASK_NAME "icsd_adt"
|
||
|
|
|
||
|
|
const u8 VDT_TRAIN_EN = 0;
|
||
|
|
|
||
|
|
u8 adt_task = 0;
|
||
|
|
u8 src_task = 0;
|
||
|
|
int (*adt_printf)(const char *format, ...);
|
||
|
|
int (*wat_printf)(const char *format, ...);
|
||
|
|
int (*ein_printf)(const char *format, ...);
|
||
|
|
int printf_off(const char *format, ...)
|
||
|
|
{
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
#define ADT_DATA_DEBUG 0
|
||
|
|
void icsd_adt_run_output(__adt_result *adt_result)
|
||
|
|
{
|
||
|
|
u8 voice_state = adt_result->voice_state;
|
||
|
|
u8 wind_lvl = adt_result->wind_lvl;
|
||
|
|
u8 wat_result = adt_result->wat_result;
|
||
|
|
u8 ein_state = adt_result->ein_state;
|
||
|
|
|
||
|
|
#if ADT_DATA_DEBUG
|
||
|
|
extern void icsd_adt_output_demo(__adt_result * adt_result);
|
||
|
|
icsd_adt_output_demo(adt_result);
|
||
|
|
#else
|
||
|
|
void audio_acoustic_detector_output_hdl(u8 voice_state, u8 wind_lvl, u8 wat_result);
|
||
|
|
audio_acoustic_detector_output_hdl(voice_state, wind_lvl, wat_result);
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
#define AUDIO_ADC_CH0 BIT(0)
|
||
|
|
#define AUDIO_ADC_CH1 BIT(1)
|
||
|
|
#define AUDIO_ADC_CH2 BIT(2)
|
||
|
|
#define AUDIO_ADC_CH3 BIT(3)
|
||
|
|
void icsd_adt_mic_ch_analog_open(u32 ch)
|
||
|
|
{
|
||
|
|
if (ch & AUDIO_ADC_CH0) {
|
||
|
|
/*close mic0 analog config*/
|
||
|
|
SFR(JL_ADDA->ADA_CON4, 15, 1, 0); // AUDADC_MICA_BUFP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON4, 14, 1, 0); // AUDADC_MICA_BUFN_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON4, 4, 1, 1); // AUDADC_MICA_AMP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 8, 1, 1); // AUDADC_CHA_S2_RSTB_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 7, 1, 1); // AUDADC_CHA_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 6, 1, 1); // AUDADC_CHA_BIAS_EN_10v
|
||
|
|
}
|
||
|
|
if (ch & AUDIO_ADC_CH1) {
|
||
|
|
/*close mic1 analog config*/
|
||
|
|
SFR(JL_ADDA->ADA_CON5, 15, 1, 0); // AUDADC_MICB_BUFP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON5, 14, 1, 0); // AUDADC_MICB_BUFN_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON5, 4, 1, 1); // AUDADC_MICB_AMP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 11, 1, 1); // AUDADC_CHB_S2_RSTB_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 10, 1, 1); // AUDADC_CHB_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 9, 1, 1); // AUDADC_CHB_BIAS_EN_10v
|
||
|
|
}
|
||
|
|
if (ch & AUDIO_ADC_CH2) {
|
||
|
|
/*close mic2 analog config*/
|
||
|
|
SFR(JL_ADDA->ADA_CON6, 15, 1, 0); // AUDADC_MICC_BUFP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON6, 14, 1, 0); // AUDADC_MICC_BUFN_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON6, 4, 1, 1); // AUDADC_MICC_AMP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 14, 1, 1); // AUDADC_CHC_S2_RSTB_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 13, 1, 1); // AUDADC_CHC_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 12, 1, 1); // AUDADC_CHC_BIAS_EN_10v
|
||
|
|
}
|
||
|
|
if (ch & AUDIO_ADC_CH3) {
|
||
|
|
/*close mic3 analog config*/
|
||
|
|
SFR(JL_ADDA->ADA_CON7, 15, 1, 0); // AUDADC_MICD_BUFP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON7, 14, 1, 0); // AUDADC_MICD_BUFN_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON7, 4, 1, 1); // AUDADC_MICD_AMP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 17, 1, 1); // AUDADC_CHD_S2_RSTB_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 16, 1, 1); // AUDADC_CHD_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 15, 1, 1); // AUDADC_CHD_BIAS_EN_10v
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_mic_ch_analog_close(u32 ch)
|
||
|
|
{
|
||
|
|
if (ch & AUDIO_ADC_CH0) {
|
||
|
|
/*close mic0 analog config*/
|
||
|
|
SFR(JL_ADDA->ADA_CON4, 15, 1, 0); // AUDADC_MICA_BUFP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON4, 14, 1, 0); // AUDADC_MICA_BUFN_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON4, 4, 1, 0); // AUDADC_MICA_AMP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 8, 1, 0); // AUDADC_CHA_S2_RSTB_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 7, 1, 0); // AUDADC_CHA_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 6, 1, 0); // AUDADC_CHA_BIAS_EN_10v
|
||
|
|
}
|
||
|
|
if (ch & AUDIO_ADC_CH1) {
|
||
|
|
/*close mic1 analog config*/
|
||
|
|
SFR(JL_ADDA->ADA_CON5, 15, 1, 0); // AUDADC_MICB_BUFP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON5, 14, 1, 0); // AUDADC_MICB_BUFN_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON5, 4, 1, 0); // AUDADC_MICB_AMP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 11, 1, 0); // AUDADC_CHB_S2_RSTB_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 10, 1, 0); // AUDADC_CHB_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 9, 1, 0); // AUDADC_CHB_BIAS_EN_10v
|
||
|
|
}
|
||
|
|
if (ch & AUDIO_ADC_CH2) {
|
||
|
|
/*close mic2 analog config*/
|
||
|
|
SFR(JL_ADDA->ADA_CON6, 15, 1, 0); // AUDADC_MICC_BUFP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON6, 14, 1, 0); // AUDADC_MICC_BUFN_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON6, 4, 1, 0); // AUDADC_MICC_AMP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 14, 1, 0); // AUDADC_CHC_S2_RSTB_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 13, 1, 0); // AUDADC_CHC_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 12, 1, 0); // AUDADC_CHC_BIAS_EN_10v
|
||
|
|
}
|
||
|
|
if (ch & AUDIO_ADC_CH3) {
|
||
|
|
/*close mic3 analog config*/
|
||
|
|
SFR(JL_ADDA->ADA_CON7, 15, 1, 0); // AUDADC_MICD_BUFP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON7, 14, 1, 0); // AUDADC_MICD_BUFN_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON7, 4, 1, 0); // AUDADC_MICD_AMP_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 17, 1, 0); // AUDADC_CHD_S2_RSTB_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 16, 1, 0); // AUDADC_CHD_EN_10v
|
||
|
|
SFR(JL_ADDA->ADA_CON1, 15, 1, 0); // AUDADC_CHD_BIAS_EN_10v
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
u8 talk_mic_analog_close = 0;
|
||
|
|
u8 audio_adt_talk_mic_analog_close()
|
||
|
|
{
|
||
|
|
if (talk_mic_analog_close == 0) {
|
||
|
|
printf("-----------audio_adt_talk_mic_analog_close\n");
|
||
|
|
u8 talk_mic_ch = icsd_get_talk_mic_ch();
|
||
|
|
icsd_adt_mic_ch_analog_close(talk_mic_ch);
|
||
|
|
talk_mic_analog_close = 1;
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
u8 audio_adt_talk_mic_analog_open()
|
||
|
|
{
|
||
|
|
if (talk_mic_analog_close) {
|
||
|
|
printf("-----------audio_adt_talk_mic_analog_open\n");
|
||
|
|
u8 talk_mic_ch = icsd_get_talk_mic_ch();
|
||
|
|
icsd_adt_mic_ch_analog_open(talk_mic_ch);
|
||
|
|
talk_mic_analog_close = 0;
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
float adt_pow10(float n)
|
||
|
|
{
|
||
|
|
float pow10n = exp_float((float)n / log10_float(exp_float((float)1.0)));
|
||
|
|
return pow10n;
|
||
|
|
}
|
||
|
|
|
||
|
|
u32 icsd_adt_get_role()
|
||
|
|
{
|
||
|
|
return tws_api_get_role();
|
||
|
|
}
|
||
|
|
|
||
|
|
u32 icsd_adt_get_tws_state()
|
||
|
|
{
|
||
|
|
return tws_api_get_tws_state();
|
||
|
|
}
|
||
|
|
|
||
|
|
#define TWS_FUNC_ID_SDADT_M2S TWS_FUNC_ID('A', 'D', 'T', 'M')
|
||
|
|
REGISTER_TWS_FUNC_STUB(icsd_adt_m2s) = {
|
||
|
|
.func_id = TWS_FUNC_ID_SDADT_M2S,
|
||
|
|
.func = icsd_adt_m2s_cb,
|
||
|
|
};
|
||
|
|
#define TWS_FUNC_ID_SDADT_S2M TWS_FUNC_ID('A', 'D', 'T', 'S')
|
||
|
|
REGISTER_TWS_FUNC_STUB(icsd_adt_s2m) = {
|
||
|
|
.func_id = TWS_FUNC_ID_SDADT_S2M,
|
||
|
|
.func = icsd_adt_s2m_cb,
|
||
|
|
};
|
||
|
|
|
||
|
|
void icsd_adt_tws_m2s(u8 cmd)
|
||
|
|
{
|
||
|
|
local_irq_disable();
|
||
|
|
s8 data[8];
|
||
|
|
icsd_adt_m2s_packet(data, cmd);
|
||
|
|
int ret = tws_api_send_data_to_sibling(data, 8, TWS_FUNC_ID_SDADT_M2S);
|
||
|
|
local_irq_enable();
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_tws_s2m(u8 cmd)
|
||
|
|
{
|
||
|
|
local_irq_disable();
|
||
|
|
s8 data[8];
|
||
|
|
icsd_adt_s2m_packet(data, cmd);
|
||
|
|
int ret = tws_api_send_data_to_sibling(data, 8, TWS_FUNC_ID_SDADT_S2M);
|
||
|
|
local_irq_enable();
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_anc_dma_on(u8 out_sel, int *buf, int len)
|
||
|
|
{
|
||
|
|
anc_dma_on_double(out_sel, buf, len);
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_dma_done()
|
||
|
|
{
|
||
|
|
icsd_acoustic_detector_ancdma_done();
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_hw_suspend()
|
||
|
|
{
|
||
|
|
anc_core_dma_ie(0);
|
||
|
|
anc_core_dma_stop();
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_hw_resume()
|
||
|
|
{
|
||
|
|
audio_acoustic_detector_updata();
|
||
|
|
icsd_adt_szout_init();
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_FFT_radix256(int *in_cur, int *out)
|
||
|
|
{
|
||
|
|
u32 fft_config;
|
||
|
|
fft_config = hw_fft_config(256, 8, 1, 0, 1);
|
||
|
|
hw_fft_run(fft_config, in_cur, out);
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_FFT_radix128(int *in_cur, int *out)
|
||
|
|
{
|
||
|
|
u32 fft_config;
|
||
|
|
fft_config = hw_fft_config(128, 7, 1, 0, 1);
|
||
|
|
hw_fft_run(fft_config, in_cur, out);
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_FFT_radix64(int *in_cur, int *out)
|
||
|
|
{
|
||
|
|
u32 fft_config;
|
||
|
|
fft_config = hw_fft_config(64, 6, 1, 0, 1);
|
||
|
|
hw_fft_run(fft_config, in_cur, out);
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_post_anctask_msg(u8 cmd)
|
||
|
|
{
|
||
|
|
audio_anc_post_msg_adt(cmd);
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_post_adttask_msg(u8 cmd)
|
||
|
|
{
|
||
|
|
if (adt_task == 1) {
|
||
|
|
os_taskq_post_msg("icsd_adt", 1, cmd);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_post_srctask_msg(u8 cmd)
|
||
|
|
{
|
||
|
|
if (src_task == 1) {
|
||
|
|
os_taskq_post_msg("icsd_src", 1, cmd);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_task(void *priv)
|
||
|
|
{
|
||
|
|
int res = 0;
|
||
|
|
int msg[30];
|
||
|
|
while (1) {
|
||
|
|
res = os_taskq_pend(NULL, msg, ARRAY_SIZE(msg));
|
||
|
|
if (res == OS_TASKQ) {
|
||
|
|
icsd_adt_task_handler(msg[1]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_task_create()
|
||
|
|
{
|
||
|
|
if (adt_task == 0) {
|
||
|
|
task_create(icsd_adt_task, NULL, ICSD_ADT_TASK_NAME);
|
||
|
|
adt_task = 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_task_kill()
|
||
|
|
{
|
||
|
|
if (adt_task == 1) {
|
||
|
|
task_kill(ICSD_ADT_TASK_NAME);
|
||
|
|
adt_task = 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_src_task(void *priv)
|
||
|
|
{
|
||
|
|
int res = 0;
|
||
|
|
int msg[30];
|
||
|
|
while (1) {
|
||
|
|
res = os_taskq_pend(NULL, msg, ARRAY_SIZE(msg));
|
||
|
|
if (res == OS_TASKQ) {
|
||
|
|
icsd_src_task_handler(msg[1]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_src_task_create()
|
||
|
|
{
|
||
|
|
if (src_task == 0) {
|
||
|
|
task_create(icsd_src_task, NULL, "icsd_src");
|
||
|
|
src_task = 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_src_task_kill()
|
||
|
|
{
|
||
|
|
if (src_task == 1) {
|
||
|
|
task_kill("icsd_src");
|
||
|
|
src_task = 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_start()
|
||
|
|
{
|
||
|
|
adt_printf = _adt_printf;
|
||
|
|
wat_printf = _wat_printf;
|
||
|
|
ein_printf = _ein_printf;
|
||
|
|
printf("icsd_adt_start====================================\n");
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_szout_init()
|
||
|
|
{
|
||
|
|
#if ADT_USE_ADAPTIVE_SZ
|
||
|
|
extern float icsd_anc_sz_data[120 + 40];
|
||
|
|
extern float icsd_anc_pz_data[120 + 40];
|
||
|
|
extern u8 sz_out_exist;//需要打开自适应ANC库中的 自适应SZ输出使能:ANC_SZ_OUT_EN
|
||
|
|
icsd_adt_szout_set(icsd_anc_sz_data, icsd_anc_pz_data, sz_out_exist);
|
||
|
|
#else
|
||
|
|
icsd_adt_szout_set(0, 0, 0);
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
const u16 ADT_DEBUG_INF = 0;//ADT_INF_1;//state
|
||
|
|
//state = 1, pwr = 7, dov = 8, angle_err = 7, angle_tlk = 3
|
||
|
|
const u8 adt_errpxx_dB_thr = 80;//60;
|
||
|
|
const u8 adt_err_zcv_thr = 10;//12;
|
||
|
|
const u8 pwr_inside_even_flag0_thr = 5; //pwr
|
||
|
|
const u8 angle_err_even_flag0_thr = 3;//4; //angle_err
|
||
|
|
const u8 angle_talk_even_flag0_thr = 2; //angle_tlk
|
||
|
|
const u16 f1f2_angsum_thr = 200;
|
||
|
|
#ifndef ADT_CLIENT_BOARD
|
||
|
|
const u8 final_speech_even_thr = 4; //dov
|
||
|
|
|
||
|
|
|
||
|
|
const u8 ADT_TWS_MODE = 1;
|
||
|
|
const u8 ADT_DET_VER = 6;
|
||
|
|
const u8 ADT_PATH_CONFIG = ADT_PATH_DAC_SRC_EN | ADT_PATH_3M_EN;
|
||
|
|
const u8 ADT_EIN_VER = ADT_EIN_TWS_V0;
|
||
|
|
const float ref_gain_sel = 3;
|
||
|
|
const float err_gain_sel = 3;
|
||
|
|
u8 pnc_ref_pwr_thr = 160;
|
||
|
|
u8 pnc_err_pwr_thr = 100;
|
||
|
|
u8 tpc_ref_pwr_thr = 120;
|
||
|
|
u8 tpc_err_pwr_thr = 100;
|
||
|
|
u8 anc_ref_pwr_thr = 120;
|
||
|
|
u8 anc_err_pwr_thr = 100;
|
||
|
|
|
||
|
|
const float wat_pn_gain = 0.22;
|
||
|
|
const float wat_bypass_gain = 16;
|
||
|
|
const float wat_anc_gain = 0.22;
|
||
|
|
|
||
|
|
const float wdac_senc = 0.7; //越小播音乐时灵敏度越高
|
||
|
|
const float wdac[8] = { 0.35, 0.54, 0.57, 0.48, 0.37, 0.22, 0.38, 0.37};//播放音乐/100
|
||
|
|
const float wref[8] = {1.62, 0.90, 0.71, 0.60, 0.54, 0.50, 0.47, 0.46};//播放外部噪声
|
||
|
|
const float wref_tran[8] = {1.82, 1.80, 1.58, 1.30, 1.16, 1.12, 1.11, 1.12};
|
||
|
|
const float wref_ancs[8] = {1.92, 0.48, 0.07, 0.03, 0.05, 0.06, 0.06, 0.04 };
|
||
|
|
const float fdac[8] = {0.18, 0.051, 0.02, 0.02, 0.02, 0.02, 0.02, 0.05};//播放音乐/1000
|
||
|
|
u8 icsd_get_ang_flag(float *_target_angle)
|
||
|
|
{
|
||
|
|
u8 af1 = _target_angle[1] > 15 || _target_angle[1] < -130;
|
||
|
|
u8 af2 = _target_angle[2] > 15 || _target_angle[2] < -130;
|
||
|
|
u8 af3 = _target_angle[3] > 15 || _target_angle[3] < -130;
|
||
|
|
u8 ang_flag = af1 && af2 && af3;
|
||
|
|
/* printf("get ang flag:%d\n", ang_flag); */
|
||
|
|
return ang_flag;
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_ein_parm_HT03(__icsd_adt_parm *_ADT_PARM)
|
||
|
|
{
|
||
|
|
_ADT_PARM->anc_in_pz_sum = -80;
|
||
|
|
_ADT_PARM->anc_out_pz_sum = 0;
|
||
|
|
_ADT_PARM->anc_in_sz_mean = 1;
|
||
|
|
_ADT_PARM->anc_out_sz_mean = -12;
|
||
|
|
_ADT_PARM->anc_in_fb_sum = 60;
|
||
|
|
_ADT_PARM->anc_out_fb_sum = 30;
|
||
|
|
|
||
|
|
_ADT_PARM->pnc_in_pz_sum = -80;
|
||
|
|
_ADT_PARM->pnc_out_pz_sum = 0;
|
||
|
|
_ADT_PARM->pnc_in_sz_mean = 1;
|
||
|
|
_ADT_PARM->pnc_out_sz_mean = -12;
|
||
|
|
_ADT_PARM->pnc_in_fb_sum = 60;
|
||
|
|
_ADT_PARM->pnc_out_fb_sum = 30;
|
||
|
|
|
||
|
|
_ADT_PARM->trans_in_pz_sum = 2;
|
||
|
|
_ADT_PARM->trans_out_pz_sum = 26;
|
||
|
|
_ADT_PARM->trans_in_sz_mean = 2;
|
||
|
|
_ADT_PARM->trans_out_sz_mean = -7;
|
||
|
|
_ADT_PARM->trans_in_fb_sum = 20;
|
||
|
|
_ADT_PARM->trans_out_fb_sum = -20;
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_voice_board_data()
|
||
|
|
{
|
||
|
|
__icsd_adt_parm *ADT_PARM;
|
||
|
|
ADT_PARM = zalloc(sizeof(__icsd_adt_parm));
|
||
|
|
|
||
|
|
extern const float HT03_ADT_FLOAT_DATA[];
|
||
|
|
extern const float HT03_sz_out_data[28];
|
||
|
|
extern const float HT03_pz_out_data[28];
|
||
|
|
ADT_PARM->adt_float_data = (void *)HT03_ADT_FLOAT_DATA;
|
||
|
|
ADT_PARM->sz_inptr = (float *)HT03_sz_out_data;
|
||
|
|
ADT_PARM->pz_inptr = (float *)HT03_pz_out_data;
|
||
|
|
icsd_adt_ein_parm_HT03(ADT_PARM);
|
||
|
|
|
||
|
|
icsd_adt_parm_set(ADT_PARM);
|
||
|
|
free(ADT_PARM);
|
||
|
|
|
||
|
|
icsd_adt_szout_init();
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
|
||
|
|
#include "icsd_adt_client_board.c"
|
||
|
|
|
||
|
|
#endif/*ADC_CLIENT_BOARD*/
|
||
|
|
|
||
|
|
|
||
|
|
//=======================================================================================================
|
||
|
|
|
||
|
|
#if ADT_DATA_DEBUG
|
||
|
|
|
||
|
|
void icsd_play_num0()
|
||
|
|
{
|
||
|
|
icsd_adt_tone_play(ICSD_ADT_TONE_NUM0);
|
||
|
|
}
|
||
|
|
void icsd_play_num1()
|
||
|
|
{
|
||
|
|
icsd_adt_tone_play(ICSD_ADT_TONE_NUM1);
|
||
|
|
}
|
||
|
|
void icsd_play_num2()
|
||
|
|
{
|
||
|
|
icsd_adt_tone_play(ICSD_ADT_TONE_NUM2);
|
||
|
|
}
|
||
|
|
void icsd_play_num3()
|
||
|
|
{
|
||
|
|
icsd_adt_tone_play(ICSD_ADT_TONE_NUM3);
|
||
|
|
}
|
||
|
|
void icsd_play_normal()
|
||
|
|
{
|
||
|
|
icsd_adt_tone_play(ICSD_ADT_TONE_NORMAL);
|
||
|
|
}
|
||
|
|
|
||
|
|
void icsd_adt_output_demo(__adt_result *adt_result)
|
||
|
|
{
|
||
|
|
#if ADT_EAR_IN_EN
|
||
|
|
static u8 hold = 0;
|
||
|
|
static u8 hold_flg = 0;
|
||
|
|
static int hold_time = 0;
|
||
|
|
if (adt_result->ein_state == 0) {
|
||
|
|
hold = 1;
|
||
|
|
hold_flg = 1;
|
||
|
|
hold_time = 0;
|
||
|
|
printf("------------------------------------------------------------------ein state:0\n");
|
||
|
|
} else {
|
||
|
|
if (hold_flg) {
|
||
|
|
hold_flg = 0;
|
||
|
|
hold_time = jiffies;
|
||
|
|
printf("set hold time:%d\n", hold_time);
|
||
|
|
}
|
||
|
|
if ((hold_time > 0) && (hold)) {
|
||
|
|
if (jiffies > (hold_time + 100)) {
|
||
|
|
printf("hold time out:%d\n", jiffies);
|
||
|
|
hold = 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
printf("--------------------------------ein state:1\n");
|
||
|
|
}
|
||
|
|
if (hold) {
|
||
|
|
//return;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
if (adt_result->wind_lvl) {
|
||
|
|
printf("------wind lvl:%d\n", adt_result->wind_lvl);
|
||
|
|
}
|
||
|
|
if (adt_result->voice_state) {
|
||
|
|
icsd_play_normal();
|
||
|
|
}
|
||
|
|
switch (adt_result->wat_result) {
|
||
|
|
case 2:
|
||
|
|
icsd_play_num2();
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
icsd_play_num3();
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#endif /*ADT_DATA_DEBUG*/
|
||
|
|
|
||
|
|
#endif /*(defined TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN) && TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN*/
|
||
|
|
|