完成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_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 //串口波特率配置
//*********************************************************************************//
@ -397,7 +397,7 @@ DAC硬件上的连接方式,可选的配置:
#define LINEIN_INPUT_WAY LINEIN_INPUT_WAY_ADC //LINEIN_INPUT_WAY_ANALOG
#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_EFFECT_TOOL_ENABLE ENABLE //是否支持在线音效调试,使能该项还需使能EQ总使能TCFG_EQ_ENABL,
#define TCFG_SOUNDBOX_TOOL_ENABLE 0 //是否支持音箱在线配置工具
#define TCFG_EFFECT_TOOL_ENABLE 0 //是否支持在线音效调试,使能该项还需使能EQ总使能TCFG_EQ_ENABL,
#define TCFG_NULL_COMM 0 //不支持通信
#define TCFG_UART_COMM 1 //串口通信
#define TCFG_USB_COMM 2 //USB通信

View File

@ -1238,7 +1238,7 @@ void bt_status_connect(struct bt_event *bt)
#endif
/* log_debug("tone status:%d\n", tone_get_status()); */
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 (!__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;
#endif
#define AUDIO_CODEC_SUPPORT_SYNC 1 // 同步
#define AUDIO_CODEC_SUPPORT_SYNC 1 // 同步
#if (RECORDER_MIX_EN)
#define MAX_SRC_NUMBER 5 // 最大支持src个数
#define MAX_SRC_NUMBER 5 // 最大支持src个数
#else
#define MAX_SRC_NUMBER 3 // 最大支持src个数
#endif/*RECORDER_MIX_EN*/
#define MAX_SRC_NUMBER 3 // 最大支持src个数
#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_mixer mixer = {0};
struct audio_decoder_task decode_task = {0};
struct audio_mixer mixer = {0};
/*struct audio_stream_dac_out *dac_last = NULL;*/
#if TCFG_MIXER_CYCLIC_TASK_EN
struct audio_mixer_task mixer_task = {0};
struct audio_mixer_task mixer_task = {0};
#endif
#if TCFG_DEC2TWS_TASK_ENABLE
struct audio_decoder_task localtws_decode_task = {0};
struct audio_decoder_task localtws_decode_task = {0};
#endif
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_EQ_DIVIDE_ENABLE
struct channel_switch *mix_ch_switch = NULL;//声道变换
struct channel_switch *mix_ch_switch = NULL; // 声道变换
#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);
#if (RECORDER_MIX_EN)
struct audio_mixer recorder_mixer = {0};
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_CODEC_SUPPORT_SYNC
@ -115,13 +114,12 @@ s16 dac_sync_buff[256];
#if AUDIO_VOCAL_REMOVE_EN
vocal_remove_hdl *mix_vocal_remove_hdl = NULL;
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
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;
#endif
#if defined(SOUND_TRACK_2_P_X_CH_CONFIG) &&SOUND_TRACK_2_P_X_CH_CONFIG
static float bass_gain = 0;
//低音调节测试例子
#if defined(SOUND_TRACK_2_P_X_CH_CONFIG) && SOUND_TRACK_2_P_X_CH_CONFIG
static float bass_gain = 0;
// 低音调节测试例子
void sound_track_bass_vol_test_demo(u8 up_down)
{
if (up_down) {
if (up_down)
{
bass_gain++;
} else {
}
else
{
bass_gain--;
}
if (bass_gain > 6) {
if (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;
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);
}
#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_stream_entry entry; // 音频流入口
struct _audio_phase_inver_hdl
{
struct audio_stream_entry entry; // 音频流入口
} 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,
struct audio_data_frame *in,
struct audio_data_frame *out)
struct audio_data_frame *in,
struct audio_data_frame *out)
{
struct _audio_phase_inver_hdl *hdl = container_of(entry, struct _audio_phase_inver_hdl, entry);
out->data = in->data;
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);
}
return in->data_len;
@ -178,10 +182,6 @@ static int audio_phase_inver_data_handler(struct audio_stream_entry *entry,
//////////////////////////////////////////////////////////////////////////////
/*----------------------------------------------------------------------------*/
/**@brief 获取dac能量值
@param
@ -193,7 +193,8 @@ int audio_dac_energy_get(void)
{
#if AUDIO_OUTPUT_AUTOMUTE
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));
}
@ -218,7 +219,6 @@ void audio_resume_all_decoder(void)
#endif
}
#if AUDIO_DECODE_TASK_WAKEUP_TIME
#include "timer.h"
/*----------------------------------------------------------------------------*/
@ -230,7 +230,7 @@ void audio_resume_all_decoder(void)
/*----------------------------------------------------------------------------*/
static void audio_decoder_wakeup_timer(void *priv)
{
//putchar('k');
// putchar('k');
struct audio_decoder_task *task = priv;
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)
{
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);
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)
{
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;
}
if (task->wakeup_timer) {
if (task->wakeup_timer)
{
log_i("audio_decoder_task_del_probe:%d\n", task->wakeup_timer);
sys_hi_timer_del(task->wakeup_timer);
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)
{
if (decode_task.wakeup_timer) {
if (decode_task.wakeup_timer)
{
sys_hi_timer_modify(decode_task.wakeup_timer, msecs);
}
return 0;
}
#endif/*AUDIO_DECODE_TASK_WAKEUP_TIME*/
#endif /*AUDIO_DECODE_TASK_WAKEUP_TIME*/
/*----------------------------------------------------------------------------*/
/**@brief 各模式主解码open
@ -322,7 +326,7 @@ u32 audio_output_nor_rate(void)
return 44100;
#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;
#endif
@ -353,13 +357,14 @@ u32 audio_output_nor_rate(void)
u32 audio_output_rate(int input_rate)
{
u32 out_rate = audio_output_nor_rate();
if (out_rate) {
if (out_rate)
{
return out_rate;
}
#if (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT)
if ((bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) && (!bt_phone_dec_is_running())
&& (!bt_media_is_running())) {
if ((bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) && (!bt_phone_dec_is_running()) && (!bt_media_is_running()))
{
y_printf("+++ \n");
return audio_sbc_enc_get_rate();
}
@ -368,12 +373,13 @@ u32 audio_output_rate(int input_rate)
#endif
#if (TCFG_MIC_EFFECT_ENABLE)
if (input_rate > 48000) {
if (input_rate > 48000)
{
return 48000;
}
#endif
//y_printf("+++ 11 \n");
return app_audio_output_samplerate_select(input_rate, 1);
// y_printf("+++ 11 \n");
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))
/*根据DAC输出的方式选择输出的声道*/
u8 dac_connect_mode = app_audio_output_mode_get();
if (dac_connect_mode == DAC_OUTPUT_LR || dac_connect_mode == DAC_OUTPUT_DUAL_LR_DIFF) {
u8 dac_connect_mode = app_audio_output_mode_get();
if (dac_connect_mode == DAC_OUTPUT_LR || dac_connect_mode == DAC_OUTPUT_DUAL_LR_DIFF)
{
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;
} else {
}
else
{
#if AUDIO_VOCAL_REMOVE_EN
return 2;
return 2;
#endif
return 1;
}
#elif (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_FM)
return 2;
return 2;
#else
return 2;
return 2;
#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))
/*根据DAC输出的方式选择输出的声道*/
u8 dac_connect_mode = app_audio_output_mode_get();
if (dac_connect_mode == DAC_OUTPUT_LR || dac_connect_mode == DAC_OUTPUT_DUAL_LR_DIFF) {
u8 dac_connect_mode = app_audio_output_mode_get();
if (dac_connect_mode == DAC_OUTPUT_LR || dac_connect_mode == DAC_OUTPUT_DUAL_LR_DIFF)
{
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;
} else if (dac_connect_mode == DAC_OUTPUT_MONO_L) {
return AUDIO_CH_DIFF; //要输出左右合成的单声道数据选这个
/* return AUDIO_CH_L; */ //只要输出左声道的数据选这个
} else if (dac_connect_mode == DAC_OUTPUT_MONO_R) {
}
else if (dac_connect_mode == DAC_OUTPUT_MONO_L)
{
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; */ //只要输出右声道的数据选这个
} else {
/* return AUDIO_CH_R; */ // 只要输出右声道的数据选这个
}
else
{
return AUDIO_CH_DIFF;
}
#elif (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_FM)
return AUDIO_CH_LR;
return AUDIO_CH_LR;
#else
return AUDIO_CH_LR;
return AUDIO_CH_LR;
#endif
}
@ -450,14 +469,14 @@ u32 audio_output_channel_type(void)
int audio_output_set_start_volume(u8 state)
{
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;
}
app_audio_state_switch(state, vol_max);
return 0;
}
/*----------------------------------------------------------------------------*/
/**@brief 开始音频输出
@param sample_rate:
@ -469,11 +488,13 @@ int audio_output_set_start_volume(u8 state)
u8 audio_output_flag = 0;
int audio_output_start(u32 sample_rate, u8 reset_rate)
{
if (reset_rate) {
if (reset_rate)
{
app_audio_output_samplerate_set(sample_rate);
}
if (audio_output_flag) {
if (audio_output_flag)
{
return 0;
}
@ -509,14 +530,15 @@ void audio_output_stop(void)
*/
/*----------------------------------------------------------------------------*/
struct audio_src_handle *audio_hw_resample_open(void *priv,
int (*output_handler)(void *, void *, int),
u8 channel,
u16 input_sample_rate,
u16 output_sample_rate)
int (*output_handler)(void *, void *, int),
u8 channel,
u16 input_sample_rate,
u16 output_sample_rate)
{
struct audio_src_handle *hdl;
hdl = zalloc(sizeof(struct audio_src_handle));
if (hdl) {
if (hdl)
{
audio_hw_src_open(hdl, channel, SRC_TYPE_RESAMPLE);
audio_hw_src_set_rate(hdl, input_sample_rate, output_sample_rate);
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)
{
if (hdl) {
if (hdl)
{
audio_hw_src_stop(hdl);
audio_hw_src_close(hdl);
free(hdl);
}
}
/*----------------------------------------------------------------------------*/
/**@brief 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)
{
switch (event) {
switch (event)
{
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);
}
break;
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);
}
if (config_mixer_en) {
if (config_mixer_en)
{
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处理*/
audio_mixer_output_stop(mixer);
//通道关闭时清掉节点记录的偏移防止下个解码打开时mix之后的同步节点断言
// 通道关闭时清掉节点记录的偏移防止下个解码打开时mix之后的同步节点断言
audio_stream_clear_from(&mixer->entry);
}
os_mutex_post(&mixer->mutex);
@ -579,7 +606,6 @@ static void mixer_event_handler(struct audio_mixer *mixer, int event)
#endif
break;
}
}
/*----------------------------------------------------------------------------*/
/**@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)
{
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)
{
if (flag) {
if (flag)
{
audio_mixer_set_sample_rate(&mixer, MIXER_SR_SPEC, sr);
} else {
}
else
{
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)
{
struct audio_decoder_occupy *occupy = priv;
if (idle_total < occupy->idle_expect) {
if (occupy->pend_time) {
if (idle_total < occupy->idle_expect)
{
if (occupy->pend_time)
{
os_time_dly(occupy->pend_time);
}
}
return 0;
}
extern void audio_adda_gain_dump(void);//打印所有adc,dac的增益
extern void audio_adda_gain_dump(void); // 打印所有adc,dac的增益
/*音频配置实时跟踪可以用来查看ADC/DAC增益或者其他寄存器配置*/
static void audio_config_trace(void *priv)
{
printf(">>Audio_Config_Trace:\n");
audio_adda_gain_dump();
//audio_adda_dump();
//mem_stats();
// audio_adda_dump();
// mem_stats();
}
/*----------------------------------------------------------------------------*/
@ -668,7 +699,6 @@ int audio_dec_init()
printf("audio_dec_init\n");
// 创建解码任务
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.idle_expect = 4;
decode_task.occupy.trace_period = 200;
//decode_task.occupy.trace_hdl = audio_dec_occupy_trace_hdl;
#endif/*TCFG_AUDIO_DECODER_OCCUPY_TRACE*/
// decode_task.occupy.trace_hdl = audio_dec_occupy_trace_hdl;
#endif /*TCFG_AUDIO_DECODER_OCCUPY_TRACE*/
#if TCFG_AUDIO_DEC_OUT_TASK
audio_decoder_out_task_create(&decode_task, "audio_out");
@ -704,7 +734,8 @@ int audio_dec_init()
/*硬件SRC模块滤波器buffer设置可根据最大使用数量设置整体buffer*/
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
// 创建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);
// 使能mixer采样率检测
audio_mixer_set_check_sr_handler(&mixer, audio_mixer_check_sr);
if (config_mixer_en) {
if (config_mixer_en)
{
/*初始化mix_buf的长度*/
audio_mixer_set_output_buf(&mixer, mix_buff, sizeof(mix_buff));
#ifdef CONFIG_MIXER_CYCLIC
#define MIXER_MIN_LEN (128*4*2)
#define MIXER_MIN_LEN (128 * 4 * 2)
// 设置mixer最小输出长度
audio_mixer_set_min_len(&mixer, sizeof(mix_buff) < (MIXER_MIN_LEN * 2) ? (sizeof(mix_buff) / 2) : MIXER_MIN_LEN);
#if (SOUNDCARD_ENABLE)
@ -748,7 +780,8 @@ int audio_dec_init()
audio_mixer_set_channel_num(&mixer, ch_num);
// 检测音频输出采样率是否为固定输出
u32 sr = audio_output_nor_rate();
if (sr) {
if (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};
#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)
mix_ch_switch = channel_switch_open(AUDIO_CH_QUAD, AUDIO_SYNTHESIS_LEN / 2);
#endif
@ -778,33 +812,32 @@ int audio_dec_init()
#endif
#if AUDIO_SPECTRUM_CONFIG
//频响能量值获取接口
// 频响能量值获取接口
spec_hdl = spectrum_open_demo(sr, ch_num);
#endif
#if AUDIO_EQUALLOUDNESS_CONFIG
if (ch_num != 4) {
if (ch_num != 4)
{
loudness_open_parm parm = {0};
parm.sr = sr;
parm.ch_num = ch_num;
parm.threadhold_vol = LOUDNESS_THREADHOLD_VOL;
parm.vol_cb = vol_get_test;
loudness = audio_equal_loudness_open(&parm);//不支持四声道
loudness = audio_equal_loudness_open(&parm); // 不支持四声道
}
#endif
#if AUDIO_VOCAL_REMOVE_EN
mix_vocal_remove_hdl = vocal_remove_open(ch_num);
u8 dac_connect_mode = app_audio_output_mode_get();
if ((dac_connect_mode == DAC_OUTPUT_MONO_L)
|| (dac_connect_mode == DAC_OUTPUT_MONO_R)
|| (dac_connect_mode == DAC_OUTPUT_MONO_LR_DIFF)) {
u8 dac_connect_mode = app_audio_output_mode_get();
if ((dac_connect_mode == DAC_OUTPUT_MONO_L) || (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);
}
#endif
// 数据流串联。可以在mixer和last中间添加其他的数据流比如eq等
u8 entry_cnt = 0;
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_handler = audio_phase_inver_data_handler;
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 (loudness) {
if (loudness)
{
entries[entry_cnt++] = &loudness->loudness->entry;
}
#endif
#if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR)
#if !TCFG_EQ_DIVIDE_ENABLE
if (mix_ch_switch) {
if (mix_ch_switch)
{
entries[entry_cnt++] = &mix_ch_switch->entry;
}
#endif
#endif
#if AUDIO_SPECTRUM_CONFIG
if (spec_hdl) {
if (spec_hdl)
{
entries[entry_cnt++] = &spec_hdl->entry;
}
#endif
#if AUDIO_VOCAL_REMOVE_EN
if (mix_vocal_remove_hdl) {
if (mix_vocal_remove_hdl)
{
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;
}
#endif
#if AUDIO_OUTPUT_AUTOMUTE
entries[entry_cnt++] = mix_out_automute_entry;
#endif
@ -870,7 +907,6 @@ int audio_dec_init()
entry_cnt++;
#endif
#if (AUDIO_OUTPUT_INCLUDE_IIS)
audio_dig_vol_param iis_digvol_last_param = {
.vol_start = app_var.music_volume,
@ -890,14 +926,15 @@ int audio_dec_init()
entries[entry_cnt++] = iis_entries_start;
entries[entry_cnt++] = iis_digvol_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]);
}
#endif
#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;
audio_dig_vol_param bt_digvol_last_param = {
.vol_start = app_var.music_volume,
@ -936,7 +973,8 @@ int audio_dec_init()
entries[entry_cnt++] = fmtx_entries_start;
entries[entry_cnt++] = fmtx_digvol_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]);
}
#endif
@ -946,8 +984,7 @@ __mixer_init_end:
#if (RECORDER_MIX_EN)
// 录音
recorder_mix_init(&recorder_mixer, recorder_mix_buff, sizeof(recorder_mix_buff));
#endif//RECORDER_MIX_EN
#endif // RECORDER_MIX_EN
// 音频音量初始化
app_audio_volume_init();
@ -973,7 +1010,7 @@ __mixer_init_end:
#if TCFG_AUDIO_CONFIG_TRACE
sys_timer_add(NULL, audio_config_trace, 3000);
#endif/*TCFG_AUDIO_CONFIG_TRACE*/
#endif /*TCFG_AUDIO_CONFIG_TRACE*/
return err;
}
@ -991,9 +1028,10 @@ static u8 audio_dec_init_complete()
/*不支持Audio功能返回idle*/
#if (defined TCFG_AUDIO_ENABLE && (TCFG_AUDIO_ENABLE == 0))
return 1;
#endif/*TCFG_AUDIO_ENABLE*/
#endif /*TCFG_AUDIO_ENABLE*/
if (!audio_dec_inited) {
if (!audio_dec_inited)
{
return 0;
}
@ -1004,17 +1042,34 @@ REGISTER_LP_TARGET(audio_dec_init_lp_target) = {
.is_idle = audio_dec_init_complete,
};
#if AUDIO_OUTPUT_AUTOMUTE
#include "kt.h"
#include "app_task.h"
static u8 bt_mute_flag = 0;
void audio_mix_out_automute_mute(u8 mute)
{
printf(">>>>>>>>>>>>>>>>>>>> %s\n", mute ? ("MUTE") : ("UNMUTE"));
if (mute) {
PA_MUTE();
} else {
if (mute)
{
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();
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)
{
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);
} else {
}
else
{
#if DAC_AUTO_HIGH_Z_EN
app_audio_output_ch_mute(BIT(ch), event);
#endif
@ -1035,7 +1093,8 @@ void mix_out_automute_handler(u8 event, u8 ch)
void mix_out_automute_skip(u8 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_mix_out_automute_mute(mute);
}
@ -1043,16 +1102,38 @@ void mix_out_automute_skip(u8 skip)
void mix_out_automute_open()
{
if (mix_out_automute_hdl) {
if (mix_out_automute_hdl)
{
printf("mix_out_automute is already open !\n");
return;
}
audio_energy_detect_param e_det_param = {0};
#if 0
e_det_param.mute_energy = 5;
e_det_param.unmute_energy = 10;
e_det_param.mute_time_ms = 1000;
e_det_param.unmute_time_ms = 50;
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.event_handler = mix_out_automute_handler;
#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()
{
if (mix_out_automute_hdl) {
if (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)
{
if (sys_digvol_group == NULL) {
if (sys_digvol_group == NULL)
{
sys_digvol_group = audio_dig_vol_group_open();
return 0;
}
@ -1106,7 +1188,8 @@ int sys_digvol_group_open(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 -1;
@ -1125,21 +1208,22 @@ u16 __attribute__((weak)) get_ch_digvol_start(char *logo)
return get_max_sys_vol();
}
/*******************************************************
* Function name : sys_digvol_group_ch_open
* Description :
* Parameter :
* @logo
* @vol_start , -1 get_ch_digvol_start
* Return : digvol audio stream entry
*******************************************************/
* Function name : sys_digvol_group_ch_open
* Description :
* Parameter :
* @logo
* @vol_start , -1 get_ch_digvol_start
* Return : digvol audio stream entry
*******************************************************/
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;
}
if (vol_start == -1) {
if (vol_start == -1)
{
vol_start = get_ch_digvol_start(logo);
}
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,
.vol_list = NULL,
};
if (parm == NULL) {
if (parm == NULL)
{
parm = &temp_digvol_param;
}
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);
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)
{
if (sys_digvol_group == NULL || logo == NULL) {
if (sys_digvol_group == NULL || logo == NULL)
{
return -1;
}
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);
if (entry != NULL) {
if (entry != NULL)
{
audio_stream_del_entry(entry);
}
}
audio_dig_vol_close(audio_dig_vol_group_hdl_get(sys_digvol_group, logo));
audio_dig_vol_group_del(sys_digvol_group, logo);
return 0;
@ -1185,7 +1272,6 @@ int sys_digvol_group_ch_close(char *logo)
#endif // SYS_DIGVOL_GROUP_EN
#if AUDIO_VOCAL_REMOVE_EN
/*----------------------------------------------------------------------------*/
/**@brief 人声消除打开例子
@ -1211,12 +1297,11 @@ void *vocal_remove_open(u8 ch_num)
/*----------------------------------------------------------------------------*/
void vocal_remove_close()
{
if (mix_vocal_remove_hdl) {
if (mix_vocal_remove_hdl)
{
audio_vocal_remove_close(mix_vocal_remove_hdl);
mix_vocal_remove_hdl = NULL;
}
}
#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,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,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,clr_wdt,l
-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,btstack_emitter_support,pl
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_lite.c.o
-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,__initcall_app_update_init,pl
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
-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
-r=objs/apps/common/usb/device/hid.c.o,hid_key_handler,pl
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,private_scsi_cmd,pl
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/uac_stream.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_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_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_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
-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/aoa.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,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,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,log_tag_const_i_APP,l
-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
-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,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,hex2text,pl
-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,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,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,lp_winsize_init,l
-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,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_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,linein_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,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,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,mix_out_automute_handler,pl
-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_dieh,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
-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
@ -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_e_USB,l
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_language_str,l
-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_product_str,l
-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_device_descriptor,pl
-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,pl
-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,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,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,set_descriptor,pl
-r=include_lib/liba/br23/cpu.a.llvm.1121414.descriptor.c,printf,l

File diff suppressed because it is too large Load Diff