完成JM207功能

This commit is contained in:
FlyM 2026-03-21 05:58:54 +08:00
parent 59905ee18c
commit 1a0d74bdfe
11 changed files with 50714 additions and 51701 deletions

View File

@ -45,7 +45,7 @@
//*********************************************************************************// //*********************************************************************************//
#define TCFG_UART0_ENABLE ENABLE_THIS_MOUDLE //串口打印模块使能 #define TCFG_UART0_ENABLE ENABLE_THIS_MOUDLE //串口打印模块使能
#define TCFG_UART0_RX_PORT NO_CONFIG_PORT //串口接收脚配置用于打印可以选择NO_CONFIG_PORT #define TCFG_UART0_RX_PORT NO_CONFIG_PORT //串口接收脚配置用于打印可以选择NO_CONFIG_PORT
#define TCFG_UART0_TX_PORT IO_PORTA_09 //串口发送脚配置 #define TCFG_UART0_TX_PORT IO_PORT_DP //串口发送脚配置
#define TCFG_UART0_BAUDRATE 1000000 //串口波特率配置 #define TCFG_UART0_BAUDRATE 1000000 //串口波特率配置
//*********************************************************************************// //*********************************************************************************//
@ -397,7 +397,7 @@ DAC硬件上的连接方式,可选的配置:
#define LINEIN_INPUT_WAY LINEIN_INPUT_WAY_ADC //LINEIN_INPUT_WAY_ANALOG #define LINEIN_INPUT_WAY LINEIN_INPUT_WAY_ADC //LINEIN_INPUT_WAY_ANALOG
#define AUDIO_OUTPUT_AUTOMUTE 1//ENABLE #define AUDIO_OUTPUT_AUTOMUTE 1//ENABLE
#define DAC_AUTO_HIGH_Z_EN DISABLE //处理直推串音问题, 隔直不要开 #define DAC_AUTO_HIGH_Z_EN 0 //DISABLE //处理直推串音问题, 隔直不要开
/* /*
* *
@ -542,8 +542,8 @@ DAC硬件上的连接方式,可选的配置:
//*********************************************************************************// //*********************************************************************************//
// 新音箱配置工具 && 调音工具 // // 新音箱配置工具 && 调音工具 //
//*********************************************************************************// //*********************************************************************************//
#define TCFG_SOUNDBOX_TOOL_ENABLE ENABLE //是否支持音箱在线配置工具 #define TCFG_SOUNDBOX_TOOL_ENABLE 0 //是否支持音箱在线配置工具
#define TCFG_EFFECT_TOOL_ENABLE ENABLE //是否支持在线音效调试,使能该项还需使能EQ总使能TCFG_EQ_ENABL, #define TCFG_EFFECT_TOOL_ENABLE 0 //是否支持在线音效调试,使能该项还需使能EQ总使能TCFG_EQ_ENABL,
#define TCFG_NULL_COMM 0 //不支持通信 #define TCFG_NULL_COMM 0 //不支持通信
#define TCFG_UART_COMM 1 //串口通信 #define TCFG_UART_COMM 1 //串口通信
#define TCFG_USB_COMM 2 //USB通信 #define TCFG_USB_COMM 2 //USB通信

View File

@ -1238,7 +1238,7 @@ void bt_status_connect(struct bt_event *bt)
#endif #endif
/* log_debug("tone status:%d\n", tone_get_status()); */ /* log_debug("tone status:%d\n", tone_get_status()); */
if (get_call_status() == BT_CALL_HANGUP) { if (get_call_status() == BT_CALL_HANGUP) {
bt_tone_play_index(IDEX_TONE_BT_CONN, 1, NULL); //bt_tone_play_index(IDEX_TONE_BT_CONN, 1, NULL);
} }
} }
@ -1353,7 +1353,7 @@ void bt_status_disconnect(struct bt_event *bt)
{ {
if (!app_var.goto_poweroff_flag) { /*关机不播断开提示音*/ if (!app_var.goto_poweroff_flag) { /*关机不播断开提示音*/
if (!__this->ignore_discon_tone) { if (!__this->ignore_discon_tone) {
bt_tone_play_index(IDEX_TONE_BT_DISCONN, 1, NULL); //bt_tone_play_index(IDEX_TONE_BT_DISCONN, 1, NULL);
} }
} }
} }

View File

@ -62,28 +62,28 @@ void *fmtx_digvol_last_entry = NULL;
struct audio_stream_entry *fmtx_last_entry = NULL; struct audio_stream_entry *fmtx_last_entry = NULL;
#endif #endif
#define AUDIO_CODEC_SUPPORT_SYNC 1 // 同步 #define AUDIO_CODEC_SUPPORT_SYNC 1 // 同步
#if (RECORDER_MIX_EN) #if (RECORDER_MIX_EN)
#define MAX_SRC_NUMBER 5 // 最大支持src个数 #define MAX_SRC_NUMBER 5 // 最大支持src个数
#else #else
#define MAX_SRC_NUMBER 3 // 最大支持src个数 #define MAX_SRC_NUMBER 3 // 最大支持src个数
#endif/*RECORDER_MIX_EN*/ #endif /*RECORDER_MIX_EN*/
#define AUDIO_DECODE_TASK_WAKEUP_TIME 0 // 解码定时唤醒 // ms #define AUDIO_DECODE_TASK_WAKEUP_TIME 0 // 解码定时唤醒 // ms
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
struct audio_decoder_task decode_task = {0}; struct audio_decoder_task decode_task = {0};
struct audio_mixer mixer = {0}; struct audio_mixer mixer = {0};
/*struct audio_stream_dac_out *dac_last = NULL;*/ /*struct audio_stream_dac_out *dac_last = NULL;*/
#if TCFG_MIXER_CYCLIC_TASK_EN #if TCFG_MIXER_CYCLIC_TASK_EN
struct audio_mixer_task mixer_task = {0}; struct audio_mixer_task mixer_task = {0};
#endif #endif
#if TCFG_DEC2TWS_TASK_ENABLE #if TCFG_DEC2TWS_TASK_ENABLE
struct audio_decoder_task localtws_decode_task = {0}; struct audio_decoder_task localtws_decode_task = {0};
#endif #endif
static u8 audio_dec_inited = 0; static u8 audio_dec_inited = 0;
@ -94,17 +94,16 @@ loudness_hdl *loudness;
#if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR) #if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR)
#if !TCFG_EQ_DIVIDE_ENABLE #if !TCFG_EQ_DIVIDE_ENABLE
struct channel_switch *mix_ch_switch = NULL;//声道变换 struct channel_switch *mix_ch_switch = NULL; // 声道变换
#endif #endif
#endif #endif
u8 audio_src_hw_filt[SRC_FILT_POINTS * SRC_CHI * 2 * MAX_SRC_NUMBER] ALIGNED(4); /*SRC的滤波器必须4个byte对齐*/ u8 audio_src_hw_filt[SRC_FILT_POINTS * SRC_CHI * 2 * MAX_SRC_NUMBER] ALIGNED(4); /*SRC的滤波器必须4个byte对齐*/
s16 mix_buff[AUDIO_MIXER_LEN / 2] SEC(.dec_mix_buff); s16 mix_buff[AUDIO_MIXER_LEN / 2] SEC(.dec_mix_buff);
#if (RECORDER_MIX_EN) #if (RECORDER_MIX_EN)
struct audio_mixer recorder_mixer = {0}; struct audio_mixer recorder_mixer = {0};
s16 recorder_mix_buff[AUDIO_MIXER_LEN / 2] SEC(.dec_mix_buff); s16 recorder_mix_buff[AUDIO_MIXER_LEN / 2] SEC(.dec_mix_buff);
#endif/*RECORDER_MIX_EN*/ #endif /*RECORDER_MIX_EN*/
#if (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_DAC) #if (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_DAC)
#if AUDIO_CODEC_SUPPORT_SYNC #if AUDIO_CODEC_SUPPORT_SYNC
@ -115,13 +114,12 @@ s16 dac_sync_buff[256];
#if AUDIO_VOCAL_REMOVE_EN #if AUDIO_VOCAL_REMOVE_EN
vocal_remove_hdl *mix_vocal_remove_hdl = NULL; vocal_remove_hdl *mix_vocal_remove_hdl = NULL;
void *vocal_remove_open(u8 ch_num); void *vocal_remove_open(u8 ch_num);
struct channel_switch *vocal_remove_mix_ch_switch = NULL;//声道变换,单声道时,先让解码出立体声,做完人声消除,再变单声道 struct channel_switch *vocal_remove_mix_ch_switch = NULL; // 声道变换,单声道时,先让解码出立体声,做完人声消除,再变单声道
#endif #endif
extern const int config_mixer_en; extern const int config_mixer_en;
#define AUDIO_DEC_MIXER_EN config_mixer_en #define AUDIO_DEC_MIXER_EN config_mixer_en
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
@ -129,48 +127,54 @@ extern const int config_mixer_en;
extern spectrum_fft_hdl *spec_hdl; extern spectrum_fft_hdl *spec_hdl;
#endif #endif
#if defined(SOUND_TRACK_2_P_X_CH_CONFIG) && SOUND_TRACK_2_P_X_CH_CONFIG
#if defined(SOUND_TRACK_2_P_X_CH_CONFIG) &&SOUND_TRACK_2_P_X_CH_CONFIG static float bass_gain = 0;
static float bass_gain = 0; // 低音调节测试例子
//低音调节测试例子
void sound_track_bass_vol_test_demo(u8 up_down) void sound_track_bass_vol_test_demo(u8 up_down)
{ {
if (up_down) { if (up_down)
{
bass_gain++; bass_gain++;
} else { }
else
{
bass_gain--; bass_gain--;
} }
if (bass_gain > 6) { if (bass_gain > 6)
{
bass_gain = 6; bass_gain = 6;
tone_play_by_path(TONE_NORMAL, 0); //播放一段正弦波 tone_play_by_path(TONE_NORMAL, 0); // 播放一段正弦波
} }
if (bass_gain < -6) { if (bass_gain < -6)
{
bass_gain = -6; bass_gain = -6;
tone_play_by_path(TONE_NORMAL, 0); //播放一段正弦波 tone_play_by_path(TONE_NORMAL, 0); // 播放一段正弦波
} }
//printf("=====bass gain %d\n", (int)bass_gain); // printf("=====bass gain %d\n", (int)bass_gain);
low_bass_set_global_gain(bass_gain, bass_gain); low_bass_set_global_gain(bass_gain, bass_gain);
} }
#endif/*defined(SOUND_TRACK_2_P_X_CH_CONFIG) &&SOUND_TRACK_2_P_X_CH_CONFIG*/ #endif /*defined(SOUND_TRACK_2_P_X_CH_CONFIG) &&SOUND_TRACK_2_P_X_CH_CONFIG*/
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
struct _audio_phase_inver_hdl { struct _audio_phase_inver_hdl
struct audio_stream_entry entry; // 音频流入口 {
struct audio_stream_entry entry; // 音频流入口
} audio_phase_inver_hdl; } audio_phase_inver_hdl;
static void audio_phase_inver_output_data_process_len(struct audio_stream_entry *entry, int len) static void audio_phase_inver_output_data_process_len(struct audio_stream_entry *entry, int len)
{ {
} }
static int audio_phase_inver_data_handler(struct audio_stream_entry *entry, static int audio_phase_inver_data_handler(struct audio_stream_entry *entry,
struct audio_data_frame *in, struct audio_data_frame *in,
struct audio_data_frame *out) struct audio_data_frame *out)
{ {
struct _audio_phase_inver_hdl *hdl = container_of(entry, struct _audio_phase_inver_hdl, entry); struct _audio_phase_inver_hdl *hdl = container_of(entry, struct _audio_phase_inver_hdl, entry);
out->data = in->data; out->data = in->data;
out->data_len = in->data_len; out->data_len = in->data_len;
if (in->data_len - in->offset > 0) { if (in->data_len - in->offset > 0)
{
digital_phase_inverter_s16(in->data + in->offset / 2, in->data_len - in->offset); digital_phase_inverter_s16(in->data + in->offset / 2, in->data_len - in->offset);
} }
return in->data_len; return in->data_len;
@ -178,10 +182,6 @@ static int audio_phase_inver_data_handler(struct audio_stream_entry *entry,
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/**@brief 获取dac能量值 /**@brief 获取dac能量值
@param @param
@ -193,7 +193,8 @@ int audio_dac_energy_get(void)
{ {
#if AUDIO_OUTPUT_AUTOMUTE #if AUDIO_OUTPUT_AUTOMUTE
int audio_energy_detect_energy_get(void *_hdl, u8 ch); int audio_energy_detect_energy_get(void *_hdl, u8 ch);
if (mix_out_automute_hdl) { if (mix_out_automute_hdl)
{
return audio_energy_detect_energy_get(mix_out_automute_hdl, BIT(0)); return audio_energy_detect_energy_get(mix_out_automute_hdl, BIT(0));
} }
@ -218,7 +219,6 @@ void audio_resume_all_decoder(void)
#endif #endif
} }
#if AUDIO_DECODE_TASK_WAKEUP_TIME #if AUDIO_DECODE_TASK_WAKEUP_TIME
#include "timer.h" #include "timer.h"
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
@ -230,7 +230,7 @@ void audio_resume_all_decoder(void)
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
static void audio_decoder_wakeup_timer(void *priv) static void audio_decoder_wakeup_timer(void *priv)
{ {
//putchar('k'); // putchar('k');
struct audio_decoder_task *task = priv; struct audio_decoder_task *task = priv;
audio_decoder_resume_all(task); audio_decoder_resume_all(task);
} }
@ -243,7 +243,8 @@ static void audio_decoder_wakeup_timer(void *priv)
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
int audio_decoder_task_add_probe(struct audio_decoder_task *task) int audio_decoder_task_add_probe(struct audio_decoder_task *task)
{ {
if (task->wakeup_timer == 0) { if (task->wakeup_timer == 0)
{
task->wakeup_timer = sys_hi_timer_add(task, audio_decoder_wakeup_timer, AUDIO_DECODE_TASK_WAKEUP_TIME); task->wakeup_timer = sys_hi_timer_add(task, audio_decoder_wakeup_timer, AUDIO_DECODE_TASK_WAKEUP_TIME);
log_i("audio_decoder_task_add_probe:%d\n", task->wakeup_timer); log_i("audio_decoder_task_add_probe:%d\n", task->wakeup_timer);
} }
@ -259,11 +260,13 @@ int audio_decoder_task_add_probe(struct audio_decoder_task *task)
int audio_decoder_task_del_probe(struct audio_decoder_task *task) int audio_decoder_task_del_probe(struct audio_decoder_task *task)
{ {
log_i("audio_decoder_task_del_probe\n"); log_i("audio_decoder_task_del_probe\n");
if (audio_decoder_task_wait_state(task) > 0) { if (audio_decoder_task_wait_state(task) > 0)
{
/*解码任务列表还有任务*/ /*解码任务列表还有任务*/
return 0; return 0;
} }
if (task->wakeup_timer) { if (task->wakeup_timer)
{
log_i("audio_decoder_task_del_probe:%d\n", task->wakeup_timer); log_i("audio_decoder_task_del_probe:%d\n", task->wakeup_timer);
sys_hi_timer_del(task->wakeup_timer); sys_hi_timer_del(task->wakeup_timer);
task->wakeup_timer = 0; task->wakeup_timer = 0;
@ -279,13 +282,14 @@ int audio_decoder_task_del_probe(struct audio_decoder_task *task)
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
int audio_decoder_wakeup_modify(int msecs) int audio_decoder_wakeup_modify(int msecs)
{ {
if (decode_task.wakeup_timer) { if (decode_task.wakeup_timer)
{
sys_hi_timer_modify(decode_task.wakeup_timer, msecs); sys_hi_timer_modify(decode_task.wakeup_timer, msecs);
} }
return 0; return 0;
} }
#endif/*AUDIO_DECODE_TASK_WAKEUP_TIME*/ #endif /*AUDIO_DECODE_TASK_WAKEUP_TIME*/
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/**@brief 各模式主解码open /**@brief 各模式主解码open
@ -322,7 +326,7 @@ u32 audio_output_nor_rate(void)
return 44100; return 44100;
#endif #endif
#if defined(SOUND_TRACK_2_P_X_CH_CONFIG) &&SOUND_TRACK_2_P_X_CH_CONFIG #if defined(SOUND_TRACK_2_P_X_CH_CONFIG) && SOUND_TRACK_2_P_X_CH_CONFIG
return 44100; return 44100;
#endif #endif
@ -353,13 +357,14 @@ u32 audio_output_nor_rate(void)
u32 audio_output_rate(int input_rate) u32 audio_output_rate(int input_rate)
{ {
u32 out_rate = audio_output_nor_rate(); u32 out_rate = audio_output_nor_rate();
if (out_rate) { if (out_rate)
{
return out_rate; return out_rate;
} }
#if (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT) #if (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT)
if ((bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) && (!bt_phone_dec_is_running()) if ((bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) && (!bt_phone_dec_is_running()) && (!bt_media_is_running()))
&& (!bt_media_is_running())) { {
y_printf("+++ \n"); y_printf("+++ \n");
return audio_sbc_enc_get_rate(); return audio_sbc_enc_get_rate();
} }
@ -368,12 +373,13 @@ u32 audio_output_rate(int input_rate)
#endif #endif
#if (TCFG_MIC_EFFECT_ENABLE) #if (TCFG_MIC_EFFECT_ENABLE)
if (input_rate > 48000) { if (input_rate > 48000)
{
return 48000; return 48000;
} }
#endif #endif
//y_printf("+++ 11 \n"); // y_printf("+++ 11 \n");
return app_audio_output_samplerate_select(input_rate, 1); return app_audio_output_samplerate_select(input_rate, 1);
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
@ -387,21 +393,26 @@ u32 audio_output_channel_num(void)
{ {
#if ((AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_DAC) || (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT)) #if ((AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_DAC) || (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT))
/*根据DAC输出的方式选择输出的声道*/ /*根据DAC输出的方式选择输出的声道*/
u8 dac_connect_mode = app_audio_output_mode_get(); u8 dac_connect_mode = app_audio_output_mode_get();
if (dac_connect_mode == DAC_OUTPUT_LR || dac_connect_mode == DAC_OUTPUT_DUAL_LR_DIFF) { if (dac_connect_mode == DAC_OUTPUT_LR || dac_connect_mode == DAC_OUTPUT_DUAL_LR_DIFF)
{
return 2; return 2;
} else if (dac_connect_mode == DAC_OUTPUT_FRONT_LR_REAR_LR) { }
else if (dac_connect_mode == DAC_OUTPUT_FRONT_LR_REAR_LR)
{
return 2; return 2;
} else { }
else
{
#if AUDIO_VOCAL_REMOVE_EN #if AUDIO_VOCAL_REMOVE_EN
return 2; return 2;
#endif #endif
return 1; return 1;
} }
#elif (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_FM) #elif (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_FM)
return 2; return 2;
#else #else
return 2; return 2;
#endif #endif
} }
@ -416,27 +427,35 @@ u32 audio_output_channel_type(void)
{ {
#if ((AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_DAC) || (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT)) #if ((AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_DAC) || (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT))
/*根据DAC输出的方式选择输出的声道*/ /*根据DAC输出的方式选择输出的声道*/
u8 dac_connect_mode = app_audio_output_mode_get(); u8 dac_connect_mode = app_audio_output_mode_get();
if (dac_connect_mode == DAC_OUTPUT_LR || dac_connect_mode == DAC_OUTPUT_DUAL_LR_DIFF) { if (dac_connect_mode == DAC_OUTPUT_LR || dac_connect_mode == DAC_OUTPUT_DUAL_LR_DIFF)
{
return AUDIO_CH_LR; return AUDIO_CH_LR;
} else if (dac_connect_mode == DAC_OUTPUT_FRONT_LR_REAR_LR) { }
else if (dac_connect_mode == DAC_OUTPUT_FRONT_LR_REAR_LR)
{
return AUDIO_CH_LR; return AUDIO_CH_LR;
} else if (dac_connect_mode == DAC_OUTPUT_MONO_L) { }
return AUDIO_CH_DIFF; //要输出左右合成的单声道数据选这个 else if (dac_connect_mode == DAC_OUTPUT_MONO_L)
/* return AUDIO_CH_L; */ //只要输出左声道的数据选这个 {
} else if (dac_connect_mode == DAC_OUTPUT_MONO_R) { return AUDIO_CH_DIFF; // 要输出左右合成的单声道数据选这个
/* return AUDIO_CH_L; */ // 只要输出左声道的数据选这个
}
else if (dac_connect_mode == DAC_OUTPUT_MONO_R)
{
return AUDIO_CH_DIFF; //要输出左右合成的单声道数据选这个 return AUDIO_CH_DIFF; // 要输出左右合成的单声道数据选这个
/* return AUDIO_CH_R; */ //只要输出右声道的数据选这个 /* return AUDIO_CH_R; */ // 只要输出右声道的数据选这个
}
} else { else
{
return AUDIO_CH_DIFF; return AUDIO_CH_DIFF;
} }
#elif (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_FM) #elif (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_FM)
return AUDIO_CH_LR; return AUDIO_CH_LR;
#else #else
return AUDIO_CH_LR; return AUDIO_CH_LR;
#endif #endif
} }
@ -450,14 +469,14 @@ u32 audio_output_channel_type(void)
int audio_output_set_start_volume(u8 state) int audio_output_set_start_volume(u8 state)
{ {
s16 vol_max = get_max_sys_vol(); s16 vol_max = get_max_sys_vol();
if (state == APP_AUDIO_STATE_CALL) { if (state == APP_AUDIO_STATE_CALL)
{
vol_max = app_var.aec_dac_gain; vol_max = app_var.aec_dac_gain;
} }
app_audio_state_switch(state, vol_max); app_audio_state_switch(state, vol_max);
return 0; return 0;
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/**@brief 开始音频输出 /**@brief 开始音频输出
@param sample_rate: @param sample_rate:
@ -469,11 +488,13 @@ int audio_output_set_start_volume(u8 state)
u8 audio_output_flag = 0; u8 audio_output_flag = 0;
int audio_output_start(u32 sample_rate, u8 reset_rate) int audio_output_start(u32 sample_rate, u8 reset_rate)
{ {
if (reset_rate) { if (reset_rate)
{
app_audio_output_samplerate_set(sample_rate); app_audio_output_samplerate_set(sample_rate);
} }
if (audio_output_flag) { if (audio_output_flag)
{
return 0; return 0;
} }
@ -509,14 +530,15 @@ void audio_output_stop(void)
*/ */
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
struct audio_src_handle *audio_hw_resample_open(void *priv, struct audio_src_handle *audio_hw_resample_open(void *priv,
int (*output_handler)(void *, void *, int), int (*output_handler)(void *, void *, int),
u8 channel, u8 channel,
u16 input_sample_rate, u16 input_sample_rate,
u16 output_sample_rate) u16 output_sample_rate)
{ {
struct audio_src_handle *hdl; struct audio_src_handle *hdl;
hdl = zalloc(sizeof(struct audio_src_handle)); hdl = zalloc(sizeof(struct audio_src_handle));
if (hdl) { if (hdl)
{
audio_hw_src_open(hdl, channel, SRC_TYPE_RESAMPLE); audio_hw_src_open(hdl, channel, SRC_TYPE_RESAMPLE);
audio_hw_src_set_rate(hdl, input_sample_rate, output_sample_rate); audio_hw_src_set_rate(hdl, input_sample_rate, output_sample_rate);
audio_src_set_output_handler(hdl, priv, output_handler); audio_src_set_output_handler(hdl, priv, output_handler);
@ -534,14 +556,14 @@ struct audio_src_handle *audio_hw_resample_open(void *priv,
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
void audio_hw_resample_close(struct audio_src_handle *hdl) void audio_hw_resample_close(struct audio_src_handle *hdl)
{ {
if (hdl) { if (hdl)
{
audio_hw_src_stop(hdl); audio_hw_src_stop(hdl);
audio_hw_src_close(hdl); audio_hw_src_close(hdl);
free(hdl); free(hdl);
} }
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/**@brief mixer事件处理 /**@brief mixer事件处理
@param *mixer: @param *mixer:
@ -552,22 +574,27 @@ void audio_hw_resample_close(struct audio_src_handle *hdl)
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
static void mixer_event_handler(struct audio_mixer *mixer, int event) static void mixer_event_handler(struct audio_mixer *mixer, int event)
{ {
switch (event) { switch (event)
{
case MIXER_EVENT_OPEN: case MIXER_EVENT_OPEN:
if (audio_mixer_get_ch_num(mixer) >= 1) { if (audio_mixer_get_ch_num(mixer) >= 1)
{
clock_add_set(DEC_MIX_CLK); clock_add_set(DEC_MIX_CLK);
} }
break; break;
case MIXER_EVENT_CLOSE: case MIXER_EVENT_CLOSE:
if (audio_mixer_get_ch_num(mixer) == 0) { if (audio_mixer_get_ch_num(mixer) == 0)
{
clock_remove_set(DEC_MIX_CLK); clock_remove_set(DEC_MIX_CLK);
} }
if (config_mixer_en) { if (config_mixer_en)
{
os_mutex_pend(&mixer->mutex, 0); os_mutex_pend(&mixer->mutex, 0);
if (audio_mixer_get_active_ch_num(mixer) == 0) { if (audio_mixer_get_active_ch_num(mixer) == 0)
{
/*输出通道可以进行stop处理*/ /*输出通道可以进行stop处理*/
audio_mixer_output_stop(mixer); audio_mixer_output_stop(mixer);
//通道关闭时清掉节点记录的偏移防止下个解码打开时mix之后的同步节点断言 // 通道关闭时清掉节点记录的偏移防止下个解码打开时mix之后的同步节点断言
audio_stream_clear_from(&mixer->entry); audio_stream_clear_from(&mixer->entry);
} }
os_mutex_post(&mixer->mutex); os_mutex_post(&mixer->mutex);
@ -579,7 +606,6 @@ static void mixer_event_handler(struct audio_mixer *mixer, int event)
#endif #endif
break; break;
} }
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/**@brief 检测mixer采样率支持 /**@brief 检测mixer采样率支持
@ -591,7 +617,8 @@ static void mixer_event_handler(struct audio_mixer *mixer, int event)
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
static u32 audio_mixer_check_sr(struct audio_mixer *mixer, u32 sr) static u32 audio_mixer_check_sr(struct audio_mixer *mixer, u32 sr)
{ {
return audio_output_rate(sr);; return audio_output_rate(sr);
;
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
@ -617,9 +644,12 @@ int vol_get_test()
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
void audio_mixer_reset_sample_rate(u8 flag, u32 sr) void audio_mixer_reset_sample_rate(u8 flag, u32 sr)
{ {
if (flag) { if (flag)
{
audio_mixer_set_sample_rate(&mixer, MIXER_SR_SPEC, sr); audio_mixer_set_sample_rate(&mixer, MIXER_SR_SPEC, sr);
} else { }
else
{
audio_mixer_set_sample_rate(&mixer, MIXER_SR_FIRST, sr); audio_mixer_set_sample_rate(&mixer, MIXER_SR_FIRST, sr);
} }
} }
@ -634,23 +664,24 @@ void audio_mixer_reset_sample_rate(u8 flag, u32 sr)
int audio_dec_occupy_trace_hdl(void *priv, u32 idle_total) int audio_dec_occupy_trace_hdl(void *priv, u32 idle_total)
{ {
struct audio_decoder_occupy *occupy = priv; struct audio_decoder_occupy *occupy = priv;
if (idle_total < occupy->idle_expect) { if (idle_total < occupy->idle_expect)
if (occupy->pend_time) { {
if (occupy->pend_time)
{
os_time_dly(occupy->pend_time); os_time_dly(occupy->pend_time);
} }
} }
return 0; return 0;
} }
extern void audio_adda_gain_dump(void); // 打印所有adc,dac的增益
extern void audio_adda_gain_dump(void);//打印所有adc,dac的增益
/*音频配置实时跟踪可以用来查看ADC/DAC增益或者其他寄存器配置*/ /*音频配置实时跟踪可以用来查看ADC/DAC增益或者其他寄存器配置*/
static void audio_config_trace(void *priv) static void audio_config_trace(void *priv)
{ {
printf(">>Audio_Config_Trace:\n"); printf(">>Audio_Config_Trace:\n");
audio_adda_gain_dump(); audio_adda_gain_dump();
//audio_adda_dump(); // audio_adda_dump();
//mem_stats(); // mem_stats();
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
@ -668,7 +699,6 @@ int audio_dec_init()
printf("audio_dec_init\n"); printf("audio_dec_init\n");
// 创建解码任务 // 创建解码任务
err = audio_decoder_task_create(&decode_task, "audio_dec"); err = audio_decoder_task_create(&decode_task, "audio_dec");
@ -676,8 +706,8 @@ int audio_dec_init()
decode_task.occupy.pend_time = 1; decode_task.occupy.pend_time = 1;
decode_task.occupy.idle_expect = 4; decode_task.occupy.idle_expect = 4;
decode_task.occupy.trace_period = 200; decode_task.occupy.trace_period = 200;
//decode_task.occupy.trace_hdl = audio_dec_occupy_trace_hdl; // decode_task.occupy.trace_hdl = audio_dec_occupy_trace_hdl;
#endif/*TCFG_AUDIO_DECODER_OCCUPY_TRACE*/ #endif /*TCFG_AUDIO_DECODER_OCCUPY_TRACE*/
#if TCFG_AUDIO_DEC_OUT_TASK #if TCFG_AUDIO_DEC_OUT_TASK
audio_decoder_out_task_create(&decode_task, "audio_out"); audio_decoder_out_task_create(&decode_task, "audio_out");
@ -704,7 +734,8 @@ int audio_dec_init()
/*硬件SRC模块滤波器buffer设置可根据最大使用数量设置整体buffer*/ /*硬件SRC模块滤波器buffer设置可根据最大使用数量设置整体buffer*/
audio_src_base_filt_init(audio_src_hw_filt, sizeof(audio_src_hw_filt)); audio_src_base_filt_init(audio_src_hw_filt, sizeof(audio_src_hw_filt));
if (!AUDIO_DEC_MIXER_EN) { if (!AUDIO_DEC_MIXER_EN)
{
#if AUDIO_OUTPUT_INCLUDE_DAC #if AUDIO_OUTPUT_INCLUDE_DAC
// 创建dac通道 // 创建dac通道
audio_dac_new_channel(&dac_hdl, &default_dac); audio_dac_new_channel(&dac_hdl, &default_dac);
@ -724,11 +755,12 @@ int audio_dec_init()
audio_mixer_set_event_handler(&mixer, mixer_event_handler); audio_mixer_set_event_handler(&mixer, mixer_event_handler);
// 使能mixer采样率检测 // 使能mixer采样率检测
audio_mixer_set_check_sr_handler(&mixer, audio_mixer_check_sr); audio_mixer_set_check_sr_handler(&mixer, audio_mixer_check_sr);
if (config_mixer_en) { if (config_mixer_en)
{
/*初始化mix_buf的长度*/ /*初始化mix_buf的长度*/
audio_mixer_set_output_buf(&mixer, mix_buff, sizeof(mix_buff)); audio_mixer_set_output_buf(&mixer, mix_buff, sizeof(mix_buff));
#ifdef CONFIG_MIXER_CYCLIC #ifdef CONFIG_MIXER_CYCLIC
#define MIXER_MIN_LEN (128*4*2) #define MIXER_MIN_LEN (128 * 4 * 2)
// 设置mixer最小输出长度 // 设置mixer最小输出长度
audio_mixer_set_min_len(&mixer, sizeof(mix_buff) < (MIXER_MIN_LEN * 2) ? (sizeof(mix_buff) / 2) : MIXER_MIN_LEN); audio_mixer_set_min_len(&mixer, sizeof(mix_buff) < (MIXER_MIN_LEN * 2) ? (sizeof(mix_buff) / 2) : MIXER_MIN_LEN);
#if (SOUNDCARD_ENABLE) #if (SOUNDCARD_ENABLE)
@ -748,7 +780,8 @@ int audio_dec_init()
audio_mixer_set_channel_num(&mixer, ch_num); audio_mixer_set_channel_num(&mixer, ch_num);
// 检测音频输出采样率是否为固定输出 // 检测音频输出采样率是否为固定输出
u32 sr = audio_output_nor_rate(); u32 sr = audio_output_nor_rate();
if (sr) { if (sr)
{
// 固定采样率输出 // 固定采样率输出
audio_mixer_set_sample_rate(&mixer, MIXER_SR_SPEC, sr); audio_mixer_set_sample_rate(&mixer, MIXER_SR_SPEC, sr);
} }
@ -763,9 +796,10 @@ int audio_dec_init()
struct audio_stream_entry *entries[8] = {NULL}; struct audio_stream_entry *entries[8] = {NULL};
#if defined(TCFG_EQ_DIVIDE_ENABLE)&&(!TCFG_EQ_DIVIDE_ENABLE)// && (!defined(CONFIG_MIXER_CYCLIC)) #if defined(TCFG_EQ_DIVIDE_ENABLE) && (!TCFG_EQ_DIVIDE_ENABLE) // && (!defined(CONFIG_MIXER_CYCLIC))
if (ch_num <= 2) { if (ch_num <= 2)
{
#if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR) #if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR)
mix_ch_switch = channel_switch_open(AUDIO_CH_QUAD, AUDIO_SYNTHESIS_LEN / 2); mix_ch_switch = channel_switch_open(AUDIO_CH_QUAD, AUDIO_SYNTHESIS_LEN / 2);
#endif #endif
@ -778,33 +812,32 @@ int audio_dec_init()
#endif #endif
#if AUDIO_SPECTRUM_CONFIG #if AUDIO_SPECTRUM_CONFIG
//频响能量值获取接口 // 频响能量值获取接口
spec_hdl = spectrum_open_demo(sr, ch_num); spec_hdl = spectrum_open_demo(sr, ch_num);
#endif #endif
#if AUDIO_EQUALLOUDNESS_CONFIG #if AUDIO_EQUALLOUDNESS_CONFIG
if (ch_num != 4) { if (ch_num != 4)
{
loudness_open_parm parm = {0}; loudness_open_parm parm = {0};
parm.sr = sr; parm.sr = sr;
parm.ch_num = ch_num; parm.ch_num = ch_num;
parm.threadhold_vol = LOUDNESS_THREADHOLD_VOL; parm.threadhold_vol = LOUDNESS_THREADHOLD_VOL;
parm.vol_cb = vol_get_test; parm.vol_cb = vol_get_test;
loudness = audio_equal_loudness_open(&parm);//不支持四声道 loudness = audio_equal_loudness_open(&parm); // 不支持四声道
} }
#endif #endif
#if AUDIO_VOCAL_REMOVE_EN #if AUDIO_VOCAL_REMOVE_EN
mix_vocal_remove_hdl = vocal_remove_open(ch_num); mix_vocal_remove_hdl = vocal_remove_open(ch_num);
u8 dac_connect_mode = app_audio_output_mode_get(); u8 dac_connect_mode = app_audio_output_mode_get();
if ((dac_connect_mode == DAC_OUTPUT_MONO_L) if ((dac_connect_mode == DAC_OUTPUT_MONO_L) || (dac_connect_mode == DAC_OUTPUT_MONO_R) || (dac_connect_mode == DAC_OUTPUT_MONO_LR_DIFF))
|| (dac_connect_mode == DAC_OUTPUT_MONO_R) {
|| (dac_connect_mode == DAC_OUTPUT_MONO_LR_DIFF)) {
vocal_remove_mix_ch_switch = channel_switch_open(AUDIO_CH_DIFF, 512); vocal_remove_mix_ch_switch = channel_switch_open(AUDIO_CH_DIFF, 512);
} }
#endif #endif
// 数据流串联。可以在mixer和last中间添加其他的数据流比如eq等 // 数据流串联。可以在mixer和last中间添加其他的数据流比如eq等
u8 entry_cnt = 0; u8 entry_cnt = 0;
entries[entry_cnt++] = &mixer.entry; entries[entry_cnt++] = &mixer.entry;
@ -813,38 +846,42 @@ int audio_dec_init()
audio_phase_inver_hdl.entry.data_process_len = audio_phase_inver_output_data_process_len; audio_phase_inver_hdl.entry.data_process_len = audio_phase_inver_output_data_process_len;
audio_phase_inver_hdl.entry.data_handler = audio_phase_inver_data_handler; audio_phase_inver_hdl.entry.data_handler = audio_phase_inver_data_handler;
entries[entry_cnt++] = &(audio_phase_inver_hdl.entry); entries[entry_cnt++] = &(audio_phase_inver_hdl.entry);
#endif/*TCFG_DIG_PHASE_INVERTER_EN*/ #endif /*TCFG_DIG_PHASE_INVERTER_EN*/
#if AUDIO_EQUALLOUDNESS_CONFIG #if AUDIO_EQUALLOUDNESS_CONFIG
if (loudness) { if (loudness)
{
entries[entry_cnt++] = &loudness->loudness->entry; entries[entry_cnt++] = &loudness->loudness->entry;
} }
#endif #endif
#if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR) #if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR)
#if !TCFG_EQ_DIVIDE_ENABLE #if !TCFG_EQ_DIVIDE_ENABLE
if (mix_ch_switch) { if (mix_ch_switch)
{
entries[entry_cnt++] = &mix_ch_switch->entry; entries[entry_cnt++] = &mix_ch_switch->entry;
} }
#endif #endif
#endif #endif
#if AUDIO_SPECTRUM_CONFIG #if AUDIO_SPECTRUM_CONFIG
if (spec_hdl) { if (spec_hdl)
{
entries[entry_cnt++] = &spec_hdl->entry; entries[entry_cnt++] = &spec_hdl->entry;
} }
#endif #endif
#if AUDIO_VOCAL_REMOVE_EN #if AUDIO_VOCAL_REMOVE_EN
if (mix_vocal_remove_hdl) { if (mix_vocal_remove_hdl)
{
entries[entry_cnt++] = &mix_vocal_remove_hdl->entry; entries[entry_cnt++] = &mix_vocal_remove_hdl->entry;
} }
if (vocal_remove_mix_ch_switch) { if (vocal_remove_mix_ch_switch)
{
entries[entry_cnt++] = &vocal_remove_mix_ch_switch->entry; entries[entry_cnt++] = &vocal_remove_mix_ch_switch->entry;
} }
#endif #endif
#if AUDIO_OUTPUT_AUTOMUTE #if AUDIO_OUTPUT_AUTOMUTE
entries[entry_cnt++] = mix_out_automute_entry; entries[entry_cnt++] = mix_out_automute_entry;
#endif #endif
@ -870,7 +907,6 @@ int audio_dec_init()
entry_cnt++; entry_cnt++;
#endif #endif
#if (AUDIO_OUTPUT_INCLUDE_IIS) #if (AUDIO_OUTPUT_INCLUDE_IIS)
audio_dig_vol_param iis_digvol_last_param = { audio_dig_vol_param iis_digvol_last_param = {
.vol_start = app_var.music_volume, .vol_start = app_var.music_volume,
@ -890,14 +926,15 @@ int audio_dec_init()
entries[entry_cnt++] = iis_entries_start; entries[entry_cnt++] = iis_entries_start;
entries[entry_cnt++] = iis_digvol_last_entry; entries[entry_cnt++] = iis_digvol_last_entry;
entries[entry_cnt++] = iis_last_entry; entries[entry_cnt++] = iis_last_entry;
for (int i = 0; i < entry_cnt - 1; i++) { for (int i = 0; i < entry_cnt - 1; i++)
{
audio_stream_add_entry(entries[i], entries[i + 1]); audio_stream_add_entry(entries[i], entries[i + 1]);
} }
#endif #endif
#if (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT) #if (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT)
// 蓝牙发射。从倒数第二个节点分流 // 蓝牙发射。从倒数第二个节点分流
extern int audio_data_set_zero(struct audio_stream_entry * entry, struct audio_data_frame * data_buf); extern int audio_data_set_zero(struct audio_stream_entry * entry, struct audio_data_frame * data_buf);
default_dac.entry.prob_handler = audio_data_set_zero; default_dac.entry.prob_handler = audio_data_set_zero;
audio_dig_vol_param bt_digvol_last_param = { audio_dig_vol_param bt_digvol_last_param = {
.vol_start = app_var.music_volume, .vol_start = app_var.music_volume,
@ -936,7 +973,8 @@ int audio_dec_init()
entries[entry_cnt++] = fmtx_entries_start; entries[entry_cnt++] = fmtx_entries_start;
entries[entry_cnt++] = fmtx_digvol_last_entry; entries[entry_cnt++] = fmtx_digvol_last_entry;
entries[entry_cnt++] = fmtx_last_entry; entries[entry_cnt++] = fmtx_last_entry;
for (int i = 0; i < entry_cnt - 1; i++) { for (int i = 0; i < entry_cnt - 1; i++)
{
audio_stream_add_entry(entries[i], entries[i + 1]); audio_stream_add_entry(entries[i], entries[i + 1]);
} }
#endif #endif
@ -946,8 +984,7 @@ __mixer_init_end:
#if (RECORDER_MIX_EN) #if (RECORDER_MIX_EN)
// 录音 // 录音
recorder_mix_init(&recorder_mixer, recorder_mix_buff, sizeof(recorder_mix_buff)); recorder_mix_init(&recorder_mixer, recorder_mix_buff, sizeof(recorder_mix_buff));
#endif//RECORDER_MIX_EN #endif // RECORDER_MIX_EN
// 音频音量初始化 // 音频音量初始化
app_audio_volume_init(); app_audio_volume_init();
@ -973,7 +1010,7 @@ __mixer_init_end:
#if TCFG_AUDIO_CONFIG_TRACE #if TCFG_AUDIO_CONFIG_TRACE
sys_timer_add(NULL, audio_config_trace, 3000); sys_timer_add(NULL, audio_config_trace, 3000);
#endif/*TCFG_AUDIO_CONFIG_TRACE*/ #endif /*TCFG_AUDIO_CONFIG_TRACE*/
return err; return err;
} }
@ -991,9 +1028,10 @@ static u8 audio_dec_init_complete()
/*不支持Audio功能返回idle*/ /*不支持Audio功能返回idle*/
#if (defined TCFG_AUDIO_ENABLE && (TCFG_AUDIO_ENABLE == 0)) #if (defined TCFG_AUDIO_ENABLE && (TCFG_AUDIO_ENABLE == 0))
return 1; return 1;
#endif/*TCFG_AUDIO_ENABLE*/ #endif /*TCFG_AUDIO_ENABLE*/
if (!audio_dec_inited) { if (!audio_dec_inited)
{
return 0; return 0;
} }
@ -1004,17 +1042,34 @@ REGISTER_LP_TARGET(audio_dec_init_lp_target) = {
.is_idle = audio_dec_init_complete, .is_idle = audio_dec_init_complete,
}; };
#if AUDIO_OUTPUT_AUTOMUTE #if AUDIO_OUTPUT_AUTOMUTE
#include "kt.h" #include "kt.h"
#include "app_task.h"
static u8 bt_mute_flag = 0;
void audio_mix_out_automute_mute(u8 mute) void audio_mix_out_automute_mute(u8 mute)
{ {
printf(">>>>>>>>>>>>>>>>>>>> %s\n", mute ? ("MUTE") : ("UNMUTE")); printf(">>>>>>>>>>>>>>>>>>>> %s\n", mute ? ("MUTE") : ("UNMUTE"));
if (mute) { if (mute)
PA_MUTE(); {
} else { if (app_get_curr_task() == APP_LP_TASK)
{
PA_MUTE();
}
else
{
bt_mute_flag++;
if (bt_mute_flag > 10)
{
PA_MUTE();
}
}
//PA_MUTE();
}
else
{
PA_UNMUTE(); PA_UNMUTE();
bt_mute_flag = 0;
} }
} }
@ -1023,9 +1078,12 @@ void audio_mix_out_automute_mute(u8 mute)
void mix_out_automute_handler(u8 event, u8 ch) void mix_out_automute_handler(u8 event, u8 ch)
{ {
printf(">>>> ch:%d %s\n", ch, event ? ("MUTE") : ("UNMUTE")); printf(">>>> ch:%d %s\n", ch, event ? ("MUTE") : ("UNMUTE"));
if (ch == app_audio_output_channel_get()) { if (ch == app_audio_output_channel_get())
{
audio_mix_out_automute_mute(event); audio_mix_out_automute_mute(event);
} else { }
else
{
#if DAC_AUTO_HIGH_Z_EN #if DAC_AUTO_HIGH_Z_EN
app_audio_output_ch_mute(BIT(ch), event); app_audio_output_ch_mute(BIT(ch), event);
#endif #endif
@ -1035,7 +1093,8 @@ void mix_out_automute_handler(u8 event, u8 ch)
void mix_out_automute_skip(u8 skip) void mix_out_automute_skip(u8 skip)
{ {
u8 mute = !skip; u8 mute = !skip;
if (mix_out_automute_hdl) { if (mix_out_automute_hdl)
{
audio_energy_detect_skip(mix_out_automute_hdl, 0xFFFF, skip); audio_energy_detect_skip(mix_out_automute_hdl, 0xFFFF, skip);
audio_mix_out_automute_mute(mute); audio_mix_out_automute_mute(mute);
} }
@ -1043,16 +1102,38 @@ void mix_out_automute_skip(u8 skip)
void mix_out_automute_open() void mix_out_automute_open()
{ {
if (mix_out_automute_hdl) { if (mix_out_automute_hdl)
{
printf("mix_out_automute is already open !\n"); printf("mix_out_automute is already open !\n");
return; return;
} }
audio_energy_detect_param e_det_param = {0}; audio_energy_detect_param e_det_param = {0};
#if 0
e_det_param.mute_energy = 5; e_det_param.mute_energy = 5;
e_det_param.unmute_energy = 10; e_det_param.unmute_energy = 10;
e_det_param.mute_time_ms = 1000; e_det_param.mute_time_ms = 1000;
e_det_param.unmute_time_ms = 50; e_det_param.unmute_time_ms = 50;
e_det_param.count_cycle_ms = 10; e_det_param.count_cycle_ms = 10;
#else
/* 黑胶空白处喀拉声:提高 mute_energy 使表面噪声被判定为静音并 mute 掉 */
/*
e_det_param.mute_energy = 150;
e_det_param.unmute_energy = 210;
e_det_param.mute_time_ms = 30;
e_det_param.unmute_time_ms = 20;
e_det_param.count_cycle_ms = 5;
*/
e_det_param.mute_energy = 240;
e_det_param.unmute_energy = 300;
e_det_param.mute_time_ms = 40;
e_det_param.unmute_time_ms = 25;
e_det_param.count_cycle_ms = 5;
/*e_det_param.mute_energy = 180;
e_det_param.unmute_energy = 240;
e_det_param.mute_time_ms = 30;
e_det_param.unmute_time_ms = 80; // 需连续 80ms 高能量才 unmute滤掉随机喀拉
e_det_param.count_cycle_ms = 5;*/
#endif
e_det_param.sample_rate = 44100; e_det_param.sample_rate = 44100;
e_det_param.event_handler = mix_out_automute_handler; e_det_param.event_handler = mix_out_automute_handler;
#if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR) #if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR)
@ -1067,12 +1148,12 @@ void mix_out_automute_open()
void mix_out_automute_close() void mix_out_automute_close()
{ {
if (mix_out_automute_hdl) { if (mix_out_automute_hdl)
{
audio_energy_detect_close(mix_out_automute_hdl); audio_energy_detect_close(mix_out_automute_hdl);
} }
} }
#endif //#if AUDIO_OUTPUT_AUTOMUTE #endif // #if AUDIO_OUTPUT_AUTOMUTE
/***************************************************************************** /*****************************************************************************
* *
@ -1097,7 +1178,8 @@ void *sys_digvol_group = NULL;
int sys_digvol_group_open(void) int sys_digvol_group_open(void)
{ {
if (sys_digvol_group == NULL) { if (sys_digvol_group == NULL)
{
sys_digvol_group = audio_dig_vol_group_open(); sys_digvol_group = audio_dig_vol_group_open();
return 0; return 0;
} }
@ -1106,7 +1188,8 @@ int sys_digvol_group_open(void)
int sys_digvol_group_close(void) int sys_digvol_group_close(void)
{ {
if (sys_digvol_group != NULL) { if (sys_digvol_group != NULL)
{
return audio_dig_vol_group_close(sys_digvol_group); return audio_dig_vol_group_close(sys_digvol_group);
} }
return -1; return -1;
@ -1125,21 +1208,22 @@ u16 __attribute__((weak)) get_ch_digvol_start(char *logo)
return get_max_sys_vol(); return get_max_sys_vol();
} }
/******************************************************* /*******************************************************
* Function name : sys_digvol_group_ch_open * Function name : sys_digvol_group_ch_open
* Description : * Description :
* Parameter : * Parameter :
* @logo * @logo
* @vol_start , -1 get_ch_digvol_start * @vol_start , -1 get_ch_digvol_start
* Return : digvol audio stream entry * Return : digvol audio stream entry
*******************************************************/ *******************************************************/
void *sys_digvol_group_ch_open(char *logo, int vol_start, audio_dig_vol_param *parm) void *sys_digvol_group_ch_open(char *logo, int vol_start, audio_dig_vol_param *parm)
{ {
if (sys_digvol_group == NULL || logo == NULL) { if (sys_digvol_group == NULL || logo == NULL)
{
return NULL; return NULL;
} }
if (vol_start == -1) { if (vol_start == -1)
{
vol_start = get_ch_digvol_start(logo); vol_start = get_ch_digvol_start(logo);
} }
audio_dig_vol_param temp_digvol_param = { audio_dig_vol_param temp_digvol_param = {
@ -1151,11 +1235,13 @@ void *sys_digvol_group_ch_open(char *logo, int vol_start, audio_dig_vol_param *p
.fade_gain_step = 10, .fade_gain_step = 10,
.vol_list = NULL, .vol_list = NULL,
}; };
if (parm == NULL) { if (parm == NULL)
{
parm = &temp_digvol_param; parm = &temp_digvol_param;
} }
void *digvol_hdl = audio_dig_vol_open(parm); void *digvol_hdl = audio_dig_vol_open(parm);
if (digvol_hdl) { if (digvol_hdl)
{
audio_dig_vol_group_add(sys_digvol_group, digvol_hdl, logo); audio_dig_vol_group_add(sys_digvol_group, digvol_hdl, logo);
return audio_dig_vol_entry_get(digvol_hdl); return audio_dig_vol_entry_get(digvol_hdl);
} }
@ -1164,20 +1250,21 @@ void *sys_digvol_group_ch_open(char *logo, int vol_start, audio_dig_vol_param *p
int sys_digvol_group_ch_close(char *logo) int sys_digvol_group_ch_close(char *logo)
{ {
if (sys_digvol_group == NULL || logo == NULL) { if (sys_digvol_group == NULL || logo == NULL)
{
return -1; return -1;
} }
void *hdl = audio_dig_vol_group_hdl_get(sys_digvol_group, logo); void *hdl = audio_dig_vol_group_hdl_get(sys_digvol_group, logo);
if (hdl != NULL) { if (hdl != NULL)
{
void *entry = audio_dig_vol_entry_get(hdl); void *entry = audio_dig_vol_entry_get(hdl);
if (entry != NULL) { if (entry != NULL)
{
audio_stream_del_entry(entry); audio_stream_del_entry(entry);
} }
} }
audio_dig_vol_close(audio_dig_vol_group_hdl_get(sys_digvol_group, logo)); audio_dig_vol_close(audio_dig_vol_group_hdl_get(sys_digvol_group, logo));
audio_dig_vol_group_del(sys_digvol_group, logo); audio_dig_vol_group_del(sys_digvol_group, logo);
return 0; return 0;
@ -1185,7 +1272,6 @@ int sys_digvol_group_ch_close(char *logo)
#endif // SYS_DIGVOL_GROUP_EN #endif // SYS_DIGVOL_GROUP_EN
#if AUDIO_VOCAL_REMOVE_EN #if AUDIO_VOCAL_REMOVE_EN
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/**@brief 人声消除打开例子 /**@brief 人声消除打开例子
@ -1211,12 +1297,11 @@ void *vocal_remove_open(u8 ch_num)
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
void vocal_remove_close() void vocal_remove_close()
{ {
if (mix_vocal_remove_hdl) { if (mix_vocal_remove_hdl)
{
audio_vocal_remove_close(mix_vocal_remove_hdl); audio_vocal_remove_close(mix_vocal_remove_hdl);
mix_vocal_remove_hdl = NULL; mix_vocal_remove_hdl = NULL;
} }
} }
#endif #endif

Binary file not shown.

Binary file not shown.

View File

@ -173,7 +173,7 @@ objs/apps/common/config/app_config.c.o
-r=objs/apps/common/config/app_config.c.o,log_print,l -r=objs/apps/common/config/app_config.c.o,log_print,l
-r=objs/apps/common/config/app_config.c.o,sys_clk_set,l -r=objs/apps/common/config/app_config.c.o,sys_clk_set,l
-r=objs/apps/common/config/app_config.c.o,config_layer_init,l -r=objs/apps/common/config/app_config.c.o,config_layer_init,l
-r=objs/apps/common/config/app_config.c.o,ci_transport_uart_instance,l -r=objs/apps/common/config/app_config.c.o,ci_transport_uart_instance,
-r=objs/apps/common/config/app_config.c.o,dec_eq_test, -r=objs/apps/common/config/app_config.c.o,dec_eq_test,
-r=objs/apps/common/config/app_config.c.o,clr_wdt,l -r=objs/apps/common/config/app_config.c.o,clr_wdt,l
-r=objs/apps/common/config/app_config.c.o,config,pl -r=objs/apps/common/config/app_config.c.o,config,pl
@ -200,20 +200,6 @@ objs/apps/common/config/bt_profile_config.c.o
-r=objs/apps/common/config/bt_profile_config.c.o,hci_inquiry_support,pl -r=objs/apps/common/config/bt_profile_config.c.o,hci_inquiry_support,pl
-r=objs/apps/common/config/bt_profile_config.c.o,btstack_emitter_support,pl -r=objs/apps/common/config/bt_profile_config.c.o,btstack_emitter_support,pl
objs/apps/common/config/ci_transport_uart.c.o objs/apps/common/config/ci_transport_uart.c.o
-r=objs/apps/common/config/ci_transport_uart.c.o,ci_data_rx_handler,pl
-r=objs/apps/common/config/ci_transport_uart.c.o,log_print,l
-r=objs/apps/common/config/ci_transport_uart.c.o,printf_buf,l
-r=objs/apps/common/config/ci_transport_uart.c.o,crc_get_16bit,l
-r=objs/apps/common/config/ci_transport_uart.c.o,online_cfg_tool_data_deal,l
-r=objs/apps/common/config/ci_transport_uart.c.o,ci_uart_write,pl
-r=objs/apps/common/config/ci_transport_uart.c.o,ci_transport_uart_instance,pl
-r=objs/apps/common/config/ci_transport_uart.c.o,uart_dev_open,l
-r=objs/apps/common/config/ci_transport_uart.c.o,sys_event_notify,l
-r=objs/apps/common/config/ci_transport_uart.c.o,printf,l
-r=objs/apps/common/config/ci_transport_uart.c.o,cpu_assert_debug,l
-r=objs/apps/common/config/ci_transport_uart.c.o,p33_soft_reset,l
-r=objs/apps/common/config/ci_transport_uart.c.o,clock_ci,pl
-r=objs/apps/common/config/ci_transport_uart.c.o,config_asser,l
objs/apps/common/debug/debug.c.o objs/apps/common/debug/debug.c.o
objs/apps/common/debug/debug_lite.c.o objs/apps/common/debug/debug_lite.c.o
-r=objs/apps/common/debug/debug_lite.c.o,puts_lite,pl -r=objs/apps/common/debug/debug_lite.c.o,puts_lite,pl
@ -1583,47 +1569,7 @@ objs/apps/common/update/update.c.o
-r=objs/apps/common/update/update.c.o,ota_lp_target,pl -r=objs/apps/common/update/update.c.o,ota_lp_target,pl
-r=objs/apps/common/update/update.c.o,__initcall_app_update_init,pl -r=objs/apps/common/update/update.c.o,__initcall_app_update_init,pl
objs/apps/common/usb/device/cdc.c.o objs/apps/common/usb/device/cdc.c.o
-r=objs/apps/common/usb/device/cdc.c.o,cdc_desc_config,pl
-r=objs/apps/common/usb/device/cdc.c.o,usb_set_interface_hander,l
-r=objs/apps/common/usb/device/cdc.c.o,printf,l
-r=objs/apps/common/usb/device/cdc.c.o,cpu_assert_debug,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_set_reset_hander,l
-r=objs/apps/common/usb/device/cdc.c.o,cdc_set_wakeup_handler,pl
-r=objs/apps/common/usb/device/cdc.c.o,cdc_set_output_handle,pl
-r=objs/apps/common/usb/device/cdc.c.o,cdc_read_data,pl
-r=objs/apps/common/usb/device/cdc.c.o,os_mutex_pend,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_g_bulk_read,l
-r=objs/apps/common/usb/device/cdc.c.o,os_mutex_post,l
-r=objs/apps/common/usb/device/cdc.c.o,cdc_write_data,pl
-r=objs/apps/common/usb/device/cdc.c.o,usb_g_bulk_write,l
-r=objs/apps/common/usb/device/cdc.c.o,cdc_write_inir,pl
-r=objs/apps/common/usb/device/cdc.c.o,cdc_register,pl
-r=objs/apps/common/usb/device/cdc.c.o,os_mutex_create,l
-r=objs/apps/common/usb/device/cdc.c.o,cdc_release,pl
-r=objs/apps/common/usb/device/cdc.c.o,usb_device2id,l
-r=objs/apps/common/usb/device/cdc.c.o,log_print,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_set_setup_recv,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_set_setup_phase,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_set_data_payload,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_read_ep0,l
-r=objs/apps/common/usb/device/cdc.c.o,p33_soft_reset,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_get_ep_buffer,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_g_ep_config,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_g_set_intr_hander,l
-r=objs/apps/common/usb/device/cdc.c.o,usb_enable_ep,l
-r=objs/apps/common/usb/device/cdc.c.o,config_asser,l
-r=objs/apps/common/usb/device/cdc.c.o,log_tag_const_d_USB,l
-r=objs/apps/common/usb/device/cdc.c.o,log_tag_const_e_USB,l
objs/apps/common/usb/device/descriptor.c.o objs/apps/common/usb/device/descriptor.c.o
-r=objs/apps/common/usb/device/descriptor.c.o,get_device_descriptor,pl
-r=objs/apps/common/usb/device/descriptor.c.o,get_language_str,pl
-r=objs/apps/common/usb/device/descriptor.c.o,get_manufacture_str,pl
-r=objs/apps/common/usb/device/descriptor.c.o,get_iserialnumber_str,pl
-r=objs/apps/common/usb/device/descriptor.c.o,get_norflash_uuid,l
-r=objs/apps/common/usb/device/descriptor.c.o,get_product_str,pl
-r=objs/apps/common/usb/device/descriptor.c.o,usb_get_config_desc,pl
-r=objs/apps/common/usb/device/descriptor.c.o,usb_get_string_desc,pl
-r=objs/apps/common/usb/device/descriptor.c.o,uac_get_string,l
objs/apps/common/usb/device/hid.c.o objs/apps/common/usb/device/hid.c.o
-r=objs/apps/common/usb/device/hid.c.o,hid_key_handler,pl -r=objs/apps/common/usb/device/hid.c.o,hid_key_handler,pl
objs/apps/common/usb/device/msd.c.o objs/apps/common/usb/device/msd.c.o
@ -1635,63 +1581,16 @@ objs/apps/common/usb/device/msd_upgrade.c.o
-r=objs/apps/common/usb/device/msd_upgrade.c.o,nvram_set_boot_state, -r=objs/apps/common/usb/device/msd_upgrade.c.o,nvram_set_boot_state,
-r=objs/apps/common/usb/device/msd_upgrade.c.o,private_scsi_cmd,pl -r=objs/apps/common/usb/device/msd_upgrade.c.o,private_scsi_cmd,pl
objs/apps/common/usb/device/task_pc.c.o objs/apps/common/usb/device/task_pc.c.o
-r=objs/apps/common/usb/device/task_pc.c.o,usb_start,pl
-r=objs/apps/common/usb/device/task_pc.c.o,usb_device_mode,l
-r=objs/apps/common/usb/device/task_pc.c.o,cdc_set_wakeup_handler,l
-r=objs/apps/common/usb/device/task_pc.c.o,usb_pause,pl
-r=objs/apps/common/usb/device/task_pc.c.o,log_print,l
-r=objs/apps/common/usb/device/task_pc.c.o,usb_sie_disable,l
-r=objs/apps/common/usb/device/task_pc.c.o,usb_stop,pl
-r=objs/apps/common/usb/device/task_pc.c.o,usb_sie_close,l
-r=objs/apps/common/usb/device/task_pc.c.o,usb_cdc_background_run,pl
-r=objs/apps/common/usb/device/task_pc.c.o,pc_device_event_handler,pl
-r=objs/apps/common/usb/device/task_pc.c.o,app_check_curr_task,l
-r=objs/apps/common/usb/device/task_pc.c.o,usb_device2id,l
-r=objs/apps/common/usb/device/task_pc.c.o,cdc_read_data,l
-r=objs/apps/common/usb/device/task_pc.c.o,online_cfg_tool_data_deal,l
-r=objs/apps/common/usb/device/task_pc.c.o,log_tag_const_i_USB,l
-r=objs/apps/common/usb/device/task_pc.c.o,log_tag_const_d_USB,l
objs/apps/common/usb/device/uac1.c.o objs/apps/common/usb/device/uac1.c.o
objs/apps/common/usb/device/uac_stream.c.o objs/apps/common/usb/device/uac_stream.c.o
objs/apps/common/usb/device/usb_device.c.o objs/apps/common/usb/device/usb_device.c.o
-r=objs/apps/common/usb/device/usb_device.c.o,usb_device_mode,pl
-r=objs/apps/common/usb/device/usb_device.c.o,gpio_direction_input,l
-r=objs/apps/common/usb/device/usb_device.c.o,gpio_set_pull_up,l
-r=objs/apps/common/usb/device/usb_device.c.o,gpio_set_pull_down,l
-r=objs/apps/common/usb/device/usb_device.c.o,gpio_set_die,l
-r=objs/apps/common/usb/device/usb_device.c.o,os_time_dly,l
-r=objs/apps/common/usb/device/usb_device.c.o,cdc_release,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_add_desc_config,l
-r=objs/apps/common/usb/device/usb_device.c.o,log_print,l
-r=objs/apps/common/usb/device/usb_device.c.o,cdc_desc_config,l
-r=objs/apps/common/usb/device/usb_device.c.o,cdc_register,l
-r=objs/apps/common/usb/device/usb_device.c.o,user_setup_filter_install,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_id2device,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_otg_sof_check_init,pl -r=objs/apps/common/usb/device/usb_device.c.o,usb_otg_sof_check_init,pl
-r=objs/apps/common/usb/device/usb_device.c.o,usb_get_ep_buffer,l -r=objs/apps/common/usb/device/usb_device.c.o,usb_get_ep_buffer,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_g_sie_init,l -r=objs/apps/common/usb/device/usb_device.c.o,usb_g_sie_init,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_set_dma_raddr,l -r=objs/apps/common/usb/device/usb_device.c.o,usb_set_dma_raddr,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_disable_ep,l -r=objs/apps/common/usb/device/usb_device.c.o,usb_disable_ep,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_sof_clr_pnd,l -r=objs/apps/common/usb/device/usb_device.c.o,usb_sof_clr_pnd,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_g_hold,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_release,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_config,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_slave_init,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_write_intr_usbe,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_clr_intr_txe,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_clr_intr_rxe,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_set_intr_txe,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_set_intr_rxe,l
-r=objs/apps/common/usb/device/usb_device.c.o,usb_g_isr_reg,l
-r=objs/apps/common/usb/device/usb_device.c.o,log_tag_const_i_USB,l
objs/apps/common/usb/device/user_setup.c.o objs/apps/common/usb/device/user_setup.c.o
-r=objs/apps/common/usb/device/user_setup.c.o,usb_root2_testing,pl
-r=objs/apps/common/usb/device/user_setup.c.o,check_ep_vaild,pl
-r=objs/apps/common/usb/device/user_setup.c.o,user_setup_filter_install,pl
-r=objs/apps/common/usb/device/user_setup.c.o,usb_set_setup_hook,l
-r=objs/apps/common/usb/device/user_setup.c.o,usb_device2id,l
-r=objs/apps/common/usb/device/user_setup.c.o,usb_get_setup_buffer,l
-r=objs/apps/common/usb/device/user_setup.c.o,usb_set_setup_phase,l
objs/apps/common/usb/host/adb.c.o objs/apps/common/usb/host/adb.c.o
objs/apps/common/usb/host/aoa.c.o objs/apps/common/usb/host/aoa.c.o
objs/apps/common/usb/host/apple_mfi.c.o objs/apps/common/usb/host/apple_mfi.c.o
@ -1808,7 +1707,6 @@ objs/apps/soundbox/app_main.c.o
-r=objs/apps/soundbox/app_main.c.o,timer_get_ms,l -r=objs/apps/soundbox/app_main.c.o,timer_get_ms,l
-r=objs/apps/soundbox/app_main.c.o,get_charge_online_flag,l -r=objs/apps/soundbox/app_main.c.o,get_charge_online_flag,l
-r=objs/apps/soundbox/app_main.c.o,ui_update_status,l -r=objs/apps/soundbox/app_main.c.o,ui_update_status,l
-r=objs/apps/soundbox/app_main.c.o,usb_cdc_background_run,l
-r=objs/apps/soundbox/app_main.c.o,app_curr_task,l -r=objs/apps/soundbox/app_main.c.o,app_curr_task,l
-r=objs/apps/soundbox/app_main.c.o,log_tag_const_i_APP,l -r=objs/apps/soundbox/app_main.c.o,log_tag_const_i_APP,l
-r=objs/apps/soundbox/app_main.c.o,app_var,pl -r=objs/apps/soundbox/app_main.c.o,app_var,pl
@ -2017,7 +1915,6 @@ objs/apps/soundbox/board/br23/irq_config.c.o
objs/apps/soundbox/common/app_sound_box_tool.c.o objs/apps/soundbox/common/app_sound_box_tool.c.o
-r=objs/apps/soundbox/common/app_sound_box_tool.c.o,all_assemble_package_send_to_pc,pl -r=objs/apps/soundbox/common/app_sound_box_tool.c.o,all_assemble_package_send_to_pc,pl
-r=objs/apps/soundbox/common/app_sound_box_tool.c.o,CRC16,l -r=objs/apps/soundbox/common/app_sound_box_tool.c.o,CRC16,l
-r=objs/apps/soundbox/common/app_sound_box_tool.c.o,cdc_write_data,l
-r=objs/apps/soundbox/common/app_sound_box_tool.c.o,assemble_package_send_to_pc,pl -r=objs/apps/soundbox/common/app_sound_box_tool.c.o,assemble_package_send_to_pc,pl
-r=objs/apps/soundbox/common/app_sound_box_tool.c.o,hex2text,pl -r=objs/apps/soundbox/common/app_sound_box_tool.c.o,hex2text,pl
-r=objs/apps/soundbox/common/app_sound_box_tool.c.o,sprintf,l -r=objs/apps/soundbox/common/app_sound_box_tool.c.o,sprintf,l
@ -2142,7 +2039,6 @@ objs/apps/soundbox/common/user_cfg_new.c.o
-r=objs/apps/soundbox/common/user_cfg_new.c.o,syscfg_read,l -r=objs/apps/soundbox/common/user_cfg_new.c.o,syscfg_read,l
-r=objs/apps/soundbox/common/user_cfg_new.c.o,printf_buf,l -r=objs/apps/soundbox/common/user_cfg_new.c.o,printf_buf,l
-r=objs/apps/soundbox/common/user_cfg_new.c.o,bt_max_pwr_set,l -r=objs/apps/soundbox/common/user_cfg_new.c.o,bt_max_pwr_set,l
-r=objs/apps/soundbox/common/user_cfg_new.c.o,syscfg_read_btmac_blemac_from_bin,l
-r=objs/apps/soundbox/common/user_cfg_new.c.o,memcmp,l -r=objs/apps/soundbox/common/user_cfg_new.c.o,memcmp,l
-r=objs/apps/soundbox/common/user_cfg_new.c.o,lp_winsize_init,l -r=objs/apps/soundbox/common/user_cfg_new.c.o,lp_winsize_init,l
-r=objs/apps/soundbox/common/user_cfg_new.c.o,bt_modify_name,pl -r=objs/apps/soundbox/common/user_cfg_new.c.o,bt_modify_name,pl
@ -3041,8 +2937,6 @@ objs/apps/soundbox/task_manager/app_common.c.o
-r=objs/apps/soundbox/task_manager/app_common.c.o,sys_timer_modify,l -r=objs/apps/soundbox/task_manager/app_common.c.o,sys_timer_modify,l
-r=objs/apps/soundbox/task_manager/app_common.c.o,app_get_curr_task,l -r=objs/apps/soundbox/task_manager/app_common.c.o,app_get_curr_task,l
-r=objs/apps/soundbox/task_manager/app_common.c.o,app_task_put_key_msg,l -r=objs/apps/soundbox/task_manager/app_common.c.o,app_task_put_key_msg,l
-r=objs/apps/soundbox/task_manager/app_common.c.o,app_soundbox_tool_event_handler,l
-r=objs/apps/soundbox/task_manager/app_common.c.o,ci_data_rx_handler,l
-r=objs/apps/soundbox/task_manager/app_common.c.o,dev_status_event_filter,l -r=objs/apps/soundbox/task_manager/app_common.c.o,dev_status_event_filter,l
-r=objs/apps/soundbox/task_manager/app_common.c.o,linein_device_event_handler,l -r=objs/apps/soundbox/task_manager/app_common.c.o,linein_device_event_handler,l
-r=objs/apps/soundbox/task_manager/app_common.c.o,lp_device_event_handler,l -r=objs/apps/soundbox/task_manager/app_common.c.o,lp_device_event_handler,l
@ -4095,6 +3989,7 @@ objs/cpu/br23/audio_dec/audio_dec.c.o
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_stream_add_list,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_stream_add_list,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,app_audio_volume_init,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,app_audio_volume_init,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_mix_out_automute_mute,pl -r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_mix_out_automute_mute,pl
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,app_get_curr_task,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,gpio_set_output_value,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,gpio_set_output_value,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,mix_out_automute_handler,pl -r=objs/cpu/br23/audio_dec/audio_dec.c.o,mix_out_automute_handler,pl
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,app_audio_output_channel_get,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,app_audio_output_channel_get,l
@ -6264,52 +6159,6 @@ include_lib/liba/br23/cpu.a.llvm.744702.power_port.c
-r=include_lib/liba/br23/cpu.a.llvm.744702.power_port.c,gpio_set_die,l -r=include_lib/liba/br23/cpu.a.llvm.744702.power_port.c,gpio_set_die,l
-r=include_lib/liba/br23/cpu.a.llvm.744702.power_port.c,gpio_set_dieh,l -r=include_lib/liba/br23/cpu.a.llvm.744702.power_port.c,gpio_set_dieh,l
-r=include_lib/liba/br23/cpu.a.llvm.744702.power_port.c,p33_tx_1byte,l -r=include_lib/liba/br23/cpu.a.llvm.744702.power_port.c,p33_tx_1byte,l
include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,get_jiffies,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_mdelay,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,os_time_dly,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_host_timeout,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_bulk_read64byte_fast,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_ep_read64byte_fast,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_bulk_read,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_ep_read,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_bulk_write,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_ep_write,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_intr_read,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_intr_write,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_iso_read,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_g_iso_write,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_slave_init,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_write_power,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_write_intr_usbe,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_clr_intr_txe,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_clr_intr_rxe,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_sie_enable,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_read_sofframe,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,musb_read_sofframe,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_bulk_read,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_ep_read,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_bulk_write,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_ep_write,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_intr_read,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_intr_write,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_iso_read,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_iso_write,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_entry_suspend,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_read_power,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_resume,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_host_init,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_write_devctl,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_read_devctl,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,log_print,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_dev_status,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_set_low_speed,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_host_reset,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_h_force_reset,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_io_reset,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_disable_for_ota,pl
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,usb_sie_close_all,l
-r=include_lib/liba/br23/cpu.a.llvm.1077826.usb_phy.c,jiffies,l
include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c
-r=include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c,usb_device2id,pl -r=include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c,usb_device2id,pl
-r=include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c,usb_id2device,pl -r=include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c,usb_id2device,pl
@ -6352,14 +6201,14 @@ include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c
-r=include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c,log_tag_const_i_USB,l -r=include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c,log_tag_const_i_USB,l
-r=include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c,log_tag_const_e_USB,l -r=include_lib/liba/br23/cpu.a.llvm.1096254.usb_setup.c,log_tag_const_e_USB,l
include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_device_descriptor,l -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_device_descriptor,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_language_str,l -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_language_str,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_manufacture_str,l -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_manufacture_str,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_product_str,l -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_product_str,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_iserialnumber_str,l -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_iserialnumber_str,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_string_ee,pl -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,get_string_ee,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,uac_get_string,pl -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,uac_get_string,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,usb_get_config_desc,l -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,usb_get_config_desc,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,usb_add_desc_config,pl -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,usb_add_desc_config,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,set_descriptor,pl -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,set_descriptor,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,printf,l -r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,printf,l

File diff suppressed because it is too large Load Diff