生成代码包
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,497 @@
|
||||
#include "system/includes.h"
|
||||
/*#include "btcontroller_config.h"*/
|
||||
#include "btstack/btstack_task.h"
|
||||
#include "app_config.h"
|
||||
#include "app_action.h"
|
||||
#include "asm/pwm_led.h"
|
||||
#include "tone_player.h"
|
||||
#include "ui_manage.h"
|
||||
#include "gpio.h"
|
||||
#include "app_main.h"
|
||||
#include "asm/charge.h"
|
||||
#include "update.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "audio_config.h"
|
||||
#include "app_charge.h"
|
||||
#include "bt_profile_cfg.h"
|
||||
#include "dev_manager/dev_manager.h"
|
||||
#include "update_loader_download.h"
|
||||
#include "usr_rtc.h"
|
||||
|
||||
#ifndef CONFIG_MEDIA_NEW_ENABLE
|
||||
#ifndef CONFIG_MEDIA_DEVELOP_ENABLE
|
||||
#include "audio_dec_server.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
#include "bt_tws.h"
|
||||
#endif
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#include "audio_anc.h"
|
||||
#endif
|
||||
|
||||
#define LOG_TAG_CONST APP
|
||||
#define LOG_TAG "[APP]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
#ifdef CONFIG_BOARD_AISPEECH_VAD_ASR
|
||||
u8 user_at_cmd_send_support = 1;
|
||||
#endif
|
||||
|
||||
/*任务列表 */
|
||||
const struct task_info task_info_table[] = {
|
||||
{"app_core", 1, 0, 768+768+2048, 256 },
|
||||
{"sys_event", 7, 0, 256+128, 0 },
|
||||
{"systimer", 7, 0, 128+128+128, 0 },
|
||||
{"btctrler", 4, 0, 1536+512+128, 384 },
|
||||
{"btencry", 1, 0, 1536+512+128, 128 },
|
||||
//{"tws", 5, 0, 512, 128 },
|
||||
#if (BT_FOR_APP_EN)
|
||||
{"btstack", 3, 0, 1024+1024+1024+512, 256 },
|
||||
#else
|
||||
{"btstack", 3, 0, 1024+1024+1024+512, 256 },
|
||||
#endif
|
||||
{"audio_dec", 5, 0, 800, 128 },
|
||||
//{"aud_effect", 5, 1, 800, 128 },
|
||||
/*
|
||||
*为了防止dac buf太大,通话一开始一直解码,
|
||||
*导致编码输入数据需要很大的缓存,这里提高编码的优先级
|
||||
*/
|
||||
//{"audio_enc", 6, 0, 768, 128 },
|
||||
//{"aec", 2, 1, 768, 128 },
|
||||
#if TCFG_AUDIO_HEARING_AID_ENABLE
|
||||
{"HearingAid", 6, 0, 768, 128 },
|
||||
#endif/*TCFG_AUDIO_HEARING_AID_ENABLE*/
|
||||
#ifdef CONFIG_BOARD_AISPEECH_NR
|
||||
{"aispeech_enc", 2, 1, 512, 128 },
|
||||
#endif /*CONFIG_BOARD_AISPEECH_NR*/
|
||||
#ifdef CONFIG_BOARD_AISPEECH_VAD_ASR
|
||||
{"asr", 1, 0, 768, 128 },
|
||||
{"audio_asr_export_task", 1, 0, 512, 128 },
|
||||
#endif/*CONFIG_BOARD_AISPEECH_VAD_ASR*/
|
||||
#ifndef CONFIG_256K_FLASH
|
||||
//{"aec_dbg", 3, 0, 128, 128 },
|
||||
|
||||
#if AUDIO_ENC_MPT_SELF_ENABLE
|
||||
{"enc_mpt_self", 3, 0, 512, 128 },
|
||||
#endif/*AUDIO_ENC_MPT_SELF_ENABLE*/
|
||||
{"update", 1, 0, 256+128, 0 },
|
||||
//{"tws_ota", 2, 0, 256, 0 },
|
||||
//{"tws_ota_msg", 2, 0, 256, 128 },
|
||||
{"dw_update", 2, 0, 256+768, 128 },
|
||||
{"rcsp_task", 2, 0, 640, 128 },
|
||||
//{"aud_capture", 4, 0, 512, 256 },
|
||||
//{"data_export", 5, 0, 512, 256 },
|
||||
//{"anc", 3, 1, 512, 128 },
|
||||
#endif
|
||||
|
||||
#if TCFG_GX8002_NPU_ENABLE
|
||||
{"gx8002", 2, 0, 256, 64 },
|
||||
#endif /* #if TCFG_GX8002_NPU_ENABLE */
|
||||
#if TCFG_GX8002_ENC_ENABLE
|
||||
{"gx8002_enc", 2, 0, 128, 64 },
|
||||
#endif /* #if TCFG_GX8002_ENC_ENABLE */
|
||||
|
||||
|
||||
#if TCFG_KWS_VOICE_RECOGNITION_ENABLE
|
||||
{"kws", 2, 0, 256, 64 },
|
||||
#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */
|
||||
{"usb_msd", 1, 0, 512, 128 },
|
||||
#if !TCFG_USB_MIC_CVP_ENABLE
|
||||
{"usbmic_write", 2, 0, 256, 128 },
|
||||
#endif
|
||||
#if AI_APP_PROTOCOL
|
||||
{"app_proto", 2, 0, 768, 64 },
|
||||
#endif
|
||||
#if (TCFG_SPI_LCD_ENABLE||TCFG_SIMPLE_LCD_ENABLE)
|
||||
{"ui", 2, 0, 768, 256 },
|
||||
#else
|
||||
{"ui", 3, 0, 384 - 64, 128 },
|
||||
#endif
|
||||
#if (TCFG_DEV_MANAGER_ENABLE)
|
||||
{"dev_mg", 3, 0, 512, 512 },
|
||||
#endif
|
||||
{"audio_vad", 1, 1, 512, 128 },
|
||||
#if TCFG_KEY_TONE_EN
|
||||
{"key_tone", 5, 0, 256, 32 },
|
||||
#endif
|
||||
#if (TCFG_WIRELESS_MIC_ENABLE)
|
||||
{"wl_mic_enc", 2, 0, 768, 128 },
|
||||
#endif
|
||||
#if (TUYA_DEMO_EN)
|
||||
{"user_deal", 7, 0, 512, 512 },//定义线程 tuya任务调度
|
||||
{"dw_update", 2, 0, 256, 128 },
|
||||
#endif
|
||||
#if TCFG_AUDIO_SPATIAL_EFFECT_ENABLE
|
||||
{"imu_trim", 1, 0, 256, 128 },
|
||||
#endif /*TCFG_AUDIO_SPATIAL_EFFECT_ENABLE*/
|
||||
#if TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN
|
||||
{"speak_to_chat", 2, 0, 256, 128 },
|
||||
{"icsd_adt", 2, 0, 512, 128 },
|
||||
{"icsd_src", 2, 1, 512, 128 },
|
||||
#endif /*TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN*/
|
||||
{"pmu_task", 6, 0, 256, 128 },
|
||||
//{"WindDetect", 2, 0, 256, 128 },
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
|
||||
APP_VAR app_var;
|
||||
USR_VAR usr_var;
|
||||
void clr_wdt(void);
|
||||
u8 usr_get_ldoin();
|
||||
void app_earphone_play_voice_file(const char *name);
|
||||
extern int cpu_reset_by_soft();
|
||||
extern int audio_dec_init();
|
||||
extern int audio_enc_init();
|
||||
extern u32 timer_get_ms(void);
|
||||
extern void uart_dev_test_main();
|
||||
extern int ana_demo();
|
||||
extern void uart_dev_main_init();
|
||||
extern void usr_check_mcu_all_sta();
|
||||
extern void usr_clear_pair_info_noreset(void);
|
||||
extern void usr_disable_intterupt();
|
||||
extern void usr_disable_charge_intterupt();
|
||||
u8 power_reset_flag=0;
|
||||
/*
|
||||
* 2ms timer中断回调函数
|
||||
*/
|
||||
|
||||
void timer_2ms_handler()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void app_var_init(void)
|
||||
{
|
||||
memset((u8 *)&bt_user_priv_var, 0, sizeof(BT_USER_PRIV_VAR));
|
||||
app_var.play_poweron_tone = 1;
|
||||
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
u8 get_charge_online_flag(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 软复位 / 充电唤醒时跳过开机提示音 */
|
||||
static void app_poweron_check(int update)
|
||||
{
|
||||
#if (CONFIG_BT_MODE == BT_NORMAL)
|
||||
if (!update && cpu_reset_by_soft()) {
|
||||
app_var.play_poweron_tone = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
#if TCFG_CHARGE_OFF_POWERON_NE
|
||||
if (is_ldo5v_wakeup()) {
|
||||
app_var.play_poweron_tone = 0;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
u8 usr_get_ldoin()
|
||||
{
|
||||
#if USR_CHG_IN_IO
|
||||
if(gpio_read(USR_CHG_IN_IO)==0)return 1;
|
||||
return 0;
|
||||
#else
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
if (get_ldo5v_online_hw() && get_charge_online_flag())return 1;
|
||||
else return 0;
|
||||
#else
|
||||
return 0;
|
||||
#endif // TCFG_CHARGE_ENABLE
|
||||
#endif // USR_CHG_IN_IO
|
||||
}
|
||||
u8 usr_get_full()
|
||||
{
|
||||
#if USR_CHG_FULL_IO
|
||||
if(gpio_read(USR_CHG_FULL_IO)==0)return 1;
|
||||
return 0;
|
||||
#else
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
if(get_charge_full_flag())return 1;
|
||||
else return 0;
|
||||
#else
|
||||
return 0;
|
||||
#endif // TCFG_CHARGE_ENABLE
|
||||
#endif // USR_CHG_FULL_IO
|
||||
}
|
||||
u8 usr_get_ldoin_all()
|
||||
{
|
||||
if(usr_get_ldoin()||usr_get_full())return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
const struct sys_time def_sys_time = { //初始一下当前时间
|
||||
.year = 2020,
|
||||
.month = 1,
|
||||
.day = 1,
|
||||
.hour = 0,
|
||||
.min = 0,
|
||||
.sec = 0,
|
||||
};
|
||||
|
||||
|
||||
const struct rtc_dev_platform_data rtc_init_data=
|
||||
{
|
||||
.default_sys_time = &def_sys_time,
|
||||
.default_alarm = NULL,
|
||||
.clk_sel = CLK_SEL_32K,//CLK_SEL_LRC,//CLK_SEL_32K,
|
||||
.cbfun = NULL, //闹钟中断的回调函数,用户自行定义
|
||||
/* .cbfun = alarm_isr_user_cbfun, */
|
||||
};
|
||||
#endif // 0
|
||||
extern void bt_osc_offset_ext_updata(s32 offset);
|
||||
extern void usr_jb_init();
|
||||
void app_main()
|
||||
{
|
||||
int update = 0;
|
||||
u32 addr = 0, size = 0;
|
||||
struct intent it;
|
||||
|
||||
log_info("app_main...............#####\n");
|
||||
bt_osc_offset_ext_updata(11);
|
||||
usr_var.usr_ota_succ_flag=0;
|
||||
usb_iomode(1);
|
||||
|
||||
//#ifndef CONFIG_DEBUG_ENABLE
|
||||
// uart_dev_test_main();
|
||||
//#endif // CONFIG_DEBUG_ENABLE
|
||||
app_var.start_time = timer_get_ms();
|
||||
|
||||
#if (defined(CONFIG_MEDIA_NEW_ENABLE) || (defined(CONFIG_MEDIA_DEVELOP_ENABLE)))
|
||||
/*解码器*/
|
||||
audio_enc_init();
|
||||
audio_dec_init();
|
||||
#endif
|
||||
|
||||
//rtc_init(&rtc_init_data);
|
||||
#ifdef BT_DUT_INTERFERE
|
||||
void audio_demo(void);
|
||||
audio_demo();
|
||||
#endif/*BT_DUT_INTERFERE*/
|
||||
#ifdef BT_DUT_ADC_INTERFERE
|
||||
void audio_adc_mic_dut_open(void);
|
||||
audio_adc_mic_dut_open();
|
||||
#endif/*BT_DUT_ADC_INTERFERE*/
|
||||
|
||||
if (!UPDATE_SUPPORT_DEV_IS_NULL()) {
|
||||
update = 0;//update_result_deal();
|
||||
}
|
||||
|
||||
app_var_init();
|
||||
usr_rtc_init(); /* 打开硬件 RTC,网关 DEVICEINFO 对时走 usr_rtc_set_from_unix */
|
||||
usr_jb_init();
|
||||
|
||||
#if TCFG_MC_BIAS_AUTO_ADJUST
|
||||
mc_trim_init(update);
|
||||
#endif/*TCFG_MC_BIAS_AUTO_ADJUST*/
|
||||
|
||||
//if (get_charge_online_flag())
|
||||
if(0){
|
||||
|
||||
#if(TCFG_SYS_LVD_EN == 1)
|
||||
vbat_check_init();
|
||||
#endif
|
||||
|
||||
init_intent(&it);
|
||||
it.name = "idle";
|
||||
it.action = ACTION_IDLE_MAIN;
|
||||
start_app(&it);
|
||||
} else {
|
||||
check_power_on_voltage();
|
||||
|
||||
app_poweron_check(update);
|
||||
//uart_dev_main_init();
|
||||
//sys_timeout_add(NULL,usr_check_mcu_all_sta,1000);
|
||||
if(usr_get_ldoin()||usr_get_full())
|
||||
{
|
||||
usr_var.usr_power_charge_flag=1;
|
||||
}
|
||||
else
|
||||
{
|
||||
usr_var.usr_power_charge_flag=2;
|
||||
}
|
||||
|
||||
/*
|
||||
* 上电强制进入配对模式:
|
||||
* 1) usr_goto_pair=1:后续 usr_ble_adv_init() 走绑定广播(encode4bind),不走重连广播
|
||||
* 2) usr_clear_pair_info_noreset():清 VM 中三元组,保证 paired_flag=0
|
||||
* 注意:须在 BLE 协议栈调用 usr_ble_adv_init() 之前设置;此处不清复位,避免上电死循环复位
|
||||
*/
|
||||
usr_var.usr_goto_pair = 1;
|
||||
usr_clear_pair_info_noreset();
|
||||
|
||||
ui_manage_init();
|
||||
ui_update_status(STATUS_POWERON);
|
||||
|
||||
#if TCFG_WIRELESS_MIC_ENABLE
|
||||
extern void wireless_mic_main_run(void);
|
||||
wireless_mic_main_run();
|
||||
#endif
|
||||
|
||||
#if TCFG_ENTER_PC_MODE
|
||||
init_intent(&it);
|
||||
it.name = "pc";
|
||||
it.action = ACTION_PC_MAIN;
|
||||
start_app(&it);
|
||||
#else
|
||||
init_intent(&it);
|
||||
it.name = "earphone";
|
||||
it.action = ACTION_EARPHONE_MAIN;
|
||||
start_app(&it);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
set_charge_event_flag(1);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
int __attribute__((weak)) eSystemConfirmStopStatus(void)
|
||||
{
|
||||
/* 系统进入在未来时间里,无任务超时唤醒,可根据用户选择系统停止,或者系统定时唤醒(100ms),或自己指定唤醒时间 */
|
||||
//1:Endless Sleep
|
||||
//0:100 ms wakeup
|
||||
//other: x ms wakeup
|
||||
if (get_charge_full_flag()) {
|
||||
/* log_i("Endless Sleep"); */
|
||||
power_set_soft_poweroff();
|
||||
return 1;
|
||||
} else {
|
||||
/* log_i("100 ms wakeup"); */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((used)) int *__errno()
|
||||
{
|
||||
static int err;
|
||||
return &err;
|
||||
}
|
||||
/*
|
||||
enum {
|
||||
KEY_USER_DEAL_POST = 0,
|
||||
KEY_USER_DEAL_POST_MSG,
|
||||
KEY_USER_DEAL_POST_EVENT,
|
||||
KEY_USER_DEAL_POST_2,
|
||||
};
|
||||
|
||||
#include "system/includes.h"
|
||||
#include "system/event.h"
|
||||
|
||||
///自定义事件推送的线程
|
||||
|
||||
#define Q_USER_DEAL 0xAABBCC ///自定义队列类型
|
||||
#define Q_USER_DATA_SIZE 10///理论Queue受任务声明struct task_info.qsize限制,但不宜过大,建议<=6
|
||||
|
||||
void user_deal_send_ver(void)
|
||||
{
|
||||
//os_taskq_post("user_deal", 1,KEY_USER_DEAL_POST);
|
||||
os_taskq_post_msg("user_deal", 1, KEY_USER_DEAL_POST_MSG);
|
||||
//os_taskq_post_event("user_deal",1, KEY_USER_DEAL_POST_EVENT);
|
||||
}
|
||||
|
||||
void user_deal_rand_set(u32 rand)
|
||||
{
|
||||
os_taskq_post("user_deal", 2, KEY_USER_DEAL_POST_2, rand);
|
||||
}
|
||||
|
||||
void user_deal_send_array(int *msg, int argc)
|
||||
{
|
||||
if (argc > Q_USER_DATA_SIZE) {
|
||||
return;
|
||||
}
|
||||
os_taskq_post_type("user_deal", Q_USER_DEAL, argc, msg);
|
||||
}
|
||||
void user_deal_send_msg(void)
|
||||
{
|
||||
os_taskq_post_event("user_deal", 1, KEY_USER_DEAL_POST_EVENT);
|
||||
}
|
||||
|
||||
void user_deal_send_test(void)///模拟测试函数,可按键触发调用,自行看打印
|
||||
{
|
||||
user_deal_send_ver();
|
||||
user_deal_rand_set(0x11223344);
|
||||
static u32 data[Q_USER_DATA_SIZE] = {0x11223344, 0x55667788, 0x11223344, 0x55667788, 0x11223344,
|
||||
0xff223344, 0x556677ee, 0x11223344, 0x556677dd, 0x112233ff,
|
||||
};
|
||||
user_deal_send_array(data, sizeof(data) / sizeof(int));
|
||||
}
|
||||
|
||||
static void user_deal_task_handle(void *p)
|
||||
{
|
||||
int msg[Q_USER_DATA_SIZE + 1] = {0, 0, 0, 0, 0, 0, 0, 0, 00, 0};
|
||||
int res = 0;
|
||||
while (1) {
|
||||
res = os_taskq_pend("taskq", msg, ARRAY_SIZE(msg));
|
||||
if (res != OS_TASKQ) {
|
||||
continue;
|
||||
}
|
||||
r_printf("user_deal_task_handle:0x%x", msg[0]);
|
||||
put_buf(msg, (Q_USER_DATA_SIZE + 1) * 4);
|
||||
if (msg[0] == Q_MSG) {
|
||||
printf("use os_taskq_post_msg");
|
||||
switch (msg[1]) {
|
||||
case KEY_USER_DEAL_POST_MSG:
|
||||
printf("KEY_USER_DEAL_POST_MSG");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (msg[0] == Q_EVENT) {
|
||||
printf("use os_taskq_post_event");
|
||||
switch (msg[1]) {
|
||||
case KEY_USER_DEAL_POST_EVENT:
|
||||
printf("KEY_USER_DEAL_POST_EVENT");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (msg[0] == Q_CALLBACK) {
|
||||
} else if (msg[0] == Q_USER) {
|
||||
printf("use os_taskq_post");
|
||||
switch (msg[1]) {
|
||||
case KEY_USER_DEAL_POST:
|
||||
printf("KEY_USER_DEAL_POST");
|
||||
break;
|
||||
case KEY_USER_DEAL_POST_2:
|
||||
printf("KEY_USER_DEAL_POST_2:0x%x", msg[2]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (msg[0] == Q_USER_DEAL) {
|
||||
printf("use os_taskq_post_type");
|
||||
printf("0x%x 0x%x 0x%x 0x%x 0x%x", msg[1], msg[2], msg[3], msg[4], msg[5]);
|
||||
printf("0x%x 0x%x 0x%x 0x%x 0x%x", msg[6], msg[7], msg[8], msg[9], msg[10]);
|
||||
}
|
||||
puts("");
|
||||
}
|
||||
}
|
||||
|
||||
void user_deal_init(void)
|
||||
{
|
||||
//task_create(user_deal_task_handle, NULL, "user_deal");
|
||||
}
|
||||
|
||||
void user_deal_exit(void)
|
||||
{
|
||||
//task_kill("user_deal");
|
||||
}
|
||||
|
||||
*/
|
||||
@@ -0,0 +1,285 @@
|
||||
#include "system/includes.h"
|
||||
#include "app_config.h"
|
||||
#include "app_task.h"
|
||||
//#include "app_music.h"
|
||||
#include "app_action.h"
|
||||
#include "earphone.h"
|
||||
#include "bt_background.h"
|
||||
|
||||
u8 app_curr_task = 0;
|
||||
u8 app_next_task = 0;
|
||||
u8 app_prev_task = 0;
|
||||
|
||||
extern int pc_app_check(void);
|
||||
|
||||
const u8 app_task_list[] = {
|
||||
APP_BT_TASK,
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
APP_MUSIC_TASK,
|
||||
#endif
|
||||
#if TCFG_PC_ENABLE
|
||||
APP_PC_TASK,
|
||||
#endif
|
||||
#if TCFG_APP_AUX_EN
|
||||
APP_AUX_TASK,
|
||||
#endif
|
||||
};
|
||||
|
||||
const u8 app_task_action_tab[] = {
|
||||
ACTION_EARPHONE_MAIN,
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
ACTION_MUSIC_MAIN,
|
||||
#endif
|
||||
#if TCFG_PC_ENABLE
|
||||
ACTION_PC_MAIN,
|
||||
#endif
|
||||
#if TCFG_APP_AUX_EN
|
||||
ACTION_AUX_MAIN,
|
||||
#endif
|
||||
};
|
||||
|
||||
const char *app_task_name_tab[] = {
|
||||
APP_NAME_BT,
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
APP_NAME_MUSIC,
|
||||
#endif
|
||||
#if TCFG_PC_ENABLE
|
||||
APP_NAME_PC,
|
||||
#endif
|
||||
#if TCFG_APP_AUX_EN
|
||||
APP_NAME_AUX,
|
||||
#endif
|
||||
};
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 模式进入检查
|
||||
@param app_task:目标模式
|
||||
@return TRUE可以进入, FALSE不可以进入
|
||||
@note 例如一些需要设备在线的任务(music),
|
||||
如果设备在线可以进入, 没有设备在线不进入可以在这里处理
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
int app_task_switch_check(u8 app_task)
|
||||
{
|
||||
int ret = false;
|
||||
printf("app_task %x\n", app_task);
|
||||
switch (app_task) {
|
||||
case APP_BT_TASK:
|
||||
ret = true;
|
||||
break;
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
case APP_MUSIC_TASK:
|
||||
ret = music_app_check();
|
||||
break;
|
||||
#endif
|
||||
#if TCFG_PC_ENABLE
|
||||
case APP_PC_TASK:
|
||||
ret = pc_app_check();
|
||||
break;
|
||||
#endif
|
||||
#if TCFG_APP_AUX_EN
|
||||
case APP_AUX_TASK:
|
||||
ret = true;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
ret = false;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief app_core_back_to_prev_app后检查
|
||||
@param void
|
||||
@return TRUE:当前模式对应的设备在线, FALSE:当前模式的设备不在线却进入了模式
|
||||
@note 用于app_core_back_to_prev_app后的检查
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
int app_core_back_to_prev_app_over_check(void)
|
||||
{
|
||||
int ret = false;
|
||||
struct application *app = get_current_app();
|
||||
|
||||
if (app && app->state == APP_STA_START) {
|
||||
if (app->name == APP_NAME_BT) {
|
||||
} else if (app->name == APP_NAME_BT) {
|
||||
ret = true;
|
||||
} else if (app->name == APP_NAME_MUSIC) {
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
ret = music_app_check();
|
||||
#endif
|
||||
} else if (app->name == APP_NAME_PC) {
|
||||
#if TCFG_PC_ENABLE
|
||||
ret = pc_app_check();
|
||||
#endif
|
||||
} else if (app->name == APP_NAME_AUX) {
|
||||
#if TCFG_APP_AUX_EN
|
||||
ret = true;
|
||||
#endif
|
||||
} else {
|
||||
ret = false;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 模式退出检查
|
||||
@param curr_task:当前模式
|
||||
@return TRUE可以退出, FALSE不可以退出
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int app_task_switch_exit_check(u8 curr_task)
|
||||
{
|
||||
int ret = false;
|
||||
switch (curr_task) {
|
||||
case APP_BT_TASK:
|
||||
ret = bt_app_exit_check();
|
||||
break;
|
||||
default:
|
||||
ret = TRUE;
|
||||
break;
|
||||
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 切换到指定模式
|
||||
@param app_task:指定模式
|
||||
@return
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
int app_task_switch_to(u8 app_task, int priv)
|
||||
{
|
||||
struct intent it;
|
||||
|
||||
//相同模式不切
|
||||
if (app_curr_task == app_task) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//不在线不切
|
||||
if (!app_task_switch_check(app_task)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//上一个模式不允许退出不切
|
||||
if (!app_task_switch_exit_check(app_curr_task)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
printf("cur --- %x \n", app_curr_task);
|
||||
printf("new +++ %x \n", app_task);
|
||||
|
||||
app_prev_task = app_curr_task;
|
||||
app_curr_task = app_task;
|
||||
|
||||
#if CONFIG_BT_BACKGROUND_ENABLE
|
||||
//bt_in_background()为0时,切到蓝牙模式需要初始化(关机插pc切模式的情况)
|
||||
if ((app_task == APP_BT_TASK) && bt_in_background()) {
|
||||
if (priv == ACTION_A2DP_START) {
|
||||
bt_switch_to_foreground(ACTION_A2DP_START, 1);
|
||||
} else if (priv == ACTION_DO_NOTHING) {
|
||||
bt_switch_to_foreground(ACTION_DO_NOTHING, 1);
|
||||
} else {
|
||||
bt_switch_to_foreground(ACTION_TONE_PLAY, 1);
|
||||
}
|
||||
return true; //切到蓝牙前台
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_BT_BACKGROUND_ENABLE
|
||||
if (app_prev_task != APP_BT_TASK)
|
||||
#endif
|
||||
{
|
||||
init_intent(&it);
|
||||
it.action = ACTION_BACK;
|
||||
start_app(&it);
|
||||
}
|
||||
|
||||
init_intent(&it);
|
||||
it.name = app_task_name_tab[app_task];
|
||||
it.action = app_task_action_tab[app_task];
|
||||
start_app(&it);
|
||||
return true;
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 切换到下一个模式
|
||||
@param
|
||||
@return
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
void app_task_switch_next(void)
|
||||
{
|
||||
int i = 0;
|
||||
int cur_index = 0;
|
||||
|
||||
for (cur_index = 0; cur_index < ARRAY_SIZE(app_task_list); cur_index++) {
|
||||
if (app_curr_task == app_task_list[cur_index]) {//遍历当前索引
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = cur_index ;;) { //遍历一圈
|
||||
if (++i >= ARRAY_SIZE(app_task_list)) {
|
||||
i = 0;
|
||||
}
|
||||
if (i == cur_index) {
|
||||
return;
|
||||
}
|
||||
if (app_task_switch_to(app_task_list[i], NULL_VALUE)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 切换到上一个模式
|
||||
@param
|
||||
@return
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
void app_task_switch_prev(void)
|
||||
{
|
||||
int i = 0;
|
||||
int cur_index = 0;
|
||||
|
||||
for (cur_index = 0; cur_index < ARRAY_SIZE(app_task_list); cur_index++) {
|
||||
if (app_curr_task == app_task_list[cur_index]) {//遍历当前索引
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = cur_index; ;) { //遍历一圈
|
||||
if (i-- == 0) {
|
||||
i = ARRAY_SIZE(app_task_list) - 1;
|
||||
}
|
||||
if (i == cur_index) {
|
||||
return;
|
||||
}
|
||||
if (app_task_switch_to(app_task_list[i], NULL_VALUE)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief 获取当前模式
|
||||
@param
|
||||
@return 当前模式id
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
u8 app_get_curr_task(void)
|
||||
{
|
||||
return app_curr_task;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,462 @@
|
||||
#include "init.h"
|
||||
#include "app_config.h"
|
||||
#include "system/includes.h"
|
||||
#include "asm/chargestore.h"
|
||||
#include "user_cfg.h"
|
||||
//#include "app_chargestore.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "app_testbox.h"
|
||||
#include "device/vm.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "app_action.h"
|
||||
#include "app_main.h"
|
||||
#include "app_charge.h"
|
||||
#include "classic/tws_api.h"
|
||||
#include "update.h"
|
||||
#include "bt_ble.h"
|
||||
#include "bt_tws.h"
|
||||
#include "app_action.h"
|
||||
#include "bt_common.h"
|
||||
#include "le_rcsp_adv_module.h"
|
||||
#include "asm/lp_touch_key_api.h"
|
||||
|
||||
#define LOG_TAG_CONST APP_TESTBOX
|
||||
#define LOG_TAG "[APP_TESTBOX]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
|
||||
//testbox sub cmd
|
||||
#define CMD_BOX_BT_NAME_INFO 0x01 //获取蓝牙名
|
||||
#define CMD_BOX_SDK_VERSION 0x02 //获取sdk版本信息
|
||||
#define CMD_BOX_BATTERY_VOL 0x03 //获取电量
|
||||
#define CMD_BOX_ENTER_DUT 0x04 //进入dut模式
|
||||
#define CMD_BOX_FAST_CONN 0x05 //进入快速链接
|
||||
#define CMD_BOX_VERIFY_CODE 0x06 //获取校验码
|
||||
#define CMD_BOX_ENTER_STORAGE_MODE 0x0a //进入仓储模式
|
||||
#define CMD_BOX_GLOBLE_CFG 0x0b //测试盒配置命令(测试盒收到CMD_BOX_TWS_CHANNEL_SEL命令后发送,需使能测试盒某些配置)
|
||||
#define CMD_BOX_CUSTOM_CODE 0xf0 //客户自定义命令处理
|
||||
|
||||
#define WRITE_LIT_U16(a,src) {*((u8*)(a)+1) = (u8)(src>>8); *((u8*)(a)+0) = (u8)(src&0xff); }
|
||||
#define WRITE_LIT_U32(a,src) {*((u8*)(a)+3) = (u8)((src)>>24); *((u8*)(a)+2) = (u8)(((src)>>16)&0xff);*((u8*)(a)+1) = (u8)(((src)>>8)&0xff);*((u8*)(a)+0) = (u8)((src)&0xff);}
|
||||
|
||||
#define READ_LIT_U32(a) (*((u8*)(a)) + (*((u8*)(a)+1)<<8) + (*((u8*)(a)+2)<<16) + (*((u8*)(a)+3)<<24))
|
||||
|
||||
enum {
|
||||
UPDATE_MASK_FLAG_INQUIRY_VBAT_LEVEL = 0,
|
||||
UPDATE_MASK_FLAG_INQUIRY_VERIFY_CODE,
|
||||
UPDATE_MASK_FLAG_INQUIRY_SDK_VERSION,
|
||||
};
|
||||
|
||||
static const u32 support_update_mask = BIT(UPDATE_MASK_FLAG_INQUIRY_VBAT_LEVEL) | \
|
||||
BIT(UPDATE_MASK_FLAG_INQUIRY_SDK_VERSION) | \
|
||||
BIT(UPDATE_MASK_FLAG_INQUIRY_VERIFY_CODE);
|
||||
|
||||
struct testbox_info {
|
||||
u8 bt_init_ok;//蓝牙协议栈初始化成功
|
||||
u8 testbox_status;//测试盒在线状态
|
||||
u8 connect_status;//通信成功
|
||||
u8 channel;//左右
|
||||
u8 event_hdl_flag;
|
||||
volatile u32 global_cfg; //全局配置信息,控制耳机在/离仓行为
|
||||
volatile u8 keep_tws_conn_flag; //保持tws连接标志
|
||||
u8 tws_paired_flag;
|
||||
};
|
||||
|
||||
|
||||
enum {
|
||||
BOX_CFG_SOFTPWROFF_AFTER_PAIRED_BIT = 0, //测试盒配对完耳机关机
|
||||
BOX_CFG_TOUCH_TRIM_OUT_OF_BOX_BIT = 1, //离仓执行trim操作
|
||||
BOX_CFG_TRIM_START_TIME_BIT = 2, //离仓多久trim,unit:2s (n+1)*2,即(2~8s)
|
||||
|
||||
};
|
||||
|
||||
#define BOX_CFG_BITS_GET_FROM_MASK(mask,index,len) (((mask & BIT(index))>>index) & (0xffffffff>>(32-len)))
|
||||
static struct testbox_info info = {
|
||||
.global_cfg = BIT(BOX_CFG_SOFTPWROFF_AFTER_PAIRED_BIT),
|
||||
};
|
||||
#define __this (&info)
|
||||
|
||||
extern const char *bt_get_local_name();
|
||||
extern u16 get_vbat_value(void);
|
||||
extern void bt_fast_test_api(void);
|
||||
extern const int config_btctler_eir_version_info_len;
|
||||
extern const char *sdk_version_info_get(void);
|
||||
extern u8 *sdfile_get_burn_code(u8 *len);
|
||||
extern void bt_page_scan_for_test(u8 inquiry_en);
|
||||
extern u8 get_jl_chip_id(void);
|
||||
extern u8 get_jl_chip_id2(void);
|
||||
extern void set_temp_link_key(u8 *linkkey);
|
||||
static u8 ex_enter_dut_flag = 0;
|
||||
static u8 ex_enter_storage_mode_flag = 0;//1 仓储模式, 0 普通模式
|
||||
static u8 local_packet[36];
|
||||
|
||||
void testbox_set_bt_init_ok(u8 flag)
|
||||
{
|
||||
__this->bt_init_ok = flag;
|
||||
}
|
||||
|
||||
void testbox_set_testbox_tws_paired(u8 flag)
|
||||
{
|
||||
__this->tws_paired_flag = flag;
|
||||
}
|
||||
|
||||
u8 testbox_get_testbox_tws_paired(void)
|
||||
{
|
||||
return __this->tws_paired_flag;
|
||||
}
|
||||
|
||||
u8 testbox_get_touch_trim_en(u8 *sec)
|
||||
{
|
||||
if (sec) {
|
||||
u8 sec_bits = BOX_CFG_BITS_GET_FROM_MASK(__this->global_cfg, BOX_CFG_TRIM_START_TIME_BIT, 2);
|
||||
*sec = (sec_bits + 1) * 2;
|
||||
}
|
||||
|
||||
return BOX_CFG_BITS_GET_FROM_MASK(__this->global_cfg, BOX_CFG_TOUCH_TRIM_OUT_OF_BOX_BIT, 1);
|
||||
}
|
||||
|
||||
u8 testbox_get_softpwroff_after_paired(void)
|
||||
{
|
||||
return BOX_CFG_BITS_GET_FROM_MASK(__this->global_cfg, BOX_CFG_SOFTPWROFF_AFTER_PAIRED_BIT, 1);
|
||||
}
|
||||
|
||||
u8 testbox_get_ex_enter_storage_mode_flag(void)
|
||||
{
|
||||
return ex_enter_storage_mode_flag;
|
||||
}
|
||||
|
||||
u8 testbox_get_ex_enter_dut_flag(void)
|
||||
{
|
||||
return ex_enter_dut_flag;
|
||||
}
|
||||
|
||||
u8 testbox_get_connect_status(void)
|
||||
{
|
||||
return __this->connect_status;
|
||||
}
|
||||
|
||||
void testbox_clear_connect_status(void)
|
||||
{
|
||||
__this->connect_status = 0;
|
||||
}
|
||||
|
||||
u8 testbox_get_status(void)
|
||||
{
|
||||
return __this->testbox_status;
|
||||
}
|
||||
|
||||
void testbox_clear_status(void)
|
||||
{
|
||||
__this->testbox_status = 0;
|
||||
testbox_clear_connect_status();
|
||||
}
|
||||
|
||||
u8 testbox_get_keep_tws_conn_flag(void)
|
||||
{
|
||||
return __this->keep_tws_conn_flag;
|
||||
}
|
||||
|
||||
void testbox_event_to_user(u8 *packet, u32 type, u8 event, u8 size)
|
||||
{
|
||||
struct sys_event e;
|
||||
e.type = SYS_DEVICE_EVENT;
|
||||
if (packet != NULL) {
|
||||
if (size > sizeof(local_packet)) {
|
||||
return;
|
||||
}
|
||||
e.u.chargestore.packet = local_packet;
|
||||
memcpy(e.u.chargestore.packet, packet, size);
|
||||
}
|
||||
e.arg = (void *)type;
|
||||
e.u.chargestore.event = event;
|
||||
e.u.chargestore.size = size;
|
||||
sys_event_notify(&e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern u32 link_task_idle_disable(void);
|
||||
static void app_testbox_sub_event_handle(u8 *data, u16 size)
|
||||
{
|
||||
u8 mac = 0;
|
||||
switch (data[0]) {
|
||||
case CMD_BOX_FAST_CONN:
|
||||
case CMD_BOX_ENTER_DUT:
|
||||
__this->event_hdl_flag = 0;
|
||||
struct application *app = get_current_app();
|
||||
if (app) {
|
||||
if (strcmp(app->name, APP_NAME_BT)) {
|
||||
if (!app_var.goto_poweroff_flag) {
|
||||
app_var.play_poweron_tone = 0;
|
||||
task_switch_to_bt();
|
||||
}
|
||||
} else {
|
||||
if ((!__this->connect_status) && __this->bt_init_ok) {
|
||||
log_info("\n\nbt_page_inquiry_scan_for_test\n\n");
|
||||
__this->connect_status = 1;
|
||||
extern void bredr_set_dut_enble(u8 en, u8 phone);
|
||||
log_info("bredr_dut_enbale\n");
|
||||
bredr_set_dut_enble(1, 1);
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
bt_page_scan_for_test(1);
|
||||
#endif
|
||||
link_task_idle_disable();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CMD_BOX_CUSTOM_CODE:
|
||||
__this->event_hdl_flag = 0;
|
||||
if (data[1] == 0x00) {
|
||||
bt_fast_test_api();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//事件执行函数,在任务调用
|
||||
int app_testbox_event_handler(struct testbox_event *testbox_dev)
|
||||
{
|
||||
struct application *app = get_current_app();
|
||||
switch (testbox_dev->event) {
|
||||
//case CMD_BOX_MODULE:
|
||||
// app_testbox_sub_event_handle(testbox_dev->packet, testbox_dev->size);
|
||||
// break;
|
||||
/*case CMD_BOX_TWS_CHANNEL_SEL:
|
||||
__this->event_hdl_flag = 0;
|
||||
if (get_vbat_need_shutdown() == TRUE) {
|
||||
//电压过低,不进行测试
|
||||
break;
|
||||
}
|
||||
if (app) {
|
||||
if (strcmp(app->name, APP_NAME_BT)) {
|
||||
if (!app_var.goto_poweroff_flag) {
|
||||
app_var.play_poweron_tone = 0;
|
||||
task_switch_to_bt();
|
||||
}
|
||||
} else {
|
||||
if ((!__this->connect_status) && __this->bt_init_ok) {
|
||||
__this->connect_status = 1;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
break;
|
||||
//不是测试盒事件,返回0,未处理
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const u8 own_private_linkkey[16] = {
|
||||
0x06, 0x77, 0x5f, 0x87, 0x91, 0x8d, 0xd4, 0x23,
|
||||
0x00, 0x5d, 0xf1, 0xd8, 0xcf, 0x0c, 0x14, 0x2b
|
||||
};
|
||||
|
||||
static void app_testbox_sub_cmd_handle(u8 *send_buf, u8 buf_len, u8 *buf, u8 len)
|
||||
{
|
||||
u8 temp_len;
|
||||
u8 send_len = 0;
|
||||
|
||||
send_buf[0] = buf[0];
|
||||
send_buf[1] = buf[1];
|
||||
|
||||
log_info("sub_cmd:%x\n", buf[1]);
|
||||
|
||||
switch (buf[1]) {
|
||||
case CMD_BOX_BT_NAME_INFO:
|
||||
temp_len = strlen(bt_get_local_name());
|
||||
if (temp_len < (buf_len - 2)) {
|
||||
memcpy(&send_buf[2], bt_get_local_name(), temp_len);
|
||||
send_len = temp_len + 2;
|
||||
chargestore_api_write(send_buf, send_len);
|
||||
} else {
|
||||
log_error("bt name buf len err\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_BOX_BATTERY_VOL:
|
||||
send_buf[2] = get_vbat_value();
|
||||
send_buf[3] = get_vbat_value() >> 8;
|
||||
send_buf[4] = get_vbat_percent();
|
||||
send_len = sizeof(u16) + sizeof(u8) + 2; //vbat_value;u16,vabt_percent:u8,opcode:2 bytes
|
||||
log_info("bat_val:%d %d\n", get_vbat_value(), get_vbat_percent());
|
||||
chargestore_api_write(send_buf, send_len);
|
||||
break;
|
||||
|
||||
case CMD_BOX_SDK_VERSION:
|
||||
if (config_btctler_eir_version_info_len) {
|
||||
temp_len = strlen(sdk_version_info_get());
|
||||
send_len = (temp_len > (buf_len - 2)) ? buf_len : temp_len + 2;
|
||||
log_info("version:%s ver_len:%x send_len:%x\n", sdk_version_info_get(), temp_len, send_len);
|
||||
memcpy(send_buf + 2, sdk_version_info_get(), temp_len);
|
||||
chargestore_api_write(send_buf, send_len);
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_BOX_FAST_CONN:
|
||||
log_info("enter fast dut\n");
|
||||
set_temp_link_key((u8 *)own_private_linkkey);
|
||||
bt_get_vm_mac_addr(&send_buf[2]);
|
||||
if (0 == __this->event_hdl_flag) {
|
||||
testbox_event_to_user(&buf[1], DEVICE_EVENT_TEST_BOX, buf[0], 1);
|
||||
__this->event_hdl_flag = 1;
|
||||
}
|
||||
if (__this->bt_init_ok) {
|
||||
ex_enter_dut_flag = 1;
|
||||
chargestore_api_write(send_buf, 8);
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_BOX_ENTER_DUT:
|
||||
log_info("enter dut\n");
|
||||
//__this->testbox_status = 1;
|
||||
ex_enter_dut_flag = 1;
|
||||
|
||||
if (0 == __this->event_hdl_flag) {
|
||||
testbox_event_to_user(&buf[1], DEVICE_EVENT_TEST_BOX, buf[0], 1);
|
||||
__this->event_hdl_flag = 1;
|
||||
}
|
||||
if (__this->bt_init_ok) {
|
||||
chargestore_api_write(send_buf, 2);
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_BOX_VERIFY_CODE:
|
||||
log_info("get_verify_code\n");
|
||||
u8 *p = sdfile_get_burn_code(&temp_len);
|
||||
send_len = (temp_len > (buf_len - 2)) ? buf_len : temp_len + 2;
|
||||
memcpy(send_buf + 2, p, temp_len);
|
||||
chargestore_api_write(send_buf, send_len);
|
||||
break;
|
||||
|
||||
case CMD_BOX_CUSTOM_CODE:
|
||||
log_info("CMD_BOX_CUSTOM_CODE value=%x", buf[2]);
|
||||
if (buf[2] == 0) {//测试盒自定义命令,样机进入快速测试模式
|
||||
if (0 == __this->event_hdl_flag) {
|
||||
__this->event_hdl_flag = 1;
|
||||
testbox_event_to_user(&buf[1], DEVICE_EVENT_TEST_BOX, buf[0], 2);
|
||||
}
|
||||
}
|
||||
send_len = 0x3;
|
||||
#if (defined(TCFG_AUDIO_SPATIAL_EFFECT_ENABLE) && TCFG_AUDIO_SPATIAL_EFFECT_ENABLE)
|
||||
if (buf[2] == 1) {
|
||||
__this->testbox_status = 1;
|
||||
extern int testbox_imu_trim_run(u8 * send_buf);
|
||||
send_len = testbox_imu_trim_run(send_buf);
|
||||
put_buf(send_buf, 36);
|
||||
send_len += 2;
|
||||
}
|
||||
#endif /*TCFG_AUDIO_SPATIAL_EFFECT_ENABLE*/
|
||||
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
if (buf[2] == 0x6a) {//测试盒自定义命令, 0x6a 用于触摸动态阈值算法的结果显示,请大家不要冲突
|
||||
send_buf[2] = 0x6a;
|
||||
send_buf[3] = 'c';
|
||||
send_buf[4] = 's';
|
||||
send_buf[5] = 'm';
|
||||
send_buf[6] = 'r';
|
||||
send_buf[7] = lp_touch_key_alog_range_display((u8 *)&send_buf[8]);
|
||||
send_len = 8 + send_buf[7];
|
||||
log_info("send_len = %d\n", send_len);
|
||||
}
|
||||
#endif
|
||||
|
||||
chargestore_api_write(send_buf, send_len);
|
||||
break;
|
||||
|
||||
case CMD_BOX_ENTER_STORAGE_MODE:
|
||||
log_info("CMD_BOX_ENTER_STORAGE_MODE");
|
||||
ex_enter_storage_mode_flag = 1;
|
||||
chargestore_api_write(send_buf, 2);
|
||||
break;
|
||||
|
||||
case CMD_BOX_GLOBLE_CFG:
|
||||
log_info("CMD_BOX_GLOBLE_CFG:%d %x %x", len, READ_LIT_U32(buf + 2), READ_LIT_U32(buf + 6));
|
||||
__this->global_cfg = READ_LIT_U32(buf + 2);
|
||||
#if 0 //for test
|
||||
u8 sec;
|
||||
u32 trim_en = testbox_get_touch_trim_en(&sec);
|
||||
log_info("box_cfg:%x %x %x\n",
|
||||
testbox_get_softpwroff_after_paired(),
|
||||
trim_en, sec);
|
||||
#endif
|
||||
|
||||
chargestore_api_write(send_buf, 2);
|
||||
break;
|
||||
|
||||
default:
|
||||
//send_buf[0] = CMD_UNDEFINE;
|
||||
//send_len = 1;
|
||||
//chargestore_api_write(send_buf, send_len);
|
||||
break;
|
||||
}
|
||||
|
||||
log_info_hexdump(send_buf, send_len);
|
||||
}
|
||||
|
||||
//数据执行函数,在串口中断调用
|
||||
static int app_testbox_data_handler(u8 *buf, u8 len)
|
||||
{
|
||||
u8 send_buf[36];
|
||||
send_buf[0] = buf[0];
|
||||
switch (buf[0]) {
|
||||
/*case CMD_BOX_MODULE:
|
||||
app_testbox_sub_cmd_handle(send_buf, sizeof(send_buf), buf, len);
|
||||
break;*/
|
||||
|
||||
/*case CMD_BOX_UPDATE:
|
||||
__this->testbox_status = 1;
|
||||
if (buf[13] == get_jl_chip_id() || buf[13] == get_jl_chip_id2()) {
|
||||
chargestore_set_update_ram();
|
||||
cpu_reset();
|
||||
} else if (buf[13] == 0xff) {
|
||||
send_buf[1] = 0xff;
|
||||
WRITE_LIT_U32(&send_buf[2], support_update_mask);
|
||||
chargestore_api_write(send_buf, 2 + sizeof(support_update_mask));
|
||||
log_info("rsp update_mask\n");
|
||||
} else {
|
||||
send_buf[1] = 0x01;//chip id err
|
||||
chargestore_api_write(send_buf, 2);
|
||||
}
|
||||
break;*/
|
||||
/*case CMD_BOX_TWS_CHANNEL_SEL:
|
||||
__this->testbox_status = 1;
|
||||
if (len == 3) {
|
||||
__this->keep_tws_conn_flag = buf[2];
|
||||
putchar('K');
|
||||
} else {
|
||||
__this->keep_tws_conn_flag = 0;
|
||||
}
|
||||
__this->channel = (buf[1] == TWS_CHANNEL_LEFT) ? 'L' : 'R';
|
||||
if (0 == __this->event_hdl_flag) {
|
||||
testbox_event_to_user(NULL, DEVICE_EVENT_TEST_BOX, CMD_BOX_TWS_CHANNEL_SEL, 0);
|
||||
__this->event_hdl_flag = 1;
|
||||
}
|
||||
if (__this->bt_init_ok) {
|
||||
len = chargestore_get_tws_remote_info(&send_buf[1]);
|
||||
chargestore_api_write(send_buf, len + 1);
|
||||
} else {
|
||||
send_buf[0] = CMD_UNDEFINE;
|
||||
chargestore_api_write(send_buf, 1);
|
||||
}
|
||||
break;*/
|
||||
|
||||
//不是测试盒命令,返回0,未处理
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
CHARGESTORE_HANDLE_REG(testbox, app_testbox_data_handler);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,598 @@
|
||||
/*
|
||||
****************************************************************
|
||||
* Audio Enc Mass production test self CVP control
|
||||
* File : audio_enc_mpt_cvp_crl.c
|
||||
* note : 自研ENC产测 CVP通话算法/MIC 控制层
|
||||
****************************************************************
|
||||
*/
|
||||
#include "asm/includes.h"
|
||||
#include "media/includes.h"
|
||||
#include "system/includes.h"
|
||||
#include "aec_user.h"
|
||||
#include "app_main.h"
|
||||
#include "audio_config.h"
|
||||
#include "audio_enc.h"
|
||||
#include "audio_enc_mpt_self.h"
|
||||
#include "audio_anc.h"
|
||||
#include "overlay_code.h"
|
||||
|
||||
#if AUDIO_ENC_MPT_SELF_ENABLE
|
||||
|
||||
/* #define DUT_CVP_LOG_ENABLE */
|
||||
#ifdef DUT_CVP_LOG_ENABLE
|
||||
#define dut_cvp_log(x, ...) printf("[enc_mpt_cvp]" x " ", ## __VA_ARGS__)
|
||||
#else
|
||||
#define dut_cvp_log(...)
|
||||
#endif/*DUT_CVP_LOG_ENABLE*/
|
||||
|
||||
/*
|
||||
暂不支持开ANC模式测试
|
||||
1没有与ANC复用ADC BUFF
|
||||
2没有开动态MIC增益
|
||||
*/
|
||||
|
||||
|
||||
extern struct adc_platform_data adc_data;
|
||||
extern struct audio_dac_hdl dac_hdl;
|
||||
extern struct audio_adc_hdl adc_hdl;
|
||||
|
||||
#define MIC_BUF_NUM 3
|
||||
#define MIC_IRQ_POINTS 256
|
||||
|
||||
#define CVP_MIC_SR 16000 //采样率
|
||||
|
||||
#define CVP_MONITOR_DIS 0 //监听关闭
|
||||
#define CVP_MONITOR_PROBE 1 //监听处理前数据
|
||||
#define CVP_MONITOR_POST 2 //监听处理后数据
|
||||
//默认监听选择
|
||||
#define CVP_MONITOR_SEL CVP_MONITOR_DIS
|
||||
|
||||
typedef struct {
|
||||
u8 dump_cnt;
|
||||
u8 monitor;
|
||||
u8 mic_num; //当前MIC个数
|
||||
u16 mic_id[4];
|
||||
u16 dut_mic_ch;
|
||||
struct audio_adc_output_hdl adc_output;
|
||||
struct adc_mic_ch mic_ch;
|
||||
s16 *tmp_buf[3];
|
||||
s16 *mic_buf;
|
||||
} audio_cvp_t;
|
||||
static audio_cvp_t *cvp_hdl = NULL;
|
||||
|
||||
/* 写卡使能控制, 需注意一下几点
|
||||
1、需打开 AUDIO_PCM_DEBUG
|
||||
2、AEC原本的写卡流程需关闭
|
||||
3、测试流程需包含CVP_OUT测试, 因为写卡只能在线程写
|
||||
*/
|
||||
#define AUDIO_ENC_MPT_UART_DEBUG_EN 0
|
||||
#define AUDIO_ENC_MPT_UART_DEBUG_CH 3 //写卡通道数
|
||||
#define AUDIO_ENC_MPT_UART_DEBUG_LEN MIC_IRQ_POINTS * 2 //写卡长度
|
||||
|
||||
#ifdef AUDIO_PCM_DEBUG
|
||||
extern int aec_uart_init();
|
||||
extern int aec_uart_open(u8 nch, u16 single_size);
|
||||
extern int aec_uart_fill(u8 ch, void *buf, u16 size);
|
||||
extern void aec_uart_write(void);
|
||||
extern int aec_uart_close(void);
|
||||
#endif/*AUDIO_PCM_DEBUG*/
|
||||
|
||||
/*监听输出:默认输出到dac*/
|
||||
static int cvp_monitor_output(s16 *data, int len)
|
||||
{
|
||||
int wlen = audio_dac_write(&dac_hdl, data, len);
|
||||
if (wlen != len) {
|
||||
dut_cvp_log("monitor output full\n");
|
||||
}
|
||||
return wlen;
|
||||
}
|
||||
|
||||
/*监听使能*/
|
||||
static int cvp_monitor_en(u8 en, int sr)
|
||||
{
|
||||
dut_cvp_log("cvp_monitor_en:%d,sr:%d\n", en, sr);
|
||||
if (en) {
|
||||
app_audio_state_switch(APP_AUDIO_STATE_MUSIC, get_max_sys_vol());
|
||||
dut_cvp_log("cur_vol:%d,max_sys_vol:%d\n", app_audio_get_volume(APP_AUDIO_STATE_MUSIC), get_max_sys_vol());
|
||||
audio_dac_set_volume(&dac_hdl, app_audio_get_volume(APP_AUDIO_STATE_MUSIC));
|
||||
audio_dac_set_sample_rate(&dac_hdl, sr);
|
||||
audio_dac_start(&dac_hdl);
|
||||
} else {
|
||||
audio_dac_stop(&dac_hdl);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
测试前的预处理,
|
||||
如方案使用模拟开关复用ADC通道,可以在此切换模拟开关
|
||||
*/
|
||||
static void audio_enc_mpt_fre_pre(u16 mic_ch)
|
||||
{
|
||||
#if 0
|
||||
//测试算法或者TALK 主MIC
|
||||
if (mic_ch & (AUDIO_ENC_MPT_CVP_OUT | AUDIO_ENC_MPT_TALK_MIC)) {
|
||||
}
|
||||
//测试算法或者TALK 副MIC
|
||||
if (mic_ch & (AUDIO_ENC_MPT_CVP_OUT | AUDIO_ENC_MPT_SLAVE_MIC)) {
|
||||
}
|
||||
//测试算法或者TALK FBMIC
|
||||
if (mic_ch & (AUDIO_ENC_MPT_CVP_OUT | AUDIO_ENC_MPT_TALK_FB_MIC)) {
|
||||
}
|
||||
//测试TWS FFMIC or 头戴式LFF MIC
|
||||
if (mic_ch & AUDIO_ENC_MPT_FF_MIC) {
|
||||
}
|
||||
//测试TWS FBMIC or 头戴式LFB MIC
|
||||
if (mic_ch & AUDIO_ENC_MPT_FB_MIC) {
|
||||
}
|
||||
//测试头戴式RFF MIC
|
||||
if (mic_ch & AUDIO_ENC_MPT_RFF_MIC) {
|
||||
}
|
||||
//测试头戴式RFB MIC
|
||||
if (mic_ch & AUDIO_ENC_MPT_RFB_MIC) {
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*mic adc原始数据输出*/
|
||||
static void mic_output(void *priv, s16 *data, int len)
|
||||
{
|
||||
/* putchar('.'); */
|
||||
s16 *mic_data[cvp_hdl->mic_num];
|
||||
int i;
|
||||
u8 talk_id_cnt = 0xff;
|
||||
//ADC启动不稳定,实测开头大约有50ms 杂音数据, 这里丢弃掉16*8 = 128ms
|
||||
if (cvp_hdl->dump_cnt < 8) {
|
||||
cvp_hdl->dump_cnt++;
|
||||
return;
|
||||
}
|
||||
|
||||
mic_data[0] = data;
|
||||
//printf("mic_data:%x,%x,%d\n",data,mic1_data_pos,len);
|
||||
if (cvp_hdl->mic_num == 2) {
|
||||
mic_data[1] = cvp_hdl->tmp_buf[0];
|
||||
for (u16 i = 0; i < (len >> 1); i++) {
|
||||
mic_data[0][i] = data[i * 2];
|
||||
mic_data[1][i] = data[i * 2 + 1];
|
||||
}
|
||||
mic_data[1] = data + (len / 2);
|
||||
memcpy(mic_data[1], cvp_hdl->tmp_buf[0], len);
|
||||
|
||||
} else if (cvp_hdl->mic_num == 3) {
|
||||
mic_data[1] = cvp_hdl->tmp_buf[0];
|
||||
mic_data[2] = cvp_hdl->tmp_buf[1];
|
||||
for (u16 i = 0; i < (len >> 1); i++) {
|
||||
mic_data[0][i] = data[i * 3];
|
||||
mic_data[1][i] = data[i * 3 + 1];
|
||||
mic_data[2][i] = data[i * 3 + 2];
|
||||
}
|
||||
} else if (cvp_hdl->mic_num == 4) {
|
||||
mic_data[1] = cvp_hdl->tmp_buf[0];
|
||||
mic_data[2] = cvp_hdl->tmp_buf[1];
|
||||
mic_data[3] = cvp_hdl->tmp_buf[2];
|
||||
for (u16 i = 0; i < (len >> 1); i++) {
|
||||
mic_data[0][i] = data[i * 4];
|
||||
mic_data[1][i] = data[i * 4 + 1];
|
||||
mic_data[2][i] = data[i * 4 + 2];
|
||||
mic_data[3][i] = data[i * 4 + 3];
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < cvp_hdl->mic_num; i++) {
|
||||
#if AUDIO_ENC_MPT_UART_DEBUG_EN && (defined AUDIO_PCM_DEBUG)
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
|
||||
aec_uart_fill(i, mic_data[i], 512);
|
||||
}
|
||||
#endif/*AUDIO_ENC_MPT_UART_DEBUG_EN*/
|
||||
audio_enc_mpt_fre_response_inbuf(cvp_hdl->mic_id[i], mic_data[i], len);
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
|
||||
#if TCFG_AUDIO_TRIPLE_MIC_ENABLE
|
||||
if (cvp_hdl->mic_id[i] & AUDIO_ENC_MPT_TALK_FB_MIC) {
|
||||
audio_aec_inbuf_ref_1(mic_data[i], len);
|
||||
continue;
|
||||
}
|
||||
#endif/*TCFG_AUDIO_TRIPLE_MIC_ENABLE*/
|
||||
#if TCFG_AUDIO_DUAL_MIC_ENABLE || TCFG_AUDIO_TRIPLE_MIC_ENABLE
|
||||
if (cvp_hdl->mic_id[i] & AUDIO_ENC_MPT_SLAVE_MIC) {
|
||||
audio_aec_inbuf_ref(mic_data[i], len);
|
||||
continue;
|
||||
}
|
||||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE || TCFG_AUDIO_TRIPLE_MIC_ENABLE*/
|
||||
if (cvp_hdl->mic_id[i] & AUDIO_ENC_MPT_TALK_MIC) {
|
||||
talk_id_cnt = i;
|
||||
/* audio_aec_inbuf(mic_data[i], len); */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//主麦数据输入触发AEC线程,最后处理
|
||||
if (talk_id_cnt != 0xff) { //表示有算法主麦输入
|
||||
audio_aec_inbuf(mic_data[talk_id_cnt], len);
|
||||
}
|
||||
|
||||
#if CVP_MONITOR_SEL != CVP_MONITOR_DIS
|
||||
if (cvp_hdl->monitor == CVP_MONITOR_PROBE) {
|
||||
static u8 num = 0;
|
||||
static int cnt = 0;
|
||||
if (++cnt > 300) {
|
||||
cnt = 0;
|
||||
if (++num == cvp_hdl->mic_num) {
|
||||
num = 0;
|
||||
}
|
||||
r_printf("num %d", num);
|
||||
}
|
||||
cvp_monitor_output(mic_data[num], len);
|
||||
}
|
||||
#endif/*CVP_MONITOR_SEL != CVP_MONITOR_DIS*/
|
||||
}
|
||||
|
||||
static u16 audio_enc_mpt_anc_mic_query(u8 mic_type, u16 mic_id, u8 *mic_en, u16 *mic_id_tmp, u8 *gain)
|
||||
{
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
u8 i;
|
||||
u8 mic_max = A_MIC3 + 1;
|
||||
for (i = A_MIC0; i < mic_max; i++) {
|
||||
if (mic_type == i) {
|
||||
if (!mic_en[i]) {
|
||||
//此MIC没有开过,则使用ANC的MIC增益
|
||||
gain[i] = audio_anc_mic_gain_get(i);
|
||||
}
|
||||
mic_en[i] = 1;
|
||||
mic_id_tmp[i] |= mic_id;
|
||||
dut_cvp_log("ANC mic%d: anc_id 0x%x, group_id 0x%x, en %x", mic_type, mic_id, mic_id_tmp[i], mic_en[i]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
||||
return 1;
|
||||
}
|
||||
/*根据mic通道值获取使用的第几个mic*/
|
||||
static u8 get_mic_num(u8 bit)
|
||||
{
|
||||
u8 i = 0;
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (bit & 0x1) {
|
||||
return i;
|
||||
}
|
||||
bit >>= 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const u16 call_mic_id[2] = {AUDIO_ENC_MPT_TALK_MIC, AUDIO_ENC_MPT_SLAVE_MIC};
|
||||
static int mic_open(u8 *mic_gain, int sr)
|
||||
{
|
||||
int i, j;
|
||||
u8 mic_en[4] = {0};
|
||||
u16 mic_id_tmp[4] = {0};
|
||||
|
||||
dut_cvp_log("mic open sr: %d,mic_gain:%d %d %d %d\n", sr, mic_gain[0], mic_gain[1], mic_gain[2], mic_gain[3]);
|
||||
|
||||
cvp_hdl->dump_cnt = 0;
|
||||
//1.测试CVP的输出 or 通话MIC相关 MIC输出
|
||||
if (cvp_hdl->dut_mic_ch & (AUDIO_ENC_MPT_CVP_OUT | AUDIO_ENC_MPT_TALK_MIC | \
|
||||
AUDIO_ENC_MPT_SLAVE_MIC | AUDIO_ENC_MPT_TALK_FB_MIC)) {
|
||||
#if TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_0
|
||||
mic_en[0] = 1;
|
||||
mic_id_tmp[0] = 1;
|
||||
#endif
|
||||
#if TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_1
|
||||
mic_en[1] = 1;
|
||||
mic_id_tmp[1] = 1;
|
||||
#endif
|
||||
#if TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_2
|
||||
mic_en[2] = 1;
|
||||
mic_id_tmp[2] = 1;
|
||||
#endif
|
||||
#if TCFG_AUDIO_ADC_MIC_CHA & AUDIO_ADC_MIC_3
|
||||
mic_en[3] = 1;
|
||||
mic_id_tmp[3] = 1;
|
||||
#endif
|
||||
|
||||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||||
//1.1 确定主副MIC-仅支持双麦定位,三麦目前还不支持
|
||||
#if (TCFG_AUDIO_DMS_MIC_MANAGE == DMS_MASTER_MIC0)
|
||||
u8 call_cnt = 0;
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (mic_id_tmp[i]) {
|
||||
mic_id_tmp[i] = call_mic_id[call_cnt++];
|
||||
}
|
||||
}
|
||||
#else
|
||||
u8 call_cnt = 1;
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (mic_id_tmp[i]) {
|
||||
mic_id_tmp[i] = call_mic_id[call_cnt--];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#elif TCFG_AUDIO_TRIPLE_MIC_ENABLE //三麦通话
|
||||
//三麦通话目前需手动指定mic类型
|
||||
mic_id_tmp[get_mic_num(app_var.talk_mic_ch)] = AUDIO_ENC_MPT_TALK_MIC;
|
||||
mic_id_tmp[get_mic_num(app_var.talk_ref_mic_ch)] = AUDIO_ENC_MPT_SLAVE_MIC;
|
||||
mic_id_tmp[get_mic_num(app_var.talk_fb_mic_ch)] = AUDIO_ENC_MPT_TALK_FB_MIC;
|
||||
/* mic_id_tmp[3] = ; */
|
||||
|
||||
#else /*单麦通话*/
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (mic_id_tmp[i]) {
|
||||
mic_id_tmp[i] = AUDIO_ENC_MPT_TALK_MIC;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||||
|
||||
|
||||
}
|
||||
//2.只测通话MIC,不测试算法输出
|
||||
if (!(cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT)) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
//清除非目标MIC的使能
|
||||
if (!(cvp_hdl->dut_mic_ch & mic_id_tmp[i])) {
|
||||
mic_id_tmp[i] = 0;
|
||||
mic_en[i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//3.ANC MIC映射
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_FF_MIC) {
|
||||
#if TCFG_USER_TWS_ENABLE && (ANC_CH == ANC_R_CH)
|
||||
audio_enc_mpt_anc_mic_query(ANCR_FF_MIC, AUDIO_ENC_MPT_FF_MIC, mic_en, mic_id_tmp, mic_gain);
|
||||
#else
|
||||
audio_enc_mpt_anc_mic_query(ANCL_FF_MIC, AUDIO_ENC_MPT_FF_MIC, mic_en, mic_id_tmp, mic_gain);
|
||||
#endif/*TCFG_USER_TWS_ENABLE && (ANC_CH == ANC_R_CH)*/
|
||||
}
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_FB_MIC) {
|
||||
#if TCFG_USER_TWS_ENABLE && (ANC_CH == ANC_R_CH)
|
||||
audio_enc_mpt_anc_mic_query(ANCR_FB_MIC, AUDIO_ENC_MPT_FB_MIC, mic_en, mic_id_tmp, mic_gain);
|
||||
#else
|
||||
audio_enc_mpt_anc_mic_query(ANCL_FB_MIC, AUDIO_ENC_MPT_FB_MIC, mic_en, mic_id_tmp, mic_gain);
|
||||
#endif/*TCFG_USER_TWS_ENABLE && (ANC_CH == ANC_R_CH)*/
|
||||
}
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_RFF_MIC) {
|
||||
audio_enc_mpt_anc_mic_query(ANCR_FF_MIC, AUDIO_ENC_MPT_RFF_MIC, mic_en, mic_id_tmp, mic_gain);
|
||||
}
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_RFB_MIC) {
|
||||
audio_enc_mpt_anc_mic_query(ANCR_FB_MIC, AUDIO_ENC_MPT_RFB_MIC, mic_en, mic_id_tmp, mic_gain);
|
||||
}
|
||||
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
||||
|
||||
//4.重新排列数组, 兼容ADC_BUFF的缓存结构
|
||||
j = 0;
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (mic_id_tmp[i]) {
|
||||
cvp_hdl->mic_id[j++] = mic_id_tmp[i];
|
||||
}
|
||||
}
|
||||
|
||||
//5.ADC初始化
|
||||
audio_mic_pwr_ctl(MIC_PWR_ON);
|
||||
if (cvp_hdl) {
|
||||
if (mic_en[0]) {
|
||||
cvp_hdl->mic_num++;
|
||||
audio_adc_mic_open(&cvp_hdl->mic_ch, AUDIO_ADC_MIC_0, &adc_hdl);
|
||||
audio_adc_mic_set_gain(&cvp_hdl->mic_ch, mic_gain[0]);
|
||||
}
|
||||
if (mic_en[1]) {
|
||||
cvp_hdl->mic_num++;
|
||||
audio_adc_mic1_open(&cvp_hdl->mic_ch, AUDIO_ADC_MIC_1, &adc_hdl);
|
||||
audio_adc_mic1_set_gain(&cvp_hdl->mic_ch, mic_gain[1]);
|
||||
}
|
||||
if (mic_en[2]) {
|
||||
cvp_hdl->mic_num++;
|
||||
audio_adc_mic2_open(&cvp_hdl->mic_ch, AUDIO_ADC_MIC_2, &adc_hdl);
|
||||
audio_adc_mic2_set_gain(&cvp_hdl->mic_ch, mic_gain[2]);
|
||||
}
|
||||
if (mic_en[3]) {
|
||||
cvp_hdl->mic_num++;
|
||||
audio_adc_mic3_open(&cvp_hdl->mic_ch, AUDIO_ADC_MIC_3, &adc_hdl);
|
||||
audio_adc_mic3_set_gain(&cvp_hdl->mic_ch, mic_gain[3]);
|
||||
}
|
||||
|
||||
if (!cvp_hdl->mic_num) {
|
||||
dut_cvp_log("Error valid mic_num is zero!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
//5.1 ADC临时BUFF、ISR BUFF申请
|
||||
for (i = 1; i < cvp_hdl->mic_num; i++) {
|
||||
cvp_hdl->tmp_buf[i - 1] = malloc(MIC_IRQ_POINTS * sizeof(short));
|
||||
}
|
||||
cvp_hdl->mic_buf = malloc(cvp_hdl->mic_num * MIC_BUF_NUM * MIC_IRQ_POINTS * sizeof(short));
|
||||
|
||||
audio_adc_mic_set_sample_rate(&cvp_hdl->mic_ch, sr);
|
||||
audio_adc_mic_set_buffs(&cvp_hdl->mic_ch, cvp_hdl->mic_buf, MIC_IRQ_POINTS * 2, MIC_BUF_NUM);
|
||||
|
||||
cvp_hdl->adc_output.handler = mic_output;
|
||||
audio_adc_add_output_handler(&adc_hdl, &cvp_hdl->adc_output);
|
||||
audio_adc_mic_start(&cvp_hdl->mic_ch);
|
||||
}
|
||||
dut_cvp_log("mic_open succ mic_num %d\n", cvp_hdl->mic_num);
|
||||
for (i = 0; i < 4; i++) {
|
||||
dut_cvp_log("mic%d_id 0x%x, en %d, gain %d\n", i, cvp_hdl->mic_id[i], mic_en[i], mic_gain[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mic_close(void)
|
||||
{
|
||||
if (cvp_hdl) {
|
||||
audio_adc_mic_close(&cvp_hdl->mic_ch);
|
||||
audio_adc_del_output_handler(&adc_hdl, &cvp_hdl->adc_output);
|
||||
for (int i = 1; i < cvp_hdl->mic_num; i++) {
|
||||
free(cvp_hdl->tmp_buf[i - 1]);
|
||||
}
|
||||
free(cvp_hdl->mic_buf);
|
||||
audio_mic_pwr_ctl(MIC_PWR_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
/*清晰语音数据输出*/
|
||||
static int cvp_output_hdl(s16 *data, u16 len)
|
||||
{
|
||||
/* putchar('o'); */
|
||||
|
||||
audio_enc_mpt_fre_response_inbuf(AUDIO_ENC_MPT_CVP_OUT, data, len);
|
||||
#if AUDIO_ENC_MPT_UART_DEBUG_EN && (defined AUDIO_PCM_DEBUG)
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
|
||||
aec_uart_fill(2, data, 512);
|
||||
aec_uart_write();
|
||||
}
|
||||
#endif/*AUDIO_ENC_MPT_UART_DEBUG_EN*/
|
||||
#if !AUDIO_ENC_MPT_FRERES_ASYNC
|
||||
audio_enc_mpt_fre_response_post_run(0);
|
||||
#endif/*AUDIO_ENC_MPT_FRERES_ASYNC*/
|
||||
|
||||
#if CVP_MONITOR_SEL != CVP_MONITOR_DIS
|
||||
if (cvp_hdl->monitor == CVP_MONITOR_POST) {
|
||||
cvp_monitor_output(data, len);
|
||||
}
|
||||
#endif/*CVP_MONITOR_SEL != CVP_MONITOR_DIS*/
|
||||
return len;
|
||||
}
|
||||
|
||||
int audio_enc_mpt_cvp_close(void)
|
||||
{
|
||||
if (cvp_hdl != NULL) {
|
||||
#if AUDIO_ENC_MPT_UART_DEBUG_EN && (defined AUDIO_PCM_DEBUG)
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
|
||||
aec_uart_close();
|
||||
}
|
||||
#endif/*AUDIO_ENC_MPT_UART_DEBUG_EN*/
|
||||
#if CVP_MONITOR_SEL != CVP_MONITOR_DIS
|
||||
if (cvp_hdl->monitor) {
|
||||
cvp_monitor_en(0, CVP_MIC_SR);
|
||||
}
|
||||
#endif/* CVP_MONITOR_SEL != CVP_MONITOR_DIS*/
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
|
||||
audio_aec_close();
|
||||
}
|
||||
//先关AEC再关MIC
|
||||
mic_close();
|
||||
free(cvp_hdl);
|
||||
cvp_hdl = NULL;
|
||||
dut_cvp_log("cvp_hdl close\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int audio_enc_mpt_cvp_open(u16 mic_ch)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 mic_gain[4];
|
||||
if (cvp_hdl) {
|
||||
//支持重入
|
||||
audio_enc_mpt_cvp_close();
|
||||
dut_cvp_log("dut_cvp start again\n");
|
||||
}
|
||||
#if AUDIO_ENC_MPT_UART_DEBUG_EN && (defined AUDIO_PCM_DEBUG)
|
||||
if (mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
|
||||
aec_uart_open(AUDIO_ENC_MPT_UART_DEBUG_CH, AUDIO_ENC_MPT_UART_DEBUG_LEN);
|
||||
}
|
||||
#endif/*AUDIO_ENC_MPT_UART_DEBUG_EN*/
|
||||
dut_cvp_log("cvp_hdl open, mic_ch %x\n", mic_ch);
|
||||
cvp_hdl = zalloc(sizeof(audio_cvp_t));
|
||||
ASSERT(cvp_hdl);
|
||||
audio_enc_mpt_fre_pre(mic_ch);
|
||||
#if CVP_MONITOR_SEL != CVP_MONITOR_DIS
|
||||
cvp_hdl->monitor = CVP_MONITOR_SEL;
|
||||
if (cvp_hdl->monitor) {
|
||||
cvp_monitor_en(1, CVP_MIC_SR);
|
||||
}
|
||||
#endif/* CVP_MONITOR_SEL != CVP_MONITOR_DIS*/
|
||||
cvp_hdl->dut_mic_ch = mic_ch;
|
||||
mic_gain[0] = app_var.aec_mic_gain;
|
||||
mic_gain[1] = app_var.aec_mic1_gain;
|
||||
mic_gain[2] = app_var.aec_mic2_gain;
|
||||
mic_gain[3] = app_var.aec_mic3_gain;
|
||||
|
||||
if (cvp_hdl->dut_mic_ch & AUDIO_ENC_MPT_CVP_OUT) {
|
||||
overlay_load_code(OVERLAY_AEC);
|
||||
audio_aec_open(CVP_MIC_SR, -1, cvp_output_hdl);
|
||||
#if 1//TCFG_AUDIO_CVP_NS_MODE == CVP_DNS_MODE
|
||||
//默认关闭DNS
|
||||
audio_cvp_ioctl(CVP_NS_SWITCH, 0, NULL); //降噪关
|
||||
#endif/*TCFG_AUDIO_CVP_NS_MODE*/
|
||||
}
|
||||
ret = mic_open(mic_gain, CVP_MIC_SR);
|
||||
//由于产测对时钟设置不敏感,因此暂定128M
|
||||
if (clk_get("sys") < 128 * 1000000L) {
|
||||
clk_set("sys", 128 * 1000000L);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void audio_enc_mpt_fre_response_open(u16 mic_ch)
|
||||
{
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
//设置为ANC产测模式
|
||||
audio_anc_prodution_mode_set(1);
|
||||
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
||||
audio_enc_mpt_fre_response_start(mic_ch);
|
||||
if (audio_enc_mpt_cvp_open(mic_ch)) {
|
||||
audio_enc_mpt_fre_response_release();
|
||||
}
|
||||
}
|
||||
|
||||
void audio_enc_mpt_fre_response_close(void)
|
||||
{
|
||||
audio_enc_mpt_fre_response_stop();
|
||||
audio_enc_mpt_cvp_close();
|
||||
}
|
||||
|
||||
|
||||
static u8 audio_cvp_idle_query()
|
||||
{
|
||||
return (cvp_hdl == NULL) ? 1 : 0;
|
||||
}
|
||||
|
||||
REGISTER_LP_TARGET(audio_cvp_lp_target) = {
|
||||
.name = "audio_cvp",
|
||||
.is_idle = audio_cvp_idle_query,
|
||||
};
|
||||
|
||||
//测试func
|
||||
void audio_enc_mpt_cvp_key_test()
|
||||
{
|
||||
static u8 cnt = 0;
|
||||
u16 mic_ch = 0;
|
||||
dut_cvp_log("cnt %d\n", cnt);
|
||||
|
||||
mem_stats();
|
||||
switch (cnt) {
|
||||
case 0:
|
||||
app_var.aec_mic_gain = 15;
|
||||
app_var.aec_mic1_gain = 15;
|
||||
app_var.aec_mic2_gain = 15;
|
||||
app_var.aec_mic3_gain = 15;
|
||||
mic_ch |= AUDIO_ENC_MPT_CVP_OUT;
|
||||
mic_ch |= AUDIO_ENC_MPT_TALK_MIC;
|
||||
/* mic_ch |= AUDIO_ENC_MPT_SLAVE_MIC; */
|
||||
/* mic_ch |= AUDIO_ENC_MPT_TALK_FB_MIC; */
|
||||
/* mic_ch |= AUDIO_ENC_MPT_FF_MIC; */
|
||||
/* mic_ch |= AUDIO_ENC_MPT_FB_MIC; */
|
||||
/* mic_ch |= AUDIO_ENC_MPT_RFF_MIC; */
|
||||
/* mic_ch |= AUDIO_ENC_MPT_RFB_MIC; */
|
||||
audio_enc_mpt_fre_response_open(mic_ch);
|
||||
break;
|
||||
case 1:
|
||||
audio_enc_mpt_fre_response_close();
|
||||
break;
|
||||
case 2:
|
||||
u8 *buf;
|
||||
audio_enc_mpt_fre_response_file_get(&buf);
|
||||
break;
|
||||
case 3:
|
||||
audio_enc_mpt_fre_response_release();
|
||||
break;
|
||||
}
|
||||
cnt++;
|
||||
if (cnt > 3) {
|
||||
cnt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#endif/*AUDIO_ENC_MPT_SELF_ENABLE*/
|
||||
@@ -0,0 +1,434 @@
|
||||
|
||||
/***********************************************************
|
||||
|
||||
* Audio Enc Mass production test self
|
||||
* File : audio_enc_mpt_self.c
|
||||
* note : 自研ENC产测 声学频响测试
|
||||
|
||||
************************************************************/
|
||||
|
||||
#include "hw_fft.h"
|
||||
#include "app_config.h"
|
||||
#include "audio_enc_mpt_self.h"
|
||||
#include "generic/list.h"
|
||||
#include "system/task.h"
|
||||
|
||||
#if 0
|
||||
#define encmpt_log(x, ...) printf("[enc_mpt]" x " ", ## __VA_ARGS__)
|
||||
#else
|
||||
#define encmpt_log(...)
|
||||
#endif/*log_en*/
|
||||
|
||||
#if AUDIO_ENC_MPT_SELF_ENABLE
|
||||
|
||||
void anc_HpEst_psd(s16 *input0, float *out0_sum, int len, int *cnt);
|
||||
void anc_HpEst_psd_out(float *out0_sum, int flen, int cnt);
|
||||
|
||||
//输出数据类型
|
||||
typedef float ENC_OUT_TYPE;
|
||||
/* typedef short ENC_OUT_TYPE; */
|
||||
|
||||
typedef struct {
|
||||
struct list_head entry;
|
||||
u16 id; //对应数据通道id
|
||||
u16 len; //长度
|
||||
int cnt; //计算次数
|
||||
s16 *in; //输入地址
|
||||
ENC_OUT_TYPE *out; //输出地址
|
||||
} enc_freres_bulk;
|
||||
|
||||
typedef struct {
|
||||
u16 version;
|
||||
u16 cnt;
|
||||
u8 dat[0]; //小心double访问非对齐异常
|
||||
} enc_freres_file_t;
|
||||
|
||||
typedef struct {
|
||||
u32 id;
|
||||
u32 offset;
|
||||
u32 len;
|
||||
} enc_freres_file_head_t;
|
||||
|
||||
typedef struct {
|
||||
volatile u8 state; //状态
|
||||
u8 run_busy;
|
||||
u8 inbuf_busy;
|
||||
u16 ch; //目标通道
|
||||
/* enc_freres_bulk bulk[5];//链表,最长支持5段 */
|
||||
enc_freres_bulk *bulk;//链表,动态申请不定长
|
||||
u8 *file_data; //输出文件
|
||||
int file_len; //输出文件长度
|
||||
int in_packet_len;
|
||||
struct list_head head;
|
||||
} audio_fre_respone_t;
|
||||
|
||||
static audio_fre_respone_t *hdl;
|
||||
|
||||
#if 0 //输入数据连续性验证
|
||||
u8 *data1;
|
||||
u8 *data2;
|
||||
u8 *data3;
|
||||
#define ENC_CHECK_LEN 8192
|
||||
static u8 ainit = 0;
|
||||
static u16 offset1 = 0;
|
||||
static u16 offset2 = 0;
|
||||
static u16 offset3 = 0;
|
||||
void audio_enc_mpt_inbuf_check(u16 id, s16 *buf, int len)
|
||||
{
|
||||
if (!ainit) {
|
||||
ainit = 1;
|
||||
data1 = zalloc(ENC_CHECK_LEN);
|
||||
data2 = zalloc(ENC_CHECK_LEN);
|
||||
data3 = zalloc(ENC_CHECK_LEN);
|
||||
}
|
||||
if (id & AUDIO_ENC_MPT_FF_MIC) {
|
||||
if ((offset1 + len) > ENC_CHECK_LEN) {
|
||||
offset1 = 0;
|
||||
}
|
||||
memcpy(data1 + offset1, (u8 *)buf, len);
|
||||
offset1 += len;
|
||||
}
|
||||
if (id & AUDIO_ENC_MPT_TALK_MIC) {
|
||||
if ((offset2 + len) > ENC_CHECK_LEN) {
|
||||
offset2 = 0;
|
||||
}
|
||||
memcpy(data2 + offset2, (u8 *)buf, len);
|
||||
offset2 += len;
|
||||
}
|
||||
if (id & AUDIO_ENC_MPT_CVP_OUT) {
|
||||
if ((offset3 + len) > ENC_CHECK_LEN) {
|
||||
offset3 = 0;
|
||||
}
|
||||
memcpy(data3 + offset3, (u8 *)buf, len);
|
||||
offset3 += len;
|
||||
}
|
||||
}
|
||||
|
||||
void audio_enc_mpt_inbuf_printf(void)
|
||||
{
|
||||
int i = 0;
|
||||
s16 *dat1 = (s16 *)data1;
|
||||
s16 *dat2 = (s16 *)data2;
|
||||
s16 *dat3 = (s16 *)data3;
|
||||
encmpt_log("ff");
|
||||
for (i = 0; i < ENC_CHECK_LEN / 2; i++) {
|
||||
printf("%d\n", dat1[i]);
|
||||
}
|
||||
|
||||
encmpt_log("TALK");
|
||||
for (i = 0; i < ENC_CHECK_LEN / 2; i++) {
|
||||
printf("%d\n", dat2[i]);
|
||||
}
|
||||
|
||||
encmpt_log("cvp");
|
||||
for (i = 0; i < ENC_CHECK_LEN / 2; i++) {
|
||||
printf("%d\n", dat3[i]);
|
||||
}
|
||||
}
|
||||
#endif/*默认关闭*/
|
||||
|
||||
//id = 0 计算链表所有满足长度的节点;
|
||||
static void audio_enc_mpt_fre_response_process(u16 id)
|
||||
{
|
||||
/* return; */
|
||||
enc_freres_bulk *bulk;
|
||||
if (hdl->state != ENC_FRE_RES_STATE_RUN) {
|
||||
return;
|
||||
}
|
||||
|
||||
hdl->run_busy = 1;
|
||||
list_for_each_entry(bulk, &hdl->head, entry) {
|
||||
//原始数据指针、目标输出指针、计算长度
|
||||
if ((!id) || id == bulk->id) {
|
||||
if (bulk->len >= hdl->in_packet_len) {
|
||||
anc_HpEst_psd(bulk->in, bulk->out, AUDIO_ENC_MPT_FRERES_POINT, &bulk->cnt);
|
||||
bulk->len -= (hdl->in_packet_len >> 1);
|
||||
/* encmpt_log("process id 0X%x len %d\n", bulk->id, bulk->len); */
|
||||
if (bulk->len) { //overlap
|
||||
memcpy(bulk->in, bulk->in + (hdl->in_packet_len >> 2), bulk->len);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
hdl->run_busy = 0;
|
||||
}
|
||||
|
||||
static void audio_enc_mpt_fre_resonpse_task(void *p)
|
||||
{
|
||||
int res;
|
||||
int msg[16];
|
||||
u32 pend_timeout = portMAX_DELAY;
|
||||
encmpt_log(">>>audio_fre_res_task<<<\n");
|
||||
while (1) {
|
||||
res = os_taskq_pend(NULL, msg, ARRAY_SIZE(msg));
|
||||
if (res == OS_TASKQ) {
|
||||
switch (msg[1]) {
|
||||
case ENC_FRE_RESPONE_MSG_RUN:
|
||||
audio_enc_mpt_fre_response_process((u16)msg[2]);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
encmpt_log("res:%d,%d", res, msg[1]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//初始化链表以及的通道内容
|
||||
static void audio_enc_mpt_fre_response_bulk_init(enc_freres_file_t *file, u8 cnt, u16 id)
|
||||
{
|
||||
u8 *data_home;
|
||||
enc_freres_file_head_t *file_head = file->dat;
|
||||
|
||||
/* if (cnt > 4) { */
|
||||
/* encmpt_log("ERR:Audio enc Fre bulk full!!!\n"); */
|
||||
/* return; */
|
||||
/* } */
|
||||
|
||||
data_home = file->dat + (file->cnt * 12);
|
||||
|
||||
//file初始化head
|
||||
file_head[cnt].id = id;
|
||||
//len(byte)
|
||||
file_head[cnt].len = AUDIO_ENC_MPT_FRERES_POINT / 2 * sizeof(ENC_OUT_TYPE);
|
||||
if (cnt) {
|
||||
file_head[cnt].offset = file_head[cnt - 1].len + file_head[cnt - 1].offset;
|
||||
} else {
|
||||
file_head[cnt].offset = 0;
|
||||
}
|
||||
|
||||
hdl->bulk[cnt].id = id;
|
||||
hdl->bulk[cnt].out = (ENC_OUT_TYPE *)(data_home + file_head[cnt].offset);
|
||||
hdl->bulk[cnt].in = (s16 *)malloc(AUDIO_ENC_MPT_FRERES_POINT * sizeof(short));
|
||||
encmpt_log("hdl %x file %x, out %x, data_home %x, inbuf_len %d\n", (int)hdl->file_data, (int)file, \
|
||||
(int)hdl->bulk[cnt].out, (int)data_home, AUDIO_ENC_MPT_FRERES_POINT * sizeof(short));
|
||||
//len(byte)
|
||||
hdl->bulk[cnt].len = 0;
|
||||
/* hdl->bulk[cnt].len = AUDIO_ENC_MPT_FRERES_POINT * sizeof(short); */
|
||||
list_add_tail(&hdl->bulk[cnt].entry, &hdl->head);
|
||||
}
|
||||
|
||||
//文件内存申请,结构初始化
|
||||
static enc_freres_file_t *audio_enc_mpt_fre_response_file_init(int cnt)
|
||||
{
|
||||
enc_freres_file_t *file;
|
||||
//4byte(vesion + cnt) + cnt * (12byte (id + offset + len) + outdata)
|
||||
//以目标file文件组成结构申请空间
|
||||
//data => 复数取平方和, 因此POINT/2
|
||||
hdl->file_len = 4 + cnt * (12 + AUDIO_ENC_MPT_FRERES_POINT / 2 * sizeof(ENC_OUT_TYPE));
|
||||
|
||||
#if 0
|
||||
//评估内存是否满足当前需求
|
||||
extern size_t xPortGetPhysiceMemorySize(void);
|
||||
int cur_mem_size = xPortGetPhysiceMemorySize();
|
||||
if (cur_mem_size < hdl->file_len + 2000) { //至少余量多2000byte 才可使用该功能
|
||||
printf("ERR!!!MIC_FFT debug_buf:%lu + 2000,free_mem:%d\n", hdl->file_len, cur_mem_size);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
encmpt_log("file init len %d\n", hdl->file_len);
|
||||
hdl->file_data = zalloc(hdl->file_len);
|
||||
file = (enc_freres_file_t *) hdl->file_data;
|
||||
file->cnt = cnt;
|
||||
return file;
|
||||
}
|
||||
|
||||
//音频测试频响计算启动, ch 对应目标的通道
|
||||
void audio_enc_mpt_fre_response_start(u16 ch)
|
||||
{
|
||||
enc_freres_file_t *file;
|
||||
int cnt = 0;
|
||||
int shift_det = 0;
|
||||
u16 det_ch = ch;
|
||||
int det_cnt = 0;
|
||||
encmpt_log("%s, ch 0x%x\n", __func__, ch);
|
||||
if (!ch) {
|
||||
return;
|
||||
}
|
||||
if (hdl) {
|
||||
//支持重入
|
||||
hdl->state = ENC_FRE_RES_STATE_START;
|
||||
audio_enc_mpt_fre_response_release();
|
||||
encmpt_log("enc_fre start again\n");
|
||||
}
|
||||
#if AUDIO_ENC_MPT_FRERES_ASYNC
|
||||
task_create(audio_enc_mpt_fre_resonpse_task, NULL, "enc_mpt_self");
|
||||
#endif/*AUDIO_ENC_MPT_FRERES_ASYNC*/
|
||||
|
||||
hdl = zalloc(sizeof(audio_fre_respone_t));
|
||||
hdl->ch = ch;
|
||||
hdl->in_packet_len = AUDIO_ENC_MPT_FRERES_POINT * sizeof(short);
|
||||
|
||||
while (det_ch) {
|
||||
if (det_ch & BIT(0)) {
|
||||
det_cnt++;
|
||||
}
|
||||
det_ch >>= 1;
|
||||
}
|
||||
file = audio_enc_mpt_fre_response_file_init(det_cnt);
|
||||
if (!file) {
|
||||
free(hdl);
|
||||
return;
|
||||
}
|
||||
|
||||
//链表初始化
|
||||
INIT_LIST_HEAD(&hdl->head);
|
||||
|
||||
//申请链表空间
|
||||
hdl->bulk = zalloc(sizeof(enc_freres_bulk) * det_cnt);
|
||||
encmpt_log("det_cnt %d, list bulk size %d\n", det_cnt, sizeof(enc_freres_bulk) * det_cnt);
|
||||
|
||||
while (ch) {
|
||||
if (ch & BIT(0)) {
|
||||
audio_enc_mpt_fre_response_bulk_init(file, cnt, BIT(shift_det));
|
||||
encmpt_log("list init %x\n", BIT(shift_det));
|
||||
cnt++;
|
||||
}
|
||||
shift_det++;
|
||||
ch >>= 1;
|
||||
}
|
||||
hdl->state = ENC_FRE_RES_STATE_RUN;
|
||||
}
|
||||
|
||||
|
||||
//更新目标通道输入buf、len
|
||||
void audio_enc_mpt_fre_response_inbuf(u16 id, s16 *buf, int len)
|
||||
{
|
||||
//len(byte)
|
||||
if (!hdl) {
|
||||
goto __err1;
|
||||
/* return; */
|
||||
}
|
||||
if (hdl->state != ENC_FRE_RES_STATE_RUN) {
|
||||
goto __err1;
|
||||
/* return; */
|
||||
}
|
||||
enc_freres_bulk *bulk;
|
||||
hdl->inbuf_busy = 1;
|
||||
list_for_each_entry(bulk, &hdl->head, entry) {
|
||||
if (id & bulk->id) {
|
||||
/* bulk->id = id; */
|
||||
if ((bulk->len + len) <= hdl->in_packet_len) {
|
||||
/* encmpt_log("inbuf id 0X%x, len %d, %d\n", id, bulk->len, len); */
|
||||
memcpy(((u8 *)bulk->in) + bulk->len, (u8 *)buf, len);
|
||||
bulk->len += len;
|
||||
} else if (bulk->len < hdl->in_packet_len) {
|
||||
encmpt_log("id 0X%x, inbuf soon be full\n", id);
|
||||
memcpy(bulk->in + (bulk->len >> 1), buf, hdl->in_packet_len - bulk->len);
|
||||
bulk->len = hdl->in_packet_len;
|
||||
} else {
|
||||
encmpt_log("id 0X%x, inbuf full\n", id);
|
||||
}
|
||||
#if AUDIO_ENC_MPT_FRERES_ASYNC
|
||||
if (bulk->len >= hdl->in_packet_len) {
|
||||
audio_enc_mpt_fre_response_post_run(bulk->id);
|
||||
}
|
||||
#endif/*AUDIO_ENC_MPT_FRERES_ASYNC*/
|
||||
|
||||
}
|
||||
}
|
||||
hdl->inbuf_busy = 0;
|
||||
|
||||
return;
|
||||
__err1:
|
||||
/* encmpt_log("inbuf err\n"); */
|
||||
int i = 0;
|
||||
while (id) {
|
||||
if (id & BIT(0)) {
|
||||
putchar('0' + i);
|
||||
}
|
||||
id >>= 1;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
//音频测试频响计算运行
|
||||
void audio_enc_mpt_fre_response_post_run(u16 id)
|
||||
{
|
||||
if (!hdl) {
|
||||
return;
|
||||
}
|
||||
if (hdl->state != ENC_FRE_RES_STATE_RUN) {
|
||||
return;
|
||||
}
|
||||
#if AUDIO_ENC_MPT_FRERES_ASYNC
|
||||
os_taskq_post_msg("enc_mpt_self", 2, ENC_FRE_RESPONE_MSG_RUN, id);
|
||||
#else
|
||||
audio_enc_mpt_fre_response_process(0);
|
||||
#endif/*AUDIO_ENC_MPT_FRERES_ASYNC*/
|
||||
}
|
||||
|
||||
//音频测试频响计算停止
|
||||
void audio_enc_mpt_fre_response_stop(void)
|
||||
{
|
||||
if (!hdl) {
|
||||
return;
|
||||
}
|
||||
encmpt_log("%s \n", __func__);
|
||||
enc_freres_bulk *bulk;
|
||||
hdl->state = ENC_FRE_RES_STATE_STOP;
|
||||
while (hdl->inbuf_busy || hdl->run_busy) {
|
||||
os_time_dly(1);
|
||||
};
|
||||
list_for_each_entry(bulk, &hdl->head, entry) {
|
||||
if (bulk->cnt) {
|
||||
//数据只有实部,因此 point >> 1
|
||||
anc_HpEst_psd_out(bulk->out, AUDIO_ENC_MPT_FRERES_POINT >> 1, bulk->cnt);
|
||||
/* encmpt_log("cnt %d \n", bulk->cnt); */
|
||||
}
|
||||
}
|
||||
encmpt_log("%s ok\n", __func__);
|
||||
}
|
||||
|
||||
//工具获取数据文件
|
||||
int audio_enc_mpt_fre_response_file_get(u8 **buf)
|
||||
{
|
||||
if (!hdl) {
|
||||
return 0;
|
||||
}
|
||||
encmpt_log("%s, len %d\n", __func__, hdl->file_len);
|
||||
*buf = hdl->file_data;
|
||||
/* audio_enc_mpt_inbuf_printf(); */
|
||||
/* put_buf(hdl->file_data + 40, hdl->file_len - 40); */
|
||||
#if 0//debug
|
||||
enc_freres_bulk *bulk;
|
||||
int point = AUDIO_ENC_MPT_FRERES_POINT / 2;
|
||||
list_for_each_entry(bulk, &hdl->head, entry) {
|
||||
encmpt_log("bulk id 0X%x\n", bulk->id);
|
||||
for (int i = 0; i < point; i++) {
|
||||
printf("%d\n", (int)(bulk->out[i] * 10000));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return hdl->file_len;
|
||||
}
|
||||
|
||||
//数据获取结束,释放内存
|
||||
void audio_enc_mpt_fre_response_release(void)
|
||||
{
|
||||
if (!hdl) {
|
||||
return;
|
||||
}
|
||||
//mic_close
|
||||
encmpt_log("%s\n", __func__);
|
||||
while (hdl->inbuf_busy || hdl->run_busy) {
|
||||
os_time_dly(1);
|
||||
};
|
||||
#if AUDIO_ENC_MPT_FRERES_ASYNC
|
||||
task_kill("enc_mpt_self");
|
||||
#endif/*AUDIO_ENC_MPT_FRERES_ASYNC*/
|
||||
enc_freres_bulk *bulk;
|
||||
list_for_each_entry(bulk, &hdl->head, entry) {
|
||||
free(bulk->in);
|
||||
}
|
||||
free(hdl->file_data);
|
||||
free(hdl->bulk);
|
||||
free(hdl);
|
||||
hdl = NULL;
|
||||
encmpt_log("%s ok\n", __func__);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#endif/*AUDIO_ENC_MPT_SELF_ENABLE*/
|
||||
@@ -0,0 +1,233 @@
|
||||
#include "app_config.h"
|
||||
|
||||
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
|
||||
#include "earphone.h"
|
||||
#include "app_main.h"
|
||||
#include "include/bt_ble.h"
|
||||
#include "bt_common.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "system/includes.h"
|
||||
#include "bt_tws.h"
|
||||
|
||||
#define LOG_TAG "[BLE-ADV]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
typedef struct {
|
||||
u8 miss_flag: 1;
|
||||
u8 exchange_bat: 2;
|
||||
u8 poweron_flag: 1;
|
||||
u8 reserver: 4;
|
||||
} icon_ctl_t;
|
||||
|
||||
static icon_ctl_t ble_icon_contrl;
|
||||
|
||||
|
||||
int adv_earphone_state_set_page_scan_enable()
|
||||
{
|
||||
#if (TCFG_USER_TWS_ENABLE == 0)
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
#elif (CONFIG_NO_DISPLAY_BUTTON_ICON || !TCFG_CHARGESTORE_ENABLE)
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("switch_icon_ctl11...\n");
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adv_earphone_state_get_connect_mac_addr()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adv_earphone_state_cancel_page_scan()
|
||||
{
|
||||
#if (TCFG_USER_TWS_ENABLE == 1)
|
||||
#if (CONFIG_NO_DISPLAY_BUTTON_ICON || !TCFG_CHARGESTORE_ENABLE)
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
if (ble_icon_contrl.miss_flag) {
|
||||
ble_icon_contrl.miss_flag = 0;
|
||||
puts("ble_icon_contrl.miss_flag...\n");
|
||||
} else {
|
||||
printf("switch_icon_ctl00...\n");
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adv_earphone_state_tws_init(int paired)
|
||||
{
|
||||
memset(&ble_icon_contrl, 0, sizeof(icon_ctl_t));
|
||||
ble_icon_contrl.poweron_flag = 1;
|
||||
|
||||
if (paired) {
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
bt_ble_set_control_en(1);
|
||||
} else {
|
||||
//slave close
|
||||
bt_ble_set_control_en(0);
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adv_earphone_state_tws_connected(int first_pair, u8 *comm_addr)
|
||||
{
|
||||
if (first_pair) {
|
||||
bt_ble_icon_set_comm_address(comm_addr);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adv_earphone_state_enter_soft_poweroff()
|
||||
{
|
||||
#if (!TCFG_CHARGESTORE_ENABLE)
|
||||
//非智能充电仓时,做停止广播操作
|
||||
if (bt_ble_icon_get_adv_state() != ADV_ST_NULL &&
|
||||
bt_ble_icon_get_adv_state() != ADV_ST_END) {
|
||||
bt_ble_icon_close(1);
|
||||
os_time_dly(50);//盒盖时间,根据效果调整时间
|
||||
}
|
||||
#endif
|
||||
bt_ble_exit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int ble_adv_hci_event_handler(struct bt_event *bt)
|
||||
{
|
||||
switch (bt->event) {
|
||||
case HCI_EVENT_CONNECTION_COMPLETE:
|
||||
switch (bt->value) {
|
||||
case ERROR_CODE_PIN_OR_KEY_MISSING:
|
||||
#if (CONFIG_NO_DISPLAY_BUTTON_ICON && TCFG_CHARGESTORE_ENABLE)
|
||||
//已取消配对了
|
||||
if (bt_ble_icon_get_adv_state() == ADV_ST_RECONN) {
|
||||
//切换广播
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ble_adv_bt_tws_event_handler(struct bt_event *bt)
|
||||
{
|
||||
int role = bt->args[0];
|
||||
int phone_link_connection = bt->args[1];
|
||||
int reason = bt->args[2];
|
||||
|
||||
switch (bt->event) {
|
||||
case TWS_EVENT_CONNECTED:
|
||||
bt_ble_icon_slave_en(1);
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
//master enable
|
||||
log_info("master do icon_open\n");
|
||||
bt_ble_set_control_en(1);
|
||||
|
||||
if (phone_link_connection) {
|
||||
bt_ble_icon_open(ICON_TYPE_RECONNECT);
|
||||
} else {
|
||||
#if (TCFG_CHARGESTORE_ENABLE && !CONFIG_NO_DISPLAY_BUTTON_ICON)
|
||||
bt_ble_icon_open(ICON_TYPE_RECONNECT);
|
||||
#else
|
||||
if (ble_icon_contrl.poweron_flag) { //上电标记
|
||||
if (bt_user_priv_var.auto_connection_counter > 0) {
|
||||
//有回连手机动作
|
||||
/* g_printf("ICON_TYPE_RECONNECT"); */
|
||||
/* bt_ble_icon_open(ICON_TYPE_RECONNECT); //没按键配对的话,等回连成功的时候才显示电量。如果在这里显示,手机取消配对后耳机开机,会显示出按键的界面*/
|
||||
} else {
|
||||
//没有回连,设可连接
|
||||
/* g_printf("ICON_TYPE_INQUIRY"); */
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
//slave disable
|
||||
bt_ble_set_control_en(0);
|
||||
}
|
||||
ble_icon_contrl.poweron_flag = 0;
|
||||
break;
|
||||
case TWS_EVENT_CONNECTION_TIMEOUT:
|
||||
/*
|
||||
* TWS连接超时
|
||||
*/
|
||||
bt_ble_icon_slave_en(0);
|
||||
break;
|
||||
case TWS_EVENT_PHONE_LINK_DETACH:
|
||||
/*
|
||||
* 跟手机的链路LMP层已完全断开, 只有tws在连接状态才会收到此事件
|
||||
*/
|
||||
if (reason == 0x0b) {
|
||||
//CONNECTION ALREADY EXISTS
|
||||
ble_icon_contrl.miss_flag = 1;
|
||||
} else {
|
||||
ble_icon_contrl.miss_flag = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int adv_sys_event_handler_specific(struct sys_event *event)
|
||||
{
|
||||
switch (event->type) {
|
||||
case SYS_BT_EVENT:
|
||||
if ((u32)event->arg == SYS_BT_EVENT_TYPE_CON_STATUS) {
|
||||
} else if ((u32)event->arg == SYS_BT_EVENT_TYPE_HCI_STATUS) {
|
||||
ble_adv_hci_event_handler(&event->u.bt);
|
||||
}
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
else if (((u32)event->arg == SYS_BT_EVENT_FROM_TWS)) {
|
||||
ble_adv_bt_tws_event_handler(&event->u.bt);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adv_earphone_state_init()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adv_earphone_state_sniff(u8 state)
|
||||
{
|
||||
bt_ble_icon_state_sniff(state);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int adv_earphone_state_role_switch(u8 role)
|
||||
{
|
||||
bt_ble_icon_role_switch(role);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
#include "app_config.h"
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text : ALIGN(4)
|
||||
{
|
||||
gsensor_dev_begin = .;
|
||||
KEEP(*(.gsensor_dev))
|
||||
gsensor_dev_end = .;
|
||||
|
||||
fm_dev_begin = .;
|
||||
KEEP(*(.fm_dev))
|
||||
fm_dev_end = .;
|
||||
|
||||
fm_emitter_dev_begin = .;
|
||||
KEEP(*(.fm_emitter_dev))
|
||||
fm_emitter_dev_end = .;
|
||||
|
||||
storage_device_begin = .;
|
||||
KEEP(*(.storage_device))
|
||||
storage_device_end = .;
|
||||
|
||||
imusensor_dev_begin = .;
|
||||
KEEP(*(.imusensor_dev))
|
||||
imusensor_dev_end = .;
|
||||
|
||||
#if TCFG_APP_PC_EN
|
||||
aac_dec_code_begin = .;
|
||||
*(.bt_aac_dec_code)
|
||||
*(.bt_aac_dec_sparse_code)
|
||||
aac_dec_code_end = .;
|
||||
aac_dec_code_size = aac_dec_code_end - aac_dec_code_begin ;
|
||||
|
||||
. = ALIGN(4);
|
||||
bt_aac_dec_const_begin = .;
|
||||
*(.bt_aac_dec_const)
|
||||
*(.bt_aac_dec_sparse_const)
|
||||
bt_aac_dec_const_end = .;
|
||||
bt_aac_dec_const_size = bt_aac_dec_const_end - bt_aac_dec_const_begin ;
|
||||
|
||||
*(.bt_aac_dec_data)
|
||||
*(.bt_aac_dec_bss)
|
||||
|
||||
. = ALIGN(4);
|
||||
*(.aac_mem)
|
||||
*(.aac_ctrl_mem)
|
||||
/* . += 0x5fe8 ; */
|
||||
/* . += 0xef88 ; */
|
||||
#endif
|
||||
|
||||
. = ALIGN(32);
|
||||
}
|
||||
|
||||
.data ALIGN(32):
|
||||
{
|
||||
} > ram0
|
||||
|
||||
.bss ALIGN(32):
|
||||
{
|
||||
} > ram0
|
||||
|
||||
.data_code ALIGN(32):
|
||||
{
|
||||
} > ram0
|
||||
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
|
||||
OVERLAY : AT(0x200000) SUBALIGN(4)
|
||||
{
|
||||
.overlay_aec
|
||||
{
|
||||
aec_code_begin = . ;
|
||||
*(.text._*)
|
||||
*(.data._*)
|
||||
*(.aec_code)
|
||||
*(.aec_const)
|
||||
*(.res_code)
|
||||
*(.res_const)
|
||||
*(.ns_code)
|
||||
*(.ns_const)
|
||||
*(.bark_const)
|
||||
*(.fft_code)
|
||||
*(.fft_const)
|
||||
*(.agc_code)
|
||||
*(.dms_code)
|
||||
*(.dms_const)
|
||||
*(.dms_sparse_code)
|
||||
aec_code_end = . ;
|
||||
aec_code_size = aec_code_end - aec_code_begin ;
|
||||
|
||||
*(.msbc_enc)
|
||||
*(.cvsd_codec)
|
||||
*(.aec_bss)
|
||||
*(.aec_data)
|
||||
*(.res_data)
|
||||
*(.ns_data)
|
||||
*(.dns_common_data)
|
||||
*(.dns_param_data_single)
|
||||
*(.dns_param_data_dual)
|
||||
*(.jlsp_nlp_code)
|
||||
*(.jlsp_nlp_const)
|
||||
*(.jlsp_aec_code)
|
||||
*(.jlsp_aec_const)
|
||||
*(.jlsp_prep_code)
|
||||
*(.jlsp_prep_const)
|
||||
*(.jlsp_enc_code)
|
||||
*(.jlsp_enc_const)
|
||||
*(.jlsp_wn_code)
|
||||
*(.jlsp_wn_const)
|
||||
*(.jlsp_tri_code)
|
||||
*(.jlsp_tri_const)
|
||||
*(.jlsp_agc_code)
|
||||
*(.jlsp_agc_const)
|
||||
*(.res_bss)
|
||||
*(.ns_bss)
|
||||
*(.aec_mem)
|
||||
}
|
||||
.overlay_aac
|
||||
{
|
||||
#if !TCFG_APP_PC_EN
|
||||
aac_dec_code_begin = .;
|
||||
*(.bt_aac_dec_code)
|
||||
*(.bt_aac_dec_sparse_code)
|
||||
aac_dec_code_end = .;
|
||||
aac_dec_code_size = aac_dec_code_end - aac_dec_code_begin ;
|
||||
|
||||
. = ALIGN(4);
|
||||
bt_aac_dec_const_begin = .;
|
||||
*(.bt_aac_dec_const)
|
||||
*(.bt_aac_dec_sparse_const)
|
||||
bt_aac_dec_const_end = .;
|
||||
bt_aac_dec_const_size = bt_aac_dec_const_end - bt_aac_dec_const_begin ;
|
||||
|
||||
*(.bt_aac_dec_data)
|
||||
*(.bt_aac_dec_bss)
|
||||
|
||||
. = ALIGN(4);
|
||||
*(.aac_mem)
|
||||
*(.aac_ctrl_mem)
|
||||
/* . += 0x5fe8 ; */
|
||||
/* . += 0xef88 ; */
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
.overlay_lc3
|
||||
{
|
||||
lc3_dec_code_begin = .;
|
||||
*(.lc3_dec_code)
|
||||
lc3_dec_code_end = .;
|
||||
lc3_dec_code_size = lc3_dec_code_end - lc3_dec_code_begin;
|
||||
|
||||
. = ALIGN(4);
|
||||
lc3_dec_const_begin = .;
|
||||
*(.lc3_dec_const)
|
||||
lc3_dec_const_end = .;
|
||||
lc3_dec_const_size = lc3_dec_const_end - lc3_dec_const_begin;
|
||||
*(.lc3_dec_data)
|
||||
*(.lc3_dec_bss)
|
||||
}
|
||||
*/
|
||||
|
||||
.overlay_mp3
|
||||
{
|
||||
*(.mp3_mem)
|
||||
*(.mp3_ctrl_mem)
|
||||
*(.mp3pick_mem)
|
||||
*(.mp3pick_ctrl_mem)
|
||||
*(.dec2tws_mem)
|
||||
}
|
||||
.overlay_wma
|
||||
{
|
||||
*(.wma_mem)
|
||||
*(.wma_ctrl_mem)
|
||||
*(.wmapick_mem)
|
||||
*(.wmapick_ctrl_mem)
|
||||
}
|
||||
.overlay_wav
|
||||
{
|
||||
*(.wav_mem)
|
||||
*(.wav_ctrl_mem)
|
||||
}
|
||||
.overlay_ape
|
||||
{
|
||||
*(.ape_mem)
|
||||
*(.ape_ctrl_mem)
|
||||
}
|
||||
.overlay_flac
|
||||
{
|
||||
*(.flac_mem)
|
||||
*(.flac_ctrl_mem)
|
||||
}
|
||||
.overlay_m4a
|
||||
{
|
||||
*(.m4a_mem)
|
||||
*(.m4a_ctrl_mem)
|
||||
}
|
||||
.overlay_amr
|
||||
{
|
||||
*(.amr_mem)
|
||||
*(.amr_ctrl_mem)
|
||||
}
|
||||
.overlay_dts
|
||||
{
|
||||
*(.dts_mem)
|
||||
*(.dts_ctrl_mem)
|
||||
}
|
||||
.overlay_fm
|
||||
{
|
||||
*(.fm_mem)
|
||||
}
|
||||
.overlay_pc
|
||||
{
|
||||
*(.usb_audio_play_dma)
|
||||
*(.usb_audio_rec_dma)
|
||||
*(.uac_rx)
|
||||
*(.mass_storage)
|
||||
|
||||
*(.usb_ep0)
|
||||
*(.usb_msd_dma)
|
||||
*(.usb_hid_dma)
|
||||
*(.usb_iso_dma)
|
||||
*(.usb_cdc_dma)
|
||||
*(.uac_var)
|
||||
*(.usb_config_var)
|
||||
*(.cdc_var)
|
||||
}
|
||||
|
||||
} > ram0
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
#ifndef BOARD_CONFIG_H
|
||||
#define BOARD_CONFIG_H
|
||||
|
||||
|
||||
/*
|
||||
* 板级配置选择
|
||||
*/
|
||||
|
||||
#define CONFIG_BOARD_JL701N_DEMO
|
||||
|
||||
|
||||
#include "board_jl701n_demo_cfg.h"
|
||||
|
||||
#define DUT_AUDIO_DAC_LDO_VOLT DACVDD_LDO_1_25V
|
||||
|
||||
#ifdef CONFIG_NEW_CFG_TOOL_ENABLE
|
||||
#define CONFIG_ENTRY_ADDRESS 0x6000100
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,123 @@
|
||||
#ifndef CONFIG_BOARD_JL701N_DEMO_POST_BUILD_CFG_H
|
||||
#define CONFIG_BOARD_JL701N_DEMO_POST_BUILD_CFG_H
|
||||
|
||||
/* 改文件只添加和isd_config.ini相关的配置,用以生成isd_config.ini */
|
||||
/* 其他不相关的配置请勿添加在改文件 */
|
||||
|
||||
#ifdef CONFIG_BOARD_JL701N_DEMO
|
||||
|
||||
/* Following Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
#define CONFIG_DOUBLE_BANK_ENABLE 1 //单双备份选择(若打开了改宏,FLASH结构变为双备份结构,适用于接入第三方协议的OTA, PS: JL-OTA同样支持双备份升级, 需要根据实际FLASH大小同时配置CONFIG_FLASH_SIZE)
|
||||
#define CONFIG_APP_OTA_ENABLE 1 //是否支持RCSP升级(JL-OTA)
|
||||
|
||||
#define CONFIG_UPDATE_JUMP_TO_MASK 0 //配置升级到loader的方式0为直接reset,1为跳转(适用于芯片电源由IO口KEEP住的方案,需要注意检查跳转前是否将使用DMA的硬件模块全部关闭)
|
||||
|
||||
#define CONFIG_IO_KEY_EN 1 //配置是否使用IO按键,配合RESET1
|
||||
#define CONFIG_UPDATE_WITH_MD5_CHECK_EN 0 //配置升级是否支持MD5校验
|
||||
|
||||
#define CONFIG_ANC_ENABLE 0 //配置是否支持ANC
|
||||
|
||||
//flash size vaule definition
|
||||
#define FLASH_SIZE_256K 0x40000
|
||||
#define FLASH_SIZE_512K 0x80000
|
||||
#define FLASH_SIZE_1M 0x100000
|
||||
#define FLASH_SIZE_2M 0x200000
|
||||
#define FLASH_SIZE_4M 0x400000
|
||||
|
||||
#define CONFIG_FLASH_SIZE FLASH_SIZE_1M //配置FLASH大小
|
||||
|
||||
|
||||
/* Above Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
/* Following Macros Only For Post Bulid Configuaration */
|
||||
|
||||
#define CONFIG_DB_UPDATE_DATA_GENERATE_EN 1 //是否生成db_data.bin(用于第三方协议接入使用)
|
||||
#define CONFIG_ONLY_GRENERATE_ALIGN_4K_CODE 1 //ufw只生成1份4K对齐的代码
|
||||
|
||||
//config for supported chip version
|
||||
#ifdef CONFIG_BR30_C_VERSION
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION C
|
||||
#else
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION B,D,E,M,N,O,P
|
||||
#endif
|
||||
|
||||
//DON'T MODIFY THIS CONFIG EXCEPT SDK PUBLISHER
|
||||
#define CONFIG_CHIP_NAME AC701N //除了SDK发布者,请不要修改
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_PID AC701N //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_VID 0.01 //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
|
||||
//Project with bluetooth,it must use OSC as PLL_SOURCE;
|
||||
#define CONFIG_PLL_SOURCE_USING_LRC 0 //PLL时钟源选择 1:LRC 2:OSC
|
||||
|
||||
//config alignment size unit
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
#define ALIGN_UNIT_256B 1 //FLASH对齐方式选择,如果是256K的FLASH,选择256BYTE对齐方式
|
||||
#else
|
||||
#define ALIGN_UNIT_256B 0
|
||||
#endif
|
||||
|
||||
//partial platform check this config to select the uart IO for wired update
|
||||
#define CONFIG_UART_UPDATE_PIN -1
|
||||
|
||||
//isd_download loader/uboot/update_loader debug io config
|
||||
//#define CONFIG_UBOOT_DEBUG_PIN PA05
|
||||
//#define CONFIG_UBOOT_DEBUG_BAUD_RATE 1000000
|
||||
|
||||
//config long-press reset io pin,time,trigger level
|
||||
#define CONFIG_RESET_PIN LDO //io pin
|
||||
#define CONFIG_RESET_TIME 00 //unit:second
|
||||
#define CONFIG_RESET_LEVEL 0 //tigger level(0/1)
|
||||
|
||||
#if CONFIG_IO_KEY_EN
|
||||
#define CONFIG_SUPPORT_RESET1
|
||||
#define CONFIG_RESET1_PIN PB01 //io pin
|
||||
#define CONFIG_RESET1_TIME 16 //unit:second
|
||||
#define CONFIG_RESET1_LEVEL 0 //tigger level(0/1)
|
||||
#endif
|
||||
|
||||
//reserved three custom cfg item for the future definition
|
||||
//#define CONFIG_CUSTOM_CFG1_TYPE POWER_PIN
|
||||
//#define CONFIG_CUSTOM_CFG1_VALUE PC01_1
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG2_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG2_VALUE
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG3_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG3_VALUE
|
||||
|
||||
|
||||
#define CONFIG_VDDIO_LVD_LEVEL 3 ////VDDIO_LVD挡位,0: 1.9V 1: 2.0V 2: 2.1V 3: 2.2V 4: 2.3V 5: 2.4V 6: 2.5V 7: 2.6V
|
||||
|
||||
//with single-bank mode,actual vm size should larger this VM_LEAST_SIZE,and dual bank mode,actual vm size equals this;
|
||||
#define CONFIG_VM_LEAST_SIZE 8K
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_VM_OPT 1
|
||||
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_BTIF_OPT 1
|
||||
|
||||
//reserved two custom cfg area for the future definition
|
||||
//#define CONFIG_RESERVED_AREA1 EXIF1
|
||||
#ifdef CONFIG_RESERVED_AREA1
|
||||
#define CONFIG_RESERVED_AREA1_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA1_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA1_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA1_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
//#define CONFIG_RESERVED_AREA2 EXIF2
|
||||
#ifdef CONFIG_RESERVED_AREA2
|
||||
#define CONFIG_RESERVED_AREA2_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA2_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA2_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA2_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
/* Above Macros Only For Post Bulid Configuaration */
|
||||
#endif /* #ifdef CONFIG_BOARD_JL701N_DEMO */
|
||||
|
||||
#endif /* #ifndef CONFIG_BOARD_JL701N_DEMO_POST_BUILD_CFG_H */
|
||||
|
||||
@@ -0,0 +1,417 @@
|
||||
#if 0
|
||||
|
||||
#include "system/includes.h"
|
||||
#include "media/includes.h"
|
||||
#include "tone_player.h"
|
||||
|
||||
#include "app_config.h"
|
||||
#include "app_action.h"
|
||||
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "btstack/btstack_task.h"
|
||||
#include "btstack/frame_queque.h"
|
||||
#include "user_cfg.h"
|
||||
#include "aec_user.h"
|
||||
#include "classic/hci_lmp.h"
|
||||
#include "bt_common.h"
|
||||
#include "pbg_user.h"
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
#include "bt_tws.h"
|
||||
#endif
|
||||
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
#include "include/bt_ble.h"
|
||||
#endif
|
||||
|
||||
#if TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE
|
||||
//#include "app_chargestore.h"
|
||||
#endif
|
||||
|
||||
#include "asm/charge.h"
|
||||
#include "app_charge.h"
|
||||
#include "ui_manage.h"
|
||||
|
||||
//#include "app_chargestore.h"
|
||||
#include "app_online_cfg.h"
|
||||
#include "app_main.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "gSensor/gSensor_manage.h"
|
||||
#include "key_event_deal.h"
|
||||
#include "classic/tws_api.h"
|
||||
#include "asm/pwm_led.h"
|
||||
#include "vol_sync.h"
|
||||
|
||||
|
||||
#define CONFIG_SPP_PRINTF_DEBUG 0
|
||||
|
||||
#define CONFIG_A2DP_PLAY_PAUSE_TEST 0
|
||||
#define CONFIG_A2DP_PLAY_NUM 0
|
||||
#define CONFIG_POWEROFF_TEST 0
|
||||
#define CONFIG_LOW_LATENCY_TEST 0
|
||||
#define CONFIG_A2DP_AUTO_PLAY 1
|
||||
#define CONFIG_IN_OUT_CHARGESTORE_TEST 0
|
||||
#define CONFIG_TWS_SUPER_TIMEOUT_TEST 0
|
||||
|
||||
#define CONFIG_MODE_SWITCH_ENABLE 0
|
||||
#define CONFIG_ROLE_SWITCH_TEST 0
|
||||
|
||||
#define CONFIG_GMA_TEST 0
|
||||
|
||||
|
||||
|
||||
#if CONFIG_LOW_LATENCY_TEST
|
||||
|
||||
static void low_latency_switch_test(void *p)
|
||||
{
|
||||
struct sys_event evt;
|
||||
|
||||
r_printf("low_latency_test\n");
|
||||
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
evt.arg = (void *)DEVICE_EVENT_FROM_KEY;
|
||||
evt.type = SYS_KEY_EVENT;
|
||||
evt.u.key.value = KEY_POWER_START;
|
||||
evt.u.key.event = KEY_EVENT_TRIPLE_CLICK;
|
||||
|
||||
sys_event_notify(&evt);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if CONFIG_GMA_TEST
|
||||
static void gma_test(void *p)
|
||||
{
|
||||
struct sys_event evt;
|
||||
|
||||
r_printf("gma_test\n");
|
||||
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
evt.arg = (void *)DEVICE_EVENT_FROM_KEY;
|
||||
evt.type = SYS_KEY_EVENT;
|
||||
evt.u.key.value = KEY_POWER_START;
|
||||
evt.u.key.event = KEY_EVENT_LONG;
|
||||
|
||||
sys_event_notify(&evt);
|
||||
|
||||
int ms = 10000 + rand32() % 10 * 5000;
|
||||
sys_timeout_add(NULL, gma_test, ms);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if CONFIG_SPP_PRINTF_DEBUG
|
||||
static u32 spp_buf[1024 / 4];
|
||||
static cbuffer_t spp_buf_hdl;
|
||||
static u32 send_len = 0;
|
||||
static int spp_timer = 0;
|
||||
static char out[256];
|
||||
|
||||
int log_print_time_to_buf(char *time);
|
||||
|
||||
void spp_printf(const char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
char *p = out;
|
||||
|
||||
if (spp_timer == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
va_start(args, format);
|
||||
|
||||
int len = log_print_time_to_buf(p);
|
||||
p += len;
|
||||
|
||||
len += print(&p, 0, format, args);
|
||||
if (cbuf_is_write_able(&spp_buf_hdl, len)) {
|
||||
cbuf_write(&spp_buf_hdl, out, len);
|
||||
} else {
|
||||
putchar('N');
|
||||
}
|
||||
}
|
||||
|
||||
void spp_send_data_timer(void *p)
|
||||
{
|
||||
u8 *ptr;
|
||||
|
||||
__send:
|
||||
if (send_len == 0) {
|
||||
ptr = cbuf_read_alloc(&spp_buf_hdl, &send_len);
|
||||
if (send_len) {
|
||||
if (send_len > 250) {
|
||||
send_len = 250;
|
||||
}
|
||||
user_send_cmd_prepare(USER_CTRL_SPP_SEND_DATA, send_len, ptr);
|
||||
}
|
||||
} else {
|
||||
if (0 == user_send_cmd_prepare(USER_CTRL_SPP_SEND_DATA, 0, NULL)) {
|
||||
cbuf_read_updata(&spp_buf_hdl, send_len);
|
||||
send_len = 0;
|
||||
goto __send;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void spp_data_handler(u8 packet_type, u16 ch, u8 *packet, u16 size)
|
||||
{
|
||||
switch (packet_type) {
|
||||
case 1:
|
||||
cbuf_init(&spp_buf_hdl, spp_buf, sizeof(spp_buf));
|
||||
spp_timer = sys_timer_add(NULL, spp_send_data_timer, 50);
|
||||
spp_printf("spp connect\n");
|
||||
break;
|
||||
case 2:
|
||||
printf("spp disconnect\n");
|
||||
if (spp_timer) {
|
||||
sys_timer_del(spp_timer);
|
||||
spp_timer = 0;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
//log_info("spp_rx:");
|
||||
//put_buf(packet,size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
static int a2dp_open_cnt = 0;
|
||||
u8 bt_audio_is_running(void);
|
||||
|
||||
static void a2dp_play_pause_test(void *p)
|
||||
{
|
||||
struct sys_event evt;
|
||||
|
||||
if (bt_audio_is_running()) {
|
||||
if (p) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (!p) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
r_printf("a2dp_play_pause_test\n");
|
||||
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
evt.arg = (void *)DEVICE_EVENT_FROM_KEY;
|
||||
evt.type = SYS_KEY_EVENT;
|
||||
evt.u.key.value = KEY_POWER_START;
|
||||
evt.u.key.event = KEY_EVENT_CLICK;
|
||||
/*evt.u.key.event = KEY_EVENT_DOUBLE_CLICK;*/
|
||||
|
||||
sys_event_notify(&evt);
|
||||
}
|
||||
}
|
||||
|
||||
static void disconnect_test(void *p)
|
||||
{
|
||||
r_printf("disconnect_test: %x\n", p);
|
||||
|
||||
if (!p) {
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
user_send_cmd_prepare(USER_CTRL_POWER_OFF, 0, NULL);
|
||||
}
|
||||
} else {
|
||||
bt_user_priv_var.auto_connection_counter = 60 * 1000;
|
||||
bt_tws_phone_connect_timeout();
|
||||
}
|
||||
}
|
||||
|
||||
#if CONFIG_TWS_SUPER_TIMEOUT_TEST
|
||||
extern void tws_timeout_test();
|
||||
static void tws_super_timeout_test(void *p)
|
||||
{
|
||||
tws_timeout_test();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_ROLE_SWITCH_TEST
|
||||
static void tws_role_switch_test(void *p)
|
||||
{
|
||||
tws_conn_switch_role();
|
||||
|
||||
/*void bt_tws_role_switch();
|
||||
bt_tws_role_switch();*/
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if CONFIG_MODE_SWITCH_ENABLE
|
||||
static void mode_switch_test()
|
||||
{
|
||||
struct sys_event evt;
|
||||
|
||||
if (tws_api_get_role() == 0) {
|
||||
evt.arg = (void *)DEVICE_EVENT_FROM_KEY;
|
||||
evt.type = SYS_KEY_EVENT;
|
||||
evt.u.key.value = KEY_POWER_START;
|
||||
evt.u.key.event = KEY_EVENT_TRIPLE_CLICK;
|
||||
sys_event_notify(&evt);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
static int bt_connction_status_event_handler(struct bt_event *bt)
|
||||
{
|
||||
switch (bt->event) {
|
||||
case BT_STATUS_FIRST_CONNECTED:
|
||||
#if CONFIG_SPP_PRINTF_DEBUG
|
||||
spp_data_deal_handle_register(spp_data_handler);
|
||||
#endif
|
||||
|
||||
#if CONFIG_A2DP_AUTO_PLAY
|
||||
if (tws_api_get_role() == 0) {
|
||||
sys_timeout_add((void *)1, a2dp_play_pause_test, 8000);
|
||||
}
|
||||
#endif
|
||||
#if CONFIG_LOW_LATENCY_TEST
|
||||
if (tws_api_get_role() == 0) {
|
||||
sys_timer_add(NULL, low_latency_switch_test, 15000);
|
||||
}
|
||||
#endif
|
||||
#if CONFIG_GMA_TEST
|
||||
if (tws_api_get_role() == 0) {
|
||||
sys_timeout_add(NULL, gma_test, 15000);
|
||||
}
|
||||
#endif
|
||||
#if CONFIG_POWEROFF_TEST
|
||||
{
|
||||
int msec = 10000 ;//+ rand32() % 5 * 5000;
|
||||
sys_timeout_add(NULL, disconnect_test, msec);
|
||||
}
|
||||
#endif
|
||||
#if CONFIG_MODE_SWITCH_ENABLE
|
||||
sys_timer_add(NULL, mode_switch_test, 20000);
|
||||
#endif
|
||||
break;
|
||||
case BT_STATUS_FIRST_DISCONNECT:
|
||||
#if CONFIG_POWEROFF_TEST
|
||||
a2dp_open_cnt = 0;
|
||||
sys_timeout_add((void *)1, disconnect_test, 2000);
|
||||
#endif
|
||||
break;
|
||||
case BT_STATUS_A2DP_MEDIA_START:
|
||||
#if CONFIG_A2DP_PLAY_PAUSE_TEST
|
||||
if (CONFIG_A2DP_PLAY_NUM && ++a2dp_open_cnt >= CONFIG_A2DP_PLAY_NUM) {
|
||||
#if CONFIG_POWEROFF_TEST
|
||||
sys_timeout_add(NULL, disconnect_test, 5000);
|
||||
#endif
|
||||
} else {
|
||||
sys_timeout_add(NULL, a2dp_play_pause_test, 10000);
|
||||
}
|
||||
#endif
|
||||
#if CONFIG_ROLE_SWITCH_TEST
|
||||
sys_timeout_add(NULL, tws_role_switch_test, 5000);
|
||||
#endif
|
||||
break;
|
||||
case BT_STATUS_A2DP_MEDIA_STOP:
|
||||
#if CONFIG_A2DP_PLAY_PAUSE_TEST
|
||||
if (CONFIG_A2DP_PLAY_NUM == 0 || a2dp_open_cnt < CONFIG_A2DP_PLAY_NUM) {
|
||||
sys_timeout_add((void *)1, a2dp_play_pause_test, 15000);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bt_tws_event_handler(struct bt_event *evt)
|
||||
{
|
||||
int role = evt->args[0];
|
||||
int phone_link_connection = evt->args[1];
|
||||
int reason = evt->args[2];
|
||||
|
||||
switch (evt->event) {
|
||||
case TWS_EVENT_CONNECTED:
|
||||
#if CONFIG_IN_OUT_CHARGESTORE_TEST
|
||||
if (tws_api_get_role() == TWS_ROLE_SLAVE) {
|
||||
void sys_enter_soft_poweroff(void *priv);
|
||||
sys_timeout_add((void *)1, sys_enter_soft_poweroff, 5000);
|
||||
}
|
||||
#endif
|
||||
#if CONFIG_TWS_SUPER_TIMEOUT_TEST
|
||||
sys_timeout_add(NULL, tws_super_timeout_test, 10000);
|
||||
#endif
|
||||
#if CONFIG_ROLE_SWITCH_TEST
|
||||
sys_timeout_add(NULL, tws_role_switch_test, 15000);
|
||||
#endif
|
||||
break;
|
||||
case TWS_EVENT_ROLE_SWITCH:
|
||||
#if CONFIG_ROLE_SWITCH_TEST
|
||||
sys_timeout_add(NULL, tws_role_switch_test, 5000);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void auto_test_event_handler(struct sys_event *event, void *priv)
|
||||
{
|
||||
/*
|
||||
* 蓝牙事件处理
|
||||
*/
|
||||
switch ((u32)event->arg) {
|
||||
case SYS_BT_EVENT_TYPE_CON_STATUS:
|
||||
bt_connction_status_event_handler(&event->u.bt);
|
||||
break;
|
||||
case SYS_BT_EVENT_TYPE_HCI_STATUS:
|
||||
break;
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
case SYS_BT_EVENT_FROM_TWS:
|
||||
bt_tws_event_handler(&event->u.bt);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void bt_auto_test_task(void *p)
|
||||
{
|
||||
int res;
|
||||
int msg[32];
|
||||
|
||||
register_sys_event_handler(SYS_BT_EVENT, 0, 0, auto_test_event_handler);
|
||||
|
||||
os_time_dly(2);
|
||||
|
||||
#if CONFIG_IN_OUT_CHARGESTORE_TEST
|
||||
void sys_enter_soft_poweroff(void *priv);
|
||||
int msec = 500 + rand32() % 10 * 200;
|
||||
sys_timeout_add((void *)1, sys_enter_soft_poweroff, msec);
|
||||
#endif
|
||||
|
||||
while (1) {
|
||||
res = os_taskq_pend("taskq", msg, ARRAY_SIZE(msg));
|
||||
if (res != OS_TASKQ) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int bt_auto_test_init()
|
||||
{
|
||||
os_task_create(bt_auto_test_task, NULL, 1, 256, 256, "auto_test");
|
||||
return 0;
|
||||
}
|
||||
late_initcall(bt_auto_test_init);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,255 @@
|
||||
#include "system/includes.h"
|
||||
#include "classic/tws_api.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "btstack/a2dp_media_codec.h"
|
||||
|
||||
#include "app_config.h"
|
||||
#include "app_main.h"
|
||||
#include "app_action.h"
|
||||
|
||||
#include "app_task.h"
|
||||
#include "audio_config.h"
|
||||
|
||||
static u16 clear_to_seqn = 0;
|
||||
static u16 slience_timer;
|
||||
static u8 unmute_packet_cnt;
|
||||
static u8 g_bt_background = 0;
|
||||
static u8 energy_check_stop;
|
||||
|
||||
u8 bt_media_is_running();
|
||||
void a2dp_dec_close();
|
||||
void bt_switch_to_foreground(int action, bool exit_curr_app);
|
||||
|
||||
#define TWS_A2DP_CLEAR_ID TWS_FUNC_ID('A', 2, 'C', 'R')
|
||||
|
||||
|
||||
static void __tws_a2dp_clear_to_seqn(void *data, u16 len, bool rx)
|
||||
{
|
||||
if (rx) {
|
||||
clear_to_seqn = *(u16 *)data;
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_TWS_FUNC_STUB(tws_a2dp_clear_to_seqn) = {
|
||||
.func_id = TWS_A2DP_CLEAR_ID,
|
||||
.func = __tws_a2dp_clear_to_seqn,
|
||||
};
|
||||
|
||||
bool bt_in_background()
|
||||
{
|
||||
return g_bt_background;
|
||||
}
|
||||
|
||||
void a2dp_slience_detect(void *p)
|
||||
{
|
||||
int len;
|
||||
u8 *packet;
|
||||
int ingore_packet_num = (int)p;
|
||||
int role = tws_api_get_role();
|
||||
|
||||
u32 media_type;
|
||||
putchar('^');
|
||||
while (1) {
|
||||
media_type = a2dp_media_get_codec_type();
|
||||
len = a2dp_media_try_get_packet(&packet);
|
||||
if (len <= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
u16 seqn = (packet[2] << 8) | packet[3];
|
||||
|
||||
if (role == TWS_ROLE_MASTER) {
|
||||
if (clear_to_seqn == 0) {
|
||||
clear_to_seqn = seqn + ingore_packet_num;
|
||||
if (clear_to_seqn == 0) {
|
||||
clear_to_seqn = 1;
|
||||
}
|
||||
a2dp_media_free_packet(packet);
|
||||
a2dp_media_clear_packet_before_seqn(clear_to_seqn);
|
||||
break;
|
||||
}
|
||||
|
||||
//能量检测
|
||||
if (energy_check_stop == 0) {
|
||||
int energy;
|
||||
if (media_type == 0) {
|
||||
energy = sbc_energy_check(packet, len);
|
||||
} else {
|
||||
energy = aac_energy_check(packet, len);
|
||||
|
||||
}
|
||||
|
||||
printf("energy:media_type= %d,%d, %d, %d\n", media_type, seqn, energy, unmute_packet_cnt);
|
||||
|
||||
if (energy >= 10) {
|
||||
if (++unmute_packet_cnt >= 20) {
|
||||
unmute_packet_cnt = 0;
|
||||
energy_check_stop = 1;
|
||||
|
||||
//能量检测结束,通知从机丢到指定包号数据,然后开始A2DP解码
|
||||
clear_to_seqn = seqn + 10;
|
||||
if (clear_to_seqn == 0) {
|
||||
clear_to_seqn = 1;
|
||||
}
|
||||
tws_api_send_data_to_slave(&clear_to_seqn, 2, TWS_A2DP_CLEAR_ID);
|
||||
}
|
||||
} else {
|
||||
unmute_packet_cnt >>= 1;
|
||||
}
|
||||
a2dp_media_free_packet(packet);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
printf("seqn: %d, %d\n", seqn, clear_to_seqn);
|
||||
|
||||
a2dp_media_free_packet(packet);
|
||||
|
||||
if (clear_to_seqn && seqn_after(seqn, clear_to_seqn)) {
|
||||
clear_to_seqn = 0;
|
||||
sys_timer_del(slience_timer);
|
||||
slience_timer = 0;
|
||||
if (!bt_in_background()) {
|
||||
//先点击手机播放再立马按键切模式时,此处需要打开a2dp解码
|
||||
g_bt_background = 1;
|
||||
bt_switch_to_foreground(ACTION_A2DP_START, 0);
|
||||
} else {
|
||||
app_task_switch_to(APP_BT_TASK, ACTION_A2DP_START);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void bt_start_a2dp_slience_detect(int ingore_packet_num)
|
||||
{
|
||||
if (slience_timer) {
|
||||
sys_timer_del(slience_timer);
|
||||
}
|
||||
clear_to_seqn = 0;
|
||||
unmute_packet_cnt = 0;
|
||||
energy_check_stop = 0;
|
||||
slience_timer = sys_timer_add((void *)ingore_packet_num, a2dp_slience_detect, 40);
|
||||
g_printf("bt_start_a2dp_slience_detect=%d\n", slience_timer);
|
||||
}
|
||||
|
||||
void bt_stop_a2dp_slience_detect()
|
||||
{
|
||||
if (slience_timer) {
|
||||
sys_timer_del(slience_timer);
|
||||
g_printf("bt_stop_a2dp_slience_detect");
|
||||
slience_timer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int bt_switch_to_background()
|
||||
{
|
||||
int a2dp_state;
|
||||
int esco_state;
|
||||
struct intent it;
|
||||
|
||||
if (app_var.siri_stu && app_var.siri_stu != 3 && get_esco_busy_flag()) {
|
||||
// siri不退出
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
esco_state = get_call_status();
|
||||
if (esco_state == BT_CALL_OUTGOING ||
|
||||
esco_state == BT_CALL_ALERT ||
|
||||
esco_state == BT_CALL_INCOMING ||
|
||||
esco_state == BT_CALL_ACTIVE) {
|
||||
// 通话不退出
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
a2dp_state = a2dp_get_status();
|
||||
r_printf("a2dp_state=%d\n", a2dp_state);
|
||||
if ((tws_api_get_role() == TWS_ROLE_MASTER) && (a2dp_state == BT_MUSIC_STATUS_STARTING)) {
|
||||
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PAUSE, 0, NULL);
|
||||
}
|
||||
if (bt_media_is_running()) {
|
||||
a2dp_dec_close();
|
||||
a2dp_media_clear_packet_before_seqn(0);
|
||||
bt_start_a2dp_slience_detect(30);
|
||||
}
|
||||
|
||||
g_bt_background = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bt_switch_to_foreground(int action, bool exit_curr_app)
|
||||
{
|
||||
struct intent it;
|
||||
|
||||
if (g_bt_background) {
|
||||
g_bt_background = 0;
|
||||
|
||||
/* 退出当前模式 */
|
||||
if (exit_curr_app) {
|
||||
init_intent(&it);
|
||||
it.action = ACTION_BACK;
|
||||
start_app(&it);
|
||||
}
|
||||
}
|
||||
|
||||
if (action) {
|
||||
init_intent(&it);
|
||||
it.name = "earphone";
|
||||
it.action = action;
|
||||
start_app(&it);
|
||||
}
|
||||
}
|
||||
|
||||
int bt_background_event_probe_handler(struct bt_event *bt)
|
||||
{
|
||||
int len;
|
||||
|
||||
switch (bt->event) {
|
||||
case BT_STATUS_INIT_OK:
|
||||
len = syscfg_read(CFG_HAVE_MASS_STORAGE, &app_var.have_mass_storage, 1);
|
||||
if (len != 1) {
|
||||
if (dev_online("sd0")) {
|
||||
app_var.have_mass_storage = 1;
|
||||
syscfg_write(CFG_HAVE_MASS_STORAGE, &app_var.have_mass_storage, 1);
|
||||
}
|
||||
}
|
||||
printf("have_mass_storage: %d\n", app_var.have_mass_storage);
|
||||
break;
|
||||
case BT_STATUS_A2DP_MEDIA_START:
|
||||
puts("BT_STATUS_A2DP_MEDIA_START\n");
|
||||
if (bt_in_background()) {
|
||||
bt_start_a2dp_slience_detect(30);
|
||||
return -EINVAL;
|
||||
} else {
|
||||
bt_stop_a2dp_slience_detect();
|
||||
}
|
||||
break;
|
||||
case BT_STATUS_A2DP_MEDIA_STOP:
|
||||
puts("BT_STATUS_A2DP_MEDIA_STOP\n");
|
||||
if (bt_in_background()) {
|
||||
bt_stop_a2dp_slience_detect();
|
||||
extern void free_a2dp_using_decoder_conn();
|
||||
free_a2dp_using_decoder_conn();
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
case BT_STATUS_VOICE_RECOGNITION:
|
||||
if (bt->value && bt->value != 3) {
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
case BT_STATUS_PHONE_INCOME:
|
||||
case BT_STATUS_PHONE_OUT:
|
||||
case BT_STATUS_PHONE_ACTIVE:
|
||||
bt_switch_to_foreground(ACTION_DO_NOTHING, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,373 @@
|
||||
#include "default_event_handler.h"
|
||||
#include "app_action.h"
|
||||
#include "bt_background.h"
|
||||
#include "earphone.h"
|
||||
#include "dev_manager/dev_manager.h"
|
||||
#include "app_config.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "bt_tws.h"
|
||||
#include "app_main.h"
|
||||
//#include "app_music.h"
|
||||
#include "key_event_deal.h"
|
||||
#include "asm/charge.h"
|
||||
#include "app_sd_music.h"
|
||||
#include "usb/otg.h"
|
||||
#include "update.h"
|
||||
|
||||
#if (TCFG_APP_MUSIC_EN || TCFG_PC_ENABLE)
|
||||
#include "app_task.h"
|
||||
|
||||
#if TCFG_DEC2TWS_ENABLE
|
||||
#include "audio_dec/audio_dec_file.h"
|
||||
#endif
|
||||
|
||||
extern u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX];
|
||||
extern int pc_device_event_handler(struct sys_event *event);
|
||||
extern u32 timer_get_ms(void);
|
||||
extern u16 dev_update_check(char *logo);
|
||||
|
||||
int switch_to_music_app(int action)
|
||||
{
|
||||
struct intent it;
|
||||
|
||||
if (action == ACTION_MUSIC_MAIN) {
|
||||
/* 卡不在线不切到music模式,
|
||||
* 防止TWS之间所处的模式不同导致A2DP播歌不同步
|
||||
*/
|
||||
#if TCFG_DEV_MANAGER_ENABLE
|
||||
if (!music_app_check()) {
|
||||
return -ENODEV;
|
||||
}
|
||||
#else
|
||||
if (!dev_online("sd0")) {
|
||||
return -ENODEV;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
init_intent(&it);
|
||||
it.name = "music";
|
||||
it.action = action;
|
||||
return start_app(&it);
|
||||
}
|
||||
|
||||
void switch_to_prev_app()
|
||||
{
|
||||
struct intent it;
|
||||
|
||||
init_intent(&it);
|
||||
it.action = ACTION_BACK;
|
||||
start_app(&it);
|
||||
}
|
||||
|
||||
void switch_to_earphone_app()
|
||||
{
|
||||
struct intent it;
|
||||
|
||||
init_intent(&it);
|
||||
it.action = ACTION_BACK;
|
||||
start_app(&it);
|
||||
}
|
||||
|
||||
void switch_to_pc_app()
|
||||
{
|
||||
struct intent it;
|
||||
|
||||
/* 退出bt和music模式 */
|
||||
if (bt_in_background()) {
|
||||
init_intent(&it);
|
||||
it.action = ACTION_BACK;
|
||||
start_app(&it);
|
||||
}
|
||||
init_intent(&it);
|
||||
it.action = ACTION_BACK;
|
||||
start_app(&it);
|
||||
|
||||
|
||||
/* 切到PC模式 */
|
||||
init_intent(&it);
|
||||
it.name = "pc";
|
||||
it.action = ACTION_PC_MAIN;
|
||||
start_app(&it);
|
||||
}
|
||||
|
||||
static void sd_event_handler(struct device_event *evt)
|
||||
{
|
||||
//add 设备的返回值, 0成功
|
||||
int err = 0;
|
||||
if (evt->event == DEVICE_EVENT_IN) {
|
||||
if (app_var.have_mass_storage == 0) {
|
||||
app_var.have_mass_storage = 1;
|
||||
syscfg_write(CFG_HAVE_MASS_STORAGE, &app_var.have_mass_storage, 1);
|
||||
}
|
||||
#if TCFG_DEC2TWS_ENABLE
|
||||
if (bt_in_background()) {
|
||||
switch_to_music_app(ACTION_MUSIC_MAIN);
|
||||
}
|
||||
#elif TWFG_APP_POWERON_IGNORE_DEV
|
||||
err = dev_manager_add((char *)evt->value);
|
||||
if ((err == 0) && (!get_charge_online_flag()) && (usb_otg_online(0) != SLAVE_MODE)) { //充电状态只add设备,不切模式
|
||||
///检查设备升级
|
||||
if (dev_update_check((char *)evt->value) == UPDATA_READY) {
|
||||
return;
|
||||
}
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
if ((timer_get_ms() - app_var.start_time) > TWFG_APP_POWERON_IGNORE_DEV) {
|
||||
app_task_switch_to(APP_MUSIC_TASK, NULL_VALUE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#else
|
||||
err = dev_manager_add((char *)evt->value);
|
||||
if ((err == 0) && (!get_charge_online_flag()) && (usb_otg_online(0) != SLAVE_MODE)) { //充电状态只add设备,不切模式
|
||||
///检查设备升级
|
||||
if (dev_update_check((char *)evt->value) == UPDATA_READY) {
|
||||
return;
|
||||
}
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
app_task_switch_to(APP_MUSIC_TASK, NULL_VALUE);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
} else if (evt->event == DEVICE_EVENT_OUT) {
|
||||
update_clear_result();
|
||||
#if (!TCFG_DEC2TWS_ENABLE)
|
||||
dev_manager_del((char *)evt->value);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static int default_earphone_key_event_handler(struct sys_event *event)
|
||||
{
|
||||
struct key_event *key = &event->u.key;
|
||||
u8 key_event = key_table[key->value][key->event];
|
||||
|
||||
switch (key_event) {
|
||||
case KEY_MODE_SWITCH:
|
||||
puts("key_mode_switch\n");
|
||||
app_task_switch_next();
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#if ((TCFG_APP_MUSIC_EN || TCFG_APP_PC_EN) && TCFG_DEC2TWS_ENABLE)
|
||||
void tws_loacl_media_channe_start(struct bt_event *evt)
|
||||
{
|
||||
int role = tws_api_get_role();
|
||||
int state = tws_api_get_tws_state();
|
||||
|
||||
if (role == TWS_ROLE_MASTER) {
|
||||
if (state & TWS_STA_PHONE_CONNECTED) {
|
||||
tws_conn_switch_role();
|
||||
}
|
||||
if (state & (TWS_STA_ESCO_OPEN | TWS_STA_SBC_OPEN)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (file_dec_get_source() == FILE_FROM_LOCAL) {
|
||||
if (role == TWS_ROLE_MASTER) {
|
||||
return;
|
||||
}
|
||||
app_music_exit();
|
||||
}
|
||||
|
||||
switch_to_music_app(ACTION_MUSIC_TWS_RX);
|
||||
tws_local_media_dec_open(evt->args[0], evt->args + 2);
|
||||
sys_auto_shut_down_disable();
|
||||
}
|
||||
|
||||
void tws_loacl_media_channe_stop(struct bt_event *evt)
|
||||
{
|
||||
tws_local_media_dec_close(evt->args[0]);
|
||||
|
||||
sys_auto_shut_down_enable();
|
||||
|
||||
if (tws_api_get_tws_state() & TWS_STA_SIBLING_DISCONNECTED) {
|
||||
struct application *app = get_current_app();
|
||||
if (app && app->action != ACTION_PC_MAIN) {
|
||||
bt_switch_to_foreground(ACTION_DO_NOTHING, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int default_tws_event_handler(struct bt_event *evt)
|
||||
{
|
||||
#if TCFG_DEC2TWS_ENABLE
|
||||
int role = evt->args[0];
|
||||
int phone_link_connection = evt->args[1];
|
||||
int state = evt->args[2];
|
||||
|
||||
switch (evt->event) {
|
||||
case TWS_EVENT_CONNECTED:
|
||||
tws_api_auto_role_switch_disable();
|
||||
if (state & (TWS_STA_ESCO_OPEN | TWS_STA_SBC_OPEN)) {
|
||||
if (bt_in_background()) {
|
||||
bt_switch_to_foreground(ACTION_DO_NOTHING, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (file_dec_get_source() == FILE_FROM_LOCAL) {
|
||||
send_local_media_dec_open_cmd();
|
||||
} else {
|
||||
if (role == TWS_ROLE_MASTER) {
|
||||
if (switch_to_music_app(ACTION_MUSIC_MAIN) == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (bt_in_background()) {
|
||||
bt_switch_to_foreground(ACTION_DO_NOTHING, 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TWS_EVENT_CONNECTION_TIMEOUT:
|
||||
if (file_dec_get_source() == -EINVAL) {
|
||||
switch_to_music_app(ACTION_MUSIC_MAIN);
|
||||
}
|
||||
break;
|
||||
case TWS_EVENT_MONITOR_START:
|
||||
if (role == TWS_ROLE_MASTER) {
|
||||
if (!app_var.have_mass_storage || file_dec_get_source() == FILE_FROM_TWS) {
|
||||
tws_conn_switch_role();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TWS_EVENT_CONNECTION_DETACH:
|
||||
break;
|
||||
case TWS_EVENT_DATA_TRANS_OPEN:
|
||||
printf("TWS_EVENT_DATA_TRANS_OPEN: %d, %d\n", evt->args[0], evt->args[1]);
|
||||
break;
|
||||
case TWS_EVENT_DATA_TRANS_START:
|
||||
printf("TWS_EVENT_DATA_TRANS_START: %d, %d\n", evt->args[0], evt->args[1]);
|
||||
if (evt->args[1] == TWS_DTC_LOCAL_MEDIA) {
|
||||
tws_loacl_media_channe_start(evt);
|
||||
}
|
||||
break;
|
||||
case TWS_EVENT_DATA_TRANS_STOP:
|
||||
printf("TWS_EVENT_DATA_TRANS_STOP: %d, %d\n", evt->args[0], evt->args[1]);
|
||||
if (evt->args[1] == TWS_DTC_LOCAL_MEDIA) {
|
||||
tws_loacl_media_channe_stop(evt);
|
||||
}
|
||||
break;
|
||||
case TWS_EVENT_DATA_TRANS_CLOSE:
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
#endif/* #if ((TCFG_APP_MUSIC_EN || TCFG_APP_PC_EN) && TCFG_DEC2TWS_ENABLE) */
|
||||
|
||||
void default_event_handler(struct sys_event *event)
|
||||
{
|
||||
printf("@@@default_event_handler event->type = %d\n", event->type);
|
||||
if (bt_in_background()) {
|
||||
bt_in_background_event_handler(event);
|
||||
}
|
||||
switch (event->type) {
|
||||
case SYS_KEY_EVENT:
|
||||
if (!bt_in_background()) {
|
||||
default_earphone_key_event_handler(event);
|
||||
}
|
||||
break;
|
||||
case SYS_BT_EVENT:
|
||||
if ((u32)event->arg == SYS_BT_EVENT_TYPE_CON_STATUS) {
|
||||
struct bt_event *bt = &event->u.bt;
|
||||
if (bt->event == BT_STATUS_PHONE_HANGUP || (bt->event == BT_STATUS_VOICE_RECOGNITION && !bt->value)) {
|
||||
r_printf("BT_STATUS_SCO_STATUS_CHANGE");
|
||||
/* if (bt->value == 0xff) */
|
||||
{
|
||||
app_core_back_to_prev_app();
|
||||
if (!app_core_back_to_prev_app_over_check()) {
|
||||
app_task_switch_to(APP_BT_TASK, ACTION_DO_NOTHING);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#if TCFG_USER_TWS_ENABLE && TCFG_DEC2TWS_ENABLE
|
||||
else if (((u32)event->arg == SYS_BT_EVENT_FROM_TWS)) {
|
||||
default_tws_event_handler(&event->u.bt);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case SYS_DEVICE_EVENT:
|
||||
/* 系统设备事件处理 */
|
||||
#if (TCFG_ONLINE_ENABLE || TCFG_CFG_TOOL_ENABLE)
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_CFG_TOOL) {
|
||||
extern int app_cfg_tool_event_handler(struct cfg_tool_event * cfg_tool_dev);
|
||||
app_cfg_tool_event_handler(&event->u.cfg_tool);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
if ((u32)event->arg == DRIVER_EVENT_FROM_SD0) {
|
||||
sd_event_handler(&event->u.dev);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_PC_ENABLE
|
||||
int ret = pc_device_event_handler(event);
|
||||
if (ret) {
|
||||
if (event->u.dev.event == DEVICE_EVENT_IN) {
|
||||
app_task_switch_to(APP_PC_TASK, NULL_VALUE);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void default_event_handler(struct sys_event *event)
|
||||
{
|
||||
/*puts("default_event_handler\n");*/
|
||||
struct intent it;
|
||||
switch (event->type) {
|
||||
case SYS_DEVICE_EVENT:
|
||||
/* 系统设备事件处理 */
|
||||
#if TCFG_PC_ENABLE
|
||||
extern int pc_device_event_handler(struct sys_event * event);
|
||||
int ret = pc_device_event_handler(event);
|
||||
if (ret) {
|
||||
if (event->u.dev.event == DEVICE_EVENT_IN) {
|
||||
/* 退出bt和music模式 */
|
||||
if (bt_in_background()) {
|
||||
init_intent(&it);
|
||||
it.action = ACTION_BACK;
|
||||
start_app(&it);
|
||||
}
|
||||
init_intent(&it);
|
||||
it.action = ACTION_BACK;
|
||||
start_app(&it);
|
||||
|
||||
/* 切到PC模式 */
|
||||
init_intent(&it);
|
||||
it.name = "pc";
|
||||
it.action = ACTION_PC_MAIN;
|
||||
start_app(&it);
|
||||
} else {
|
||||
cpu_reset();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,479 @@
|
||||
#include "board_config.h"
|
||||
#include "system/includes.h"
|
||||
#include "asm/power_interface.h"
|
||||
#include "app_config.h"
|
||||
#include "dual_bank_updata_api.h"
|
||||
#include "update.h"
|
||||
#include "update_loader_download.h"
|
||||
#include "app_main.h"
|
||||
#include "event.h"
|
||||
#undef _DEBUG_H_
|
||||
#define LOG_TAG_CONST DUAL_OTA //修改成文件名
|
||||
#define LOG_TAG "[DUAL_OTA]"
|
||||
#include "debug.h"
|
||||
#define LOG_v(t) log_tag_const_v_ ## t
|
||||
#define LOG_i(t) log_tag_const_i_ ## t
|
||||
#define LOG_d(t) log_tag_const_d_ ## t
|
||||
#define LOG_w(t) log_tag_const_w_ ## t
|
||||
#define LOG_e(t) log_tag_const_e_ ## t
|
||||
#define LOG_c(t) log_tag_const_c_ ## t
|
||||
#define LOG_tag(tag, n) n(tag)
|
||||
const char LOG_tag(LOG_TAG_CONST,LOG_v) AT(.LOG_TAG_CONST) = 0;
|
||||
const char LOG_tag(LOG_TAG_CONST,LOG_i) AT(.LOG_TAG_CONST) = 1;
|
||||
const char LOG_tag(LOG_TAG_CONST,LOG_d) AT(.LOG_TAG_CONST) = 1; //log_debug
|
||||
const char LOG_tag(LOG_TAG_CONST,LOG_w) AT(.LOG_TAG_CONST) = 1;
|
||||
const char LOG_tag(LOG_TAG_CONST,LOG_e) AT(.LOG_TAG_CONST) = 1;
|
||||
const char LOG_tag(LOG_TAG_CONST,LOG_c) AT(.LOG_TAG_CONST) = 1;
|
||||
|
||||
/*******************************************************************************
|
||||
* #define CONFIG_DOUBLE_BANK_ENABLE 1
|
||||
* #define CONFIG_FLASH_SIZE FLASH_SIZE_512K //配置FLASH大小
|
||||
* #define CONFIG_DB_UPDATE_DATA_GENERATE_EN 1
|
||||
* #define CONFIG_ONLY_GRENERATE_ALIGN_4K_CODE 1
|
||||
*
|
||||
* 检查isd_config.ini文件
|
||||
* BR22_TWS_DB = YES; // dual bank flash framework enable
|
||||
* FLASH_SIZE = 0x100000; // flash_size cfg
|
||||
* BR22_TWS_VERSION = 0; // default fw version
|
||||
* DB_UPDATE_DATA = YES; // generate db_update_data.bin
|
||||
* FORCE_4K_ALIGN = YES; // force aligin with 4k bytes
|
||||
* SPECIAL_OPT = 0; // only generate one flash.bin
|
||||
*
|
||||
* const int support_dual_bank_update_en = 1;
|
||||
* const int support_vm_data_keep = 1;
|
||||
*******************************************************************************/
|
||||
|
||||
#define MAX_PACKET_LEN 4096//(512 * 8)//(512 * 4) //最大包长,至少512,最好4K,需要自行组包
|
||||
|
||||
//0:CRC-16/XMODEM Standard 杰理默认的
|
||||
//1:客户自行选择crc16的算法类型,重定义 dual_ota_crc_calc()
|
||||
#define CRC_TYPE 1
|
||||
|
||||
__attribute__((weak))
|
||||
u16 dual_ota_crc_calc(u8 *buf, u32 len, u16 init)
|
||||
{
|
||||
log_debug("%s weak func", __func__);
|
||||
//CRC16-XMODEM
|
||||
u16 poly = 0x1021;
|
||||
u16 crc = init;
|
||||
while(len--){
|
||||
u16 data = *buf++;
|
||||
crc ^= data << 8; //逆序
|
||||
for (u8 i = 0; i < 8; ++i){
|
||||
crc = crc & 0x8000 ? (crc << 1) ^ poly : crc << 1; //逆序
|
||||
}
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
|
||||
enum{
|
||||
DUAL_OTA_NOTIFY_SUCCESS = 0,
|
||||
DUAL_OTA_NOTIFY_FAIL,
|
||||
DUAL_OTA_NOTIFY_CONTINUE,
|
||||
};
|
||||
typedef enum{
|
||||
DUAL_OTA_STEP_START = 0,
|
||||
DUAL_OTA_STEP_WRITE,
|
||||
DUAL_OTA_STEP_VERIFY,
|
||||
}DUAL_OTA_STEP;
|
||||
typedef struct {
|
||||
u32 file_size; // db_update_data.bin
|
||||
u32 file_crc; // CRC_TYPE 的对应值
|
||||
u32 max_pkt_len; // MAX_PACKET_LEN
|
||||
}dual_ota_info;
|
||||
static dual_ota_info ota_info;
|
||||
static u8 *bin_buf=NULL;//[MAX_PACKET_LEN];
|
||||
static DUAL_OTA_STEP dual_ota_step = DUAL_OTA_STEP_START;
|
||||
static int dual_ota_written_size = 0;
|
||||
static u8 dual_ota_idle = 1; // 置 1 可进睡眠, 置 0 不可进睡眠
|
||||
|
||||
u8 usr_get_ota_status()
|
||||
{
|
||||
return dual_ota_idle;
|
||||
}
|
||||
|
||||
static u8 dual_ota_idle_query(void)
|
||||
{
|
||||
if(dual_ota_idle){
|
||||
return 1;
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
REGISTER_LP_TARGET(dual_ota_lp_target) = {
|
||||
.name = "dual_ota_lp",
|
||||
.is_idle = dual_ota_idle_query,
|
||||
};
|
||||
static u32 read_32(u8 *p)
|
||||
{
|
||||
return ((u32)(p[3]) << 24) | ((u32)(p[2]) << 16) | ((u32)(p[1]) << 8) | (p[0]);
|
||||
}
|
||||
|
||||
extern void ram_protect_close(void);
|
||||
extern void hwi_all_close(void);
|
||||
static void dual_ota_fail_exit(void)
|
||||
{
|
||||
log_info("%s[step:%d]", __func__, dual_ota_step);
|
||||
if(bin_buf){
|
||||
free(bin_buf);
|
||||
bin_buf = NULL;
|
||||
}
|
||||
memset(&ota_info, 0x00, sizeof(ota_info));
|
||||
dual_ota_step = DUAL_OTA_STEP_START;
|
||||
dual_ota_written_size = 0;
|
||||
dual_ota_idle = 0;
|
||||
}
|
||||
|
||||
static void dual_ota_succ_exit(void)
|
||||
{
|
||||
log_info("%s[step:%d]", __func__, dual_ota_step);
|
||||
if(bin_buf){
|
||||
free(bin_buf);
|
||||
bin_buf = NULL;
|
||||
}
|
||||
memset(&ota_info, 0x00, sizeof(ota_info));
|
||||
dual_ota_step = DUAL_OTA_STEP_START;
|
||||
dual_ota_written_size = 0;
|
||||
dual_ota_idle = 0;
|
||||
}
|
||||
|
||||
enum {
|
||||
OTA_START_UPDATE = 0,
|
||||
OTA_START_UPDATE_READY,
|
||||
OTA_START_VERIFY,
|
||||
OTA_UPDATE_OVER,
|
||||
OTA_UPDATE_ERR,
|
||||
OTA_UPDATE_SUCC,
|
||||
};
|
||||
#include "update_tws_new.h"
|
||||
void usr_ota_event_post(u32 type, u8 event);
|
||||
static void dual_ota_cpu_reset(void)
|
||||
{
|
||||
log_info("%s", __func__);
|
||||
dual_ota_succ_exit();
|
||||
usr_var.usr_ota_succ_flag=2;
|
||||
//os_task_del("dw_update");
|
||||
//update_result_set(UPDATA_SUCC);
|
||||
//dual_bank_passive_update_exit(NULL);
|
||||
//ram_protect_close();
|
||||
//hwi_all_close();
|
||||
//cpu_reset();
|
||||
//sys_enter_soft_poweroff(NULL);
|
||||
//wdt_init(WDT_256MS);
|
||||
//while(1);
|
||||
usr_ota_event_post(SYS_BT_OTA_EVENT_TYPE_STATUS, OTA_UPDATE_OVER);
|
||||
}
|
||||
static void dual_ota_fail_cpu_reset(void)
|
||||
{
|
||||
log_info("%s", __func__);
|
||||
dual_ota_fail_exit();
|
||||
usr_ota_event_post(SYS_BT_OTA_EVENT_TYPE_STATUS, OTA_UPDATE_ERR);
|
||||
}
|
||||
|
||||
void usr_ota_exit()
|
||||
{
|
||||
sys_timeout_add(NULL, dual_ota_fail_cpu_reset, 300);
|
||||
}
|
||||
extern void ble_multi_trans_disconnect(void);
|
||||
|
||||
static void dual_ota_success_reset(void)
|
||||
{
|
||||
log_info("%s", __func__);
|
||||
usr_var.usr_ota_succ_flag=1;
|
||||
ble_multi_trans_disconnect();
|
||||
sys_timeout_add(NULL, dual_ota_cpu_reset, 300);
|
||||
/* 通知上位机升级完整,准备复位 */
|
||||
//dual_ota_notify_msg_to_app(DUAL_OTA_NOTIFY_SUCCESS);
|
||||
}
|
||||
|
||||
static void dual_ota_fail_reset(void)
|
||||
{
|
||||
log_info("%s", __func__);
|
||||
usr_var.usr_ota_succ_flag=3;
|
||||
ble_multi_trans_disconnect();
|
||||
dual_ota_fail_exit();
|
||||
//sys_timeout_add(NULL, dual_ota_fail_cpu_reset, 300);
|
||||
wdt_init(WDT_512MS);
|
||||
while(1);
|
||||
/* 通知上位机升级完整,准备复位 */
|
||||
//dual_ota_notify_msg_to_app(DUAL_OTA_NOTIFY_SUCCESS);
|
||||
}
|
||||
|
||||
static int dual_ota_boot_info_cb(int err)
|
||||
{
|
||||
log_info("%s[err:%d]", __func__, err);
|
||||
if (err == 0) {
|
||||
dual_ota_success_reset();
|
||||
} else {
|
||||
dual_ota_fail_reset();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
extern int dual_bank_update_verify_without_crc(void); //0:success 1:fail
|
||||
static int dual_ota_verify_result(int res) //1:success 0:fail
|
||||
{
|
||||
log_info("%s[res:%d %s]", __func__, res, res ? "success" : "fail");
|
||||
if(res){
|
||||
/* 校验成功 */
|
||||
dual_bank_update_burn_boot_info(dual_ota_boot_info_cb);
|
||||
} else{
|
||||
/* 校验失败 */
|
||||
usr_var.usr_ota_succ_flag=1;
|
||||
flash_update_clr_boot_info(CLEAR_APP_UPDATE_BANK);
|
||||
dual_ota_fail_reset();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static void dual_ota_crc_init_cb(void)
|
||||
{
|
||||
log_info("%s", __func__);
|
||||
}
|
||||
static u32 dual_ota_crc_calc_cb(u32 init_crc, u8 *data, u32 len)
|
||||
{
|
||||
u32 crc16 = 0;
|
||||
crc16 = dual_ota_crc_calc(data, len, init_crc);
|
||||
log_debug("%s[init_crc:0x%x len:%d crc:0x%x]", __func__, init_crc, len, crc16);
|
||||
return crc16;
|
||||
}
|
||||
static int dual_ota_update_verify(void)
|
||||
{
|
||||
log_info("%s[file_crc:0x%x]", __func__, ota_info.file_crc);
|
||||
clk_set("sys", 120 * 1000000L);
|
||||
os_time_dly(1);
|
||||
|
||||
if(ota_info.file_crc){
|
||||
if(CRC_TYPE){
|
||||
dual_bank_update_verify(dual_ota_crc_init_cb, dual_ota_crc_calc_cb,
|
||||
dual_ota_verify_result);
|
||||
}else{
|
||||
dual_bank_update_verify(NULL, NULL, dual_ota_verify_result);
|
||||
}
|
||||
}else{
|
||||
int ret = dual_bank_update_verify_without_crc();
|
||||
dual_ota_verify_result(ret ? 0 : 1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int dual_ota_write_cb(void *priv)
|
||||
{
|
||||
int ret = (int)priv;
|
||||
if (ret) {
|
||||
log_info("%s -> fail", __func__);
|
||||
dual_ota_fail_reset();
|
||||
return -1;
|
||||
}else{
|
||||
//log_info("%s -> success", __func__);
|
||||
/* 通知上位机发送下一组数据 */
|
||||
dual_ota_notify_msg_to_app(DUAL_OTA_NOTIFY_CONTINUE);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
static int dual_ota_update_init(u32 file_size, u32 file_crc, u32 pkt_len)
|
||||
{
|
||||
log_info("%s[size:%d crc:0x%x ptk_len:%d]",__func__,file_size, file_crc, pkt_len);
|
||||
if(bin_buf) return -1;
|
||||
bin_buf = malloc(MAX_PACKET_LEN);
|
||||
if(bin_buf == NULL) return -2;
|
||||
if((u32)bin_buf % 4) {//4byte对齐
|
||||
log_info("buf err !!!!!!!");
|
||||
ASSERT(0, "%s: bin_buf addr unaligned !!!!", __func__);
|
||||
}
|
||||
memset(bin_buf, 0x00, MAX_PACKET_LEN);
|
||||
int ret = 0;
|
||||
ret = dual_bank_passive_update_init(file_crc, file_size, pkt_len, NULL);
|
||||
if(ret == 0){
|
||||
ret = dual_bank_update_allow_check(file_size);
|
||||
if(ret == 0){
|
||||
dual_ota_idle = 0;
|
||||
dual_ota_written_size = 0;
|
||||
ota_info.file_size = file_size;
|
||||
ota_info.file_crc = file_crc;
|
||||
ota_info.max_pkt_len = pkt_len;
|
||||
/* 可以升级,需要通知上位机准备发包 */
|
||||
dual_ota_notify_msg_to_app(DUAL_OTA_NOTIFY_CONTINUE);
|
||||
}
|
||||
}
|
||||
log_info("%s[ret:%d]", __func__, ret);
|
||||
if(ret){
|
||||
dual_ota_fail_reset();
|
||||
//dual_ota_fail_exit(); /* 无法升级 */
|
||||
return -3;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
static int dual_ota_update_deal(u8 step, u8 *buf, u32 len) //升级流程处理
|
||||
{
|
||||
int ret = 0;
|
||||
int w_ret = 0xffff;
|
||||
//log_info("%s[step:%d]", __func__, step);
|
||||
switch(step){
|
||||
case DUAL_OTA_STEP_START:
|
||||
u32 *data = (u32 *)buf; //buf 地址需要aligned(4)
|
||||
u32 file_size = data[0];
|
||||
u32 file_crc = data[1];
|
||||
|
||||
|
||||
/* update_mode_info_t info = {
|
||||
.type = BLE_APP_UPDATA,
|
||||
.state_cbk = NULL,
|
||||
.p_op_api = NULL,
|
||||
.task_en = 1,
|
||||
};*/
|
||||
|
||||
//app_active_update_task_init(&info);
|
||||
//os_time_dly(2);
|
||||
|
||||
ret = dual_ota_update_init(file_size, file_crc, MAX_PACKET_LEN);
|
||||
break;
|
||||
case DUAL_OTA_STEP_WRITE:
|
||||
//OS_ENTER_CRITICAL();
|
||||
w_ret=dual_bank_update_write(buf, len, dual_ota_write_cb);
|
||||
dual_ota_written_size += len;
|
||||
//printf("w_ret = %d written_size=%d\n",w_ret,dual_ota_written_size);
|
||||
//OS_EXIT_CRITICAL();
|
||||
break;
|
||||
case DUAL_OTA_STEP_VERIFY:
|
||||
dual_ota_update_verify();
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/********************************************************************************
|
||||
* 跟上位机通信接口
|
||||
* 自行按照协议,自行修改,这个写法只是个demo
|
||||
* 数据来源:串口、USB、BLE等
|
||||
* 数据包很小,需要缓存成一包大包:MAX_PACKET_LEN,才能调用dual_bank_update_write
|
||||
* MAX_PACKET_LEN 定义成 小包的整数倍 : MAX_PACKET_LEN == len * n
|
||||
* 必须在低优先级任务执行,不能在中断函数、蓝牙回调函数执行
|
||||
* https://gitee.com/Jieli-Tech/fw-AC63_BT_SDK/issues/I79ORW
|
||||
*********************************************************************************/
|
||||
|
||||
int dual_ota_app_data_deal(u32 msg, u8 *buf, u32 len)
|
||||
{
|
||||
if((buf == NULL) || (len == 0)){
|
||||
log_info("%s para is error", __func__);
|
||||
return -1;
|
||||
}
|
||||
//log_info("%s[msg:%d len:%d]", __func__, msg, len);
|
||||
/* log_debug_hexdump(buf, len); */
|
||||
int ret = 0;
|
||||
static u32 size = 0;
|
||||
if(dual_ota_step == DUAL_OTA_STEP_WRITE){
|
||||
//log_info("##### size = %d len = %d ota_info.max_pkt_len = %d\n",size,len,ota_info.max_pkt_len);
|
||||
if((size < ota_info.max_pkt_len) && (size + len <= ota_info.max_pkt_len)){
|
||||
memcpy(bin_buf + size, buf, len);
|
||||
size += len;
|
||||
}else{
|
||||
log_info("%s size + len over MAX_PACKET_LEN", __func__);
|
||||
}
|
||||
if((size == ota_info.max_pkt_len)
|
||||
||(size + dual_ota_written_size >= ota_info.file_size))
|
||||
{
|
||||
if(size + dual_ota_written_size >= ota_info.file_size){
|
||||
dual_ota_step = DUAL_OTA_STEP_VERIFY;
|
||||
}
|
||||
dual_ota_update_deal(DUAL_OTA_STEP_WRITE, bin_buf, size);
|
||||
size = 0;
|
||||
}
|
||||
}else{
|
||||
log_info("444444444444444");
|
||||
if((buf[0] == 0x55) && (buf[1] == 0xAA)){
|
||||
u32 data[2];
|
||||
data[0] = read_32(buf + 2); //file_size
|
||||
data[1] = read_32(buf + 6); //file_crc
|
||||
flash_update_clr_boot_info(CLEAR_APP_UPDATE_BANK);
|
||||
ret = dual_ota_update_deal(DUAL_OTA_STEP_START, (u8 *)data, sizeof(data));
|
||||
if(ret == 0){
|
||||
log_info("555555555555");
|
||||
dual_ota_step = DUAL_OTA_STEP_WRITE;
|
||||
}
|
||||
}
|
||||
if((buf[0] == 0xAA) && (buf[1] == 0x55)){
|
||||
dual_ota_update_deal(DUAL_OTA_STEP_VERIFY, NULL, 0);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
extern int uart_tr_send_data(u8 *data, u32 len);
|
||||
/* int dual_ota_notify_msg_to_app(u32 msg, u8 *buf, u32 len) */
|
||||
int dual_ota_notify_msg_to_app(u32 msg)
|
||||
{
|
||||
int ret = 0;
|
||||
char * str = NULL;
|
||||
//log_info("%s[msg:%d]", __func__, msg);
|
||||
switch(msg)
|
||||
{
|
||||
case DUAL_OTA_NOTIFY_SUCCESS: //成功
|
||||
str = "success\r\n";
|
||||
log_info("#########3 DUAL_OTA_NOTIFY_SUCCESS");
|
||||
break;
|
||||
case DUAL_OTA_NOTIFY_FAIL: //失败
|
||||
str = "fail\r\n";
|
||||
log_info("#########3 DUAL_OTA_NOTIFY_FAIL");
|
||||
break;
|
||||
case DUAL_OTA_NOTIFY_CONTINUE: //上一组数据处理成功,继续下一组
|
||||
str = "continue\r\n";
|
||||
// log_info("#########3 DUAL_OTA_NOTIFY_CONTINUE");
|
||||
break;
|
||||
}
|
||||
// uart_tr_send_data((u8 *)str, strlen(str));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int bt_ota_event_handler(struct bt_event *bt)
|
||||
{
|
||||
int ret = 0;
|
||||
switch (bt->event) {
|
||||
case OTA_START_UPDATE:
|
||||
log_info("OTA_START_UPDATE\n");
|
||||
|
||||
break;
|
||||
|
||||
case OTA_UPDATE_OVER:
|
||||
log_info("11OTA_UPDATE_OVER@##################3\n");
|
||||
// update_result_set(UPDATA_SUCC);
|
||||
// //os_time_dly(5);
|
||||
dual_bank_passive_update_exit(NULL);
|
||||
cpu_reset();
|
||||
break;
|
||||
case OTA_UPDATE_ERR:
|
||||
log_info("111OTA_UPDATE_ERR@##################3\n");
|
||||
dual_bank_passive_update_exit(NULL);
|
||||
cpu_reset();
|
||||
break;
|
||||
/*case OTA_UPDATE_SUCC:
|
||||
printf("OTA_UPDATE_SUCC\n");
|
||||
update_result_set(UPDATA_SUCC);
|
||||
dual_bank_passive_update_exit(NULL);
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
break;*/
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void usr_ota_event_post(u32 type, u8 event)
|
||||
{
|
||||
struct sys_event e;
|
||||
|
||||
log_info("usr_ota_event_post = %d\n",event);
|
||||
|
||||
e.type = SYS_BT_EVENT;
|
||||
e.arg = (void *)type;
|
||||
e.u.bt.event = event;
|
||||
sys_event_notify(&e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,672 @@
|
||||
//===========================================================//
|
||||
// LP TOUCH EAR EVENT HANDLE //
|
||||
//===========================================================//
|
||||
//1.入耳事件产生 --> sync state --> state 回调中处理播放暂停, 通话转换
|
||||
#include "includes.h"
|
||||
#include "key_event_deal.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
#include "bt_tws.h"
|
||||
#endif /* #if TCFG_USER_TWS_ENABLE */
|
||||
#include "tone_player.h"
|
||||
#include "app_config.h"
|
||||
#include "classic/tws_api.h"
|
||||
|
||||
#define LOG_TAG_CONST EARTCH_EVENT_DEAL
|
||||
#define LOG_TAG "[EARTCH_EVENT_DEAL]"
|
||||
/* #define LOG_ERROR_ENABLE */
|
||||
/* #define LOG_DEBUG_ENABLE */
|
||||
#define LOG_INFO_ENABLE
|
||||
#define LOG_DUMP_ENABLE
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
/* #define SUPPORT_MS_EXTENSIONS */
|
||||
/* #ifdef SUPPORT_MS_EXTENSIONS */
|
||||
/* #pragma bss_seg( ".eartch_event_deal_bss") */
|
||||
/* #pragma data_seg(".eartch_event_deal_data") */
|
||||
/* #pragma const_seg(".eartch_event_deal_const") */
|
||||
/* #pragma code_seg(".eartch_event_deal_code") */
|
||||
/* #endif */
|
||||
|
||||
#if TCFG_EARTCH_EVENT_HANDLE_ENABLE
|
||||
//========================================================================================//
|
||||
//入耳检测UI控制流程:
|
||||
//1.控制音乐播放条件:
|
||||
// 1)两只取下, 音乐暂停, 15s内佩戴耳机, 控制音乐为播放状态;
|
||||
// 2)一只取下, 音乐暂停, 没有时间限制, 控制音乐为播放状态;
|
||||
//2.控制音乐暂停条件: 当音乐播放时, 取下任意一个耳机, 音乐暂停;
|
||||
//3.控制通话语音转移到远端: 在通话状态下, 当两个耳机都取下, 语音由耳机端转移到远端;
|
||||
//4.控制通话语音转移到耳机端: 在通话状态下, 佩戴任意一个耳机, 语音由手机端端转移到耳机端;
|
||||
//========================================================================================//
|
||||
|
||||
bool __attribute__((weak)) get_tws_sibling_connect_state(void)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#define TWS_FUNC_ID_EARTCH_SYNC TWS_FUNC_ID('E', 'A', 'T', 'H')
|
||||
|
||||
|
||||
#define TCFG_EARTCH_MUSIC_CTL_TIMEOUT_ENABLE 0 //对耳不在耳, 15s超时后入耳控制音乐播放无效
|
||||
#define TCFG_EARTCH_MUSIC_CTL_A2DP_CONNECT 0 //对耳不在耳, 断开a2dp链路, 音乐转移到手机扬声器
|
||||
#define TCFG_EARTCH_CALL_CTL_SCO_CONNECT 1 //对耳不在耳, 断开SCO链路, 通话转移到手机扬声器
|
||||
#define TCFG_EARTCH_AUTO_CHANGE_MASTER 1
|
||||
#define TCFG_EARTCH_SWITCH_CFG_ENABLE 1 //入耳消息处理使能开关, 配置项保存到vm, 支持动态开关
|
||||
|
||||
struct eartch_control {
|
||||
u8 eartch_event_deal_en;
|
||||
u8 local_state: 1;
|
||||
u8 remote_state: 1;
|
||||
u8 last_state: 1;
|
||||
u8 event_source: 1;
|
||||
u8 a2dp_connect_state: 1;
|
||||
u8 a2dp_send_flag: 1;
|
||||
u8 music_ctrl_en: 1;
|
||||
u8 state_check_cnt;
|
||||
u8 a2dp_play_state_cnt;
|
||||
u8 a2dp_stop_state_cnt;
|
||||
u16 state_check_timer;
|
||||
u16 music_ctrl_en_timer;
|
||||
u16 a2dp_monitor_timer;
|
||||
};
|
||||
|
||||
static struct eartch_control _eartch = {
|
||||
.local_state = EARTCH_STATE_OUT,
|
||||
.remote_state = EARTCH_STATE_OUT,
|
||||
.last_state = EARTCH_STATE_OUT,
|
||||
};
|
||||
|
||||
#define __this (&_eartch)
|
||||
|
||||
//============= 关于配置项保存信息 ==========//
|
||||
#define EARTCH_SWITCH_CFG_LEN 1 //配置项长度
|
||||
|
||||
enum EARTCH_TWS_SYNC_CMD {
|
||||
EARTCH_TWS_STATE_IN = 0x00,
|
||||
EARTCH_TWS_STATE_OUT = 0x01,
|
||||
EARTCH_TWS_STATE_TRIM_OK = 0x02,
|
||||
EARTCH_TWS_STATE_TRIM_ERR = 0x03,
|
||||
EARTCH_TWS_CFG_SAVE_EVENT_DEAL_ENABLE = 0x10,
|
||||
EARTCH_TWS_CFG_SAVE_EVENT_DEAL_DISABLE = 0x20,
|
||||
};
|
||||
|
||||
u8 earin_status = 0;
|
||||
u8 last_status = 0;
|
||||
u16 earin_lock_time = 0;
|
||||
|
||||
static void eartch_post_event(u8 event)
|
||||
{
|
||||
struct sys_event e;
|
||||
user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL);
|
||||
e.type = SYS_DEVICE_EVENT;
|
||||
e.arg = (void *)DEVICE_EVENT_FROM_EARTCH;
|
||||
e.u.ear.value = event;
|
||||
log_info("notify event: %d", event);
|
||||
sys_event_notify(&e);
|
||||
}
|
||||
|
||||
static void eartch_send_bt_ctrl_cmd(u8 cmd)
|
||||
{
|
||||
static u8 last_cmd = 0;
|
||||
static u32 last_jiffies = 0;
|
||||
u32 cur_jiffies = jiffies;
|
||||
if (last_cmd == cmd) {
|
||||
if (jiffies_to_msecs(cur_jiffies - last_jiffies) < 1000) {
|
||||
log_debug("same cmd: %d", cmd);
|
||||
return;
|
||||
}
|
||||
}
|
||||
log_info("send cmd: %d", cmd);
|
||||
last_cmd = cmd;
|
||||
last_jiffies = cur_jiffies;
|
||||
user_send_cmd_prepare(cmd, 0, NULL);
|
||||
}
|
||||
|
||||
static void eartch_music_state_check_timer_del(void)
|
||||
{
|
||||
log_debug("timer del");
|
||||
if (__this->state_check_timer) {
|
||||
usr_timer_del(__this->state_check_timer);
|
||||
}
|
||||
__this->state_check_timer = 0;
|
||||
__this->state_check_cnt = 0;
|
||||
}
|
||||
|
||||
static void eartch_music_state_check(void *priv)
|
||||
{
|
||||
struct eartch_control *eartch = (struct eartch_control *)priv;
|
||||
|
||||
if (get_total_connect_dev() == 0) {
|
||||
log_info("no connect dev");
|
||||
eartch_music_state_check_timer_del();
|
||||
return;
|
||||
}
|
||||
|
||||
u8 a2dp_state;
|
||||
|
||||
log_debug("music_check_state cnt: %d, a2dp_connect_state = %d", __this->state_check_cnt, __this->a2dp_connect_state);
|
||||
if (__this->a2dp_connect_state) {
|
||||
a2dp_state = a2dp_get_status();
|
||||
log_debug("a2dp_state = %d", a2dp_state);
|
||||
if (__this->last_state == EARTCH_STATE_IN) {
|
||||
if (__this->music_ctrl_en) {
|
||||
if (a2dp_state != BT_MUSIC_STATUS_STARTING) {
|
||||
log_info("SEND PLAY");
|
||||
eartch_send_bt_ctrl_cmd(USER_CTRL_AVCTP_OPID_PLAY);
|
||||
__this->a2dp_send_flag = 0;
|
||||
eartch_music_state_check_timer_del();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (a2dp_state == BT_MUSIC_STATUS_STARTING) {
|
||||
log_info("SEND PAUSE");
|
||||
eartch_send_bt_ctrl_cmd(USER_CTRL_AVCTP_OPID_PAUSE);
|
||||
__this->a2dp_send_flag = 0;
|
||||
eartch_music_state_check_timer_del();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__this->state_check_cnt++;
|
||||
if (__this->state_check_cnt > 15) {
|
||||
eartch_music_state_check_timer_del();
|
||||
}
|
||||
}
|
||||
|
||||
static void eartch_music_state_check_timer_add(void)
|
||||
{
|
||||
if (__this->state_check_timer != 0) {
|
||||
eartch_music_state_check_timer_del();
|
||||
}
|
||||
|
||||
log_debug("timer add");
|
||||
|
||||
// __this->state_check_timer = usr_timer_add((void *)__this, eartch_music_state_check, 200, 1);
|
||||
}
|
||||
|
||||
static void eartch_a2dp_status_callback_handle(u8 conn_flag)
|
||||
{
|
||||
log_debug("update a2dp conflag: %d", conn_flag);
|
||||
if (conn_flag) {
|
||||
__this->a2dp_connect_state = 1;
|
||||
log_debug("a2dp_send_flag: %d, event_deal_en: %d", __this->a2dp_send_flag, __this->eartch_event_deal_en);
|
||||
if (__this->eartch_event_deal_en) {
|
||||
if (__this->a2dp_send_flag) {
|
||||
if (__this->music_ctrl_en) {
|
||||
eartch_music_state_check_timer_add();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
__this->a2dp_connect_state = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void eartch_sync_tws_state(u8 state)
|
||||
{
|
||||
if (get_tws_sibling_connect_state() == TRUE) {
|
||||
tws_api_send_data_to_sibling(&state, 1, TWS_FUNC_ID_EARTCH_SYNC);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void eartch_sync_tws_state_deal(void *_data, u16 len, bool rx)
|
||||
{
|
||||
u8 *data = (u8 *)_data;
|
||||
u8 state = data[0];
|
||||
if (rx) {
|
||||
if (state <= EARTCH_TWS_STATE_OUT) {
|
||||
__this->remote_state = state & BIT(0);
|
||||
__this->event_source = 0;
|
||||
log_debug("sync remote_state: %d", __this->remote_state);
|
||||
}
|
||||
}
|
||||
//TODO: post event
|
||||
log_debug("state: %d, local_state: %d, remote_state = %d", state, __this->local_state, __this->remote_state);
|
||||
eartch_post_event(state);
|
||||
}
|
||||
|
||||
static void eartch_music_ctrl_timeout_handle(void *priv)
|
||||
{
|
||||
log_info("Disnable music ctrl");
|
||||
__this->music_ctrl_en = 0;
|
||||
__this->music_ctrl_en_timer = 0;
|
||||
}
|
||||
|
||||
|
||||
static void eartch_music_ctrl_timeout_del(void)
|
||||
{
|
||||
if (__this->music_ctrl_en_timer) {
|
||||
usr_timer_del(__this->music_ctrl_en_timer);
|
||||
__this->music_ctrl_en_timer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void eartch_music_ctrl_timeout_add(void)
|
||||
{
|
||||
if (__this->music_ctrl_en_timer) {
|
||||
eartch_music_ctrl_timeout_del();
|
||||
}
|
||||
__this->music_ctrl_en_timer = usr_timeout_add((void *)__this, eartch_music_ctrl_timeout_handle, 15000, 1);
|
||||
}
|
||||
|
||||
#define A2DP_PLAY_STATE_CNT 2
|
||||
#define A2DP_STOP_STATE_CNT 2
|
||||
static void eartch_a2dp_status_monitor(void *priv)
|
||||
{
|
||||
if (get_total_connect_dev() == 0) {
|
||||
__this->a2dp_stop_state_cnt = 0;
|
||||
__this->a2dp_play_state_cnt = 0;
|
||||
return;
|
||||
}
|
||||
u8 a2dp_state = a2dp_get_status();
|
||||
if (a2dp_state == BT_MUSIC_STATUS_STARTING) { //在播歌
|
||||
__this->a2dp_stop_state_cnt = 0;
|
||||
__this->a2dp_play_state_cnt++;
|
||||
if (__this->a2dp_play_state_cnt > A2DP_PLAY_STATE_CNT) {
|
||||
if (__this->music_ctrl_en == 0) {
|
||||
log_info("Enable music ctrl");
|
||||
__this->music_ctrl_en = 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
__this->a2dp_play_state_cnt = 0;
|
||||
__this->a2dp_stop_state_cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void eartch_a2dp_status_monitor_init(u8 init)
|
||||
{
|
||||
if (__this->a2dp_monitor_timer) {
|
||||
sys_timer_del(__this->a2dp_monitor_timer);
|
||||
__this->a2dp_monitor_timer = 0;
|
||||
}
|
||||
if (init) {
|
||||
__this->a2dp_monitor_timer = sys_timer_add(NULL, eartch_a2dp_status_monitor, 500);
|
||||
__this->a2dp_stop_state_cnt = 0;
|
||||
__this->a2dp_play_state_cnt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
extern void test_esco_role_switch(u8 flag);
|
||||
//master: local out
|
||||
static void eartch_in_bt_control_handle(void)
|
||||
{
|
||||
u8 call_status = get_call_status();
|
||||
u8 tws_con = get_tws_sibling_connect_state();
|
||||
u8 role;
|
||||
u8 a2dp_state;
|
||||
if (tws_con) {
|
||||
role = tws_api_get_role();
|
||||
}
|
||||
|
||||
if (call_status != BT_CALL_HANGUP) {
|
||||
//通话中
|
||||
#if TCFG_EARTCH_CALL_CTL_SCO_CONNECT
|
||||
if (call_status == BT_CALL_ACTIVE) {//通话中
|
||||
if ((tws_con && ((__this->local_state != EARTCH_STATE_IN) || (__this->remote_state != EARTCH_STATE_IN))) //对耳戴上一只
|
||||
|| (!tws_con)) { //单耳且入耳
|
||||
log_info("USER_CTRL_CONN_SCO\n");
|
||||
eartch_send_bt_ctrl_cmd(USER_CTRL_CONN_SCO);
|
||||
}
|
||||
}
|
||||
#endif /* #if TCFG_EARTCH_CALL_CTL_SCO_CONNECT */
|
||||
#if TCFG_EARTCH_AUTO_CHANGE_MASTER
|
||||
if (tws_con && ((role == TWS_ROLE_MASTER) && ((__this->local_state == EARTCH_STATE_OUT) && (__this->remote_state == EARTCH_STATE_IN)))) {//主机不在耳,从机在耳,切换主从
|
||||
log_info("master no inside, start change role");
|
||||
tws_api_auto_role_switch_disable();
|
||||
test_esco_role_switch(1); //主机调用
|
||||
}
|
||||
#endif /* #if TCFG_EARTCH_AUTO_CHANGE_MASTER */
|
||||
} else {
|
||||
#if TCFG_EARTCH_MUSIC_CTL_A2DP_CONNECT
|
||||
log_info("a2dp_connect_state: %d", __this->a2dp_connect_state);
|
||||
if (__this->a2dp_connect_state == 0) {
|
||||
/* if ((tws_con && (((__this->local_state == EARTCH_STATE_OUT) && (__this->remote_state == EARTCH_STATE_IN)) || */
|
||||
/* ((__this->local_state == EARTCH_STATE_IN) && (__this->remote_state == EARTCH_STATE_OUT)))) || //对耳一只戴上 */
|
||||
/* (!tws_con)) { //单耳 */
|
||||
log_info("CONN_A2DP");
|
||||
eartch_send_bt_ctrl_cmd(USER_CTRL_CONN_A2DP); //链接链路
|
||||
__this->a2dp_send_flag = 1;
|
||||
/* } */
|
||||
} else
|
||||
#endif /* #if TCFG_EARTCH_MUSIC_CTL_A2DP_CONNECT */
|
||||
{
|
||||
log_info("music ctrl en: %d", __this->music_ctrl_en);
|
||||
if (__this->music_ctrl_en) {
|
||||
a2dp_state = a2dp_get_status();
|
||||
log_info("a2dp_state: %d", a2dp_state);
|
||||
if (a2dp_state != BT_MUSIC_STATUS_STARTING) { //没有播放
|
||||
log_info("SEND PLAY");
|
||||
eartch_send_bt_ctrl_cmd(USER_CTRL_AVCTP_OPID_PLAY);
|
||||
} else {
|
||||
eartch_music_state_check_timer_add();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void eartch_out_bt_control_handle(void)
|
||||
{
|
||||
u8 call_status = get_call_status();
|
||||
u8 tws_con = get_tws_sibling_connect_state();
|
||||
u8 role;
|
||||
u8 a2dp_state;
|
||||
if (tws_con) {
|
||||
role = tws_api_get_role();
|
||||
}
|
||||
|
||||
if (call_status != BT_CALL_HANGUP) {//通话中
|
||||
if (call_status == BT_CALL_ACTIVE) {//通话中
|
||||
if ((tws_con && ((__this->local_state == EARTCH_STATE_OUT) && (__this->remote_state == EARTCH_STATE_OUT))) //对耳且都不在耳朵上
|
||||
|| (!tws_con)) { //单耳且不在耳朵
|
||||
#if TCFG_EARTCH_CALL_CTL_SCO_CONNECT
|
||||
log_info("USER_CTRL_DISCONN_SCO\n");
|
||||
eartch_send_bt_ctrl_cmd(USER_CTRL_DISCONN_SCO);
|
||||
#endif /* #if TCFG_EARTCH_CALL_CTL_SCO_CONNECT */
|
||||
}
|
||||
#if TCFG_EARTCH_AUTO_CHANGE_MASTER
|
||||
if (tws_con && ((role == TWS_ROLE_MASTER) && ((__this->local_state == EARTCH_STATE_OUT) && (__this->remote_state == EARTCH_STATE_IN)))) {//主机不在耳,从机在耳,切换主从
|
||||
log_info("master no inside, start change role");
|
||||
tws_api_auto_role_switch_disable();
|
||||
test_esco_role_switch(1); //主机调用
|
||||
}
|
||||
#endif /* #if TCFG_EARTCH_AUTO_CHANGE_MASTER */
|
||||
}
|
||||
} else {
|
||||
log_info("a2dp_connect_state: %d", __this->a2dp_connect_state);
|
||||
if (__this->a2dp_connect_state) {
|
||||
#if TCFG_EARTCH_MUSIC_CTL_A2DP_CONNECT
|
||||
if ((tws_con && ((__this->local_state == EARTCH_STATE_OUT) && (__this->remote_state == EARTCH_STATE_OUT))) || //对耳出耳, 断开链路
|
||||
(!tws_con)) { //单耳出耳
|
||||
log_info("DISCON A2DP");
|
||||
eartch_send_bt_ctrl_cmd(USER_CTRL_DISCONN_A2DP);
|
||||
} else
|
||||
#endif /* #if TCFG_EARTCH_MUSIC_CTL_A2DP_CONNECT */
|
||||
{
|
||||
a2dp_state = a2dp_get_status();
|
||||
log_info("a2dp_state: %d", a2dp_state);
|
||||
if (a2dp_state == BT_MUSIC_STATUS_STARTING) { //在播放
|
||||
log_info("SEND PAUSE");
|
||||
eartch_send_bt_ctrl_cmd(USER_CTRL_AVCTP_OPID_PAUSE);
|
||||
} else {
|
||||
eartch_music_state_check_timer_add();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//-------------测试盒流程-----------------//
|
||||
u8 testbox_in_ear_detect_test_flag_get(void);
|
||||
void lp_touch_key_testbox_inear_trim(u8 flag);
|
||||
|
||||
enum {
|
||||
IN_EAR_TRIM_SUCC_KEY = 0xf4,
|
||||
IN_EAR_DETECT_IN,
|
||||
IN_EAR_DETECT_OUT,
|
||||
IN_EAR_TRIM_FAIL_KEY,
|
||||
};
|
||||
|
||||
void test_in_ear_detect_state_notify(u8 key)
|
||||
{
|
||||
user_send_cmd_prepare(USER_CTRL_TEST_KEY, 1, &key); //
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void lp_touch_key_testbox_inear_trim(u8 flag)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void eartch_testbox_flag(u8 flag)
|
||||
{
|
||||
lp_touch_key_testbox_inear_trim(flag);
|
||||
}
|
||||
|
||||
static void eartch_bt_event_control_handle(u8 event)
|
||||
{
|
||||
u8 call_status;
|
||||
if (get_total_connect_dev() == 0) {
|
||||
log_info("no connect dev");
|
||||
return;
|
||||
}
|
||||
|
||||
u8 tws_con = get_tws_sibling_connect_state();
|
||||
|
||||
if (event == EARTCH_STATE_IN) {
|
||||
eartch_music_ctrl_timeout_del();
|
||||
eartch_in_bt_control_handle();
|
||||
} else {
|
||||
#if TCFG_EARTCH_MUSIC_CTL_TIMEOUT_ENABLE
|
||||
if ((tws_con && ((__this->local_state == EARTCH_STATE_OUT) && (__this->remote_state == EARTCH_STATE_OUT))) //对耳且都不在耳朵上
|
||||
|| (!tws_con)) { //单耳且不在耳朵
|
||||
if (__this->music_ctrl_en) {
|
||||
eartch_music_ctrl_timeout_add();
|
||||
}
|
||||
}
|
||||
#endif /* #if TCFG_EARTCH_MUSIC_CTL_TIMEOUT_ENABLE */
|
||||
eartch_out_bt_control_handle();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static void eartch_event_deal_en_cfg_save(u8 cfg_data)
|
||||
{
|
||||
u8 rdata = 0;
|
||||
int ret = 0;
|
||||
|
||||
ret = syscfg_read(CFG_EARTCH_ENABLE_ID, &rdata, EARTCH_SWITCH_CFG_LEN);
|
||||
if (ret == EARTCH_SWITCH_CFG_LEN) {
|
||||
if (rdata == cfg_data) {
|
||||
log_debug("cfg same: %d", rdata);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
rdata = cfg_data;
|
||||
log_debug("cfg write: %d", rdata);
|
||||
ret = syscfg_write(CFG_EARTCH_ENABLE_ID, &rdata, EARTCH_SWITCH_CFG_LEN);
|
||||
if (ret != EARTCH_SWITCH_CFG_LEN) {
|
||||
log_error("cfg write err!!!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void eartch_state_update(u8 state)
|
||||
{
|
||||
switch (state) {
|
||||
case EARTCH_TWS_STATE_IN:
|
||||
case EARTCH_TWS_STATE_OUT:
|
||||
__this->local_state = state;
|
||||
__this->event_source = 1;
|
||||
log_debug("update local_state: %d", __this->local_state);
|
||||
|
||||
if (__this->eartch_event_deal_en == 0) {
|
||||
log_debug("eartch event deal en 0");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case EARTCH_TWS_STATE_TRIM_OK:
|
||||
if (testbox_in_ear_detect_test_flag_get()) {
|
||||
test_in_ear_detect_state_notify(IN_EAR_TRIM_SUCC_KEY);
|
||||
}
|
||||
return;
|
||||
|
||||
case EARTCH_TWS_STATE_TRIM_ERR:
|
||||
if (testbox_in_ear_detect_test_flag_get()) {
|
||||
test_in_ear_detect_state_notify(IN_EAR_TRIM_FAIL_KEY);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (get_tws_sibling_connect_state() == TRUE) {
|
||||
eartch_sync_tws_state(state);
|
||||
} else {
|
||||
eartch_post_event(state);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extern void eartch_hardware_suspend(void);
|
||||
extern void eartch_hardware_recover(void);
|
||||
|
||||
__attribute__((weak))
|
||||
void eartch_hardware_suspend(void)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void eartch_hardware_recover(void)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void eartch_event_deal_enable(void)
|
||||
{
|
||||
__this->eartch_event_deal_en = 1;
|
||||
#if TCFG_EARTCH_MUSIC_CTL_TIMEOUT_ENABLE
|
||||
eartch_a2dp_status_monitor_init(1);
|
||||
#endif
|
||||
eartch_hardware_recover();
|
||||
}
|
||||
|
||||
void eartch_event_deal_disable()
|
||||
{
|
||||
__this->eartch_event_deal_en = 0;
|
||||
#if TCFG_EARTCH_MUSIC_CTL_TIMEOUT_ENABLE
|
||||
eartch_a2dp_status_monitor_init(0);
|
||||
#endif
|
||||
eartch_hardware_suspend();
|
||||
}
|
||||
|
||||
void eartch_event_deal_enable_cfg_save(u8 en)
|
||||
{
|
||||
#if TCFG_EARTCH_SWITCH_CFG_ENABLE
|
||||
if (en) {
|
||||
eartch_event_deal_enable();
|
||||
eartch_event_deal_en_cfg_save(1);
|
||||
} else {
|
||||
eartch_event_deal_disable();
|
||||
eartch_event_deal_en_cfg_save(0);
|
||||
}
|
||||
#endif /* #if TCFG_EARTCH_SWITCH_CFG_ENABLE */
|
||||
}
|
||||
|
||||
void eartch_handle()
|
||||
{
|
||||
if (earin_status == EARTCH_STATE_IN) {
|
||||
if (get_tws_sibling_connect_state() == TRUE) {
|
||||
if ((__this->remote_state == EARTCH_STATE_OUT) && (__this->local_state == EARTCH_STATE_IN)) {
|
||||
log_info("tone_play1");
|
||||
tone_play(TONE_NORMAL, 1);
|
||||
}
|
||||
} else {
|
||||
log_info("tone_play2");
|
||||
tone_play(TONE_NORMAL, 1);
|
||||
}
|
||||
|
||||
if (testbox_in_ear_detect_test_flag_get()) {
|
||||
test_in_ear_detect_state_notify(IN_EAR_DETECT_IN);
|
||||
}
|
||||
} else {
|
||||
if (testbox_in_ear_detect_test_flag_get()) {
|
||||
test_in_ear_detect_state_notify(IN_EAR_DETECT_OUT);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
eartch_bt_event_control_handle(earin_status);
|
||||
__this->last_state = earin_status;
|
||||
sys_timer_del(earin_lock_time);
|
||||
earin_lock_time = 0;
|
||||
}
|
||||
|
||||
void eartch_event_handle(u8 event)
|
||||
{
|
||||
switch (event) {
|
||||
case EARTCH_TWS_STATE_IN:
|
||||
case EARTCH_TWS_STATE_OUT:
|
||||
last_status = event;
|
||||
if (earin_lock_time == 0) {
|
||||
earin_status = event;
|
||||
earin_lock_time = sys_timeout_add(NULL, eartch_handle, 500);
|
||||
} else {
|
||||
if (earin_status != last_status) {
|
||||
earin_status = last_status;
|
||||
sys_timer_modify(earin_lock_time, 500);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#if TCFG_EARTCH_SWITCH_CFG_ENABLE
|
||||
case EARTCH_TWS_CFG_SAVE_EVENT_DEAL_ENABLE:
|
||||
eartch_event_deal_enable_cfg_save(1);
|
||||
break;
|
||||
|
||||
case EARTCH_TWS_CFG_SAVE_EVENT_DEAL_DISABLE:
|
||||
eartch_event_deal_enable_cfg_save(0);
|
||||
break;
|
||||
#endif /* #if TCFG_EARTCH_SWITCH_CFG_ENABLE */
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void a2dp_connect_status_register(void (*cbk)(u8 conn_flag));
|
||||
int eartch_event_deal_init(void)
|
||||
{
|
||||
u8 rdata = 0;
|
||||
int ret = 0;
|
||||
|
||||
#if TCFG_EARTCH_SWITCH_CFG_ENABLE
|
||||
ret = syscfg_read(CFG_EARTCH_ENABLE_ID, &rdata, EARTCH_SWITCH_CFG_LEN);
|
||||
if (ret == EARTCH_SWITCH_CFG_LEN) {
|
||||
__this->eartch_event_deal_en = rdata;
|
||||
log_debug("switch cfg: %d", rdata);
|
||||
} else
|
||||
#endif /* #if TCFG_EARTCH_SWITCH_CFG_ENABLE */
|
||||
{
|
||||
log_debug("switch cfg not write, default enable");
|
||||
__this->eartch_event_deal_en = 1;
|
||||
}
|
||||
|
||||
#if TCFG_EARTCH_MUSIC_CTL_A2DP_CONNECT
|
||||
a2dp_connect_status_register(eartch_a2dp_status_callback_handle);
|
||||
#else
|
||||
__this->a2dp_connect_state = 1;
|
||||
#endif /* #if TCFG_EARTCH_MUSIC_CTL_A2DP_CONNECT */
|
||||
#if TCFG_EARTCH_MUSIC_CTL_TIMEOUT_ENABLE
|
||||
if (__this->eartch_event_deal_en) {
|
||||
eartch_a2dp_status_monitor_init(1);
|
||||
}
|
||||
#else
|
||||
__this->music_ctrl_en = 1;
|
||||
#endif /* #if TCFG_EARTCH_MUSIC_CTL_TIMEOUT_ENABLE */
|
||||
return __this->eartch_event_deal_en;
|
||||
}
|
||||
|
||||
|
||||
void eartch_event_deal_enable_cfg_tws_save(u8 en)
|
||||
{
|
||||
if (en) {
|
||||
eartch_state_update(EARTCH_TWS_CFG_SAVE_EVENT_DEAL_ENABLE);
|
||||
} else {
|
||||
eartch_state_update(EARTCH_TWS_CFG_SAVE_EVENT_DEAL_DISABLE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
REGISTER_TWS_FUNC_STUB(ear_lptch_sync) = {
|
||||
.func_id = TWS_FUNC_ID_EARTCH_SYNC,
|
||||
.func = eartch_sync_tws_state_deal,
|
||||
};
|
||||
|
||||
#endif /* #if TCFG_EARTCH_EVENT_HANDLE_ENABLE */
|
||||
@@ -0,0 +1,87 @@
|
||||
#include "font/font_all.h"
|
||||
#include "font/language_list.h"
|
||||
#include "app_config.h"
|
||||
#include "ui/res_config.h"
|
||||
|
||||
#if TCFG_UI_ENABLE
|
||||
#if (TCFG_SPI_LCD_ENABLE || TCFG_SIMPLE_LCD_ENABLE)
|
||||
|
||||
|
||||
extern void platform_putchar(struct font_info *info, u8 *pixel, u16 width, u16 height, u16 x, u16 y);//字库输出显示函数
|
||||
extern void ui_simple_putchar(struct font_info *info, u8 *pixel, u16 width, u16 height, u16 x, u16 y);//字库输出显示函数
|
||||
|
||||
#if TCFG_SPI_LCD_ENABLE
|
||||
#define font_putchar (platform_putchar)
|
||||
#else
|
||||
#define font_putchar (ui_simple_putchar)
|
||||
#endif
|
||||
|
||||
/* 语言字库配置 */
|
||||
|
||||
#define LANGUAGE BIT(Chinese_Simplified)|\
|
||||
BIT(English)|\
|
||||
BIT(Chinese_Traditional)
|
||||
|
||||
const struct font_info font_info_table[] = {
|
||||
|
||||
#if LANGUAGE&BIT(Chinese_Simplified)
|
||||
//gb2312
|
||||
{
|
||||
.language_id = Chinese_Simplified,
|
||||
.flags = FONT_SHOW_PIXEL | FONT_SHOW_MULTI_LINE,
|
||||
.pixel.file.name = (char *)FONT_PATH"F_GB2312.PIX",
|
||||
.ascpixel.file.name = (char *)FONT_PATH"F_ASCII.PIX",
|
||||
.tabfile.name = (char *)FONT_PATH"F_GB2312.TAB",
|
||||
.isgb2312 = true,
|
||||
.bigendian = false,
|
||||
.putchar = font_putchar,
|
||||
},
|
||||
//gbk
|
||||
/* { */
|
||||
/* .language_id = Chinese_Simplified, */
|
||||
/* .flags = FONT_SHOW_PIXEL | FONT_SHOW_MULTI_LINE, */
|
||||
/* .pixel.file.name = (char *)"mnt/sdfile/res/F_GBK.PIX", */
|
||||
/* .ascpixel.file.name = (char *)"mnt/sdfile/res/F_ASCII.PIX", */
|
||||
/* .tabfile.name = (char *)"mnt/sdfile/res/F_GBK.TAB", */
|
||||
/* .isgb2312 = false, */
|
||||
/* .bigendian = false, */
|
||||
/* .putchar = platform_putchar, */
|
||||
/* }, */
|
||||
#endif
|
||||
|
||||
#if LANGUAGE&BIT(Chinese_Traditional)
|
||||
{
|
||||
.language_id = Chinese_Traditional,
|
||||
.flags = FONT_SHOW_PIXEL | FONT_SHOW_MULTI_LINE,
|
||||
.pixel.file.name = (char *)FONT_PATH"F_GBK.PIX",
|
||||
.ascpixel.file.name = (char *)FONT_PATH"F_ASCII.PIX",
|
||||
.tabfile.name = (char *)FONT_PATH"F_GBK.TAB",
|
||||
.isgb2312 = false,
|
||||
.bigendian = false,
|
||||
.putchar = font_putchar,
|
||||
},
|
||||
#endif
|
||||
|
||||
#if LANGUAGE&BIT(English)
|
||||
{
|
||||
.language_id = English,
|
||||
.flags = FONT_SHOW_PIXEL | FONT_SHOW_MULTI_LINE,
|
||||
.pixel.file.name = (char *)"mnt/sdfile/res/F_GBK.PIX",
|
||||
.ascpixel.file.name = (char *)"mnt/sdfile/res/F_ASCII.PIX",
|
||||
.tabfile.name = (char *)"mnt/sdfile/res/F_GBK.TAB",
|
||||
.isgb2312 = false,
|
||||
.bigendian = false,
|
||||
.putchar = font_putchar,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.language_id = 0,//不能删
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,251 @@
|
||||
#include "system/includes.h"
|
||||
#include "media/includes.h"
|
||||
#include "app_config.h"
|
||||
#include "app_action.h"
|
||||
#include "tone_player.h"
|
||||
#include "asm/charge.h"
|
||||
#include "app_charge.h"
|
||||
#include "app_main.h"
|
||||
#include "ui_manage.h"
|
||||
#include "vm.h"
|
||||
//#include "app_chargestore.h"
|
||||
//#include "app_umidigi_chargestore.h"
|
||||
#include "app_testbox.h"
|
||||
#include "user_cfg.h"
|
||||
#include "default_event_handler.h"
|
||||
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
#include "app_ancbox.h"
|
||||
#endif
|
||||
|
||||
#define LOG_TAG_CONST APP_IDLE
|
||||
#define LOG_TAG "[APP_IDLE]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
#if CHARGING_CLEAN_PHONE_INFO
|
||||
#include "key_event_deal.h"
|
||||
#include "btstack/btstack_typedef.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MEDIA_DEVELOP_ENABLE
|
||||
#define AUDIO_PLAY_EVENT_END AUDIO_DEC_EVENT_END
|
||||
#endif /* #ifdef CONFIG_MEDIA_DEVELOP_ENABLE */
|
||||
|
||||
static void app_idle_enter_softoff(void)
|
||||
{
|
||||
//ui_update_status(STATUS_POWEROFF);
|
||||
/*while (get_ui_busy_status()) {
|
||||
log_info("ui_status:%d\n", get_ui_busy_status());
|
||||
}*/
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
if (get_lvcmp_det() && (0 == get_charge_full_flag())) {
|
||||
log_info("charge inset, system reset!\n");
|
||||
cpu_reset();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_SMART_VOICE_ENABLE
|
||||
extern void audio_smart_voice_detect_close(void);
|
||||
audio_smart_voice_detect_close();
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef CONFIG_BOARD_AISPEECH_VAD_ASR
|
||||
extern void ais_platform_asr_close(void);
|
||||
ais_platform_asr_close();
|
||||
#endif /*CONFIG_BOARD_AISPEECH_VAD_ASR*/
|
||||
|
||||
extern void dac_power_off(void);
|
||||
dac_power_off(); // 关机前先关dac
|
||||
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
|
||||
static int app_idle_tone_event_handler(struct device_event *dev)
|
||||
{
|
||||
int ret = false;
|
||||
|
||||
switch (dev->event) {
|
||||
case AUDIO_PLAY_EVENT_END:
|
||||
if (app_var.goto_poweroff_flag) {
|
||||
log_info("audio_play_event_end,enter soft poweroff");
|
||||
app_idle_enter_softoff();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if CHARGING_CLEAN_PHONE_INFO
|
||||
|
||||
#define IDLE_CLEAN_INFO_CNT 20
|
||||
|
||||
static u8 idle_key_table[KEY_NUM_MAX][KEY_EVENT_MAX] = {
|
||||
//SHORT LONG HOLD UP DOUBLE TRIPLE
|
||||
{KEY_NULL, KEY_CLEAN_PHONE_INFO, KEY_CLEAN_PHONE_INFO_HOLD, KEY_CLEAN_PHONE_INFO_UP, KEY_NULL, KEY_NULL}, //KEY_0
|
||||
};
|
||||
int app_idle_key_event_handler(struct sys_event *event)
|
||||
{
|
||||
int ret = false;
|
||||
struct key_event *key = &event->u.key;
|
||||
u8 key_event = idle_key_table[key->value][key->event];
|
||||
static u16 key_hold_cnt = 0;
|
||||
static u8 key_press_flag = 0;
|
||||
|
||||
switch (key_event) {
|
||||
case KEY_CLEAN_PHONE_INFO:
|
||||
log_info("KEY_CLEAN_PHONE_INFO");
|
||||
key_hold_cnt = 0;
|
||||
key_press_flag = 1;
|
||||
P33_CON_SET(P3_PINR_CON, 0, 1, 0);
|
||||
break;
|
||||
case KEY_CLEAN_PHONE_INFO_HOLD:
|
||||
key_hold_cnt++;
|
||||
if (key_press_flag) {
|
||||
if (key_hold_cnt == IDLE_CLEAN_INFO_CNT) {
|
||||
log_info("KEY_CLEAN_PHONE_INFO_HOLD");
|
||||
extern void delete_link_key_for_app(bd_addr_t *bd_addr, u8 id);
|
||||
delete_link_key_for_app(NULL, 0);
|
||||
tone_play(TONE_SIN_NORMAL, 1);
|
||||
key_press_flag = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case KEY_CLEAN_PHONE_INFO_UP:
|
||||
log_info("KEY_CLEAN_PHONE_INFO_UP");
|
||||
key_hold_cnt = 0;
|
||||
key_press_flag = 0;
|
||||
P33_CON_SET(P3_PINR_CON, 0, 1, 1);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static int idle_event_handler(struct application *app, struct sys_event *event)
|
||||
{
|
||||
switch (event->type) {
|
||||
case SYS_KEY_EVENT:
|
||||
#if CHARGING_CLEAN_PHONE_INFO
|
||||
/* log_info("idle_event_handler:SYS_KEY_EVENT\n"); */
|
||||
app_idle_key_event_handler(event);
|
||||
#endif
|
||||
return 0;
|
||||
case SYS_BT_EVENT:
|
||||
return 0;
|
||||
case SYS_DEVICE_EVENT:
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_CHARGE) {
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
return app_charge_event_handler(&event->u.dev);
|
||||
#endif
|
||||
}
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_TONE) {
|
||||
return app_idle_tone_event_handler(&event->u.dev);
|
||||
}
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
if ((u32)event->arg == DEVICE_EVENT_CHARGE_STORE) {
|
||||
app_chargestore_event_handler(&event->u.chargestore);
|
||||
}
|
||||
#endif
|
||||
#if TCFG_UMIDIGI_BOX_ENABLE
|
||||
else if ((u32)event->arg == DEVICE_EVENT_UMIDIGI_CHARGE_STORE) {
|
||||
app_umidigi_chargestore_event_handler(&event->u.umidigi_chargestore);
|
||||
}
|
||||
#endif
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if ((u32)event->arg == DEVICE_EVENT_TEST_BOX) {
|
||||
app_testbox_event_handler(&event->u.testbox);
|
||||
}
|
||||
#endif
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_ANC) {
|
||||
return app_ancbox_event_handler(&event->u.ancbox);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
#if (CONFIG_BT_BACKGROUND_ENABLE || TCFG_PC_ENABLE)
|
||||
#if(!TCFG_ONLY_PC_ENABLE)
|
||||
default_event_handler(event);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int idle_state_machine(struct application *app, enum app_state state,
|
||||
struct intent *it)
|
||||
{
|
||||
int ret;
|
||||
switch (state) {
|
||||
case APP_STA_CREATE:
|
||||
break;
|
||||
case APP_STA_START:
|
||||
if (!it) {
|
||||
break;
|
||||
}
|
||||
switch (it->action) {
|
||||
case ACTION_IDLE_MAIN:
|
||||
log_info("ACTION_IDLE_MAIN\n");
|
||||
if (app_var.goto_poweroff_flag) {
|
||||
syscfg_write(CFG_MUSIC_VOL, &app_var.music_volume, 1);
|
||||
/* tone_play(TONE_POWER_OFF); */
|
||||
os_taskq_flush();
|
||||
STATUS *p_tone = get_tone_config();
|
||||
ret = 1;//tone_play_index(p_tone->power_off, 1);
|
||||
//printf("power_off tone play ret:%d", ret);
|
||||
if (ret) {
|
||||
if (app_var.goto_poweroff_flag) {
|
||||
log_info("power_off tone play err,enter soft poweroff");
|
||||
app_idle_enter_softoff();
|
||||
}
|
||||
}
|
||||
}
|
||||
#if CHARGING_CLEAN_PHONE_INFO
|
||||
else {
|
||||
sys_key_event_enable();
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case ACTION_IDLE_POWER_OFF:
|
||||
os_taskq_flush();
|
||||
syscfg_write(CFG_MUSIC_VOL, &app_var.music_volume, 1);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case APP_STA_PAUSE:
|
||||
break;
|
||||
case APP_STA_RESUME:
|
||||
break;
|
||||
case APP_STA_STOP:
|
||||
break;
|
||||
case APP_STA_DESTROY:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct application_operation app_idle_ops = {
|
||||
.state_machine = idle_state_machine,
|
||||
.event_handler = idle_event_handler,
|
||||
};
|
||||
|
||||
REGISTER_APPLICATION(app_app_idle) = {
|
||||
.name = "idle",
|
||||
.action = ACTION_IDLE_MAIN,
|
||||
.ops = &app_idle_ops,
|
||||
.state = APP_STA_DESTROY,
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,209 @@
|
||||
#ifndef _AEC_USER_H_
|
||||
#define _AEC_USER_H_
|
||||
|
||||
#include "generic/typedef.h"
|
||||
#include "user_cfg.h"
|
||||
|
||||
#define AEC_DEBUG_ONLINE 0
|
||||
#define AEC_READ_CONFIG 1
|
||||
|
||||
/*
|
||||
*CVP(清晰语音模式定义)
|
||||
*/
|
||||
#define CVP_MODE_NONE 0x00 //清晰语音处理关闭
|
||||
#define CVP_MODE_NORMAL 0x01 //通用模式
|
||||
#define CVP_MODE_DMS 0x02 //双mic降噪(ENC)模式
|
||||
#define CVP_MODE_SMS 0x03 //单mic系统(外加延时估计)
|
||||
#define CVP_MODE_SMS_TDE 0x04 //单mic系统(内置延时估计)
|
||||
#define CVP_MODE_SEL CVP_MODE_NORMAL
|
||||
|
||||
#define AEC_EN BIT(0)
|
||||
#define NLP_EN BIT(1)
|
||||
#define ANS_EN BIT(2)
|
||||
#define ENC_EN BIT(3)
|
||||
#define AGC_EN BIT(4)
|
||||
#define WNC_EN BIT(5)
|
||||
#define MFDT_EN BIT(6)
|
||||
|
||||
/*aec module enable bit define*/
|
||||
#define AEC_MODE_ADVANCE (AEC_EN | NLP_EN | ANS_EN )
|
||||
#define AEC_MODE_REDUCE (NLP_EN | ANS_EN )
|
||||
|
||||
#define AEC_MODE_SIMPLEX (ANS_EN)
|
||||
|
||||
/*
|
||||
*SMS模式选择
|
||||
*(1)SMS模式性能更好,同时也需要更多的ram和mips
|
||||
*(2)SMS_NORMAL和SMS_TDE功能一样,只是SMS_TDE内置了延时估计和延时补偿
|
||||
*可以更好的兼容延时不固定的场景
|
||||
*/
|
||||
#define SMS_DISABLE 0
|
||||
#define SMS_NORMAL 1
|
||||
#define SMS_TDE 2
|
||||
#define TCFG_AUDIO_SMS_ENABLE SMS_DISABLE
|
||||
|
||||
/*
|
||||
*DMS版本配置
|
||||
*DMS_GLOBAL_V100:第一版双麦算法
|
||||
*DMS_GLOBAL_V200:第二版双麦算法,更少的ram和mips
|
||||
*/
|
||||
#define TCFG_AUDIO_DMS_GLOBAL_VERSION DMS_GLOBAL_V100
|
||||
|
||||
#if (defined(CONFIG_MEDIA_NEW_ENABLE) || (defined(CONFIG_MEDIA_DEVELOP_ENABLE)))
|
||||
|
||||
extern const u8 CONST_AEC_SIMPLEX;
|
||||
|
||||
/*兼容SMS和DMS*/
|
||||
#if TCFG_AUDIO_TRIPLE_MIC_ENABLE
|
||||
#include "commproc_tms.h"
|
||||
#define aec_open aec_tms_init
|
||||
#define aec_close aec_tms_exit
|
||||
#define aec_in_data aec_tms_fill_in_data
|
||||
#define aec_in_data_ref aec_tms_fill_in_ref_data
|
||||
#define aec_in_data_ref_1 aec_tms_fill_in_ref_1_data
|
||||
#define aec_ref_data aec_tms_fill_ref_data
|
||||
|
||||
#elif TCFG_AUDIO_DUAL_MIC_ENABLE
|
||||
#include "commproc_dms.h"
|
||||
#if (TCFG_AUDIO_DMS_SEL == DMS_NORMAL)
|
||||
#define aec_open aec_dms_init
|
||||
#define aec_close aec_dms_exit
|
||||
#define aec_in_data aec_dms_fill_in_data
|
||||
#define aec_in_data_ref aec_dms_fill_in_ref_data
|
||||
#define aec_ref_data aec_dms_fill_ref_data
|
||||
#else
|
||||
#define aec_open aec_dms_flexible_init
|
||||
#define aec_close aec_dms_flexible_exit
|
||||
#define aec_in_data aec_dms_flexible_fill_in_data
|
||||
#define aec_in_data_ref aec_dms_flexible_fill_in_ref_data
|
||||
#define aec_ref_data aec_dms_flexible_fill_ref_data
|
||||
#endif/*TCFG_AUDIO_DMS_SEL*/
|
||||
|
||||
void aec_cfg_fill(AEC_DMS_CONFIG *cfg);
|
||||
/*
|
||||
*********************************************************************
|
||||
* Audio AEC Output Select
|
||||
* Description: 输出选择
|
||||
* Arguments : sel = Default 默认输出算法处理结果
|
||||
* = Master 输出主mic(通话mic)的原始数据
|
||||
* = Slave 输出副mic(降噪mic)的原始数据
|
||||
* agc 输出数据要不要经过agc自动增益控制模块
|
||||
* Return : None.
|
||||
* Note(s) : 可以通过选择不同的输出,来测试mic的频响和ENC指标
|
||||
*********************************************************************
|
||||
*/
|
||||
void audio_aec_output_sel(CVP_OUTPUT_ENUM sel, u8 agc);
|
||||
|
||||
#elif (TCFG_AUDIO_SMS_ENABLE == SMS_TDE)
|
||||
#include "commproc.h"
|
||||
#define aec_open sms_tde_init
|
||||
#define aec_close sms_tde_exit
|
||||
#define aec_in_data sms_tde_fill_in_data
|
||||
#define aec_in_data_ref(...)
|
||||
#define aec_ref_data sms_tde_fill_ref_data
|
||||
void aec_cfg_fill(AEC_CONFIG *cfg);
|
||||
#else
|
||||
#include "commproc.h"
|
||||
#define aec_open aec_init
|
||||
#define aec_close aec_exit
|
||||
#define aec_in_data aec_fill_in_data
|
||||
#define aec_in_data_ref(...)
|
||||
#define aec_ref_data aec_fill_ref_data
|
||||
void aec_cfg_fill(AEC_CONFIG *cfg);
|
||||
#endif
|
||||
|
||||
s8 aec_debug_online(void *buf, u16 size);
|
||||
void aec_input_clear_enable(u8 enable);
|
||||
|
||||
int audio_aec_init(u16 sample_rate);
|
||||
void audio_aec_close(void);
|
||||
void audio_aec_inbuf(s16 *buf, u16 len);
|
||||
void audio_aec_inbuf_ref(s16 *buf, u16 len);
|
||||
void audio_aec_inbuf_ref_1(s16 *buf, u16 len);
|
||||
void audio_aec_refbuf(s16 *buf, u16 len);
|
||||
u8 audio_aec_status(void);
|
||||
void audio_aec_reboot(u8 reduce);
|
||||
void audio_aec_ref_start(u8 en);
|
||||
/*
|
||||
*********************************************************************
|
||||
* Audio AEC Open
|
||||
* Description: 初始化AEC模块
|
||||
* Arguments : sr 采样率(8000/16000)
|
||||
* enablebit 使能模块(AEC/NLP/AGC/ANS...)
|
||||
* out_hdl 自定义回调函数,NULL则用默认的回调
|
||||
* Return : 0 成功 其他 失败
|
||||
* Note(s) : 该接口是对audio_aec_init的扩展,支持自定义使能模块以及
|
||||
* 数据输出回调函数
|
||||
*********************************************************************
|
||||
*/
|
||||
int audio_aec_open(u16 sample_rate, s16 enablebit, int (*out_hdl)(s16 *data, u16 len));
|
||||
|
||||
/*
|
||||
*********************************************************************
|
||||
* Audio CVP IOCTL
|
||||
* Description: CVP功能配置
|
||||
* Arguments : cmd 操作命令
|
||||
* value 操作数
|
||||
* priv 操作内存地址
|
||||
* Return : 0 成功 其他 失败
|
||||
* Note(s) : (1)比如动态开关降噪NS模块:
|
||||
* audio_cvp_ioctl(CVP_NS_SWITCH,1,NULL); //降噪关
|
||||
* audio_cvp_ioctl(CVP_NS_SWITCH,0,NULL); //降噪开
|
||||
*********************************************************************
|
||||
*/
|
||||
int audio_cvp_ioctl(int cmd, int value, void *priv);
|
||||
|
||||
/*获取风噪的检测结果,1:有风噪,0:无风噪*/
|
||||
int audio_cvp_dms_wnc_state(void);
|
||||
|
||||
/*获取单双麦切换状态
|
||||
* 0: 正常双麦 ;
|
||||
* 1: 副麦坏了,触发故障
|
||||
* -1: 主麦坏了,触发故障
|
||||
*/
|
||||
int audio_cvp_dms_malfunc_state();
|
||||
|
||||
/*
|
||||
* 获取mic的能量值,开了MFDT_EN才能用
|
||||
* mic: 0 获取主麦能量
|
||||
* mic:1 获取副麦能量
|
||||
* return:返回能量值,[0~90.3],返回-1表示错误
|
||||
*/
|
||||
float audio_cvp_dms_mic_energy(u8 mic);
|
||||
|
||||
/*tri_en: 1 正常3MIC降噪
|
||||
* 0 变成2MIC降噪,不使用 FB MIC数据*/
|
||||
int audio_tms_mode_choose(u8 tri_en);
|
||||
|
||||
#else
|
||||
|
||||
extern struct aec_s_attr aec_param;
|
||||
extern const u8 CONST_AEC_SIMPLEX;
|
||||
|
||||
struct aec_s_attr *aec_param_init(u16 sr);
|
||||
s8 aec_debug_online(void *buf, u16 size);
|
||||
void aec_cfg_fill(AEC_CONFIG *cfg);
|
||||
void aec_input_clear_enable(u8 enable);
|
||||
|
||||
#endif /* #if (defined(CONFIG_MEDIA_NEW_ENABLE) || (defined(CONFIG_MEDIA_DEVELOP_ENABLE))) */
|
||||
|
||||
|
||||
//aec 上行音效
|
||||
enum {
|
||||
SOUND_ORIGINAL, //原声
|
||||
SOUND_UNCLE, //大叔
|
||||
SOUND_GODDESS, //女神
|
||||
};
|
||||
|
||||
#if defined(AEC_PRESETS_UL_EQ_CONFIG) && AEC_PRESETS_UL_EQ_CONFIG
|
||||
#ifndef UL_PRESETS_EQ_NSECTION
|
||||
#define UL_PRESETS_EQ_NSECTION 5
|
||||
#endif
|
||||
#if (UL_PRESETS_EQ_NSECTION > EQ_SECTION_MAX )
|
||||
#error "EQ_SETCTION_MAX too samll"
|
||||
#endif
|
||||
void aec_ul_eq_update();
|
||||
void ul_presets_eq_set(u8 tab_num);
|
||||
#endif/*AEC_PRESETS_UL_EQ_CONFIG*/
|
||||
|
||||
#endif/*_AEC_USER_H_*/
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef APP_ACTION_H
|
||||
#define APP_ACTION_H
|
||||
|
||||
|
||||
#define ACTION_EARPHONE_MAIN 0x0001
|
||||
#define ACTION_A2DP_START 0x0002
|
||||
#define ACTION_ESCO_START 0x0003
|
||||
#define ACTION_BY_KEY_MODE 0x0004
|
||||
|
||||
#define ACTION_IDLE_MAIN 0x0010
|
||||
#define ACTION_IDLE_POWER_OFF 0x0011
|
||||
|
||||
#define ACTION_MUSIC_MAIN 0x0020
|
||||
#define ACTION_MUSIC_TWS_RX 0x0021
|
||||
|
||||
#define ACTION_PC_MAIN 0x0030
|
||||
|
||||
#define ACTION_AUX_MAIN 0x0040
|
||||
|
||||
#define APP_NAME_BT "earphone"
|
||||
#define APP_NAME_IDLE "idle"
|
||||
#define APP_NAME_PC "pc"
|
||||
#define APP_NAME_MUSIC "music"
|
||||
#define APP_NAME_AUX "aux"
|
||||
|
||||
extern void task_switch(const char *name, int action);
|
||||
#define task_switch_to_bt() task_switch(APP_NAME_BT, ACTION_EARPHONE_MAIN)
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
#ifndef _APP_ANCBOX_H_
|
||||
#define _APP_ANCBOX_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "system/event.h"
|
||||
|
||||
extern int app_ancbox_event_handler(struct ancbox_event *anc_dev);
|
||||
extern u8 ancbox_get_status(void);
|
||||
extern void ancbox_clear_status(void);
|
||||
|
||||
#endif //_APP_CHARGESTORE_H_
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef _APP_ANCTOOL_H_
|
||||
#define _APP_ANCTOOL_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "anctool.h"
|
||||
|
||||
u8 app_anctool_spp_rx_data(u8 *packet, u16 size);
|
||||
void app_anctool_spp_connect(void);
|
||||
void app_anctool_spp_disconnect(void);
|
||||
u8 get_app_anctool_spp_connected_flag();
|
||||
|
||||
#endif //_APP_CHARGESTORE_H_
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef _APP_CHARGE_H_
|
||||
#define _APP_CHARGE_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "system/event.h"
|
||||
|
||||
extern void charge_close_deal(void);
|
||||
extern void charge_start_deal(void);
|
||||
extern void ldo5v_keep_deal(void);
|
||||
extern void charge_full_deal(void);
|
||||
extern void charge_ldo5v_in_deal(void);
|
||||
extern void charge_ldo5v_off_deal(void);
|
||||
extern u8 get_charge_full_flag(void);
|
||||
|
||||
extern int app_charge_event_handler(struct device_event *dev);
|
||||
|
||||
#endif //_APP_CHARGE_H_
|
||||
@@ -0,0 +1,556 @@
|
||||
#ifndef APP_CONFIG_H
|
||||
#define APP_CONFIG_H
|
||||
|
||||
/*
|
||||
* 系统打印总开关
|
||||
*/
|
||||
|
||||
#define LIB_DEBUG 0
|
||||
#define CONFIG_DEBUG_LIB(x) (x & LIB_DEBUG)
|
||||
|
||||
#define CONFIG_DEBUG_ENABLE
|
||||
|
||||
#ifndef CONFIG_DEBUG_ENABLE
|
||||
//#define CONFIG_DEBUG_LITE_ENABLE //轻量级打印开关, 默认关闭
|
||||
#endif
|
||||
|
||||
|
||||
#define TCFG_APP_RTC_EN 1
|
||||
|
||||
//*********************************************************************************//
|
||||
// AI配置 //
|
||||
//*********************************************************************************//
|
||||
#define CONFIG_APP_BT_ENABLE
|
||||
|
||||
#ifdef CONFIG_APP_BT_ENABLE
|
||||
#define TRANS_DATA_EN 0
|
||||
#define RCSP_BTMATE_EN 0
|
||||
#define RCSP_ADV_EN 1
|
||||
//#define AI_APP_PROTOCOL 0
|
||||
//#define LL_SYNC_EN 0
|
||||
#define TUYA_DEMO_EN 0
|
||||
#else
|
||||
#define TRANS_DATA_EN 0
|
||||
#define RCSP_BTMATE_EN 1
|
||||
#define RCSP_ADV_EN 1
|
||||
//#define AI_APP_PROTOCOL 0
|
||||
//#define LL_SYNC_EN 0
|
||||
#define TUYA_DEMO_EN 0
|
||||
#endif
|
||||
|
||||
|
||||
#include "board_config.h"
|
||||
#ifdef TCFG_AUDIO_CVP_NS_MODE
|
||||
#if (TCFG_AUDIO_CVP_NS_MODE==CVP_DNS_MODE) || (TCFG_KWS_VOICE_RECOGNITION_ENABLE == 1)||(TCFG_AUDIO_ANC_ENABLE==1&&TCFG_AUDIO_DUAL_MIC_ENABLE==1)
|
||||
#undef CONFIG_MOVABLE_ENABLE
|
||||
#define CONFIG_MOVABLE_ENABLE //省ram空间,将部分ram空间的代码挪到flash
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(TCFG_CVP_DEVELOP_ENABLE) && (TCFG_CVP_DEVELOP_ENABLE == 1)
|
||||
#undef CONFIG_MOVABLE_ENABLE
|
||||
#define CONFIG_MOVABLE_ENABLE //省ram空间,将部分ram空间的代码挪到flash
|
||||
#endif
|
||||
|
||||
#if CONFIG_UPDATE_WITH_MD5_CHECK_EN
|
||||
#define UPDATE_MD5_ENABLE 1
|
||||
#else
|
||||
#define UPDATE_MD5_ENABLE 0
|
||||
#endif
|
||||
|
||||
|
||||
//升级需要打开CONFIG_APP_OTA_ENABLE,同时单双备份的配置也在board_xxx_global_cfg里配置,需要注意只有JL_RCSP才支持单备份,其余升级都是只支持双备份升级
|
||||
//支持TWS同步升级,OTA_TWS_SAME_TIME_NEW宏需要配置为1,旧的流程已不再支持
|
||||
#if (RCSP_ADV_EN) //rcsp需要打开ble
|
||||
#define JL_EARPHONE_APP_EN 1
|
||||
// #define CONFIG_CHARGESTORE_REMAP_ENABLE //充电仓重映射接收函数使能
|
||||
#if CONFIG_APP_OTA_ENABLE
|
||||
#define RCSP_UPDATE_EN 1 //是否支持rcsp升级
|
||||
#if CONFIG_DOUBLE_BANK_ENABLE //双备份才能打开同步升级流程
|
||||
#define OTA_TWS_SAME_TIME_ENABLE 0 //是否支持TWS同步升级
|
||||
#define OTA_TWS_SAME_TIME_NEW 0 //使用新的tws ota流程
|
||||
#else
|
||||
#define OTA_TWS_SAME_TIME_ENABLE 0 //是否支持TWS同步升级
|
||||
#define OTA_TWS_SAME_TIME_NEW 0 //使用新的tws ota流程
|
||||
#endif //CONFIG_DOUBLE_BANK_ENABLE
|
||||
#else
|
||||
#define RCSP_UPDATE_EN 0 //是否支持rcsp升级
|
||||
#define OTA_TWS_SAME_TIME_ENABLE 0 //是否支持TWS同步升级
|
||||
#define OTA_TWS_SAME_TIME_NEW 0 //使用新的tws ota流程
|
||||
#endif
|
||||
#undef TCFG_USER_BLE_ENABLE
|
||||
#define TCFG_USER_BLE_ENABLE 1 //BLE功能使能
|
||||
#elif (AI_APP_PROTOCOL)
|
||||
#define BT_MIC_EN 0
|
||||
#define OTA_TWS_SAME_TIME_ENABLE 0 //是否支持TWS同步升级
|
||||
#elif (LL_SYNC_EN)
|
||||
#define JL_EARPHONE_APP_EN 0
|
||||
#define OTA_TWS_SAME_TIME_ENABLE 1
|
||||
#define OTA_TWS_SAME_TIME_NEW 1 //使用新的tws ota流程
|
||||
#elif (TUYA_DEMO_EN)
|
||||
#define JL_EARPHONE_APP_EN 0
|
||||
#define OTA_TWS_SAME_TIME_ENABLE 0
|
||||
#define OTA_TWS_SAME_TIME_NEW 0 //使用新的tws ota流程
|
||||
#else
|
||||
#define JL_EARPHONE_APP_EN 0
|
||||
#define OTA_TWS_SAME_TIME_ENABLE 0
|
||||
#define OTA_TWS_SAME_TIME_NEW 0 //使用新的tws ota流程
|
||||
#endif
|
||||
|
||||
#define CONFIG_MEDIA_LIB_USE_MALLOC 1
|
||||
|
||||
|
||||
|
||||
#include "usb_std_class_def.h"
|
||||
|
||||
#undef USB_MALLOC_ENABLE
|
||||
#define USB_MALLOC_ENABLE 1
|
||||
///USB 配置重定义
|
||||
// #undef USB_DEVICE_CLASS_CONFIG
|
||||
// #define USB_DEVICE_CLASS_CONFIG (AUDIO_CLASS)
|
||||
/////要确保 上面 undef 后在include usb
|
||||
#include "usb_common_def.h"
|
||||
|
||||
#define USB_PC_NO_APP_MODE 0
|
||||
|
||||
#if ((TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE) \
|
||||
&& TCFG_CHARGESTORE_PORT == IO_PORT_DP)
|
||||
#undef TCFG_OTG_MODE
|
||||
#define TCFG_OTG_MODE (TCFG_OTG_MODE_HOST|TCFG_OTG_MODE_SLAVE|TCFG_OTG_MODE_CHARGE|OTG_DET_DM_ONLY)
|
||||
#endif
|
||||
|
||||
|
||||
#include "btcontroller_mode.h"
|
||||
|
||||
#include "user_cfg_id.h"
|
||||
|
||||
#ifndef __LD__
|
||||
#include "bt_profile_cfg.h"
|
||||
#endif
|
||||
|
||||
|
||||
// #ifdef CONFIG_APP_BT_ENABLE
|
||||
// #if(APP_ONLINE_DEBUG)
|
||||
// #error "they can not enable at the same time,just select one!!!"
|
||||
// #endif
|
||||
// #endif
|
||||
|
||||
|
||||
#ifdef CONFIG_SDFILE_ENABLE
|
||||
|
||||
#define SDFILE_DEV "sdfile"
|
||||
#define SDFILE_MOUNT_PATH "mnt/sdfile"
|
||||
|
||||
#if (USE_SDFILE_NEW)
|
||||
#define SDFILE_APP_ROOT_PATH SDFILE_MOUNT_PATH"/app/" //app分区
|
||||
#define SDFILE_RES_ROOT_PATH SDFILE_MOUNT_PATH"/res/" //资源文件分区
|
||||
#else
|
||||
#define SDFILE_RES_ROOT_PATH SDFILE_MOUNT_PATH"/C/"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#define STYLE_JL_WTACH (1)//彩屏demo
|
||||
#define STYLE_JL_SOUNDBOX (2)//点阵屏demo
|
||||
#define STYLE_JL_CHARGE (3)//点阵屏充电仓
|
||||
#define STYLE_JL_LED7 (4)//led7
|
||||
#define STYLE_UI_SIMPLE (5)//没有ui框架
|
||||
|
||||
|
||||
//*********************************************************************************//
|
||||
// 测试模式配置 //
|
||||
//*********************************************************************************//
|
||||
#if (CONFIG_BT_MODE != BT_NORMAL)
|
||||
#undef TCFG_BD_NUM
|
||||
#define TCFG_BD_NUM 1
|
||||
|
||||
#undef TCFG_USER_TWS_ENABLE
|
||||
#define TCFG_USER_TWS_ENABLE 0 //tws功能使能
|
||||
|
||||
#undef TCFG_USER_BLE_ENABLE
|
||||
#define TCFG_USER_BLE_ENABLE 1 //BLE功能使能
|
||||
|
||||
#undef TCFG_AUTO_SHUT_DOWN_TIME
|
||||
#define TCFG_AUTO_SHUT_DOWN_TIME 0
|
||||
|
||||
#undef TCFG_SYS_LVD_EN
|
||||
#define TCFG_SYS_LVD_EN 0
|
||||
|
||||
#undef TCFG_LOWPOWER_LOWPOWER_SEL
|
||||
#define TCFG_LOWPOWER_LOWPOWER_SEL 0
|
||||
|
||||
#undef TCFG_AUDIO_DAC_LDO_VOLT
|
||||
#define TCFG_AUDIO_DAC_LDO_VOLT DUT_AUDIO_DAC_LDO_VOLT
|
||||
|
||||
#undef TCFG_LOWPOWER_POWER_SEL
|
||||
#define TCFG_LOWPOWER_POWER_SEL PWR_LDO15
|
||||
|
||||
#undef TCFG_PWMLED_ENABLE
|
||||
#define TCFG_PWMLED_ENABLE DISABLE_THIS_MOUDLE
|
||||
|
||||
#undef TCFG_ADKEY_ENABLE
|
||||
#define TCFG_ADKEY_ENABLE DISABLE_THIS_MOUDLE
|
||||
|
||||
#undef TCFG_IOKEY_ENABLE
|
||||
#define TCFG_IOKEY_ENABLE DISABLE_THIS_MOUDLE
|
||||
|
||||
#undef TCFG_TEST_BOX_ENABLE
|
||||
#define TCFG_TEST_BOX_ENABLE 0
|
||||
|
||||
#undef TCFG_AUTO_SHUT_DOWN_TIME
|
||||
#define TCFG_AUTO_SHUT_DOWN_TIME 0
|
||||
|
||||
#undef TCFG_POWER_ON_NEED_KEY
|
||||
#define TCFG_POWER_ON_NEED_KEY 0
|
||||
|
||||
/* #undef TCFG_UART0_ENABLE
|
||||
#define TCFG_UART0_ENABLE DISABLE_THIS_MOUDLE */
|
||||
|
||||
#endif //(CONFIG_BT_MODE != BT_NORMAL)
|
||||
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
|
||||
#define CONFIG_TWS_COMMON_ADDR_AUTO 0 /* 自动生成TWS配对后的MAC地址 */
|
||||
#define CONFIG_TWS_COMMON_ADDR_USED_LEFT 1 /* 使用左耳的MAC地址作为TWS配对后的地址
|
||||
可配合烧写器MAC地址自增功能一起使用
|
||||
多台交叉配对会出现MAC地址相同情况 */
|
||||
#define CONFIG_TWS_COMMON_ADDR_SELECT CONFIG_TWS_COMMON_ADDR_AUTO
|
||||
|
||||
//*********************************************************************************//
|
||||
// 对耳配置方式配置 //
|
||||
//*********************************************************************************//
|
||||
#define CONFIG_TWS_CONNECT_SIBLING_TIMEOUT 4 /* 开机或超时断开后对耳互连超时时间,单位s */
|
||||
// #define CONFIG_TWS_REMOVE_PAIR_ENABLE [> 不连手机的情况下双击按键删除配对信息 <]
|
||||
#define CONFIG_TWS_POWEROFF_SAME_TIME 1 /*按键关机时两个耳机同时关机*/
|
||||
|
||||
#define ONE_KEY_CTL_DIFF_FUNC 1 /*通过左右耳实现一个按键控制两个功能*/
|
||||
#define CONFIG_TWS_SCO_ONLY_MASTER 0 /*通话的时候只有主机出声音*/
|
||||
|
||||
/* 配对方式选择 */
|
||||
#define CONFIG_TWS_PAIR_BY_CLICK 0 /* 按键发起配对 */
|
||||
#define CONFIG_TWS_PAIR_BY_AUTO 1 /* 开机自动配对 */
|
||||
#define CONFIG_TWS_PAIR_BY_FAST_CONN 2 /* 开机快速连接,连接速度比自动配对快,不支持取消配对操作 */
|
||||
#define CONFIG_TWS_PAIR_MODE CONFIG_TWS_PAIR_BY_AUTO
|
||||
|
||||
|
||||
/* 声道确定方式选择 */
|
||||
#define CONFIG_TWS_MASTER_AS_LEFT 0 //主机作为左耳
|
||||
#define CONFIG_TWS_AS_LEFT_CHANNEL 1 //固定左耳
|
||||
#define CONFIG_TWS_AS_RIGHT_CHANNEL 2 //固定右耳
|
||||
#define CONFIG_TWS_LEFT_START_PAIR 3 //双击发起配对的耳机做左耳
|
||||
#define CONFIG_TWS_RIGHT_START_PAIR 4 //双击发起配对的耳机做右耳
|
||||
#define CONFIG_TWS_EXTERN_UP_AS_LEFT 5 //外部有上拉电阻作为左耳
|
||||
#define CONFIG_TWS_EXTERN_DOWN_AS_LEFT 6 //外部有下拉电阻作为左耳
|
||||
#define CONFIG_TWS_SECECT_BY_CHARGESTORE 7 //充电仓决定左右耳
|
||||
#define CONFIG_TWS_CHANNEL_SELECT CONFIG_TWS_LEFT_START_PAIR //配对方式选择
|
||||
|
||||
#define CONFIG_TWS_CHANNEL_CHECK_IO -1 //上下拉电阻检测引脚
|
||||
|
||||
|
||||
#if CONFIG_TWS_PAIR_MODE != CONFIG_TWS_PAIR_BY_CLICK
|
||||
#if (CONFIG_TWS_CHANNEL_SELECT == CONFIG_TWS_LEFT_START_PAIR) ||\
|
||||
(CONFIG_TWS_CHANNEL_SELECT == CONFIG_TWS_RIGHT_START_PAIR)
|
||||
#undef CONFIG_TWS_CHANNEL_SELECT
|
||||
#define CONFIG_TWS_CHANNEL_SELECT CONFIG_TWS_MASTER_AS_LEFT
|
||||
#endif
|
||||
|
||||
#if CONFIG_TWS_PAIR_MODE == CONFIG_TWS_PAIR_BY_AUTO
|
||||
#define CONFIG_TWS_AUTO_PAIR_WITHOUT_UNPAIR /* 不取消配对也可以配对新的耳机 */
|
||||
#endif
|
||||
|
||||
#if CONFIG_TWS_PAIR_MODE == CONFIG_TWS_PAIR_BY_FAST_CONN
|
||||
#undef CONFIG_TWS_REMOVE_PAIR_ENABLE
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#define CONFIG_A2DP_GAME_MODE_ENABLE 0 //游戏模式
|
||||
#define CONFIG_A2DP_GAME_MODE_DELAY_TIME 35 //游戏模式延时ms
|
||||
|
||||
//*********************************************************************************//
|
||||
// 低延时游戏模式脚步声、枪声增强,需使能蓝牙音乐10段eq以及蓝牙音乐drc
|
||||
// 用户开关宏AUDIO_GAME_EFFECT_CONFIG(开关蓝牙低延时模式的游戏音效)
|
||||
// 低延时eq效果文件使用eq_game_eff.bin,调试时需保存成该文件,并在批处理-res后添加
|
||||
// 非低延时eq效果文件使用eq_cfg_hw.bin,也需在批处理-res后添加
|
||||
//*********************************************************************************//
|
||||
#if CONFIG_A2DP_GAME_MODE_ENABLE
|
||||
#define AUDIO_GAME_EFFECT_CONFIG 1 //低延时游戏模式脚步声、枪声增强 1:使能、0:关闭
|
||||
#else
|
||||
#define AUDIO_GAME_EFFECT_CONFIG 0 //低延时游戏模式脚步声、枪声增强 1:使能、0:关闭
|
||||
#endif
|
||||
/***********************************非用户配置区***********************************/
|
||||
//以下宏定义,是游戏音效使能后,需要开启的宏定义,已配好,用户不用修改
|
||||
#if AUDIO_GAME_EFFECT_CONFIG
|
||||
#if (TCFG_EQ_ENABLE == 0)
|
||||
#undef TCFG_EQ_ENABLE
|
||||
#define TCFG_EQ_ENABLE 1
|
||||
#endif/* (TCFG_EQ_ENABLE == 0) */
|
||||
#if (TCFG_BT_MUSIC_EQ_ENABLE == 0)
|
||||
#undef TCFG_BT_MUSIC_EQ_ENABLE
|
||||
#define TCFG_BT_MUSIC_EQ_ENABLE 1
|
||||
#endif/*(TCFG_BT_MUSIC_EQ_ENABLE == 0)*/
|
||||
#if (TCFG_DRC_ENABLE == 0)
|
||||
#undef TCFG_DRC_ENABLE
|
||||
#define TCFG_DRC_ENABLE 1
|
||||
#endif/* (TCFG_DRC_ENABLE == 0) */
|
||||
#if (TCFG_BT_MUSIC_DRC_ENABLE == 0)
|
||||
#undef TCFG_BT_MUSIC_DRC_ENABLE
|
||||
#define TCFG_BT_MUSIC_DRC_ENABLE 1
|
||||
#endif/* (TCFG_BT_MUSIC_DRC_ENABLE == 0) */
|
||||
#if (EQ_SECTION_MAX < 10)
|
||||
#undef EQ_SECTION_MAX
|
||||
#define EQ_SECTION_MAX 10
|
||||
#endif/* (EQ_SECTION_MAX < 10) */
|
||||
#if (TCFG_USE_EQ_FILE == 0)
|
||||
#undef TCFG_USE_EQ_FILE
|
||||
#define TCFG_USE_EQ_FILE 1
|
||||
#endif/* TCFG_USE_EQ_FILE */
|
||||
#endif/* AUDIO_GAME_EFFECT_CONFIG */
|
||||
/**********************************************************************************/
|
||||
|
||||
|
||||
|
||||
#if CONFIG_TWS_PAIR_MODE == CONFIG_TWS_PAIR_BY_CLICK
|
||||
#define CONFIG_TWS_BY_CLICK_PAIR_WITHOUT_PAIR /*双击按键可以配对已配对过的样机,即交叉配对 */
|
||||
#ifdef CONFIG_TWS_BY_CLICK_PAIR_WITHOUT_PAIR
|
||||
#define CONFIG_TWS_AUTO_PAIR_WITHOUT_UNPAIR /* 不取消配对也可以配对新的耳机 */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
#undef CONFIG_TWS_CHANNEL_SELECT
|
||||
#define CONFIG_TWS_CHANNEL_SELECT CONFIG_TWS_SECECT_BY_CHARGESTORE //充电仓区分左右
|
||||
#endif //TCFG_CHARGESTORE_ENABLE
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE && (!TCFG_CHARGESTORE_ENABLE)
|
||||
#define CONFIG_TWS_SECECT_CHARGESTORE_PRIO 1 //测试盒配置左右耳优先
|
||||
#else
|
||||
#define CONFIG_TWS_SECECT_CHARGESTORE_PRIO 0
|
||||
#endif //TCFG_TEST_BOX_ENABLE
|
||||
|
||||
//*********************************************************************************//
|
||||
// 对耳电量显示方式 //
|
||||
//*********************************************************************************//
|
||||
|
||||
#if BT_SUPPORT_DISPLAY_BAT
|
||||
#define CONFIG_DISPLAY_TWS_BAT_LOWER 1 //对耳手机端电量显示,显示低电量耳机的电量
|
||||
#define CONFIG_DISPLAY_TWS_BAT_HIGHER 2 //对耳手机端电量显示,显示高电量耳机的电量
|
||||
#define CONFIG_DISPLAY_TWS_BAT_LEFT 3 //对耳手机端电量显示,显示左耳的电量
|
||||
#define CONFIG_DISPLAY_TWS_BAT_RIGHT 4 //对耳手机端电量显示,显示右耳的电量
|
||||
|
||||
#define CONFIG_DISPLAY_TWS_BAT_TYPE CONFIG_DISPLAY_TWS_BAT_LOWER
|
||||
#endif //BT_SUPPORT_DISPLAY_BAT
|
||||
|
||||
#define CONFIG_DISPLAY_DETAIL_BAT 0 //BLE广播显示具体的电量
|
||||
#define CONFIG_NO_DISPLAY_BUTTON_ICON 1 //BLE广播不显示按键界面,智能充电仓置1
|
||||
|
||||
#endif //TCFG_USER_TWS_ENABLE
|
||||
|
||||
#ifndef CONFIG_BT_RX_BUFF_SIZE
|
||||
#define CONFIG_BT_RX_BUFF_SIZE (14 * 1024)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_APP_BT_ENABLE
|
||||
#if TCFG_BT_SUPPORT_AAC || TCFG_BT_SUPPORT_LDAC
|
||||
#define CONFIG_BT_TX_BUFF_SIZE (5 * 1024)
|
||||
#else
|
||||
#define CONFIG_BT_TX_BUFF_SIZE (4 * 1024)
|
||||
#endif
|
||||
#else
|
||||
#if TCFG_BT_SUPPORT_AAC || TCFG_BT_SUPPORT_LDAC
|
||||
#define CONFIG_BT_TX_BUFF_SIZE (4 * 1024)
|
||||
#else
|
||||
#define CONFIG_BT_TX_BUFF_SIZE (3 * 1024)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef CONFIG_NEW_BREDR_ENABLE
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
|
||||
#ifdef CONFIG_LOCAL_TWS_ENABLE
|
||||
#define CONFIG_TWS_BULK_POOL_SIZE (4 * 1024)
|
||||
#else
|
||||
#define CONFIG_TWS_BULK_POOL_SIZE (2 * 1024)
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#if (CONFIG_BT_MODE != BT_NORMAL)
|
||||
////bqb 如果测试3M tx buf 最好加大一点
|
||||
#undef CONFIG_BT_TX_BUFF_SIZE
|
||||
#define CONFIG_BT_TX_BUFF_SIZE (6 * 1024)
|
||||
|
||||
#endif
|
||||
|
||||
//*********************************************************************************//
|
||||
// 电源切换配置 //
|
||||
//*********************************************************************************//
|
||||
|
||||
#define PHONE_CALL_USE_LDO15 CONFIG_PHONE_CALL_USE_LDO15
|
||||
|
||||
//*********************************************************************************//
|
||||
// 时钟切换配置 //
|
||||
//*********************************************************************************//
|
||||
#define BT_NORMAL_HZ CONFIG_BT_NORMAL_HZ
|
||||
#define BT_CONNECT_HZ CONFIG_BT_CONNECT_HZ
|
||||
|
||||
#define BT_A2DP_HZ CONFIG_BT_A2DP_HZ
|
||||
|
||||
#define BT_CALL_HZ CONFIG_BT_CALL_HZ
|
||||
#define BT_CALL_ADVANCE_HZ CONFIG_BT_CALL_ADVANCE_HZ
|
||||
#define BT_CALL_16k_HZ CONFIG_BT_CALL_16k_HZ
|
||||
#define BT_CALL_16k_ADVANCE_HZ CONFIG_BT_CALL_16k_ADVANCE_HZ
|
||||
|
||||
|
||||
#define MUSIC_DEC_FASTEST_CLOCK CONFIG_MUSIC_DEC_FASTEST_CLOCK
|
||||
#define MUSIC_DEC_FAST_CLOCK CONFIG_MUSIC_DEC_FAST_CLOCK
|
||||
#define MUSIC_DEC_CLOCK CONFIG_MUSIC_DEC_CLOCK
|
||||
#define MUSIC_DEC_IDLE_CLOCK CONFIG_MUSIC_IDLE_CLOCK
|
||||
#define MUSIC_FSCAN_CLOCK CONFIG_MUSIC_FSCAN_CLOCK
|
||||
#define LINEIN_CLOCK CONFIG_LINEIN_CLOCK
|
||||
#define FM_CLOCK CONFIG_FM_CLOCK
|
||||
#define FM_EMITTER_CLOCK CONFIG_FM_EMITTER_CLOCK
|
||||
#define PC_CLOCK CONFIG_PC_CLOCK
|
||||
#define RECODRD_CLOCK CONFIG_RECORD_CLOCK
|
||||
#define SPDIF_CLOCK CONFIG_SPDIF_CLOCK
|
||||
|
||||
////////////////////////
|
||||
#if TCFG_BT_SUPPORT_AAC || TCFG_BT_SUPPORT_LDAC
|
||||
#define BT_A2DP_STEREO_EQ_HZ 48 * 1000000L
|
||||
#else
|
||||
#define BT_A2DP_STEREO_EQ_HZ 32 * 1000000L
|
||||
#endif
|
||||
#define BT_A2DP_AAC_HZ 48 * 1000000L
|
||||
#define BT_A2DP_TWS_AAC_HZ 64 * 1000000L
|
||||
#define BT_A2DP_MONO_EQ_HZ 32 * 1000000L
|
||||
#define BT_A2DP_ONLINE_EQ_HZ 48 * 1000000L
|
||||
|
||||
#define BT_CALL_SIMPLEX_HZ 96 * 1000000L
|
||||
#ifdef CONFIG_ANS_V2
|
||||
//#define BT_CALL_16k_HZ 96 * 1000000L
|
||||
//#define BT_CALL_16k_ADVANCE_HZ 120 * 1000000L
|
||||
#else
|
||||
//#define BT_CALL_16k_HZ 80 * 1000000L
|
||||
//#define BT_CALL_16k_ADVANCE_HZ 96 * 1000000L
|
||||
#endif
|
||||
#define BT_CALL_16k_SIMPLEX_HZ 120 * 1000000L
|
||||
////////////////////////
|
||||
|
||||
#ifdef CONFIG_FPGA_ENABLE
|
||||
|
||||
// #undef TCFG_CLOCK_OSC_HZ
|
||||
// #define TCFG_CLOCK_OSC_HZ 12000000
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef CONFIG_CPU_BR26
|
||||
#undef BT_CALL_16k_HZ
|
||||
#undef BT_CALL_16k_ADVANCE_HZ
|
||||
#define BT_CALL_16k_HZ 96 * 1000000L
|
||||
#define BT_CALL_16k_ADVANCE_HZ 96 * 1000000L
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_BR23
|
||||
#undef BT_A2DP_STEREO_EQ_HZ
|
||||
#define BT_A2DP_STEREO_EQ_HZ 48 * 1000000L
|
||||
#undef BT_A2DP_MONO_EQ_HZ
|
||||
#define BT_A2DP_MONO_EQ_HZ 48 * 1000000L
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_BR25
|
||||
#undef BT_A2DP_STEREO_EQ_HZ
|
||||
#define BT_A2DP_STEREO_EQ_HZ 48 * 1000000L
|
||||
#undef BT_A2DP_MONO_EQ_HZ
|
||||
#define BT_A2DP_MONO_EQ_HZ 48 * 1000000L
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FPGA_ENABLE
|
||||
|
||||
// #undef TCFG_CLOCK_OSC_HZ
|
||||
// #define TCFG_CLOCK_OSC_HZ 12000000
|
||||
|
||||
#undef TCFG_MC_BIAS_AUTO_ADJUST
|
||||
#define TCFG_MC_BIAS_AUTO_ADJUST MC_BIAS_ADJUST_DISABLE
|
||||
|
||||
#endif
|
||||
//*********************************************************************************//
|
||||
// 低功耗配置 //
|
||||
//*********************************************************************************//
|
||||
#if TCFG_IRKEY_ENABLE
|
||||
#undef TCFG_LOWPOWER_LOWPOWER_SEL
|
||||
#define TCFG_LOWPOWER_LOWPOWER_SEL 0 //开红外不进入低功耗
|
||||
#endif /* #if TCFG_IRKEY_ENABLE */
|
||||
|
||||
//*********************************************************************************//
|
||||
// LED使用 16SLOT TIMER 同步 //
|
||||
//*********************************************************************************//
|
||||
//LED模块使用slot timer同步使用注意点:
|
||||
// 1.soundbox不开该功能, 原因: 默认打开osc时钟, 使用原来的osc流程同步即可
|
||||
// 2.带sd卡earphone不开该功能, 一般为单耳, 不需要同步, 使用原来的流程(lrc)
|
||||
// 3.一般用在tws应用中, 而且默认关闭osc;
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
#define TCFG_PWMLED_USE_SLOT_TIME ENABLE_THIS_MOUDLE
|
||||
#endif
|
||||
|
||||
//*********************************************************************************//
|
||||
// 升级配置 //
|
||||
//*********************************************************************************//
|
||||
//升级LED显示使能
|
||||
//#define UPDATE_LED_REMIND
|
||||
//升级提示音使能
|
||||
//#define UPDATE_VOICE_REMIND
|
||||
|
||||
#ifndef CONFIG_UPDATE_JUMP_TO_MASK
|
||||
#define CONFIG_UPDATE_JUMP_TO_MASK 0
|
||||
#endif
|
||||
|
||||
#if CONFIG_UPDATE_JUMP_TO_MASK
|
||||
//升级IO保持使能
|
||||
#define DEV_UPDATE_SUPPORT_JUMP //目前只有br23\br25支持
|
||||
#endif
|
||||
|
||||
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
#define CONFIG_SD_UPDATE_ENABLE
|
||||
#define CONFIG_USB_UPDATE_ENABLE
|
||||
#endif
|
||||
//*********************************************************************************//
|
||||
// Audio配置 //
|
||||
//*********************************************************************************//
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#if ((defined VOL_TYPE_ANALOG) && (SYS_VOL_TYPE == VOL_TYPE_ANALOG)) || \
|
||||
((defined VOL_TYPE_AD) && (SYS_VOL_TYPE == VOL_TYPE_AD))
|
||||
#error "ANC can not use VOL_TYPE_ANALOG and VOL_TYPE_AD!!!"
|
||||
#endif/*(SYS_VOL_TYPE = VOL_TYPE_ANALOG) || (SYS_VOL_TYPE = VOL_TYPE_AD)*/
|
||||
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
||||
|
||||
/*通话语音处理算法放在.data段*/
|
||||
#ifndef TCFG_AUDIO_CVP_CODE_AT_RAM
|
||||
#define TCFG_AUDIO_CVP_CODE_AT_RAM 1
|
||||
#endif/*TCFG_AUDIO_CVP_CODE_AT_RAM*/
|
||||
|
||||
/*AAC解码算法放在.data段*/
|
||||
#ifndef TCFG_AUDIO_AAC_CODE_AT_RAM
|
||||
#define TCFG_AUDIO_AAC_CODE_AT_RAM 1
|
||||
#endif/*TCFG_AUDIO_AAC_CODE_AT_RAM*/
|
||||
|
||||
#if (TCFG_AUDIO_DUAL_MIC_ENABLE && TCFG_AUDIO_TRIPLE_MIC_ENABLE)
|
||||
#error "TCFG_AUDIO_DUAL_MIC_ENABLE and TCFG_AUDIO_TRIPLE_MIC_ENABLE can not enable together !!!"
|
||||
#endif
|
||||
|
||||
//*********************************************************************************//
|
||||
// 充电中按键清除手机配对信息配置 //
|
||||
//*********************************************************************************//
|
||||
|
||||
#define CHARGING_CLEAN_PHONE_INFO 0
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,136 @@
|
||||
#ifndef APP_MAIN_H
|
||||
#define APP_MAIN_H
|
||||
|
||||
typedef struct _USR_VAR {
|
||||
u8 usr_start_write_flash ;
|
||||
u8 usr_plan_cnt ;
|
||||
u8 usr_intterupt_reinit_falg ;
|
||||
u8 usr_goto_updata ;
|
||||
u8 usr_goto_pair ;
|
||||
u8 usr_can_pair ;
|
||||
u8 usr_ota_succ_flag ;
|
||||
u8 usr_adv_flag ;
|
||||
u8 usr_low_power_flag ;
|
||||
u8 usr_allow_to_sleep_cnt;
|
||||
u8 usr_power_charge_flag ;
|
||||
u8 usr_disable_zjhendong;
|
||||
u8 usr_enter_dlps_flag ;
|
||||
|
||||
u16 usr_bat_level_read ;
|
||||
u16 usr_auto_off_cnt ;
|
||||
u16 usr_interrupt_cnt ;
|
||||
u16 usr_adv_interval ;
|
||||
u16 usr_bat_level ;
|
||||
|
||||
u32 usr_data_index ;
|
||||
u32 usr_allow_to_flash ;
|
||||
u32 usr_ota_data_size ;
|
||||
u32 usr_cureent_utc ;
|
||||
|
||||
int usr_double_ota_timer_id ;
|
||||
int ota_timer ;
|
||||
int usr_ota_data_id ;
|
||||
int usr_timezoneOffset ;
|
||||
} USR_VAR;
|
||||
|
||||
|
||||
typedef struct {
|
||||
float talk;
|
||||
float ff;
|
||||
float fb;
|
||||
} audio_mic_cmp_t;
|
||||
|
||||
typedef struct _APP_VAR {
|
||||
s8 bt_volume;
|
||||
s8 dev_volume;
|
||||
s8 music_volume;
|
||||
s8 call_volume;
|
||||
s8 wtone_volume;
|
||||
u8 opid_play_vol_sync;
|
||||
u8 aec_dac_gain;
|
||||
u8 aec_mic_gain;
|
||||
u8 aec_mic1_gain;
|
||||
u8 aec_mic2_gain;
|
||||
u8 aec_mic3_gain;
|
||||
u8 rf_power;
|
||||
u8 goto_poweroff_flag;
|
||||
u8 goto_poweroff_cnt;
|
||||
u8 play_poweron_tone;
|
||||
u8 remote_dev_company;
|
||||
u8 siri_stu;
|
||||
u8 cycle_mode;
|
||||
u8 have_mass_storage;
|
||||
int auto_stop_page_scan_timer; //用于1拖2时,有一台连接上后,超过三分钟自动关闭Page Scan
|
||||
volatile int auto_shut_down_timer;
|
||||
volatile int wait_exit_timer;
|
||||
u16 auto_off_time;
|
||||
u16 warning_tone_v;
|
||||
u16 poweroff_tone_v;
|
||||
u16 phone_dly_discon_time;
|
||||
u8 usb_mic_gain;
|
||||
int wait_timer_do;
|
||||
u32 start_time;
|
||||
float audio_mic_array_diff_cmp;//麦克风阵列补偿值
|
||||
u8 audio_mic_array_trim_en; //麦克风阵列校准
|
||||
audio_mic_cmp_t audio_mic_cmp;
|
||||
float enc_degradation;//default:1,range[0:1]
|
||||
/*3麦通话配置使用:选择第几个mic*/
|
||||
u8 talk_mic_ch; //主MIC通道选择
|
||||
u8 talk_ref_mic_ch; //副MIC通道选择
|
||||
u8 talk_fb_mic_ch; //FB通道选择
|
||||
} APP_VAR;
|
||||
|
||||
typedef struct _BT_USER_PRIV_VAR {
|
||||
//phone
|
||||
u8 phone_ring_flag: 1;
|
||||
u8 phone_num_flag: 1;
|
||||
u8 phone_income_flag: 1;
|
||||
u8 phone_call_dec_begin: 1;
|
||||
u8 phone_con_sync_num_ring: 1;
|
||||
u8 phone_con_sync_ring: 1;
|
||||
// u8 reserved: 2;
|
||||
u8 emitter_or_receiver: 2;
|
||||
u8 get_phone_num_timecnt;
|
||||
|
||||
u8 inband_ringtone;
|
||||
u8 phone_vol;
|
||||
u16 phone_timer_id;
|
||||
u8 last_call_type;
|
||||
u8 income_phone_num[30];
|
||||
u8 income_phone_len;
|
||||
s32 auto_connection_counter;
|
||||
int auto_connection_timer;
|
||||
u8 auto_connection_addr[6];
|
||||
int tws_con_timer;
|
||||
u8 tws_start_con_cnt;
|
||||
u8 tws_conn_state;
|
||||
bool search_tws_ing;
|
||||
int sniff_timer;
|
||||
bool fast_test_mode;
|
||||
} BT_USER_PRIV_VAR;
|
||||
|
||||
#define BT_EMITTER_EN 1
|
||||
#define BT_RECEIVER_EN 2
|
||||
#define earphone (&bt_user_priv_var)
|
||||
|
||||
typedef struct _BT_USER_COMM_VAR {
|
||||
} BT_USER_COMM_VAR;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern APP_VAR app_var;
|
||||
extern USR_VAR usr_var;
|
||||
extern BT_USER_PRIV_VAR bt_user_priv_var;
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef ONLINE_CONFIG_H
|
||||
#define ONLINE_CONFIG_H
|
||||
|
||||
#define DEVICE_EVENT_FROM_CI_UART (('C' << 24) | ('I' << 16) | ('U' << 8) | '\0')
|
||||
#define DEVICE_EVENT_FROM_CI_TWS (('C' << 24) | ('I' << 16) | ('T' << 8) | '\0')
|
||||
|
||||
#define CI_UART 0
|
||||
#define CI_TWS 1
|
||||
|
||||
void ci_data_rx_handler(u8 type);
|
||||
u32 eq_cfg_sync(u8 priority);
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
#ifndef APP_POWER_MANAGE_H
|
||||
#define APP_POWER_MANAGE_H
|
||||
|
||||
#include "typedef.h"
|
||||
#include "system/event.h"
|
||||
|
||||
#define LOW_POWER_SHUTDOWN 300 //低电直接关机电压-拔出不开机-开盖不开机
|
||||
#define LOW_POWER_OFF_VAL 330 //低电关机电压
|
||||
#define LOW_POWER_WARN_VAL 340 //低电提醒电压
|
||||
#define LOW_POWER_WARN_TIME (60 * 1000) //低电提醒时间
|
||||
|
||||
#define DEVICE_EVENT_FROM_POWER (('P' << 24) | ('O' << 16) | ('W' << 8) | '\0')
|
||||
|
||||
enum {
|
||||
POWER_EVENT_POWER_NORMAL,
|
||||
POWER_EVENT_POWER_WARNING,
|
||||
POWER_EVENT_POWER_LOW,
|
||||
POWER_EVENT_POWER_CHANGE,
|
||||
POWER_EVENT_SYNC_TWS_VBAT_LEVEL,
|
||||
POWER_EVENT_POWER_CHARGE,
|
||||
};
|
||||
|
||||
int app_power_event_handler(struct device_event *dev);
|
||||
void check_power_on_voltage(void);
|
||||
u16 get_vbat_level(void);
|
||||
u8 get_vbat_percent(void);
|
||||
void vbat_check_init(void);
|
||||
void vbat_timer_update(u32 msec);
|
||||
void vbat_timer_delete(void);
|
||||
void tws_sync_bat_level(void);
|
||||
u8 get_tws_sibling_bat_level(void);
|
||||
u8 get_tws_sibling_bat_persent(void);
|
||||
bool get_vbat_need_shutdown(void);
|
||||
u8 get_self_battery_level(void);
|
||||
|
||||
void app_power_set_tws_sibling_bat_level(u8 vbat, u8 percent);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef CONFIG_APP_SD_MUSIC_H
|
||||
#define CONFIG_APP_SD_MUSIC_H
|
||||
|
||||
int music_app_check(void);//music 在线检测 切换模式判断使用
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,32 @@
|
||||
#ifndef APP_TASK_H
|
||||
#define APP_TASK_H
|
||||
|
||||
#include "typedef.h"
|
||||
#define NULL_VALUE 0
|
||||
|
||||
enum {
|
||||
APP_BT_TASK,
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
APP_MUSIC_TASK,
|
||||
#endif
|
||||
#if TCFG_PC_ENABLE
|
||||
APP_PC_TASK,
|
||||
#endif
|
||||
APP_RTC_TASK,
|
||||
#if TCFG_APP_AUX_EN
|
||||
APP_AUX_TASK,
|
||||
#endif
|
||||
};
|
||||
|
||||
extern u8 app_curr_task;
|
||||
extern u8 app_next_task;
|
||||
extern u8 app_prev_task;
|
||||
|
||||
int app_task_switch_check(u8 app_task);
|
||||
int app_core_back_to_prev_app_over_check(void);
|
||||
int app_task_switch_to(u8 app_task, int priv);
|
||||
void app_task_switch_next(void);
|
||||
void app_task_switch_prev(void);
|
||||
u8 app_get_curr_task(void);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,18 @@
|
||||
#ifndef _APP_TESTBOX_H_
|
||||
#define _APP_TESTBOX_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "system/event.h"
|
||||
|
||||
extern void testbox_set_bt_init_ok(u8 flag);
|
||||
extern u8 testbox_get_status(void);
|
||||
extern void testbox_clear_status(void);
|
||||
extern u8 testbox_get_ex_enter_dut_flag(void);
|
||||
extern u8 testbox_get_ex_enter_storage_mode_flag(void);
|
||||
extern u8 testbox_get_connect_status(void);
|
||||
extern void testbox_clear_connect_status(void);
|
||||
extern u8 testbox_get_keep_tws_conn_flag(void);
|
||||
extern int app_testbox_event_handler(struct testbox_event *testbox_dev);
|
||||
|
||||
|
||||
#endif //_APP_TESTBOX_H_
|
||||
@@ -0,0 +1,69 @@
|
||||
|
||||
#ifndef __AUDIO_ENC_MPT_FRE_RESPONE_H_
|
||||
#define __AUDIO_ENC_MPT_FRE_RESPONE_H_
|
||||
|
||||
#include "asm/cpu.h"
|
||||
|
||||
/********************用户配置****************************/
|
||||
|
||||
//计算长度 输入单位s16/输出单位float
|
||||
#define AUDIO_ENC_MPT_FRERES_POINT 1024
|
||||
|
||||
/********************非用户配置****************************/
|
||||
|
||||
//MIC频响测试通道ID u16
|
||||
#define AUDIO_ENC_MPT_FF_MIC 0X01 //测试TWS FFMIC or 头戴式LFF MIC
|
||||
#define AUDIO_ENC_MPT_FB_MIC 0X02 //测试TWS FBMIC or 头戴式LFB MIC
|
||||
#define AUDIO_ENC_MPT_RFF_MIC 0X04 //测试头戴式RFF MIC
|
||||
#define AUDIO_ENC_MPT_RFB_MIC 0X08 //测试头戴式RFB MIC
|
||||
#define AUDIO_ENC_MPT_CVP_OUT 0X10 //测试通话算法输出
|
||||
#define AUDIO_ENC_MPT_TALK_MIC 0X20 //测试通话TALK 主MIC
|
||||
#define AUDIO_ENC_MPT_SLAVE_MIC 0X40 //测试通话TALK 副MIC
|
||||
#define AUDIO_ENC_MPT_TALK_FB_MIC 0X80 //测试通话TALK FBMIC
|
||||
|
||||
//常见通道组合
|
||||
//FF+TALK+算法输出频响测试,默认关闭DNS, 外部喇叭发声
|
||||
#define AUDIO_ENC_MPT_CH_TWS_CVP_ENC (AUDIO_ENC_MPT_SLAVE_MIC | AUDIO_ENC_MPT_TALK_MIC | AUDIO_ENC_MPT_CVP_OUT)
|
||||
|
||||
//FF回声/气密性+FB频响测试,耳机喇叭发声
|
||||
#define AUDIO_ENC_MPT_CH_TWS_FF_FB (AUDIO_ENC_MPT_FF_MIC | AUDIO_ENC_MPT_FB_MIC)
|
||||
|
||||
|
||||
#define AUDIO_ENC_MPT_FRERES_ASYNC 1 //是否异步处理, 异步算不过来要加时钟提醒
|
||||
|
||||
enum {
|
||||
ENC_FRE_RES_STATE_START = 0,
|
||||
ENC_FRE_RES_STATE_RUN,
|
||||
ENC_FRE_RES_STATE_STOP,
|
||||
};
|
||||
|
||||
enum {
|
||||
ENC_FRE_RESPONE_MSG_RUN = 0xA1,
|
||||
};
|
||||
|
||||
//更新目标通道输入buf、len
|
||||
void audio_enc_mpt_fre_response_inbuf(u16 id, s16 *buf, int len);
|
||||
|
||||
//音频测试频响计算运行
|
||||
void audio_enc_mpt_fre_response_post_run(u16 id);
|
||||
|
||||
//音频测试频响计算启动, ch 对应目标的通道
|
||||
void audio_enc_mpt_fre_response_start(u16 ch);
|
||||
|
||||
//音频测试频响计算停止
|
||||
void audio_enc_mpt_fre_response_stop(void);
|
||||
|
||||
//工具获取数据文件
|
||||
int audio_enc_mpt_fre_response_file_get(u8 **buf);
|
||||
|
||||
//数据获取结束,释放内存
|
||||
void audio_enc_mpt_fre_response_release(void);
|
||||
|
||||
//音频测试MIC频响开启, ch 对应目标的通道
|
||||
void audio_enc_mpt_fre_response_open(u16 ch);
|
||||
|
||||
//音频测试MIC频响关闭
|
||||
void audio_enc_mpt_fre_response_close(void);
|
||||
|
||||
#endif /*__AUDIO_ENC_MPT_FRE_RESPONE_H_*/
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#ifndef BT_BACKGROUND_H
|
||||
#define BT_BACKGROUND_H
|
||||
|
||||
|
||||
#include "generic/typedef.h"
|
||||
|
||||
bool bt_in_background();
|
||||
|
||||
|
||||
void bt_switch_to_foreground(int action, bool exit_curr_app);
|
||||
|
||||
|
||||
int bt_switch_to_background();
|
||||
|
||||
|
||||
void bt_stop_a2dp_slience_detect();
|
||||
|
||||
|
||||
void bt_start_a2dp_slience_detect(int ingore_packet_num);
|
||||
|
||||
|
||||
int bt_background_event_probe_handler(struct bt_event *bt);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
#ifndef APP_BT_BLE_H
|
||||
#define APP_BT_BLE_H
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
// #define ADV_RSP_PACKET_MAX 31
|
||||
#define ADV_RAND_MAX 7
|
||||
|
||||
// typedef struct {
|
||||
// u16 pid; //厂家id,默认用杰理的id (0x5d6)
|
||||
// u8 private_data[17];//厂家自定义数据内容
|
||||
|
||||
// } manufacturer_data_t;
|
||||
|
||||
enum {
|
||||
ICON_TYPE_INQUIRY = 0,
|
||||
ICON_TYPE_CONNECTED,
|
||||
ICON_TYPE_RECONNECT,
|
||||
ICON_TYPE_PRE_DEV,
|
||||
};
|
||||
|
||||
|
||||
enum {
|
||||
ADV_ST_NULL,
|
||||
ADV_ST_PRE1,
|
||||
ADV_ST_PRE2,
|
||||
ADV_ST_INQUIRY,
|
||||
ADV_ST_CONN,
|
||||
ADV_ST_RECONN,
|
||||
ADV_ST_DISMISS,
|
||||
ADV_ST_FAST_DISMISS,
|
||||
ADV_ST_END,
|
||||
};
|
||||
|
||||
extern void bt_ble_icon_set(u8 *info, u8 len);
|
||||
extern u8 bt_ble_get_adv_enable(void);
|
||||
extern void bt_ble_icon_open(u8 type);
|
||||
extern void bt_ble_icon_close(u8 dismiss_flag);
|
||||
extern void bt_ble_icon_set_comm_address(u8 *addr);
|
||||
extern void bt_ble_icon_reset(void);
|
||||
extern void bt_ble_set_control_en(u8 en);
|
||||
extern void bt_ble_icon_slave_en(u8 en);
|
||||
extern u8 bt_ble_icon_get_adv_state(void);
|
||||
extern void bt_ble_icon_role_switch(u8 role);
|
||||
extern void bt_ble_icon_state_sniff(u8 state);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
#ifndef _BT_EMITTER_H
|
||||
#define _BT_EMITTER_H
|
||||
|
||||
|
||||
extern void bt_search_device(void);
|
||||
extern void emitter_search_noname(u8 status, u8 *addr, u8 *name);
|
||||
extern u8 bt_emitter_stu_set(u8 *addr, u8 on);
|
||||
extern u8 bt_emitter_stu_get(void);
|
||||
extern int bt_emitter_mic_open(void);
|
||||
extern void bt_emitter_mic_close(void);
|
||||
extern int bt_emitter_iis_open(void);
|
||||
extern void bt_emitter_iis_close(void);
|
||||
extern void emitter_media_source(u8 *addr, u8 source, u8 en);
|
||||
extern u8 emitter_search_result(char *name, u8 name_len, u8 *addr, u32 dev_class, char rssi);
|
||||
extern void emitter_search_stop(u8 result);
|
||||
extern void emitter_media_source(u8 *addr, u8 source, u8 en);
|
||||
extern void bt_emitter_receiver_sw();
|
||||
extern u8 bt_emitter_pp(u8 pp);
|
||||
extern void emitter_or_receiver_switch(u8 flag);
|
||||
extern u8 bt_emitter_role_get();
|
||||
extern void bt_emitter_start_search_device();
|
||||
extern void bt_emitter_stop_search_device();
|
||||
extern void emitter_open(u8 source);
|
||||
extern void emitter_close(u8 source);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,194 @@
|
||||
#ifndef APP_BT_TWS_H
|
||||
#define APP_BT_TWS_H
|
||||
|
||||
#include "classic/tws_api.h"
|
||||
#include "classic/tws_event.h"
|
||||
#include "system/includes.h"
|
||||
|
||||
#define TWS_FUNC_ID_VOL_SYNC TWS_FUNC_ID('V', 'O', 'L', 'S')
|
||||
#define TWS_FUNC_ID_VBAT_SYNC TWS_FUNC_ID('V', 'B', 'A', 'T')
|
||||
#define TWS_FUNC_ID_CHARGE_SYNC TWS_FUNC_ID('C', 'H', 'G', 'S')
|
||||
#define TWS_FUNC_ID_BOX_SYNC TWS_FUNC_ID('B', 'O', 'X', 'S')
|
||||
#define TWS_FUNC_ID_AI_DMA_RAND TWS_FUNC_ID('A', 'I', 'D', 'M')
|
||||
#define TWS_FUNC_ID_AI_SPEECH_STOP TWS_FUNC_ID('A', 'I', 'S', 'T')
|
||||
#define TWS_FUNC_ID_APP_MODE TWS_FUNC_ID('M', 'O', 'D', 'E')
|
||||
#define TWS_FUNC_ID_AI_SYNC TWS_FUNC_ID('A', 'I', 'P', 'A')
|
||||
#define TWS_FUNC_ID_EAR_DETECT_SYNC TWS_FUNC_ID('E', 'D', 'E', 'T')
|
||||
#define TWS_FUNC_ID_LL_SYNC_STATE TWS_FUNC_ID('L', 'L', 'S', 'S')
|
||||
#define TWS_FUNC_ID_TUYA_STATE TWS_FUNC_ID('T', 'U', 'Y', 'A')
|
||||
|
||||
enum {
|
||||
DEBUG_LINK_PAGE_STATE = 0,
|
||||
DEBUG_LINK_INQUIRY_STATE,
|
||||
DEBUG_LINK_PAGE_SCAN_STATE,
|
||||
DEBUG_LINK_INQUIRY_SCAN_STATE,
|
||||
DEBUG_LINK_CONNECTION_STATE,
|
||||
DEBUG_LINK_PAGE_TWS_STATE,
|
||||
DEBUG_LINK_PAGE_SCAN_TWS_STATE,
|
||||
};
|
||||
enum {
|
||||
BT_TWS_STATUS_INIT_OK = 1,
|
||||
BT_TWS_STATUS_SEARCH_START,
|
||||
BT_TWS_STATUS_SEARCH_TIMEOUT,
|
||||
BT_TWS_STATUS_PHONE_CONN,
|
||||
BT_TWS_STATUS_PHONE_DISCONN,
|
||||
};
|
||||
|
||||
enum {
|
||||
SYNC_TONE_TWS_CONNECTED = 1,
|
||||
SYNC_TONE_PHONE_CONNECTED,
|
||||
SYNC_TONE_PHONE_DISCONNECTED,
|
||||
SYNC_TONE_PHONE_NUM,
|
||||
SYNC_TONE_PHONE_RING,
|
||||
SYNC_TONE_PHONE_NUM_RING,
|
||||
SYNC_TONE_MAX_VOL,
|
||||
SYNC_TONE_POWER_OFF,
|
||||
SYNC_TONE_ANC_ON,
|
||||
SYNC_TONE_ANC_OFF,
|
||||
SYNC_TONE_ANC_TRANS,
|
||||
SYNC_TONE_EARDET_IN,
|
||||
SYNC_TONE_VOICE_RECOGNIZE,
|
||||
SYNC_TONE_HEARING_AID_OPEN,
|
||||
SYNC_TONE_DHA_FITTING_CLOSE,
|
||||
SYNC_TONE_ICSD_ADT_SUSPEND,
|
||||
SYNC_TONE_ICSD_ADT_VOICE_STATE,
|
||||
SYNC_TONE_ICSD_ADT_OPEN,
|
||||
};
|
||||
|
||||
enum {
|
||||
SYNC_LED_STA_TWS_CONN,
|
||||
SYNC_LED_STA_PHONE_CONN,
|
||||
SYNC_LED_STA_PHONE_DISCONN,
|
||||
};
|
||||
|
||||
enum {
|
||||
SYNC_CMD_SHUT_DOWN_TIME,
|
||||
SYNC_CMD_POWER_OFF_TOGETHER,
|
||||
SYNC_CMD_LOW_LATENCY_ENABLE,
|
||||
SYNC_CMD_LOW_LATENCY_DISABLE,
|
||||
SYNC_CMD_EARPHONE_CHAREG_START,
|
||||
SYNC_CMD_IRSENSOR_EVENT_NEAR,
|
||||
SYNC_CMD_IRSENSOR_EVENT_FAR,
|
||||
#if(USE_DMA_TONE)
|
||||
SYNC_CMD_CUT_TWS_TONE, //断开对耳提示音
|
||||
SYNC_CMD_START_SPEECH_TONE,//AI键提示音
|
||||
SYNC_CMD_DMA_CONNECTED_ALL_FINISH_TONE, //AI连接成功
|
||||
SYNC_CMD_NEED_BT_TONE, //需要连接蓝牙
|
||||
SYNC_CMD_PLEASE_OPEN_XIAODU_TONE,//请打开小度
|
||||
#endif
|
||||
#if(RCSP_ADV_EN)
|
||||
SYNC_CMD_SYNC_ADV_SETTING,
|
||||
SYNC_CMD_ADV_COMMON_SETTING_SYNC,
|
||||
SYNC_CMD_APP_RESET_LED_UI,
|
||||
SYNC_CMD_MUSIC_INFO,
|
||||
SYNC_CMD_RCSP_AUTH_RES,
|
||||
SYNC_CMD_MUSIC_PLAYER_STATE,
|
||||
SYNC_CMD_MUSIC_PLAYER_TIEM_EN,
|
||||
#endif
|
||||
SYNC_CMD_OPUS_CLOSE,
|
||||
};
|
||||
|
||||
enum {
|
||||
TWS_SYNC_VOL = 0,
|
||||
TWS_SYNC_VBAT,
|
||||
TWS_SYNC_CHG,
|
||||
TWS_SYNC_CALL_VOL,
|
||||
TWS_SYNC_PBG_INFO,
|
||||
TWS_SYNC_ADSP_UART_CMD,
|
||||
TWS_APP_DATA_SEND,
|
||||
TWS_AI_DMA_RAND,
|
||||
TWS_DATA_SEND,
|
||||
|
||||
TWS_UPDATE_START,
|
||||
TWS_UPDATE_RESULT_EXCHANGE,
|
||||
TWS_UPDATE_RESULT_EXCHANGE_RES,
|
||||
TWS_UPDATE_OVER,
|
||||
TWS_UPDATE_OVER_CONFIRM,
|
||||
TWS_UPDATE_OVER_CONFIRM_REQ,
|
||||
TWS_UPDATE_OVER_CONFIRM_RES,
|
||||
TWS_UPDATE_VERIFY,
|
||||
|
||||
TWS_AI_A2DP_DROP_FRAME_CTL,
|
||||
};
|
||||
struct tws_sync_info_t {
|
||||
u8 type;
|
||||
union {
|
||||
s8 volume_lev;
|
||||
u16 vbat_lev;
|
||||
u8 chg_lev;
|
||||
u8 adsp_cmd[2];
|
||||
u8 conn_type;
|
||||
u8 data[9];
|
||||
u8 data_large[32];
|
||||
} u;
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct tws_sync_big_info_t {
|
||||
u8 type;
|
||||
u8 sub_type;
|
||||
union {
|
||||
u8 pbg_info[36];
|
||||
} u;
|
||||
};
|
||||
|
||||
|
||||
typedef struct time_stamp_bt_name {
|
||||
u8 bt_name[32];
|
||||
u32 time_stamp;
|
||||
} tws_time_stamp_bt_name;
|
||||
|
||||
|
||||
#define TWS_WAIT_CONN_TIMEOUT (400)
|
||||
|
||||
#define TWS_SYNC_TIME_DO 400
|
||||
// #define TWS_CON_SUPER_TIMEOUT 8000
|
||||
#define TWS_CON_SEARCH_TIMEOUT 0x07//(n*1.28s)
|
||||
|
||||
|
||||
char bt_tws_get_local_channel();
|
||||
|
||||
int bt_tws_connction_status_event_handler(struct bt_event *evt);
|
||||
|
||||
int bt_tws_poweron();
|
||||
|
||||
int bt_tws_poweroff();
|
||||
|
||||
int bt_tws_start_search_sibling();
|
||||
|
||||
void bt_tws_hci_event_connect();
|
||||
|
||||
bool get_tws_phone_connect_state(void);
|
||||
|
||||
int bt_tws_phone_connected();
|
||||
|
||||
void bt_tws_phone_page_timeout();
|
||||
|
||||
void bt_tws_phone_connect_timeout();
|
||||
|
||||
void bt_tws_phone_disconnected();
|
||||
|
||||
int bt_tws_sync_phone_num(void *priv);
|
||||
|
||||
int bt_tws_sync_led_status();
|
||||
|
||||
int get_bt_tws_connect_status();
|
||||
u8 get_bt_tws_discon_dly_state();
|
||||
|
||||
void bt_tws_sync_volume();
|
||||
|
||||
u8 tws_network_audio_was_started(void);
|
||||
|
||||
void tws_network_local_audio_start(void);
|
||||
|
||||
u32 bt_tws_future_slot_time(u32 msecs);
|
||||
|
||||
void bt_tws_play_tone_at_same_time(int tone_name, int msec);
|
||||
void bt_tws_led_state_sync(int led_state, int msec);
|
||||
bool get_tws_sibling_connect_state(void);
|
||||
|
||||
void tws_cancle_all_noconn();
|
||||
void tws_sniff_controle_check_enable(void);
|
||||
void tws_sniff_controle_check_disable(void);
|
||||
#endif
|
||||
@@ -0,0 +1,41 @@
|
||||
#ifndef DEFAULT_EVENT_HANDLER_H
|
||||
#define DEFAULT_EVENT_HANDLER_H
|
||||
|
||||
|
||||
#include "system/includes.h"
|
||||
|
||||
|
||||
void default_event_handler(struct sys_event *event);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,272 @@
|
||||
#ifndef EARPHONE_H
|
||||
#define EARPHONE_H
|
||||
|
||||
#include "system/includes.h"
|
||||
///搜索完整结束的事件
|
||||
#define HCI_EVENT_INQUIRY_COMPLETE 0x01
|
||||
///连接完成的事件
|
||||
#define HCI_EVENT_CONNECTION_COMPLETE 0x03
|
||||
///断开的事件,会有一些错误码区分不同情况的断开
|
||||
#define HCI_EVENT_DISCONNECTION_COMPLETE 0x05
|
||||
///连接中请求pin code的事件,给这个事件上来目前是做了一个确认的操作
|
||||
#define HCI_EVENT_PIN_CODE_REQUEST 0x16
|
||||
///连接设备发起了简易配对加密的连接
|
||||
#define HCI_EVENT_IO_CAPABILITY_REQUEST 0x31
|
||||
///这个事件上来目前是做了一个连接确认的操作
|
||||
#define HCI_EVENT_USER_CONFIRMATION_REQUEST 0x33
|
||||
///这个事件是需要输入6个数字的连接消息,一般在键盘应用才会有
|
||||
#define HCI_EVENT_USER_PASSKEY_REQUEST 0x34
|
||||
///<可用于显示输入passkey位置 value 0:start 1:enrer 2:earse 3:clear 4:complete
|
||||
#define HCI_EVENT_USER_PRESSKEY_NOTIFICATION 0x3B
|
||||
///杰理自定义的事件,上电回连的时候读不到VM的地址。
|
||||
#define HCI_EVENT_VENDOR_NO_RECONN_ADDR 0xF8
|
||||
///杰理自定义的事件,有测试盒连接的时候会有这个事件
|
||||
#define HCI_EVENT_VENDOR_REMOTE_TEST 0xFE
|
||||
///杰理自定义的事件,可以认为是断开之后协议栈资源释放完成的事件
|
||||
#define BTSTACK_EVENT_HCI_CONNECTIONS_DELETE 0x6D
|
||||
|
||||
|
||||
#define ERROR_CODE_SUCCESS 0x00
|
||||
///<回连超时退出消息
|
||||
#define ERROR_CODE_PAGE_TIMEOUT 0x04
|
||||
///<连接过程中linkkey错误
|
||||
#define ERROR_CODE_AUTHENTICATION_FAILURE 0x05
|
||||
///<连接过程中linkkey丢失,手机删除了linkkey,回连就会出现一次
|
||||
#define ERROR_CODE_PIN_OR_KEY_MISSING 0x06
|
||||
///<连接超时,一般拿远就会断开有这个消息
|
||||
#define ERROR_CODE_CONNECTION_TIMEOUT 0x08
|
||||
///<连接个数超出了资源允许
|
||||
#define ERROR_CODE_SYNCHRONOUS_CONNECTION_LIMIT_TO_A_DEVICE_EXCEEDED 0x0A
|
||||
///<回连的时候发现设备还没释放我们这个地址,一般直接断电开机回连会出现
|
||||
#define ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS 0x0B
|
||||
///<需要回连的设备资源不够。有些手机连了一个设备之后就会用这个拒绝。或者其它的资源原因
|
||||
#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES 0x0D
|
||||
///<有些可能只允许指定地址连接的,可能会用这个去拒绝连接。或者我们设备的地址全0或者有问题
|
||||
#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE_BD_ADDR 0x0F
|
||||
///<连接的时间太长了,手机要断开了。这种容易复现可以联系我们分析
|
||||
#define ERROR_CODE_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED 0x10
|
||||
///<经常用的连接断开消息。就认为断开就行
|
||||
#define ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION 0x13
|
||||
///<正常的断开消息,本地L2CAP资源释放之后就会发这个值上来了
|
||||
#define ERROR_CODE_CONNECTION_TERMINATED_BY_LOCAL_HOST 0x16
|
||||
///<回连的时候发现设备两次role switch失败了,发断开在重新连接
|
||||
#define ERROR_CODE_ROLE_SWITCH_FAILED 0x35
|
||||
///杰理自定义,在回连的过程中使用page cancel命令主动取消成功会有这个命令
|
||||
#define CUSTOM_BB_AUTO_CANCEL_PAGE 0xFD //// app cancle page
|
||||
///杰理自定义,库里面有些功能需要停止page的时候会有。比如page的时候来了电话
|
||||
#define BB_CANCEL_PAGE 0xFE //// bb cancle page
|
||||
|
||||
|
||||
#if (TCFG_USER_BLE_ENABLE && (CONFIG_BT_MODE == BT_NORMAL))
|
||||
|
||||
#if RCSP_ADV_EN
|
||||
|
||||
int rcsp_earphone_state_init();
|
||||
int rcsp_earphone_state_set_page_scan_enable();
|
||||
int rcsp_earphone_state_get_connect_mac_addr();
|
||||
int rcsp_earphone_state_cancel_page_scan();
|
||||
int rcsp_earphone_state_enter_soft_poweroff();
|
||||
int rcsp_earphone_state_tws_init(int paired);
|
||||
int rcsp_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
|
||||
int rcsp_sys_event_handler_specific(struct sys_event *event);
|
||||
|
||||
#define EARPHONE_STATE_INIT() rcsp_earphone_state_init()
|
||||
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() rcsp_earphone_state_set_page_scan_enable()
|
||||
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() rcsp_earphone_state_get_connect_mac_addr()
|
||||
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() rcsp_earphone_state_cancel_page_scan()
|
||||
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() rcsp_earphone_state_enter_soft_poweroff()
|
||||
#define EARPHONE_STATE_TWS_INIT(a) rcsp_earphone_state_tws_init(a)
|
||||
#define EARPHONE_STATE_TWS_CONNECTED(a, b) rcsp_earphone_state_tws_connected(a,b)
|
||||
#define SYS_EVENT_HANDLER_SPECIFIC(a) rcsp_sys_event_handler_specific(a)
|
||||
#define SYS_EVENT_REMAP(a) 0
|
||||
#define EARPHONE_STATE_SNIFF(a)
|
||||
#define EARPHONE_STATE_ROLE_SWITCH(a)
|
||||
|
||||
#elif TRANS_DATA_EN
|
||||
|
||||
int trans_data_earphone_state_init();
|
||||
int trans_data_earphone_state_set_page_scan_enable();
|
||||
int trans_data_earphone_state_get_connect_mac_addr();
|
||||
int trans_data_earphone_state_cancel_page_scan();
|
||||
int trans_data_earphone_state_enter_soft_poweroff();
|
||||
int trans_data_earphone_state_tws_init(int paired);
|
||||
int trans_data_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
|
||||
int trans_data_sys_event_handler_specific(struct sys_event *event);
|
||||
|
||||
#define EARPHONE_STATE_INIT() trans_data_earphone_state_init()
|
||||
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() trans_data_earphone_state_set_page_scan_enable()
|
||||
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() trans_data_earphone_state_get_connect_mac_addr()
|
||||
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() trans_data_earphone_state_cancel_page_scan()
|
||||
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() trans_data_earphone_state_enter_soft_poweroff()
|
||||
#define EARPHONE_STATE_TWS_INIT(a) trans_data_earphone_state_tws_init(a)
|
||||
#define EARPHONE_STATE_TWS_CONNECTED(a, b) trans_data_earphone_state_tws_connected(a,b)
|
||||
#define SYS_EVENT_HANDLER_SPECIFIC(a) trans_data_sys_event_handler_specific(a)
|
||||
#define SYS_EVENT_REMAP(a) 0
|
||||
#define EARPHONE_STATE_SNIFF(a)
|
||||
#define EARPHONE_STATE_ROLE_SWITCH(a)
|
||||
|
||||
#elif BLE_HID_EN
|
||||
|
||||
int ble_hid_earphone_state_init();
|
||||
int ble_hid_earphone_state_set_page_scan_enable();
|
||||
int ble_hid_earphone_state_get_connect_mac_addr();
|
||||
int ble_hid_earphone_state_cancel_page_scan();
|
||||
int ble_hid_earphone_state_enter_soft_poweroff();
|
||||
int ble_hid_earphone_state_tws_init(int paired);
|
||||
int ble_hid_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
|
||||
int ble_hid_sys_event_handler_specific(struct sys_event *event);
|
||||
|
||||
#define EARPHONE_STATE_INIT() ble_hid_earphone_state_init()
|
||||
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() ble_hid_earphone_state_set_page_scan_enable()
|
||||
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() ble_hid_earphone_state_get_connect_mac_addr()
|
||||
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() ble_hid_earphone_state_cancel_page_scan()
|
||||
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() ble_hid_earphone_state_enter_soft_poweroff()
|
||||
#define EARPHONE_STATE_TWS_INIT(a) ble_hid_earphone_state_tws_init(a)
|
||||
#define EARPHONE_STATE_TWS_CONNECTED(a, b) ble_hid_earphone_state_tws_connected(a,b)
|
||||
#define SYS_EVENT_HANDLER_SPECIFIC(a) ble_hid_sys_event_handler_specific(a)
|
||||
#define SYS_EVENT_REMAP(a) 0
|
||||
#define EARPHONE_STATE_SNIFF(a)
|
||||
#define EARPHONE_STATE_ROLE_SWITCH(a)
|
||||
|
||||
|
||||
|
||||
#elif LL_SYNC_EN
|
||||
|
||||
int ll_sync_earphone_state_init();
|
||||
int ll_sync_earphone_state_set_page_scan_enable();
|
||||
int ll_sync_earphone_state_get_connect_mac_addr();
|
||||
int ll_sync_earphone_state_cancel_page_scan();
|
||||
int ll_sync_earphone_state_enter_soft_poweroff();
|
||||
int ll_sync_earphone_state_tws_init(int paired);
|
||||
int ll_sync_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
|
||||
int ll_sync_sys_event_handler_specific(struct sys_event *event);
|
||||
|
||||
#define EARPHONE_STATE_INIT() ll_sync_earphone_state_init()
|
||||
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() ll_sync_earphone_state_set_page_scan_enable()
|
||||
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() ll_sync_earphone_state_get_connect_mac_addr()
|
||||
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() ll_sync_earphone_state_cancel_page_scan()
|
||||
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() ll_sync_earphone_state_enter_soft_poweroff()
|
||||
#define EARPHONE_STATE_TWS_INIT(a) ll_sync_earphone_state_tws_init(a)
|
||||
#define EARPHONE_STATE_TWS_CONNECTED(a, b) ll_sync_earphone_state_tws_connected(a,b)
|
||||
#define SYS_EVENT_HANDLER_SPECIFIC(a) ll_sync_sys_event_handler_specific(a)
|
||||
#define SYS_EVENT_REMAP(a) 0
|
||||
#define EARPHONE_STATE_SNIFF(a)
|
||||
#define EARPHONE_STATE_ROLE_SWITCH(a)
|
||||
|
||||
#elif TUYA_DEMO_EN
|
||||
int tuya_earphone_state_init();
|
||||
int tuya_earphone_state_set_page_scan_enable();
|
||||
int tuya_earphone_state_get_connect_mac_addr();
|
||||
int tuya_earphone_state_cancel_page_scan();
|
||||
int tuya_earphone_state_enter_soft_poweroff();
|
||||
int tuya_earphone_state_tws_init(int paired);
|
||||
int tuya_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
|
||||
int tuya_sys_event_handler_specific(struct sys_event *event);
|
||||
|
||||
#define EARPHONE_STATE_INIT() tuya_earphone_state_init()
|
||||
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() tuya_earphone_state_set_page_scan_enable()
|
||||
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() tuya_earphone_state_get_connect_mac_addr()
|
||||
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() tuya_earphone_state_cancel_page_scan()
|
||||
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() tuya_earphone_state_enter_soft_poweroff()
|
||||
#define EARPHONE_STATE_TWS_INIT(a) tuya_earphone_state_tws_init(a)
|
||||
#define EARPHONE_STATE_TWS_CONNECTED(a, b) tuya_earphone_state_tws_connected(a,b)
|
||||
#define SYS_EVENT_HANDLER_SPECIFIC(a) tuya_sys_event_handler_specific(a)
|
||||
#define SYS_EVENT_REMAP(a) 0
|
||||
#define EARPHONE_STATE_SNIFF(a)
|
||||
#define EARPHONE_STATE_ROLE_SWITCH(a)
|
||||
|
||||
|
||||
#elif (AI_APP_PROTOCOL | LE_AUDIO_EN)
|
||||
|
||||
int app_protocol_sys_event_handler(struct sys_event *event);
|
||||
#define EARPHONE_STATE_INIT() do { } while(0)
|
||||
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() do { } while(0)
|
||||
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() do { } while(0)
|
||||
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() do { } while(0)
|
||||
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() do { } while(0)
|
||||
#define EARPHONE_STATE_TWS_INIT(a) do { } while(0)
|
||||
#define EARPHONE_STATE_TWS_CONNECTED(a, b) do { } while(0)
|
||||
#define SYS_EVENT_HANDLER_SPECIFIC(a) app_protocol_sys_event_handler(a)
|
||||
#define SYS_EVENT_REMAP(a) 0
|
||||
#define EARPHONE_STATE_SNIFF(a)
|
||||
#define EARPHONE_STATE_ROLE_SWITCH(a)
|
||||
|
||||
#elif TCFG_WIRELESS_MIC_ENABLE
|
||||
#define EARPHONE_STATE_INIT() do { } while(0)
|
||||
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() do { } while(0)
|
||||
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() do { } while(0)
|
||||
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() do { } while(0)
|
||||
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() do { } while(0)
|
||||
#define EARPHONE_STATE_TWS_INIT(a) do { } while(0)
|
||||
#define EARPHONE_STATE_TWS_CONNECTED(a, b) do { } while(0)
|
||||
#define SYS_EVENT_HANDLER_SPECIFIC(a) do { } while(0)
|
||||
#define SYS_EVENT_REMAP(a) 0
|
||||
#define EARPHONE_STATE_SNIFF(a)
|
||||
#define EARPHONE_STATE_ROLE_SWITCH(a)
|
||||
|
||||
#else
|
||||
int adv_earphone_state_init();
|
||||
int adv_earphone_state_set_page_scan_enable();
|
||||
int adv_earphone_state_get_connect_mac_addr();
|
||||
int adv_earphone_state_cancel_page_scan();
|
||||
int adv_earphone_state_enter_soft_poweroff();
|
||||
int adv_earphone_state_tws_init(int paired);
|
||||
int adv_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
|
||||
int adv_sys_event_handler_specific(struct sys_event *event);
|
||||
int adv_earphone_state_sniff(u8 state);
|
||||
int adv_earphone_state_role_switch(u8 role);
|
||||
|
||||
#define EARPHONE_STATE_INIT() adv_earphone_state_init()
|
||||
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() adv_earphone_state_set_page_scan_enable()
|
||||
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() adv_earphone_state_get_connect_mac_addr()
|
||||
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() adv_earphone_state_cancel_page_scan()
|
||||
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() adv_earphone_state_enter_soft_poweroff()
|
||||
#define EARPHONE_STATE_TWS_INIT(a) adv_earphone_state_tws_init(a)
|
||||
#define EARPHONE_STATE_TWS_CONNECTED(a, b) adv_earphone_state_tws_connected(a,b)
|
||||
#define SYS_EVENT_HANDLER_SPECIFIC(a) adv_sys_event_handler_specific(a)
|
||||
#define SYS_EVENT_REMAP(a) 0
|
||||
#define EARPHONE_STATE_SNIFF(a) adv_earphone_state_sniff(a)
|
||||
#define EARPHONE_STATE_ROLE_SWITCH(a) adv_earphone_state_role_switch(a)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#else
|
||||
|
||||
#define EARPHONE_STATE_INIT() do { } while(0)
|
||||
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() do { } while(0)
|
||||
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() do { } while(0)
|
||||
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() do { } while(0)
|
||||
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() do { } while(0)
|
||||
#define EARPHONE_STATE_TWS_INIT(a) do { } while(0)
|
||||
#define EARPHONE_STATE_TWS_CONNECTED(a, b) do { } while(0)
|
||||
#define SYS_EVENT_HANDLER_SPECIFIC(a) do { } while(0)
|
||||
#define SYS_EVENT_REMAP(a) 0
|
||||
#define EARPHONE_STATE_SNIFF(a)
|
||||
#define EARPHONE_STATE_ROLE_SWITCH(a)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
extern void sys_auto_shut_down_enable(void);
|
||||
|
||||
extern void sys_auto_shut_down_disable(void);
|
||||
|
||||
extern int bt_in_background_event_handler(struct sys_event *event);
|
||||
|
||||
extern u8 bt_app_exit_check(void);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,103 @@
|
||||
#ifndef __KEY_EVENT_DEAL_H__
|
||||
#define __KEY_EVENT_DEAL_H__
|
||||
|
||||
#include "typedef.h"
|
||||
#include "bt_profile_cfg.h"
|
||||
#include "system/event.h"
|
||||
|
||||
enum {
|
||||
KEY_POWER_ON = KEY_EVENT_MAX,
|
||||
KEY_POWEROFF,
|
||||
KEY_POWEROFF_HOLD,
|
||||
KEY_POWEROFF_HOLD_UP,
|
||||
KEY_MUSIC_PP,
|
||||
KEY_MUSIC_PREV,
|
||||
KEY_MUSIC_NEXT,
|
||||
KEY_VOL_UP,
|
||||
KEY_VOL_DOWN,
|
||||
KEY_CALL_LAST_NO,
|
||||
KEY_CALL_HANG_UP,
|
||||
KEY_CALL_ANSWER,
|
||||
KEY_CALL_ANSWER_UP,
|
||||
KEY_OPEN_SIRI,
|
||||
KEY_HID_CONTROL,
|
||||
KEY_LOW_LANTECY,
|
||||
KEY_MODE_SWITCH,
|
||||
KEY_IR_NUM_0,
|
||||
KEY_IR_NUM_1,
|
||||
KEY_IR_NUM_2,
|
||||
KEY_EQ_MODE,
|
||||
KEY_THIRD_CLICK,
|
||||
|
||||
KEY_MUSIC_FF,
|
||||
KEY_MUSIC_FR,
|
||||
KEY_MUSIC_PLAYER_START,
|
||||
KEY_MUSIC_PLAYER_END,
|
||||
KEY_MUSIC_PLAYER_DEC_ERR,
|
||||
KEY_MUSIC_DEVICE_TONE_END,
|
||||
KEY_MUSIC_PLAYER_QUIT,
|
||||
KEY_MUSIC_PLAYER_AUTO_NEXT,
|
||||
KEY_MUSIC_PLAYER_PLAY_FIRST,
|
||||
KEY_MUSIC_PLAYER_PLAY_LAST,
|
||||
KEY_MUSIC_CHANGE_REPEAT,
|
||||
KEY_MUSIC_CHANGE_DEV,
|
||||
KEY_MUSIC_AUTO_NEXT_DEV,
|
||||
KEY_MUSIC_CHANGE_DEV_REPEAT,
|
||||
KEY_MUSIC_SET_PITCH,
|
||||
KEY_MUSIC_SET_SPEED,
|
||||
KEY_MUSIC_PLAYE_BY_DEV_FILENUM,
|
||||
KEY_MUSIC_PLAYE_BY_DEV_SCLUST,
|
||||
KEY_MUSIC_PLAYE_BY_DEV_PATH,
|
||||
KEY_MUSIC_DELETE_FILE,
|
||||
KEY_MUSIC_PLAYE_NEXT_FOLDER,
|
||||
KEY_MUSIC_PLAYE_PREV_FOLDER,
|
||||
KEY_MUSIC_PLAYE_REC_FOLDER_SWITCH,
|
||||
KEY_MUSIC_PLAYER_AB_REPEAT_SWITCH,
|
||||
|
||||
KEY_SEND_SPEECH_START,
|
||||
KEY_SEND_SPEECH_STOP,
|
||||
#if (BT_FOR_APP_EN)
|
||||
KEY_AI_DEC_SUSPEND,
|
||||
KEY_AI_DEC_RESUME,
|
||||
|
||||
#endif
|
||||
|
||||
KEY_EARTCH_ENABLE,
|
||||
KEY_EARTCH_DISABLE,
|
||||
KEY_ANC_SWITCH,
|
||||
KEY_ANC_EAR_ADAPTIVE,
|
||||
KEY_ANC_COEFF_SWITCH,
|
||||
KEY_MUSIC_EFF, //播歌音效切换
|
||||
KEY_PHONE_PITCH,//通话上行 变声切换
|
||||
KEY_HEARING_AID_TOGGLE,//辅听功能开关
|
||||
|
||||
MSG_HALF_SECOND,
|
||||
KEY_CLEAN_PHONE_INFO,
|
||||
KEY_CLEAN_PHONE_INFO_HOLD,
|
||||
KEY_CLEAN_PHONE_INFO_UP,
|
||||
|
||||
KEY_SPATIAL_EFFECT_MODE_SWITCH, /*切换空间音频模式*/
|
||||
KEY_SPEAK_TO_CHAT_SWITCH, /*智能免摘开关*/
|
||||
KEY_WIND_NOISE_DET_SWITCH, /*风噪检测开关*/
|
||||
KEY_WIDE_AREA_TAP_SWITCH, /*广域点击开关*/
|
||||
KEY_ANC_MULT_SCENE_SWITCH, /*多滤波器切换demo*/
|
||||
KEY_NULL = 0xFF,
|
||||
};
|
||||
|
||||
enum {
|
||||
ONE_KEY_CTL_NEXT_PREV = 1,
|
||||
ONE_KEY_CTL_VOL_UP_DOWN,
|
||||
};
|
||||
|
||||
enum {
|
||||
EARTCH_STATE_IN,
|
||||
EARTCH_STATE_OUT,
|
||||
EARTCH_STATE_TRIM_OK,
|
||||
EARTCH_STATE_TRIM_ERR,
|
||||
};
|
||||
|
||||
extern void volume_up(u8 inc);
|
||||
extern void volume_down(u8 inc);
|
||||
extern int app_earphone_key_event_handler(struct sys_event *);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef PBG_USER_H_
|
||||
#define PBG_USER_H_
|
||||
|
||||
#include "typedef.h"
|
||||
#include "key_event_deal.h"
|
||||
|
||||
enum {
|
||||
PBG_POS_IN_EAR = 0, //入耳
|
||||
PBG_POS_OUT_BOX, //出仓
|
||||
PBG_POS_IN_BOX, //在仓
|
||||
PBG_POS_NOT_EXIST, //不在线
|
||||
PBG_POS_KEEP_NOW = 0x0f, //维持,不改变
|
||||
PBG_POS_MAX, //
|
||||
};
|
||||
|
||||
|
||||
#define BD_ADDR_LEN 6
|
||||
typedef uint8_t bd_addr_t[BD_ADDR_LEN];
|
||||
|
||||
void pbg_user_set_tws_state(u8 conn_flag);
|
||||
void pbg_user_recieve_sync_info(u8 *sync_info);
|
||||
void pbg_user_mic_fixed_deal(u8 mode);
|
||||
void pbg_user_event_deal(struct pbg_event *evt);
|
||||
bool pbg_user_key_vaild(u8 *key_msg, struct sys_event *event);
|
||||
void pbg_user_ear_pos_sync(u8 left, u8 right);
|
||||
void pbg_user_battery_level_sync(u8 *dev_bat);
|
||||
int pbg_user_is_connected(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
#ifndef TONE_PLAYER_H
|
||||
#define TONE_PLAYER_H
|
||||
|
||||
#include "app_config.h"
|
||||
#include "tone_player_api.h"
|
||||
|
||||
#define TONE_NUM_0 SDFILE_RES_ROOT_PATH"tone/0.*"
|
||||
#define TONE_NUM_1 SDFILE_RES_ROOT_PATH"tone/1.*"
|
||||
#define TONE_NUM_2 SDFILE_RES_ROOT_PATH"tone/2.*"
|
||||
#define TONE_NUM_3 SDFILE_RES_ROOT_PATH"tone/3.*"
|
||||
#define TONE_NUM_4 SDFILE_RES_ROOT_PATH"tone/4.*"
|
||||
#define TONE_NUM_5 SDFILE_RES_ROOT_PATH"tone/5.*"
|
||||
#define TONE_NUM_6 SDFILE_RES_ROOT_PATH"tone/6.*"
|
||||
#define TONE_NUM_7 SDFILE_RES_ROOT_PATH"tone/7.*"
|
||||
#define TONE_NUM_8 SDFILE_RES_ROOT_PATH"tone/8.*"
|
||||
#define TONE_NUM_9 SDFILE_RES_ROOT_PATH"tone/9.*"
|
||||
#define TONE_BT_MODE SDFILE_RES_ROOT_PATH"tone/bt.*"
|
||||
#define TONE_BT_CONN SDFILE_RES_ROOT_PATH"tone/bt_conn.*"
|
||||
#define TONE_BT_DISCONN SDFILE_RES_ROOT_PATH"tone/bt_dconn.*"
|
||||
#define TONE_TWS_CONN SDFILE_RES_ROOT_PATH"tone/tws_conn.*"
|
||||
#define TONE_TWS_DISCONN SDFILE_RES_ROOT_PATH"tone/tws_dconn.*"
|
||||
#define TONE_LOW_POWER SDFILE_RES_ROOT_PATH"tone/low_power.*"
|
||||
#define TONE_POWER_OFF SDFILE_RES_ROOT_PATH"tone/power_off.*"
|
||||
#define TONE_POWER_ON SDFILE_RES_ROOT_PATH"tone/power_on.*"
|
||||
#define TONE_RING SDFILE_RES_ROOT_PATH"tone/ring.*"
|
||||
#define TONE_MAX_VOL SDFILE_RES_ROOT_PATH"tone/vol_max.*"
|
||||
#define TONE_ANC_OFF SDFILE_RES_ROOT_PATH"tone/anc_off.*"
|
||||
#define TONE_ANC_ON SDFILE_RES_ROOT_PATH"tone/anc_on.*"
|
||||
#define TONE_TRANSPARENCY SDFILE_RES_ROOT_PATH"tone/anc_trans.*"
|
||||
#define TONE_ANC_ADAPTIVE SDFILE_RES_ROOT_PATH"tone/adaptive.*"
|
||||
#define TONE_ANC_ADAPTIVE_COEFF SDFILE_RES_ROOT_PATH"tone/adap_coeff.*"
|
||||
#define TONE_ANC_NORMAL_COEFF SDFILE_RES_ROOT_PATH"tone/nor_coeff.*"
|
||||
#define TONE_EAR_CHECK SDFILE_RES_ROOT_PATH"tone/ear_check.*"
|
||||
#define TONE_MUSIC_MODE SDFILE_RES_ROOT_PATH"tone/music.*"
|
||||
#define TONE_PC_MODE SDFILE_RES_ROOT_PATH"tone/pc.*"
|
||||
#define TONE_SPKCHAT_OFF SDFILE_RES_ROOT_PATH"tone/spkchat_off.*"
|
||||
#define TONE_SPKCHAT_ON SDFILE_RES_ROOT_PATH"tone/spkchat_on.*"
|
||||
#define TONE_WCLICK_OFF SDFILE_RES_ROOT_PATH"tone/wclick_off.*"
|
||||
#define TONE_WCLICK_ON SDFILE_RES_ROOT_PATH"tone/wclick_on.*"
|
||||
#define TONE_WINDDET_OFF SDFILE_RES_ROOT_PATH"tone/winddet_off.*"
|
||||
#define TONE_WINDDET_ON SDFILE_RES_ROOT_PATH"tone/winddet_on.*"
|
||||
|
||||
|
||||
#define SINE_WTONE_NORAML 0
|
||||
#define SINE_WTONE_TWS_CONNECT 1
|
||||
#define SINE_WTONE_TWS_DISCONNECT 2
|
||||
#define SINE_WTONE_LOW_POWER 4
|
||||
#define SINE_WTONE_RING 5
|
||||
#define SINE_WTONE_MAX_VOLUME 6
|
||||
#define SINE_WTONE_ADSP 7
|
||||
#define SINE_WTONE_LOW_LATENRY_IN 8
|
||||
#define SINE_WTONE_LOW_LATENRY_OUT 9
|
||||
#define SINE_WTONE_ANC_ADAPTIVE_1 10
|
||||
#define SINE_WTONE_ANC_ADAPTIVE_2 11
|
||||
|
||||
#if CONFIG_USE_DEFAULT_SINE
|
||||
#undef TONE_TWS_CONN
|
||||
#define TONE_TWS_CONN DEFAULT_SINE_TONE(SINE_WTONE_TWS_CONNECT)
|
||||
#undef TONE_TWS_DISCONN
|
||||
#define TONE_TWS_DISCONN DEFAULT_SINE_TONE(SINE_WTONE_TWS_DISCONNECT)
|
||||
|
||||
#undef TONE_MAX_VOL
|
||||
#define TONE_MAX_VOL DEFAULT_SINE_TONE(SINE_WTONE_MAX_VOLUME)
|
||||
|
||||
#undef TONE_NORMAL
|
||||
#define TONE_NORMAL DEFAULT_SINE_TONE(SINE_WTONE_NORAML)
|
||||
#if BT_PHONE_NUMBER
|
||||
|
||||
#else
|
||||
#undef TONE_RING
|
||||
#define TONE_RING DEFAULT_SINE_TONE(SINE_WTONE_RING)
|
||||
#endif
|
||||
|
||||
#undef TONE_LOW_POWER
|
||||
#define TONE_LOW_POWER DEFAULT_SINE_TONE(SINE_WTONE_LOW_POWER)
|
||||
#endif
|
||||
|
||||
#define TONE_SIN_NORMAL DEFAULT_SINE_TONE(SINE_WTONE_NORAML)
|
||||
|
||||
#define TONE_LOW_LATENCY_IN DEFAULT_SINE_TONE(SINE_WTONE_LOW_LATENRY_IN)
|
||||
#define TONE_LOW_LATENCY_OUT DEFAULT_SINE_TONE(SINE_WTONE_LOW_LATENRY_OUT)
|
||||
|
||||
#define TONE_ANC_ADAPTIVE_LVL1 DEFAULT_SINE_TONE(SINE_WTONE_ANC_ADAPTIVE_1)
|
||||
#define TONE_ANC_ADAPTIVE_LVL2 DEFAULT_SINE_TONE(SINE_WTONE_ANC_ADAPTIVE_2)
|
||||
|
||||
|
||||
enum {
|
||||
IDEX_TONE_NUM_0,
|
||||
IDEX_TONE_NUM_1,
|
||||
IDEX_TONE_NUM_2,
|
||||
IDEX_TONE_NUM_3,
|
||||
IDEX_TONE_NUM_4,
|
||||
IDEX_TONE_NUM_5,
|
||||
IDEX_TONE_NUM_6,
|
||||
IDEX_TONE_NUM_7,
|
||||
IDEX_TONE_NUM_8,
|
||||
IDEX_TONE_NUM_9,
|
||||
IDEX_TONE_BT_MODE,
|
||||
IDEX_TONE_BT_CONN,
|
||||
IDEX_TONE_BT_DISCONN,
|
||||
IDEX_TONE_TWS_CONN,
|
||||
IDEX_TONE_TWS_DISCONN,
|
||||
IDEX_TONE_LOW_POWER,
|
||||
IDEX_TONE_POWER_OFF,
|
||||
IDEX_TONE_POWER_ON,
|
||||
IDEX_TONE_RING,
|
||||
IDEX_TONE_MAX_VOL,
|
||||
IDEX_TONE_NORMAL,
|
||||
IDEX_TONE_ANC_OFF,
|
||||
IDEX_TONE_ANC_ON,
|
||||
IDEX_TONE_TRANSPARCNCY,
|
||||
IDEX_TONE_ANC_ADAPTIVE,
|
||||
IDEX_TONE_ANC_ADAPTIVE_COEFF,
|
||||
IDEX_TONE_ANC_NORMAL_COEFF,
|
||||
|
||||
|
||||
IDEX_TONE_NONE = 0xFF,
|
||||
};
|
||||
|
||||
|
||||
|
||||
int tone_play_init(void);
|
||||
int tone_play_index(u8 index, u8 preemption);
|
||||
int tone_play_index_with_callback(u8 index, u8 preemption, void (*user_evt_handler)(void *priv), void *priv);
|
||||
int tone_play_index_no_tws(u8 index, u8 preemption);
|
||||
/*
|
||||
*@brief:提示音比较,确认目标提示音和正在播放的提示音是否一致
|
||||
*@return: 0 匹配
|
||||
* 非0 不匹配或者当前没有提示音播放
|
||||
*@note:通过提示音索引比较
|
||||
*/
|
||||
int tone_name_cmp_by_index(u8 index);
|
||||
|
||||
|
||||
// 按键提示音初始化
|
||||
int audio_key_tone_init(void);
|
||||
// 注销按键提示音播放
|
||||
void audio_key_tone_destroy(void);
|
||||
|
||||
// 播放正弦波数组
|
||||
int audio_key_tone_play_sin(struct audio_sin_param *sin, u8 sin_num, u8 preemption);
|
||||
// 播放文件
|
||||
int audio_key_tone_play_name(const char *name, u8 preemption);
|
||||
// 按序号播放文件 // 使用key_tone_index[]数组
|
||||
int audio_key_tone_play_index(u8 index, u8 preemption);
|
||||
// 按键提示音播放 // 默认播放数组中第一个
|
||||
void audio_key_tone_play(void);
|
||||
|
||||
// 检测按键提示音是否在播放
|
||||
int audio_key_tone_is_play(void);
|
||||
|
||||
// 设置按键提示音的音量
|
||||
void audio_key_tone_digvol_set(u8 volume);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
#ifndef __UI_MANAGE_H_
|
||||
#define __UI_MANAGE_H_
|
||||
|
||||
#include "typedef.h"
|
||||
|
||||
typedef enum {
|
||||
STATUS_NULL = 0,
|
||||
STATUS_POWERON,
|
||||
STATUS_POWEROFF,
|
||||
STATUS_POWERON_LOWPOWER,
|
||||
STATUS_BT_INIT_OK,
|
||||
STATUS_BT_CONN,
|
||||
STATUS_BT_SLAVE_CONN_MASTER,
|
||||
STATUS_BT_MASTER_CONN_ONE,
|
||||
STATUS_BT_DISCONN,
|
||||
STATUS_BT_TWS_CONN,
|
||||
STATUS_BT_TWS_DISCONN,
|
||||
STATUS_PHONE_INCOME,
|
||||
STATUS_PHONE_OUT,
|
||||
STATUS_PHONE_ACTIV,
|
||||
STATUS_CHARGE_START,
|
||||
STATUS_CHARGE_FULL,
|
||||
STATUS_CHARGE_CLOSE,
|
||||
STATUS_CHARGE_ERR,
|
||||
STATUS_LOWPOWER,
|
||||
STATUS_CHARGE_LDO5V_OFF,
|
||||
STATUS_EXIT_LOWPOWER,
|
||||
STATUS_NORMAL_POWER,
|
||||
STATUS_POWER_NULL,
|
||||
} UI_STATUS;
|
||||
|
||||
|
||||
int ui_manage_init(void);
|
||||
void ui_update_status(u8 status);
|
||||
u8 get_ui_busy_status();
|
||||
void led_module_enter_sniff_mode();
|
||||
void led_module_exit_sniff_mode();
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,68 @@
|
||||
#ifndef _USER_CFG_ID_H_
|
||||
#define _USER_CFG_ID_H_
|
||||
|
||||
//=================================================================================//
|
||||
// 与APP CASE相关配置项[1 ~ 60] //
|
||||
//=================================================================================//
|
||||
|
||||
#define CFG_EARTCH_ENABLE_ID 1
|
||||
#define CFG_PBG_MODE_INFO 2
|
||||
#define CFG_CHARGESTORE_TWS_CHANNEL 3
|
||||
#define CFG_SYS_VOL 4
|
||||
|
||||
#define CFG_MIC_ARRAY_DIFF_CMP_VALUE 5//麦克风阵列算法前补偿值
|
||||
#define CFG_MIC_ARRAY_TRIM_EN 6//麦克风补偿使能
|
||||
#define CFG_DMS_MALFUNC_STATE_ID 7//dms故障麦克风检测默认使用哪个mic的参数id
|
||||
#define CFG_MIC_TARGET_DIFF_CMP 8//目标MIC补偿值
|
||||
|
||||
|
||||
|
||||
#define CFG_DHA_FITTING_ID 26 //辅听验配保存参数的id
|
||||
#define CFG_REMOTE_DN_00 27
|
||||
|
||||
#define CFG_IMU_GYRO_OFFEST_ID 28 //空间音频imu陀螺仪偏置
|
||||
#define CFG_IMU_ACC_OFFEST_ID 29 //空间音频imu加速度偏置
|
||||
|
||||
#define VM_LP_TOUCH_KEY0_ALOG_CFG 30
|
||||
#define VM_LP_TOUCH_KEY1_ALOG_CFG 31
|
||||
#define VM_LP_TOUCH_KEY2_ALOG_CFG 32
|
||||
#define VM_LP_TOUCH_KEY3_ALOG_CFG 33
|
||||
#define VM_LP_TOUCH_KEY4_ALOG_CFG 34
|
||||
|
||||
#define VM_UPDATE_FLAG 35
|
||||
#define VM_DMA_RAND 36
|
||||
#define VM_DMA_RAND 37
|
||||
#define VM_GMA_ALI_PARA 38
|
||||
#define CFG_BCS_MAP_WEIGHT 39
|
||||
#define CFG_RCSP_ADV_HIGH_LOW_VOL 40
|
||||
#define CFG_RCSP_ADV_EQ_MODE_SETTING 41
|
||||
#define CFG_RCSP_ADV_EQ_DATA_SETTING 42
|
||||
#define ADV_SEQ_RAND 43
|
||||
#define CFG_RCSP_ADV_TIME_STAMP 44
|
||||
#define CFG_RCSP_ADV_WORK_SETTING 45
|
||||
#define CFG_RCSP_ADV_MIC_SETTING 46
|
||||
#define CFG_RCSP_ADV_LED_SETTING 47
|
||||
#define CFG_RCSP_ADV_KEY_SETTING 48
|
||||
|
||||
#define CFG_USB_BREAKPOINT0 49
|
||||
#define CFG_SD0_BREAKPOINT0 50
|
||||
#define CFG_SD1_BREAKPOINT0 51
|
||||
|
||||
#define CFG_HAVE_MASS_STORAGE 52
|
||||
#define CFG_MUSIC_MODE 53
|
||||
|
||||
#define LP_KEY_EARTCH_TRIM_VALUE 54
|
||||
|
||||
#define CFG_RCSP_ADV_ANC_VOICE 55
|
||||
#define CFG_RCSP_ADV_ANC_VOICE_MODE 56
|
||||
#define CFG_RCSP_ADV_ANC_VOICE_KEY 57
|
||||
|
||||
|
||||
#define CFG_SPK_EQ_SEG_SAVE 58
|
||||
#define CFG_SPK_EQ_GLOBAL_GAIN_SAVE 59
|
||||
|
||||
#define CFG_ANC_ADAPTIVE_DATA_ID 60//保存ANC自适应参数id
|
||||
|
||||
#define CFG_REMOTE_DN_00 63
|
||||
|
||||
#endif /* #ifndef _USER_CFG_ID_H_ */
|
||||
@@ -0,0 +1,9 @@
|
||||
#ifndef __VOL_SYNC_H__
|
||||
#define __VOL_SYNC_H__
|
||||
|
||||
void vol_sys_tab_init(void);
|
||||
void set_music_device_volume(int volume);
|
||||
int phone_get_device_vol(void);
|
||||
void opid_play_vol_sync_fun(u8 *vol, u8 mode);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,431 @@
|
||||
#include "key_event_deal.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "event.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "app_main.h"
|
||||
#include "app_task.h"
|
||||
#include "tone_player.h"
|
||||
#include "audio_config.h"
|
||||
#include "user_cfg.h"
|
||||
#include "system/timer.h"
|
||||
#include "vol_sync.h"
|
||||
#include "media/includes.h"
|
||||
#include "pbg_user.h"
|
||||
#include "key_driver.h"
|
||||
#if TCFG_EQ_ENABLE
|
||||
#include "application/eq_config.h"
|
||||
#endif/*TCFG_EQ_ENABLE*/
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
#include "bt_tws.h"
|
||||
#endif
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#include "audio_anc.h"
|
||||
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
||||
#if TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN
|
||||
#include "icsd_adt_app.h"
|
||||
#endif /*TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN*/
|
||||
|
||||
#define LOG_TAG_CONST KEY_EVENT_DEAL
|
||||
#define LOG_TAG "[KEY_EVENT_DEAL]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
#define POWER_OFF_CNT 10
|
||||
|
||||
extern u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX];
|
||||
extern u8 get_max_sys_vol(void);
|
||||
extern void sys_enter_soft_poweroff(void *priv);
|
||||
extern bool get_tws_sibling_connect_state(void);
|
||||
extern int bt_get_low_latency_mode();
|
||||
extern void bt_set_low_latency_mode(int enable);
|
||||
|
||||
void audio_aec_pitch_change_ctrl();
|
||||
void audio_surround_voice_ctrl();
|
||||
extern void start_streamer_test(void);
|
||||
extern void usr_intterupt_close();
|
||||
|
||||
|
||||
u8 poweroff_sametime_flag = 0;
|
||||
|
||||
#if CONFIG_TWS_POWEROFF_SAME_TIME
|
||||
enum {
|
||||
FROM_HOST_POWEROFF_CNT_ENOUGH = 1,
|
||||
FROM_TWS_POWEROFF_CNT_ENOUGH,
|
||||
POWEROFF_CNT_ENOUGH,
|
||||
};
|
||||
|
||||
static u16 poweroff_sametime_timer_id = 0;
|
||||
static void poweroff_sametime_timer(void *priv)
|
||||
{
|
||||
log_info("poweroff_sametime_timer\n");
|
||||
int state = tws_api_get_tws_state();
|
||||
if (!(state & TWS_STA_SIBLING_CONNECTED)) {
|
||||
sys_enter_soft_poweroff(NULL);
|
||||
return;
|
||||
}
|
||||
if (priv == NULL || poweroff_sametime_flag == POWEROFF_CNT_ENOUGH) {
|
||||
poweroff_sametime_timer_id = sys_timeout_add((void *)1, poweroff_sametime_timer, 500);
|
||||
} else {
|
||||
poweroff_sametime_timer_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void poweroff_sametime_timer_init(void)
|
||||
{
|
||||
if (poweroff_sametime_timer_id) {
|
||||
return;
|
||||
}
|
||||
|
||||
poweroff_sametime_timer_id = sys_timeout_add(NULL, poweroff_sametime_timer, 500);
|
||||
}
|
||||
#endif
|
||||
|
||||
void volume_up_down_direct(s8 value);
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
u8 replay_tone_flag = 1;
|
||||
int max_tone_timer_hdl = 0;
|
||||
static void max_tone_timer(void *priv)
|
||||
{
|
||||
if (!tone_get_status()) {
|
||||
max_tone_timer_hdl = 0;
|
||||
replay_tone_flag = 1;
|
||||
} else {
|
||||
max_tone_timer_hdl = sys_timeout_add(NULL, max_tone_timer, TWS_SYNC_TIME_DO + 100);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static u8 volume_flag = 1;
|
||||
void volume_up(u8 inc)
|
||||
{
|
||||
u8 test_box_vol_up = 0x41;
|
||||
s8 cur_vol = 0;
|
||||
u8 call_status = get_call_status();
|
||||
|
||||
if (tone_get_status() && volume_flag) {
|
||||
if (get_call_status() == BT_CALL_INCOMING) {
|
||||
volume_up_down_direct(1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*打电话出去彩铃要可以调音量大小*/
|
||||
if ((call_status == BT_CALL_ACTIVE) || (call_status == BT_CALL_OUTGOING)) {
|
||||
cur_vol = app_audio_get_volume(APP_AUDIO_STATE_CALL);
|
||||
} else {
|
||||
cur_vol = app_audio_get_volume(APP_AUDIO_STATE_MUSIC);
|
||||
}
|
||||
if (get_remote_test_flag()) {
|
||||
user_send_cmd_prepare(USER_CTRL_TEST_KEY, 1, &test_box_vol_up); //音量加
|
||||
}
|
||||
|
||||
if (cur_vol >= app_audio_get_max_volume()) {
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (get_tws_sibling_connect_state()) {
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER && replay_tone_flag) {
|
||||
replay_tone_flag = 0; //防止提示音被打断标志
|
||||
bt_tws_play_tone_at_same_time(SYNC_TONE_MAX_VOL, 400);
|
||||
max_tone_timer_hdl = sys_timeout_add(NULL, max_tone_timer, TWS_SYNC_TIME_DO + 100); //同步在TWS_SYNC_TIME_DO之后才会播放提示音,所以timer需要在这个时间之后才去检测提示音状态
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
#if TCFG_MAX_VOL_PROMPT
|
||||
STATUS *p_tone = get_tone_config();
|
||||
tone_play_index(p_tone->max_vol, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (get_call_status() != BT_CALL_HANGUP) {
|
||||
/*本地音量最大,如果手机音量还没最大,继续加,以防显示不同步*/
|
||||
if (bt_user_priv_var.phone_vol < 15) {
|
||||
if (get_curr_channel_state() & HID_CH) {
|
||||
user_send_cmd_prepare(USER_CTRL_HID_VOL_UP, 0, NULL);
|
||||
} else {
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_UP, 0, NULL);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
opid_play_vol_sync_fun(&app_var.music_volume, 1);
|
||||
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_INC, 0, NULL);
|
||||
#endif/*BT_SUPPORT_MUSIC_VOL_SYNC*/
|
||||
return;
|
||||
}
|
||||
|
||||
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
opid_play_vol_sync_fun(&app_var.music_volume, 1);
|
||||
app_audio_set_volume(APP_AUDIO_STATE_MUSIC, app_var.music_volume, 1);
|
||||
#else
|
||||
app_audio_volume_up(inc);
|
||||
#endif/*BT_SUPPORT_MUSIC_VOL_SYNC*/
|
||||
log_info("vol+: %d", app_audio_get_volume(APP_AUDIO_CURRENT_STATE));
|
||||
if (get_call_status() != BT_CALL_HANGUP) {
|
||||
if (get_curr_channel_state() & HID_CH) {
|
||||
user_send_cmd_prepare(USER_CTRL_HID_VOL_UP, 0, NULL);
|
||||
} else {
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_UP, 0, NULL);
|
||||
}
|
||||
} else {
|
||||
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
/* opid_play_vol_sync_fun(&app_var.music_volume, 1); */
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_INC, 0, NULL); //使用HID调音量
|
||||
//user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_SEND_VOL, 0, NULL);
|
||||
#else
|
||||
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_INC, 0, NULL);
|
||||
#endif/*TCFG_USER_TWS_ENABLE*/
|
||||
#endif/*BT_SUPPORT_MUSIC_VOL_SYNC*/
|
||||
}
|
||||
}
|
||||
void volume_down(u8 dec)
|
||||
{
|
||||
u8 test_box_vol_down = 0x42;
|
||||
if (tone_get_status() && volume_flag) {
|
||||
if (get_call_status() == BT_CALL_INCOMING) {
|
||||
volume_up_down_direct(-1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (get_remote_test_flag()) {
|
||||
user_send_cmd_prepare(USER_CTRL_TEST_KEY, 1, &test_box_vol_down); //音量减
|
||||
}
|
||||
|
||||
if (app_audio_get_volume(APP_AUDIO_CURRENT_STATE) <= 0) {
|
||||
if (get_call_status() != BT_CALL_HANGUP) {
|
||||
/*
|
||||
*本地音量最小,如果手机音量还没最小,继续减
|
||||
*注意:有些手机通话最小音量是1(GREE G0245D)
|
||||
*/
|
||||
if (bt_user_priv_var.phone_vol > 1) {
|
||||
if (get_curr_channel_state() & HID_CH) {
|
||||
user_send_cmd_prepare(USER_CTRL_HID_VOL_DOWN, 0, NULL);
|
||||
} else {
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_DOWN, 0, NULL);
|
||||
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
opid_play_vol_sync_fun(&app_var.music_volume, 0);
|
||||
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_DEC, 0, NULL);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
opid_play_vol_sync_fun(&app_var.music_volume, 0);
|
||||
app_audio_set_volume(APP_AUDIO_STATE_MUSIC, app_var.music_volume, 1);
|
||||
#else
|
||||
app_audio_volume_down(dec);
|
||||
#endif/*BT_SUPPORT_MUSIC_VOL_SYNC*/
|
||||
log_info("vol-: %d", app_audio_get_volume(APP_AUDIO_CURRENT_STATE));
|
||||
if (get_call_status() != BT_CALL_HANGUP) {
|
||||
if (get_curr_channel_state() & HID_CH) {
|
||||
user_send_cmd_prepare(USER_CTRL_HID_VOL_DOWN, 0, NULL);
|
||||
} else {
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CALL_VOLUME_DOWN, 0, NULL);
|
||||
}
|
||||
} else {
|
||||
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
/* opid_play_vol_sync_fun(&app_var.music_volume, 0); */
|
||||
if (app_audio_get_volume(APP_AUDIO_CURRENT_STATE) == 0) {
|
||||
app_audio_volume_down(0);
|
||||
}
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_DEC, 0, NULL);
|
||||
//user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_SEND_VOL, 0, NULL);
|
||||
#else
|
||||
user_send_cmd_prepare(USER_CTRL_CMD_SYNC_VOL_DEC, 0, NULL);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if ONE_KEY_CTL_DIFF_FUNC
|
||||
static void lr_diff_otp_deal(u8 opt, char channel)
|
||||
{
|
||||
log_info("lr_diff_otp_deal:%d", opt);
|
||||
switch (opt) {
|
||||
case ONE_KEY_CTL_NEXT_PREV:
|
||||
if (channel == 'L') {
|
||||
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_NEXT, 0, NULL);
|
||||
} else if (channel == 'R') {
|
||||
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PREV, 0, NULL);
|
||||
} else {
|
||||
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_NEXT, 0, NULL);
|
||||
}
|
||||
break;
|
||||
case ONE_KEY_CTL_VOL_UP_DOWN:
|
||||
if (channel == 'L') {
|
||||
volume_up(1);
|
||||
} else if (channel == 'R') {
|
||||
volume_down(1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void key_tws_lr_diff_deal(struct sys_event *event, u8 opt)
|
||||
{
|
||||
u8 channel = 'U';
|
||||
if (get_bt_tws_connect_status()) {
|
||||
channel = tws_api_get_local_channel();
|
||||
if ('L' == channel) {
|
||||
channel = (u32)event->arg == KEY_EVENT_FROM_TWS ? 'R' : 'L';
|
||||
} else {
|
||||
channel = (u32)event->arg == KEY_EVENT_FROM_TWS ? 'L' : 'R';
|
||||
}
|
||||
}
|
||||
lr_diff_otp_deal(opt, channel);
|
||||
}
|
||||
#else
|
||||
void key_tws_lr_diff_deal(struct sys_event *event, u8 opt)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
int app_earphone_key_event_handler(struct sys_event *event)
|
||||
{
|
||||
int ret = false;
|
||||
struct key_event *key = &event->u.key;
|
||||
|
||||
u8 key_event;
|
||||
|
||||
#if TCFG_APP_MUSIC_EN
|
||||
if (event->arg == DEVICE_EVENT_FROM_CUSTOM) {
|
||||
log_e("is music mode msg\n");
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
key_event = key_table[key->value][key->event];
|
||||
|
||||
void bt_sniff_ready_clean(void);
|
||||
bt_sniff_ready_clean();
|
||||
|
||||
#if RCSP_ADV_EN
|
||||
extern void set_key_event_by_rcsp_info(struct sys_event * event, u8 * key_event);
|
||||
set_key_event_by_rcsp_info(event, &key_event);
|
||||
#endif
|
||||
|
||||
log_info("key_event:%d %d %d\n", key_event, key->value, key->event);
|
||||
|
||||
switch (key_event) {
|
||||
case KEY_MUSIC_PP:
|
||||
break;
|
||||
case KEY_IR_NUM_0:
|
||||
// tone_play_by_path(TONE_POWER_ON, 0);
|
||||
break;
|
||||
case KEY_IR_NUM_1:
|
||||
// tone_play_by_path(TONE_RING, 0);
|
||||
break;
|
||||
case KEY_IR_NUM_2:
|
||||
// tone_play_by_path(TONE_RING, 0);
|
||||
break;
|
||||
case KEY_POWEROFF:
|
||||
if(usr_var.usr_power_charge_flag==1)break;
|
||||
poweroff_sametime_flag = 0;
|
||||
user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL);
|
||||
break;
|
||||
case KEY_POWEROFF_HOLD:
|
||||
break;
|
||||
case KEY_POWEROFF_HOLD_UP:
|
||||
break;
|
||||
case KEY_MUSIC_PREV:
|
||||
break;
|
||||
case KEY_MUSIC_NEXT:
|
||||
break;
|
||||
case KEY_VOL_UP:
|
||||
volume_up(1);
|
||||
break;
|
||||
case KEY_VOL_DOWN:
|
||||
volume_down(1);
|
||||
break;
|
||||
case KEY_CALL_LAST_NO:
|
||||
if (bt_user_priv_var.last_call_type == BT_STATUS_PHONE_INCOME) {
|
||||
user_send_cmd_prepare(USER_CTRL_DIAL_NUMBER, bt_user_priv_var.income_phone_len,
|
||||
bt_user_priv_var.income_phone_num);
|
||||
} else {
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CALL_LAST_NO, 0, NULL);
|
||||
}
|
||||
break;
|
||||
case KEY_CALL_HANG_UP:
|
||||
|
||||
break;
|
||||
case KEY_CALL_ANSWER:
|
||||
/* sys_enter_soft_poweroff(NULL); */
|
||||
break;
|
||||
case KEY_OPEN_SIRI:
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_GET_SIRI_OPEN, 0, NULL);
|
||||
break;
|
||||
case KEY_EQ_MODE:
|
||||
#if(TCFG_EQ_ENABLE == 1)
|
||||
eq_mode_sw();
|
||||
#endif
|
||||
break;
|
||||
case KEY_HID_CONTROL:
|
||||
log_info("get_curr_channel_state:%x\n", get_curr_channel_state());
|
||||
if (get_curr_channel_state() & HID_CH) {
|
||||
log_info("KEY_HID_CONTROL\n");
|
||||
user_send_cmd_prepare(USER_CTRL_HID_IOS, 0, NULL);
|
||||
}
|
||||
break;
|
||||
case KEY_THIRD_CLICK:
|
||||
log_info("KEY_THIRD_CLICK");
|
||||
key_tws_lr_diff_deal(event, ONE_KEY_CTL_NEXT_PREV);
|
||||
break;
|
||||
case KEY_LOW_LANTECY:
|
||||
bt_set_low_latency_mode(!bt_get_low_latency_mode());
|
||||
break;
|
||||
|
||||
case KEY_NULL:
|
||||
break;
|
||||
case KEY_MUSIC_EFF:
|
||||
|
||||
break;
|
||||
|
||||
case KEY_PHONE_PITCH:
|
||||
|
||||
break;
|
||||
|
||||
#if TCFG_APP_AUX_EN
|
||||
case KEY_MODE_SWITCH:
|
||||
log_info("KEY_MODE_SWITCH");
|
||||
app_task_switch_next();
|
||||
break;
|
||||
#endif /*TCFG_AUDIO_SPATIAL_EFFECT_ENABLE*/
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void adsp_volume_up(void)
|
||||
{
|
||||
volume_flag = 0;
|
||||
volume_up(1);
|
||||
volume_flag = 1;
|
||||
}
|
||||
|
||||
void adsp_volume_down(void)
|
||||
{
|
||||
volume_flag = 0;
|
||||
volume_down(1);
|
||||
volume_flag = 1;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
#include "includes.h"
|
||||
#include "event.h"
|
||||
#include "app_config.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "media/kws_event.h"
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
#include "bt_tws.h"
|
||||
#endif
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#include "audio_anc.h"
|
||||
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
||||
|
||||
#define LOG_TAG_CONST KWS_VOICE_EVENT
|
||||
#define LOG_TAG "[KWS_VOICE_EVENT]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
#if ((defined TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE) && (TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE))
|
||||
|
||||
struct jl_kws_event_hdl {
|
||||
u32 last_event;
|
||||
u32 last_event_jiffies;
|
||||
};
|
||||
|
||||
static struct jl_kws_event_hdl kws_hdl = {
|
||||
.last_event = 0,
|
||||
.last_event_jiffies = 0,
|
||||
};
|
||||
|
||||
#define __this (&kws_hdl)
|
||||
|
||||
|
||||
extern void volume_up(u8 inc);
|
||||
extern void volume_down(u8 inc);
|
||||
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @brief: 关键词唤醒语音事件处理流程
|
||||
*
|
||||
* @param event: 系统事件
|
||||
*
|
||||
* @return : true: 处理该事件; false: 不处理该事件, 由
|
||||
*/
|
||||
/* ---------------------------------------------------------------------------- */
|
||||
int jl_kws_voice_event_handle(struct sys_event *event)
|
||||
{
|
||||
struct key_event *key = &(event->u.key);
|
||||
|
||||
if (key->type != KEY_DRIVER_TYPE_VOICE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
u32 cur_jiffies = jiffies;
|
||||
u8 a2dp_state;
|
||||
u8 call_state;
|
||||
u32 voice_event = key->event;
|
||||
|
||||
log_info("%s: event: %d", __func__, voice_event);
|
||||
|
||||
if (voice_event == __this->last_event) {
|
||||
if (jiffies_to_msecs(cur_jiffies - __this->last_event_jiffies) < 1000) {
|
||||
log_info("voice event %d same, ignore", voice_event);
|
||||
__this->last_event_jiffies = cur_jiffies;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
__this->last_event_jiffies = cur_jiffies;
|
||||
__this->last_event = voice_event;
|
||||
|
||||
switch (voice_event) {
|
||||
case KWS_EVENT_HEY_KEYWORD:
|
||||
case KWS_EVENT_XIAOJIE:
|
||||
//主唤醒词:
|
||||
log_info("send SIRI cmd");
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_GET_SIRI_OPEN, 0, NULL);
|
||||
break;
|
||||
|
||||
case KWS_EVENT_XIAODU:
|
||||
//主唤醒词:
|
||||
log_info("send SIRI cmd");
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_GET_SIRI_OPEN, 0, NULL);
|
||||
break;
|
||||
|
||||
case KWS_EVENT_PLAY_MUSIC:
|
||||
case KWS_EVENT_STOP_MUSIC:
|
||||
case KWS_EVENT_PAUSE_MUSIC:
|
||||
call_state = get_call_status();
|
||||
if ((call_state == BT_CALL_OUTGOING) ||
|
||||
(call_state == BT_CALL_ALERT)) {
|
||||
//user_send_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL);
|
||||
} else if (call_state == BT_CALL_INCOMING) {
|
||||
//user_send_cmd_prepare(USER_CTRL_HFP_CALL_ANSWER, 0, NULL);
|
||||
} else if (call_state == BT_CALL_ACTIVE) {
|
||||
//user_send_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL);
|
||||
} else {
|
||||
a2dp_state = a2dp_get_status();
|
||||
if (a2dp_state == BT_MUSIC_STATUS_STARTING) {
|
||||
if (voice_event == KWS_EVENT_PAUSE_MUSIC) {
|
||||
log_info("send PAUSE cmd");
|
||||
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PAUSE, 0, NULL);
|
||||
} else if (voice_event == KWS_EVENT_STOP_MUSIC) {
|
||||
log_info("send STOP cmd");
|
||||
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_STOP, 0, NULL);
|
||||
}
|
||||
} else {
|
||||
if (voice_event == KWS_EVENT_PLAY_MUSIC) {
|
||||
log_info("send PLAY cmd");
|
||||
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PLAY, 0, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case KWS_EVENT_VOLUME_UP:
|
||||
log_info("volume up");
|
||||
volume_up(4); //music: 0 ~ 16, call: 0 ~ 15, step: 25%
|
||||
break;
|
||||
|
||||
case KWS_EVENT_VOLUME_DOWN:
|
||||
log_info("volume down");
|
||||
volume_down(4); //music: 0 ~ 16, call: 0 ~ 15, step: 25%
|
||||
break;
|
||||
|
||||
case KWS_EVENT_PREV_SONG:
|
||||
log_info("Send PREV cmd");
|
||||
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PREV, 0, NULL);
|
||||
break;
|
||||
|
||||
case KWS_EVENT_NEXT_SONG:
|
||||
log_info("Send NEXT cmd");
|
||||
user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_NEXT, 0, NULL);
|
||||
break;
|
||||
|
||||
case KWS_EVENT_CALL_ACTIVE:
|
||||
if (get_call_status() == BT_CALL_INCOMING) {
|
||||
log_info("Send ANSWER cmd");
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CALL_ANSWER, 0, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
case KWS_EVENT_CALL_HANGUP:
|
||||
log_info("Send HANG UP cmd");
|
||||
if ((get_call_status() >= BT_CALL_INCOMING) && (get_call_status() <= BT_CALL_ALERT)) {
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL);
|
||||
}
|
||||
break;
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
case KWS_EVENT_ANC_ON:
|
||||
anc_mode_switch(ANC_ON, 1);
|
||||
break;
|
||||
case KWS_EVENT_TRANSARENT_ON:
|
||||
anc_mode_switch(ANC_TRANSPARENCY, 1);
|
||||
break;
|
||||
case KWS_EVENT_ANC_OFF:
|
||||
anc_mode_switch(ANC_OFF, 1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case KWS_EVENT_NULL:
|
||||
log_info("KWS_EVENT_NULL");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#else /* #if ((defined TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE) && (TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE)) */
|
||||
|
||||
int jl_kws_voice_event_handle(struct key_event *key)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif /* #if ((defined TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE) && (TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE)) */
|
||||
@@ -0,0 +1,180 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : log_config.c
|
||||
|
||||
* Description : Optimized Code & RAM (编译优化Log配置)
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : caibingquan@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2019-03-18 14:45
|
||||
|
||||
* Copyright:(c)JIELI 2011-2019 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#include "system/includes.h"
|
||||
|
||||
/**
|
||||
* @brief Bluetooth Controller Log
|
||||
*/
|
||||
/*-----------------------------------------------------------*/
|
||||
const char log_tag_const_v_SETUP AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_SETUP AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_SETUP AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_d_SETUP AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_SETUP AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_BOARD AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_BOARD AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_BOARD AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_w_BOARD AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_BOARD AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_EARPHONE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_EARPHONE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_EARPHONE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_EARPHONE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_EARPHONE AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_UI AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_UI AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_UI AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_UI AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_UI AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_CHARGE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_CHARGE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_CHARGE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_CHARGE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_CHARGE AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_ANCBOX AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_ANCBOX AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_ANCBOX AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_ANCBOX AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_ANCBOX AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_KEY_EVENT_DEAL AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_KEY_EVENT_DEAL AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_KEY_EVENT_DEAL AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_KEY_EVENT_DEAL AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_KEY_EVENT_DEAL AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_CHARGESTORE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_CHARGESTORE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_CHARGESTORE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_CHARGESTORE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_CHARGESTORE AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_UMIDIGI_CHARGESTORE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_UMIDIGI_CHARGESTORE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_UMIDIGI_CHARGESTORE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_UMIDIGI_CHARGESTORE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_UMIDIGI_CHARGESTORE AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_CFG_TOOL AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_CFG_TOOL AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_CFG_TOOL AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_CFG_TOOL AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_CFG_TOOL AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_TESTBOX AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_TESTBOX AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_TESTBOX AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_TESTBOX AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_TESTBOX AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_IDLE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_IDLE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_IDLE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_IDLE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_IDLE AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_POWER AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_POWER AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_POWER AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_POWER AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_POWER AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_USER_CFG AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_USER_CFG AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_USER_CFG AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_USER_CFG AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_USER_CFG AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_TONE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_TONE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_TONE AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_TONE AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_TONE AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_BT_TWS AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_BT_TWS AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_BT_TWS AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_BT_TWS AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_BT_TWS AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_AEC_USER AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_AEC_USER AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_AEC_USER AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_AEC_USER AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_AEC_USER AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_BT_BLE AT(.LOG_TAG_CONST) = 0;
|
||||
const char log_tag_const_i_BT_BLE AT(.LOG_TAG_CONST) = 0;
|
||||
const char log_tag_const_d_BT_BLE AT(.LOG_TAG_CONST) = 1;
|
||||
const char log_tag_const_w_BT_BLE AT(.LOG_TAG_CONST) = 1;
|
||||
const char log_tag_const_e_BT_BLE AT(.LOG_TAG_CONST) = 1;
|
||||
|
||||
const char log_tag_const_v_EARTCH_EVENT_DEAL AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_EARTCH_EVENT_DEAL AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_EARTCH_EVENT_DEAL AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_EARTCH_EVENT_DEAL AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_EARTCH_EVENT_DEAL AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_ONLINE_DB AT(.LOG_TAG_CONST) = 0;
|
||||
const char log_tag_const_i_ONLINE_DB AT(.LOG_TAG_CONST) = 0;
|
||||
const char log_tag_const_d_ONLINE_DB AT(.LOG_TAG_CONST) = 0;
|
||||
const char log_tag_const_w_ONLINE_DB AT(.LOG_TAG_CONST) = 0;
|
||||
const char log_tag_const_e_ONLINE_DB AT(.LOG_TAG_CONST) = 1;
|
||||
|
||||
const char log_tag_const_v_MUSIC AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_MUSIC AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_w_MUSIC AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_d_MUSIC AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_MUSIC AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_APP_MUSIC AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_APP_MUSIC AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_APP_MUSIC AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_APP_MUSIC AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_APP_MUSIC AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_PC AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_PC AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_w_PC AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_d_PC AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_PC AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_AUX AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_AUX AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_AUX AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_w_AUX AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_AUX AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_WIRELESSMIC AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_WIRELESSMIC AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_w_WIRELESSMIC AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_d_WIRELESSMIC AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_WIRELESSMIC AT(.LOG_TAG_CONST) = TRUE;
|
||||
|
||||
const char log_tag_const_v_KWS_VOICE_EVENT AT(.LOG_TAG_CONST) = FALSE;
|
||||
const char log_tag_const_i_KWS_VOICE_EVENT AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_d_KWS_VOICE_EVENT AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_w_KWS_VOICE_EVENT AT(.LOG_TAG_CONST) = TRUE;
|
||||
const char log_tag_const_e_KWS_VOICE_EVENT AT(.LOG_TAG_CONST) = TRUE;
|
||||
@@ -0,0 +1,540 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : btctrler_config.c
|
||||
|
||||
* Description : Optimized Code & RAM (编译优化配置)
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : caibingquan@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2019-03-16 11:49
|
||||
|
||||
* Copyright:(c)JIELI 2011-2019 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#include "app_config.h"
|
||||
#include "system/includes.h"
|
||||
#include "btcontroller_config.h"
|
||||
#include "bt_common.h"
|
||||
|
||||
/**
|
||||
* @brief Bluetooth Module
|
||||
*/
|
||||
|
||||
//固定使用正常发射功率的等级:0-使用不同模式的各自等级;1~10-固定发射功率等级
|
||||
const int config_force_bt_pwr_tab_using_normal_level = 0;
|
||||
const int CONFIG_BLE_SYNC_WORD_BIT = 30;
|
||||
const int CONFIG_LNA_CHECK_VAL = -80;
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
|
||||
#if (BT_FOR_APP_EN || TCFG_USER_BLE_ENABLE)
|
||||
const int config_btctler_modules = /*BT_MODULE_CLASSIC |*/ BT_MODULE_LE;
|
||||
#else
|
||||
#ifdef CONFIG_NEW_BREDR_ENABLE
|
||||
#if (BT_FOR_APP_EN)
|
||||
const int config_btctler_modules = (/*BT_MODULE_CLASSIC |*/ BT_MODULE_LE);
|
||||
#else
|
||||
const int config_btctler_modules = (BT_MODULE_CLASSIC);
|
||||
#endif
|
||||
#else
|
||||
const int config_btctler_modules = (/*BT_MODULE_CLASSIC |*/ BT_MODULE_LE);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef CONFIG_NEW_BREDR_ENABLE
|
||||
const int config_btctler_le_tws = 0;
|
||||
const int CONFIG_BTCTLER_FAST_CONNECT_ENABLE = 0;
|
||||
#if TCFG_DEC2TWS_ENABLE
|
||||
const int CONFIG_TWS_WORK_MODE = 1;
|
||||
#else
|
||||
const int CONFIG_TWS_WORK_MODE = 2;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SUPPORT_EX_TWS_ADJUST
|
||||
const int CONFIG_EX_TWS_ADJUST = 1;
|
||||
#else
|
||||
const int CONFIG_EX_TWS_ADJUST = 0;
|
||||
#endif
|
||||
const int CONFIG_EXTWS_NACK_LIMIT_INT_CNT = 4;
|
||||
|
||||
const int CONFIG_TWS_RUN_SLOT = 200;
|
||||
const int CONFIG_PHONE_RUN_SLOT = 160;
|
||||
const int CONFIG_TWS_LOW_LATENCY_RUN_SLOT = 8;
|
||||
const int CONFIG_PHONE_LOW_LATENCY_RUN_SLOT = 120;
|
||||
const int CONFIG_TWS_FORWARD_TIMEOUT = 64;
|
||||
#else
|
||||
const int config_btctler_le_tws = 1;
|
||||
const int CONFIG_BTCTLER_FAST_CONNECT_ENABLE = 0;
|
||||
#endif
|
||||
|
||||
const int CONFIG_BTCTLER_TWS_ENABLE = 1;
|
||||
|
||||
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
const int CONFIG_TWS_POWER_BALANCE_ENABLE = 0;
|
||||
const int CONFIG_LOW_LATENCY_ENABLE = 0;
|
||||
const int CONFIG_TWS_AFH_ENABLE = 0;
|
||||
#else
|
||||
const int CONFIG_TWS_POWER_BALANCE_ENABLE = 1;
|
||||
const int CONFIG_LOW_LATENCY_ENABLE = 1;
|
||||
const int CONFIG_TWS_AFH_ENABLE = 1;
|
||||
#endif
|
||||
const int CONFIG_MASTER_MAX_RX_BULK_PERSENT = 70;
|
||||
|
||||
#else //TCFG_USER_TWS_ENABLE
|
||||
|
||||
/* #if (TCFG_USER_BLE_ENABLE || GMA_EN) */
|
||||
#if (TCFG_USER_BLE_ENABLE)
|
||||
const int config_btctler_modules = /*BT_MODULE_CLASSIC |*/ BT_MODULE_LE;
|
||||
#else
|
||||
const int config_btctler_modules = BT_MODULE_CLASSIC;
|
||||
#endif
|
||||
const int config_btctler_le_tws = 0;
|
||||
const int CONFIG_BTCTLER_TWS_ENABLE = 0;
|
||||
const int CONFIG_TWS_AFH_ENABLE = 0;
|
||||
const int CONFIG_LOW_LATENCY_ENABLE = 0;
|
||||
const int CONFIG_MASTER_MAX_RX_BULK_PERSENT = 0;
|
||||
const int CONFIG_TWS_POWER_BALANCE_ENABLE = 0;
|
||||
const int CONFIG_BTCTLER_FAST_CONNECT_ENABLE = 0;
|
||||
|
||||
#endif
|
||||
|
||||
const int CONFIG_A2DP_MAX_BUF_SIZE = 2 * 1024;//20 * 1024;
|
||||
const int CONFIG_BT_TX_BUFF_MAX_SIZE = 1 * 1024;//10 * 1024;
|
||||
const int CONFIG_TWS_SUPER_TIMEOUT = 2000;
|
||||
const int CONFIG_BTCTLER_QOS_ENABLE = 1;
|
||||
const int CONFIG_A2DP_DATA_CACHE_LOW_AAC = 100;
|
||||
const int CONFIG_A2DP_DATA_CACHE_HI_AAC = 250;
|
||||
const int CONFIG_A2DP_DATA_CACHE_LOW_SBC = 150;
|
||||
const int CONFIG_A2DP_DATA_CACHE_HI_SBC = 260;
|
||||
#if TCFG_EQ_ONLINE_ENABLE
|
||||
const int CONFIG_A2DP_DELAY_TIME = 200;//调音时,减少延时,避免影响频响测试
|
||||
#else
|
||||
const int CONFIG_A2DP_DELAY_TIME = 340;
|
||||
#endif
|
||||
const int CONFIG_A2DP_DELAY_TIME_LO = 100;
|
||||
#ifdef CONFIG_A2DP_GAME_MODE_DELAY_TIME
|
||||
const int CONFIG_A2DP_SBC_DELAY_TIME_LO = CONFIG_A2DP_GAME_MODE_DELAY_TIME + 12;
|
||||
#else
|
||||
const int CONFIG_A2DP_SBC_DELAY_TIME_LO = 75;
|
||||
#endif
|
||||
|
||||
const int CONFIG_PAGE_POWER = 4;
|
||||
const int CONFIG_PAGE_SCAN_POWER = 7;
|
||||
const int CONFIG_INQUIRY_POWER = 7;
|
||||
const int CONFIG_INQUIRY_SCAN_POWER = 7;
|
||||
const int CONFIG_DUT_POWER = 10;
|
||||
|
||||
#if (CONFIG_BT_MODE != BT_NORMAL)
|
||||
const int config_btctler_hci_standard = 1;
|
||||
#else
|
||||
const int config_btctler_hci_standard = 0;
|
||||
#endif
|
||||
|
||||
const int config_btctler_mode = CONFIG_BT_MODE;
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief Bluetooth Classic setting
|
||||
*/
|
||||
const u8 rx_fre_offset_adjust_enable = 1;
|
||||
|
||||
const int config_bredr_fcc_fix_fre = 0;
|
||||
const int ble_disable_wait_enable = 1;
|
||||
|
||||
const int config_btctler_eir_version_info_len = 21;
|
||||
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
const int CONFIG_TEST_DUT_CODE = 1;
|
||||
const int CONFIG_TEST_FCC_CODE = 0;
|
||||
const int CONFIG_TEST_DUT_ONLY_BOX_CODE = 1;
|
||||
#else
|
||||
const int CONFIG_TEST_DUT_CODE = 1;
|
||||
const int CONFIG_TEST_FCC_CODE = 1;
|
||||
const int CONFIG_TEST_DUT_ONLY_BOX_CODE = 0;
|
||||
#endif
|
||||
|
||||
const int CONFIG_ESCO_MUX_RX_BULK_ENABLE = 0;
|
||||
|
||||
#if TCFG_USER_EMITTER_ENABLE
|
||||
const int CONFIG_BREDR_INQUIRY = 1;
|
||||
const int CONFIG_LMP_MASTER_ESCO_ENABLE = 1;
|
||||
#else
|
||||
const int CONFIG_BREDR_INQUIRY = 0;
|
||||
const int CONFIG_LMP_MASTER_ESCO_ENABLE = 0;
|
||||
#endif
|
||||
const int CONFIG_INQUIRY_PAGE_OFFSET_ADJUST = 0;
|
||||
|
||||
const int CONFIG_LMP_NAME_REQ_ENABLE = 0;
|
||||
const int CONFIG_LMP_PASSKEY_ENABLE = 0;
|
||||
|
||||
// *INDENT-OFF*
|
||||
#ifdef CONFIG_SUPPORT_WIFI_DETECT
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
const int CONFIG_WIFI_DETECT_ENABLE = 1;
|
||||
#else
|
||||
const int CONFIG_WIFI_DETECT_ENABLE = 1;
|
||||
#endif
|
||||
|
||||
#else
|
||||
const int CONFIG_WIFI_DETECT_ENABLE = 0;
|
||||
|
||||
#endif
|
||||
|
||||
const int ESCO_FORWARD_ENABLE = 0;
|
||||
// *INDENT-ON*
|
||||
|
||||
|
||||
const int config_bt_function = 0;
|
||||
|
||||
///bredr 强制 做 maseter
|
||||
const int config_btctler_bredr_master = 0;
|
||||
const int config_btctler_dual_a2dp = 0;
|
||||
|
||||
///afh maseter 使用app设置的map 通过USER_CTRL_AFH_CHANNEL 设置
|
||||
const int config_bredr_afh_user = 0;
|
||||
//bt PLL 温度跟随trim
|
||||
const int config_bt_temperature_pll_trim = 0;
|
||||
/*security check*/
|
||||
const int config_bt_security_vulnerability = 0;
|
||||
|
||||
const int config_delete_link_key = 1; //配置是否连接失败返回PIN or Link Key Missing时删除linkKey
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief Bluetooth LE setting
|
||||
*/
|
||||
|
||||
#if (TCFG_USER_BLE_ENABLE)
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
const int config_btctler_le_roles = (LE_ADV);
|
||||
const uint64_t config_btctler_le_features = 0;
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_WIRELESS_MIC_CLIENT)
|
||||
const uint64_t config_btctler_le_features = LE_ENCRYPTION | LE_CODED_PHY | LE_DATA_PACKET_LENGTH_EXTENSION | LE_2M_PHY;
|
||||
const int config_btctler_le_roles = (LE_SCAN | LE_INIT | LE_MASTER);
|
||||
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_WIRELESS_MIC_SERVER)
|
||||
const int config_btctler_le_roles = (LE_ADV | LE_SLAVE);
|
||||
const uint64_t config_btctler_le_features = LE_ENCRYPTION | LE_CODED_PHY | LE_DATA_PACKET_LENGTH_EXTENSION | LE_2M_PHY;
|
||||
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_LE_AUDIO_CENTRAL)
|
||||
const int config_btctler_le_roles = (LE_SCAN | LE_INIT | LE_MASTER);
|
||||
const uint64_t config_btctler_le_features = LE_ENCRYPTION | LE_CODED_PHY | LE_FEATURES_ISO | LE_2M_PHY;
|
||||
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_LE_AUDIO_PERIPHERAL)
|
||||
const int config_btctler_le_roles = (LE_ADV | LE_SLAVE);
|
||||
const uint64_t config_btctler_le_features = LE_ENCRYPTION | LE_CODED_PHY | LE_FEATURES_ISO | LE_2M_PHY;
|
||||
|
||||
#elif (BLE_HID_EN)
|
||||
const int config_btctler_le_roles = (LE_ADV | LE_SLAVE);
|
||||
const uint64_t config_btctler_le_features = LE_ENCRYPTION;
|
||||
|
||||
#else
|
||||
const int config_btctler_le_roles = (LE_ADV | LE_SLAVE);
|
||||
const uint64_t config_btctler_le_features = LE_ENCRYPTION| LE_DATA_PACKET_LENGTH_EXTENSION | LE_2M_PHY;
|
||||
#endif
|
||||
#else
|
||||
const int config_btctler_le_roles = 0;
|
||||
const uint64_t config_btctler_le_features = 0;
|
||||
#endif
|
||||
|
||||
|
||||
// Master multi-link
|
||||
const int config_btctler_le_master_multilink = 0;
|
||||
// LE RAM Control
|
||||
|
||||
#ifdef CONFIG_NEW_BREDR_ENABLE
|
||||
const int config_btctler_le_hw_nums = 1;
|
||||
#else
|
||||
const int config_btctler_le_hw_nums = 2;
|
||||
#endif
|
||||
|
||||
|
||||
const int config_btctler_le_slave_conn_update_winden = 2500;//range:100 to 2500
|
||||
|
||||
// LE vendor baseband
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_WIRELESS_MIC_CLIENT)
|
||||
//const u32 config_vendor_le_bb = VENDOR_BB_MD_CLOSE |
|
||||
//VENDOR_BB_CONNECT_SLOT |
|
||||
//VENDOR_BB_EVT_HOLD |
|
||||
//VENDOR_BB_EVT_HOLD_TRIGG(25) |
|
||||
//VENDOR_BB_EVT_HOLD_TICK(0); //LE vendor baseband
|
||||
const u32 config_vendor_le_bb = VENDOR_BB_MD_CLOSE | VENDOR_BB_CONNECT_SLOT | VENDOR_BB_ADV_PDU_INT(3);//LE vendor baseband
|
||||
// Master AFH
|
||||
const int config_btctler_le_afh_en = 1;
|
||||
const int config_btctler_le_rx_nums = 8;
|
||||
const int config_btctler_le_acl_packet_length = 251;
|
||||
const int config_btctler_le_acl_total_nums = 1;
|
||||
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_WIRELESS_MIC_SERVER)
|
||||
const u32 config_vendor_le_bb = VENDOR_BB_MD_CLOSE | VENDOR_BB_CONNECT_SLOT | VENDOR_BB_ADV_PDU_INT(3);//LE vendor baseband
|
||||
// Master AFH
|
||||
const int config_btctler_le_afh_en = 1;
|
||||
const int config_btctler_le_rx_nums = 8;
|
||||
const int config_btctler_le_acl_packet_length = 251;
|
||||
const int config_btctler_le_acl_total_nums = 1;
|
||||
|
||||
#else
|
||||
// Master AFH
|
||||
const int config_btctler_le_afh_en = 0;
|
||||
const u32 config_vendor_le_bb = 0;
|
||||
|
||||
const int config_btctler_le_rx_nums = 8;
|
||||
const int config_btctler_le_acl_packet_length = 251;
|
||||
const int config_btctler_le_acl_total_nums = 8;
|
||||
|
||||
#endif
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
/**
|
||||
* @brief Bluetooth Analog setting
|
||||
*/
|
||||
/*-----------------------------------------------------------*/
|
||||
#if ((!TCFG_USER_BT_CLASSIC_ENABLE) && TCFG_USER_BLE_ENABLE)
|
||||
const int config_btctler_single_carrier_en = 1; ////单模ble才设置
|
||||
#else
|
||||
const int config_btctler_single_carrier_en = 0;
|
||||
#endif
|
||||
|
||||
const int sniff_support_reset_anchor_point = 0; //sniff状态下是否支持reset到最近一次通信点,用于HID
|
||||
|
||||
const int sniff_long_interval = (500 / 0.625); //sniff状态下进入long interval的通信间隔(ms)
|
||||
|
||||
const int config_rf_oob = 0;
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief Log (Verbose/Info/Debug/Warn/Error)
|
||||
*/
|
||||
/*-----------------------------------------------------------*/
|
||||
//RF part
|
||||
const char log_tag_const_v_Analog AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_Analog AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_Analog AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_Analog AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_Analog AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
|
||||
const char log_tag_const_v_RF AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_RF AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_RF AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_RF AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_RF AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
|
||||
//Classic part
|
||||
const char log_tag_const_v_HCI_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_HCI_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_HCI_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_HCI_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_HCI_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
//LE part
|
||||
const char log_tag_const_v_LE_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LE_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LE_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_LE_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_LE_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LE5_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LE5_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LE5_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LE5_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LE5_BB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_HCI_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_HCI_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_HCI_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_HCI_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_HCI_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_LL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_E AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_E AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_E AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_E AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_E AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_M AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_M AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_M AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_M AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_M AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_EXT_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_EXT_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_EXT_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_EXT_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_EXT_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_EXT_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_EXT_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_EXT_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_EXT_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_EXT_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_EXT_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_EXT_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_EXT_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_EXT_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_EXT_INIT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_TWS_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_TWS_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_TWS_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_TWS_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_TWS_ADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_TWS_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_TWS_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_TWS_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_TWS_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_TWS_SCAN AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_S AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_S AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_LL_S AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_S AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_S AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_RL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_RL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_LL_RL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_RL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_RL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_WL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_WL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_LL_WL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_WL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_WL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_AES AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_AES AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_AES AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_AES AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_AES AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_PADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_PADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_PADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_PADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_PADV AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_DX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_DX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_DX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_DX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_DX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_PHY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_PHY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_PHY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_PHY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_PHY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_AFH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_AFH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_LL_AFH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_LL_AFH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_AFH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
//HCI part
|
||||
const char log_tag_const_v_Thread AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_Thread AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_Thread AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_Thread AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_Thread AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_HCI_STD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_HCI_STD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_HCI_STD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_HCI_STD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_HCI_STD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_HCI_LL5 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_HCI_LL5 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_HCI_LL5 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_HCI_LL5 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_HCI_LL5 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_ISO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_i_LL_ISO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_LL_ISO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_ISO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_ISO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_BIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_BIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_BIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_BIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_BIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_LL_CIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_LL_CIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_LL_CIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_LL_CIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_LL_CIS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_BL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_BL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_BL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_BL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_BL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_c_BL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
|
||||
const char log_tag_const_v_TWS_LE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_i_TWS_LE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_TWS_LE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_TWS_LE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_TWS_LE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_c_TWS_LE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
|
||||
const char log_tag_const_v_TWS_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_i_TWS_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_TWS_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_TWS_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_TWS_LMP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
|
||||
const char log_tag_const_v_TWS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_TWS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_TWS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_TWS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_e_TWS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
|
||||
const char log_tag_const_v_TWS_ESCO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_i_TWS_ESCO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_TWS_ESCO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_TWS_ESCO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_TWS_ESCO AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
@@ -0,0 +1,85 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : btstack_config.c
|
||||
|
||||
* Description : Optimized Code & RAM (编译优化配置)
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : caibingquan@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2019-03-16 11:49
|
||||
|
||||
* Copyright:(c)JIELI 2011-2019 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#include "app_config.h"
|
||||
#include "system/includes.h"
|
||||
#include "btcontroller_config.h"
|
||||
#include "bt_common.h"
|
||||
|
||||
/**
|
||||
* @brief Bluetooth Stack Module
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SOUNDBOX_FLASH_256K
|
||||
const int CONFIG_BTSTACK_BIG_FLASH_ENABLE = 0;
|
||||
#else
|
||||
const int CONFIG_BTSTACK_BIG_FLASH_ENABLE = 1;
|
||||
#endif
|
||||
|
||||
|
||||
#if TCFG_BT_SUPPORT_AAC
|
||||
const int CONFIG_BTSTACK_SUPPORT_AAC = 1;
|
||||
#else
|
||||
const int CONFIG_BTSTACK_SUPPORT_AAC = 0;
|
||||
#endif
|
||||
|
||||
#if TCFG_BT_SUPPORT_LDAC
|
||||
const int CONFIG_BTSTACK_SUPPORT_LDAC = 1;
|
||||
#else
|
||||
const int CONFIG_BTSTACK_SUPPORT_LDAC = 0;
|
||||
#endif
|
||||
//协议栈接收到命令是否自动退出sniff
|
||||
const int config_btstask_auto_exit_sniff = 1;
|
||||
|
||||
|
||||
|
||||
#if SMART_BOX_EN
|
||||
const int config_rcsp_stack_enable = 1;
|
||||
#else
|
||||
const int config_rcsp_stack_enable = 0;
|
||||
#endif
|
||||
|
||||
#if (TCFG_USER_BLE_ENABLE)
|
||||
//le 配置,可以优化代码和RAM
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_WIRELESS_MIC_CLIENT)
|
||||
const int config_le_hci_connection_num = 1;//支持同时连接个数
|
||||
const int config_le_sm_support_enable = 0; //是否支持加密配对
|
||||
const int config_le_gatt_client_num = 1; //支持client角色个数
|
||||
const int config_le_gatt_server_num = 0; //支持server角色个数
|
||||
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_WIRELESS_MIC_SERVER)
|
||||
const int config_le_hci_connection_num = 1;//支持同时连接个数
|
||||
const int config_le_sm_support_enable = 0; //是否支持加密配对
|
||||
const int config_le_gatt_client_num = 0; //支持client角色个数
|
||||
const int config_le_gatt_server_num = 1; //支持server角色个数
|
||||
|
||||
#elif (BLE_HID_EN)
|
||||
const int config_le_hci_connection_num = 1;//支持同时连接个数
|
||||
const int config_le_sm_support_enable = 1; //是否支持加密配对
|
||||
const int config_le_gatt_server_num = 1; //支持server角色个数
|
||||
const int config_le_gatt_client_num = 0; //支持client角色个数
|
||||
|
||||
#else
|
||||
const int config_le_hci_connection_num = 1;//支持同时连接个数
|
||||
const int config_le_sm_support_enable = 1; //是否支持加密配对
|
||||
const int config_le_gatt_server_num = 1; //支持server角色个数
|
||||
const int config_le_gatt_client_num = 0; //支持client角色个数
|
||||
#endif
|
||||
|
||||
#else
|
||||
//no ble
|
||||
const int config_le_hci_connection_num = 0;//支持同时连接个数
|
||||
const int config_le_sm_support_enable = 0; //是否支持加密配对
|
||||
const int config_le_gatt_server_num = 0; //支持server角色个数
|
||||
const int config_le_gatt_client_num = 0; //支持client角色个数
|
||||
#endif
|
||||
@@ -0,0 +1,231 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : lib_driver_config.c
|
||||
|
||||
* Description : Optimized Code & RAM (编译优化配置)
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : caibingquan@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2019-03-18 14:58
|
||||
|
||||
* Copyright:(c)JIELI 2011-2019 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#include "app_config.h"
|
||||
#include "system/includes.h"
|
||||
|
||||
#if TCFG_SD0_SD1_USE_THE_SAME_HW
|
||||
const int sd0_sd1_use_the_same_hw = 1;
|
||||
#else
|
||||
const int sd0_sd1_use_the_same_hw = 0;
|
||||
#endif
|
||||
#ifdef CONFIG_MOVABLE_ENABLE
|
||||
const int config_spi_code_user_cache = 1;
|
||||
#else
|
||||
const int config_spi_code_user_cache = 0;
|
||||
#endif
|
||||
|
||||
#if TCFG_KEEP_CARD_AT_ACTIVE_STATUS
|
||||
const int keep_card_at_active_status = 1;
|
||||
#else
|
||||
const int keep_card_at_active_status = 0;
|
||||
#endif
|
||||
|
||||
#if TCFG_SDX_CAN_OPERATE_MMC_CARD
|
||||
const int sdx_can_operate_mmc_card = TCFG_SDX_CAN_OPERATE_MMC_CARD;
|
||||
#else
|
||||
const int sdx_can_operate_mmc_card = 0;
|
||||
#endif
|
||||
|
||||
#if TCFG_POWER_MODE_QUIET_ENABLE
|
||||
const int config_dcdc_mode = 1;
|
||||
#else
|
||||
const int config_dcdc_mode = 0;
|
||||
#endif
|
||||
|
||||
#if(TCFG_CLOCK_SYS_SRC == SYS_CLOCK_INPUT_PLL_RCL) //系统时钟源选择
|
||||
const int clock_sys_src_use_lrc_hw = 1; //当使用lrc时timer.c需要特殊设置
|
||||
#else
|
||||
const int clock_sys_src_use_lrc_hw = 0;
|
||||
#endif
|
||||
|
||||
#ifdef TCFG_VAD_LOWPOWER_CLOCK
|
||||
const char config_vad_lowpower_clock = TCFG_VAD_LOWPOWER_CLOCK;
|
||||
#else
|
||||
const char config_vad_lowpower_clock = 0;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CPU_BR28) || ((TCFG_OTG_MODE & OTG_DET_DM_ONLY) != 0)
|
||||
const int config_otg_slave_detect_method_2 = 1;
|
||||
#else
|
||||
const int config_otg_slave_detect_method_2 = 0;
|
||||
#endif
|
||||
/**
|
||||
* @brief Log (Verbose/Info/Debug/Warn/Error)
|
||||
*/
|
||||
/*-----------------------------------------------------------*/
|
||||
const char log_tag_const_v_CLOCK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE) ;
|
||||
const char log_tag_const_i_CLOCK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE) ;
|
||||
const char log_tag_const_d_CLOCK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_w_CLOCK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_CLOCK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_LP_TIMER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_LP_TIMER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_LP_TIMER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_LP_TIMER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_LP_TIMER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_LRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_LRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_LRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_LRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_LRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_RCH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_RCH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_RCH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_RCH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_RCH AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_P33_MISC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_P33_MISC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_P33_MISC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_P33_MISC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_P33_MISC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_P33 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_P33 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_P33 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_P33 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_P33 AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_RTC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_RTC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_d_RTC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_RTC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_RTC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_WKUP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_WKUP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_WKUP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_WKUP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_WKUP AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_SDFILE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_SDFILE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_SDFILE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_SDFILE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_SDFILE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_CHARGE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_CHARGE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_CHARGE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_CHARGE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_CHARGE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_DEBUG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_DEBUG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_DEBUG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_DEBUG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_DEBUG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_PWM_LED AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_PWM_LED AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_PWM_LED AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_PWM_LED AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_PWM_LED AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_VM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_VM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_d_VM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_VM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_VM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_TRIM_VDD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE) ;
|
||||
const char log_tag_const_i_TRIM_VDD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_TRIM_VDD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_w_TRIM_VDD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_TRIM_VDD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
//audio dac
|
||||
const char log_tag_const_v_SYS_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_SYS_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_SYS_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_SYS_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_e_SYS_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
|
||||
|
||||
const char log_tag_const_v_APP_EDET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_APP_EDET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_APP_EDET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_APP_EDET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_e_APP_EDET AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
|
||||
|
||||
const char log_tag_const_v_FM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_FM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_FM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_FM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_e_FM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
|
||||
const char log_tag_const_v_CORE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_CORE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_CORE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_CORE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_e_CORE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
|
||||
const char log_tag_const_v_CACHE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_CACHE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(1);
|
||||
const char log_tag_const_d_CACHE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_CACHE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_e_CACHE AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
|
||||
const char log_tag_const_v_LP_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_LP_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_d_LP_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_w_LP_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_LP_KEY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_SD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_SD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_d_SD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_SD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_e_SD AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_EAR_DETECT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_EAR_DETECT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_d_EAR_DETECT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_EAR_DETECT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_e_EAR_DETECT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
|
||||
const char log_tag_const_v_TDM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_TDM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_d_TDM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_w_TDM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_TDM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_USB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_USB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_USB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_w_USB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_USB AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
@@ -0,0 +1,544 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : lib_driver_config.c
|
||||
|
||||
* Description : Optimized Code & RAM (编译优化配置)
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : caibingquan@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2019-03-18 14:58
|
||||
|
||||
* Copyright:(c)JIELI 2011-2019 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
#include "app_config.h"
|
||||
#include "system/includes.h"
|
||||
#include "media/includes.h"
|
||||
#include "audio_adc.h"
|
||||
#include "audio_config.h"
|
||||
#include "media/hw_fft.h"
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#include "audio_anc.h"
|
||||
#endif
|
||||
|
||||
#if (TCFG_AUDIO_DECODER_OCCUPY_TRACE)
|
||||
const u8 audio_decoder_occupy_trace_enable = 1;
|
||||
const u8 audio_decoder_occupy_trace_dump = 0;
|
||||
#else
|
||||
const u8 audio_decoder_occupy_trace_enable = 0;
|
||||
const u8 audio_decoder_occupy_trace_dump = 0;
|
||||
#endif/*TCFG_AUDIO_DECODER_OCCUPY_TRACE*/
|
||||
|
||||
|
||||
const int JL_HW_FFT_V = FFT_EXT ; //FFT硬件版本
|
||||
|
||||
/* #if (TCFG_APP_MUSIC_EN && !TCFG_DEC2TWS_ENABLE) */
|
||||
|
||||
const int WMA_TWSDEC_EN = 0; // wma tws 解码控制
|
||||
|
||||
// 解码一次输出点数,1代表32对点,n就是n*32对点
|
||||
// 超过1时,解码需要使用malloc,如config_mp3_dec_use_malloc=1
|
||||
const int MP3_OUTPUT_LEN = 1;
|
||||
const int WMA_OUTPUT_LEN = 1;
|
||||
|
||||
|
||||
#define FAST_FREQ_restrict 0x01 //限制超过16k的频率不解【一般超出人耳听力范围,但是仪器会测出来】
|
||||
#define FAST_FILTER_restrict 0x02 //限制滤波器长度【子带滤波器旁瓣加大,边缘不够陡】
|
||||
#define FAST_CHANNEL_restrict 0x04 //混合左右声道,再解码【如果是左右声道独立性较强的歌曲,会牺牲空间感,特别耳机听会听出来的话】
|
||||
const int config_mp3_dec_speed_mode = 0;//FAST_FREQ_restrict | FAST_FILTER_restrict | FAST_CHANNEL_restrict; //3个开关都置上,是最快的解码模式
|
||||
/* #endif // (TCFG_APP_MUSIC_EN && !TCFG_DEC2TWS_ENABLE) */
|
||||
|
||||
|
||||
const int WAV_MAX_BITRATEV = (48 * 2 * 32); // wav最大支持比特率,单位kbps
|
||||
|
||||
|
||||
// 解码一次输出点数,建议范围32到900,例如128代表128对点
|
||||
// 超过128时,解码需要使用malloc,如config_wav_dec_use_malloc=1
|
||||
const int WAV_DECODER_PCM_POINTS = 128;
|
||||
|
||||
// output超过128时,如果不使用malloc,需要增大对应buf
|
||||
// 可以看打印中解码器需要的大小,一般输出每增加1长度增加4个字节
|
||||
int wav_mem_ext[(1336 + 3) / 4] SEC(.wav_mem); //超过128要增加这个数组的大小
|
||||
|
||||
const int OPUS_SRINDEX = 0; //选择opus解码文件的帧大小,0代表一帧40字节,1代表一帧80字节,2代表一帧160字节
|
||||
|
||||
const int WTGV2_STACK2BUF = 0; //等于1时解码buf会加大760,栈会减小
|
||||
|
||||
const int const_sel_adpcm_type = 0;//1:使用imaen_adpcm, 0:msen_adpcm
|
||||
|
||||
#ifdef CONFIG_MIDI_DEC_ADDR
|
||||
const int MIDI_TONE_MODE = 0;//0是地址访问(仅支持在内置flash,读数快,消耗mips低),1 是文件访问(内置、外挂flash,sd,u盘均可,读数慢,消耗mips较大)
|
||||
#else
|
||||
const int MIDI_TONE_MODE = 1;
|
||||
#endif
|
||||
const int MAINTRACK_USE_CHN = 0; //MAINTRACK_USE_CHN控制主通道区分方式; 0用track号区分主通道 1用chn号区分主通道
|
||||
const int MAX_PLAYER_CNT = 18; //控制可配置的最大同时发声的key数的BUF[1,32]
|
||||
|
||||
#if CONFIG_MEDIA_LIB_USE_MALLOC
|
||||
const int config_mp3_dec_use_malloc = 1;
|
||||
const int config_mp3pick_dec_use_malloc = 1;
|
||||
const int config_wma_dec_use_malloc = 1;
|
||||
const int config_wmapick_dec_use_malloc = 1;
|
||||
const int config_m4a_dec_use_malloc = 1;
|
||||
const int config_m4apick_dec_use_malloc = 1;
|
||||
const int config_wav_dec_use_malloc = 1;
|
||||
const int config_alac_dec_use_malloc = 1;
|
||||
const int config_dts_dec_use_malloc = 1;
|
||||
const int config_amr_dec_use_malloc = 1;
|
||||
const int config_flac_dec_use_malloc = 1;
|
||||
const int config_ape_dec_use_malloc = 1;
|
||||
const int config_aac_dec_use_malloc = 1;
|
||||
const int config_ldac_dec_use_malloc = 1;
|
||||
const int config_aptx_dec_use_malloc = 1;
|
||||
const int config_midi_dec_use_malloc = 1;
|
||||
const int config_lc3_dec_use_malloc = 1;
|
||||
const int config_speex_dec_use_malloc = 1;
|
||||
const int config_opus_dec_use_malloc = 1;
|
||||
#else
|
||||
const int config_mp3_dec_use_malloc = 0;
|
||||
const int config_mp3pick_dec_use_malloc = 0;
|
||||
const int config_wma_dec_use_malloc = 0;
|
||||
const int config_wmapick_dec_use_malloc = 0;
|
||||
const int config_m4a_dec_use_malloc = 0;
|
||||
const int config_m4apick_dec_use_malloc = 0;
|
||||
const int config_wav_dec_use_malloc = 0;
|
||||
const int config_alac_dec_use_malloc = 0;
|
||||
const int config_dts_dec_use_malloc = 0;
|
||||
const int config_amr_dec_use_malloc = 0;
|
||||
const int config_flac_dec_use_malloc = 0;
|
||||
const int config_ape_dec_use_malloc = 0;
|
||||
const int config_aac_dec_use_malloc = 0;
|
||||
const int config_ldac_dec_use_malloc = 0;
|
||||
const int config_aptx_dec_use_malloc = 0;
|
||||
const int config_midi_dec_use_malloc = 0;
|
||||
const int config_lc3_dec_use_malloc = 0;
|
||||
const int config_speex_dec_use_malloc = 0;
|
||||
const int config_opus_dec_use_malloc = 0;
|
||||
|
||||
#endif
|
||||
|
||||
const int LC3_SUPPORT_CH = 2; //lc3解码输入通道数 1:单声道输入, 2:双声道输入(br30可支持2)
|
||||
const int LC3_DMS_VAL = 25; //单位ms, 【只支持 25,50,100】
|
||||
const int LC3_DMS_FSINDEX = 4; //配置采样率【只支持0到4】,影响用哪组表以及一次的处理长度(<=8k的时候,配0. <=16k的时候,配1.<=24k的时候,配2.<=32k的时候,配3.<=48k的时候,配4)
|
||||
const int LC3_QUALTIY_CONFIG = 4;//【范围1到4, 1需要的速度最少,这个默认先配4】
|
||||
|
||||
//wts解码支持采样率可选择,可以同时打开也可以单独打开
|
||||
const int silk_fsN_enable = 1; //支持8-12k采样率
|
||||
const int silk_fsW_enable = 1; //支持16-24k采样率
|
||||
|
||||
/*省电容mic使能配置*/
|
||||
#if TCFG_SUPPORT_MIC_CAPLESS
|
||||
const u8 const_mic_capless_en = 1;
|
||||
#else
|
||||
const u8 const_mic_capless_en = 0;
|
||||
#endif/*TCFG_SUPPORT_MIC_CAPLESS*/
|
||||
|
||||
// 快进快退到文件end返回结束消息
|
||||
const int config_decoder_ff_fr_end_return_event_end = 0;
|
||||
|
||||
|
||||
const int config_audio_eq_en = 0
|
||||
#if TCFG_EQ_ENABLE
|
||||
| EQ_EN //eq使能
|
||||
#if TCFG_EQ_ONLINE_ENABLE
|
||||
| EQ_ONLINE_EN //在线调试使能
|
||||
#endif/*TCFG_AUDIO_OUT_EQ_ENABLE*/
|
||||
#if TCFG_USE_EQ_FILE
|
||||
| EQ_FILE_EN //使用eq_cfg_hw.bin文件效果
|
||||
|
||||
#if TCFG_EQ_FILE_SWITCH_EN
|
||||
| EQ_FILE_SWITCH_EN //使能eq_cfg_hw.bin多文件切换,对应旧版config_audio_eq_file_sw_en
|
||||
#endif
|
||||
#endif/*TCFG_USE_EQ_FILE*/
|
||||
#if TCFG_AUDIO_OUT_EQ_ENABLE
|
||||
| EQ_HIGH_BASS_EN //高低音接口使能
|
||||
| EQ_HIGH_BASS_FADE_EN //高低音接口数据更新使用淡入淡出,配合config_audio_eq_fade_step步进使用
|
||||
#endif/*TCFG_AUDIO_OUT_EQ_ENABLE*/
|
||||
#if (RCSP_ADV_EN)&&(JL_EARPHONE_APP_EN)&&(TCFG_DRC_ENABLE == 0)
|
||||
/* |EQ_FILTER_COEFF_LIMITER_ZERO_EN */
|
||||
#endif
|
||||
#ifndef CONFIG_SOUNDBOX_FLASH_256K
|
||||
| EQ_HW_UPDATE_COEFF_ONLY_EN
|
||||
| EQ_HW_LR_ALONE
|
||||
#endif/* CONFIG_SOUNDBOX_FLASH_256K */
|
||||
#if defined(EQ_CORE_V1) && TCFG_DRC_ENABLE
|
||||
| EQ_SUPPORT_MULIT_CHANNEL_EN //eq是否支持多声道(3~8) 打开:支持 否则:仅支持1~2声道*/
|
||||
| EQ_HW_CROSSOVER_TYPE0_EN //硬件分频器用序列进序列出
|
||||
//|EQ_HW_CROSSOVER_TYPE1_EN //硬件分频器使用块出方式,会增加mem(该方式仅支持单声道处理)
|
||||
#endif/*(EQ_CORE_V1) && TCFG_DRC_ENABLE*/
|
||||
#if defined(TCFG_EQ_DIVIDE_ENABLE) && TCFG_EQ_DIVIDE_ENABLE
|
||||
| EQ_LR_DIVIDE_EN
|
||||
#endif/*TCFG_EQ_DIVIDE_ENABLE*/
|
||||
|
||||
#if defined(EQ_LITE_CODE) && EQ_LITE_CODE
|
||||
| EQ_LITE_VER_EN //不支持异步,不支持默认效果切换接口,仅支持文件解析
|
||||
#if TCFG_DRC_ENABLE
|
||||
| EQ_SUPPORT_32BIT_SYNC_EN //32bit同步方式eq使能,eq_lite_en后,该宏需使能
|
||||
#endif/*TCFG_DRC_ENABLE*/
|
||||
#endif/* EQ_LITE_CODE */
|
||||
| EQ_FILTER_COEFF_FADE_EN//默认系数切换更新时使用淡入淡出
|
||||
|
||||
#if defined(EQ_CORE_V1)
|
||||
| EQ_SUPPORT_OLD_VER_EN //AC700N,或上BIT(1)支持版本0.7.1.0,0.7.1.1
|
||||
#endif/*EQ_CORE_V1*/
|
||||
#endif/* TCFG_EQ_ENABLE */
|
||||
| 0; //end
|
||||
|
||||
const float config_audio_eq_fade_step = 0.1f;//播歌高低音增益调节步进
|
||||
|
||||
|
||||
const int const_eq_debug = 0;
|
||||
const int AUDIO_EQ_CLEAR_MEM_BY_MUTE_TIME_MS = 0;//300 //连续多长时间静音就清除EQ MEM
|
||||
const int AUDIO_EQ_CLEAR_MEM_BY_MUTE_LIMIT = 0; //静音判断阀值
|
||||
|
||||
const int config_audio_drc_en = 0
|
||||
#if TCFG_DRC_ENABLE
|
||||
| DRC_EN //drc使能
|
||||
#if ((defined(TCFG_AUDIO_HEARING_AID_ENABLE) && TCFG_AUDIO_HEARING_AID_ENABLE) || TCFG_CVP_UL_DRC_ENABLE || (defined(TCFG_AUDIO_BASS_BOOST)&&TCFG_AUDIO_BASS_BOOST) || defined(TCFG_AUDIO_MDRC_ENABLE) && TCFG_AUDIO_MDRC_ENABLE)
|
||||
| WDRC_TYPE_EN
|
||||
#endif
|
||||
/* |DRC_COMPRESSOF_DIS //关闭压缩器 */
|
||||
/* |DRC_NBAND_DIS //关闭多带压缩器,关闭多带限幅器 */
|
||||
#endif /*TCFG_DRC_ENABLE*/
|
||||
| 0; //end
|
||||
|
||||
#ifdef CONFIG_ANC_30C_ENABLE
|
||||
const char config_audio_30c_en = 1;
|
||||
#else
|
||||
const char config_audio_30c_en = 0;
|
||||
#endif
|
||||
|
||||
#if AUDIO_SURROUND_CONFIG
|
||||
const int const_surround_en = BIT(2) | 1;//或上BIT(2)使能新的环绕音效
|
||||
#else
|
||||
const int const_surround_en = 0;
|
||||
#endif
|
||||
|
||||
#if AUDIO_VBASS_CONFIG
|
||||
const int const_vbass_en = 1;
|
||||
#else
|
||||
const int const_vbass_en = 0;
|
||||
#endif
|
||||
|
||||
const int A2DP_AUDIO_PLC_ENABLE = 0;
|
||||
const int LPC_JUST_FADE = 0; //播歌PLC仅淡入淡出配置, 0 - 补包运算(Ram 3660bytes, Code 1268bytes),1 - 仅淡出淡入(Ram 688bytes, Code 500bytes)
|
||||
const char config_audio_mixer_ch_highlight_enable = 0; //混音器声音突出功能使能
|
||||
|
||||
#ifdef SBC_CUSTOM_DECODER_BUF_SIZE
|
||||
const short config_sbc_decoder_buf_size = 512;
|
||||
#endif
|
||||
// tws音频解码自动设置输出声道。
|
||||
// 单声道:AUDIO_CH_L/AUDIO_CH_R。双声道:AUDIO_CH_DUAL_L/AUDIO_CH_DUAL_R
|
||||
// 关闭后,按照output_ch_num和output_ch_type/ch_type设置输出声道
|
||||
const int audio_tws_auto_channel = 1;
|
||||
|
||||
const int MP3_SEARCH_MAX = 200; //本地解码设成200, 网络解码可以设成3
|
||||
const int MP3_TGF_TWS_EN = 1; //tws解码使能
|
||||
const int MP3_TGF_POSPLAY_EN = 1; //定点播放 获取ms级别时间 接口使能
|
||||
const int MP3_TGF_AB_EN = 1; //AB点复读使能
|
||||
const int MP3_TGF_FASTMO = 0; //快速解码使能【默认关闭,之前给一个sdk单独加的,配置是否解高频,解双声道等】
|
||||
|
||||
#if (TCFG_MIC_EFFECT_ENABLE || TCFG_AUDIO_DAC_MIX_ENABLE)
|
||||
const int config_audio_dac_mix_enable = 1;
|
||||
#else
|
||||
const int config_audio_dac_mix_enable = 0;
|
||||
#endif
|
||||
|
||||
#if TCFG_AUDIO_DAC_MIX_ENABLE
|
||||
const int config_audio_dac_noisefloor_optimize_enable = 0;
|
||||
#else
|
||||
const int config_audio_dac_noisefloor_optimize_enable = BIT(1);
|
||||
#endif
|
||||
|
||||
// mixer在单独任务中输出
|
||||
#if TCFG_MIXER_CYCLIC_TASK_EN
|
||||
const int config_mixer_task = 1;
|
||||
#else
|
||||
const int config_mixer_task = 0;
|
||||
#endif
|
||||
|
||||
// mixer各个通道拥有独立buf
|
||||
const int config_mixer_ch_self_buf_en = 0;
|
||||
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
// mixer模块使能。不使能将关闭大部分功能,mix为直通
|
||||
const int config_mixer_en = 0;
|
||||
// mixer变采样使能
|
||||
const int config_mixer_src_en = 0;
|
||||
|
||||
// audio解码资源叠加功能使能。不使能,如果配置了叠加方式,将改成抢占方式
|
||||
const int config_audio_dec_wait_protect_en = 0;
|
||||
|
||||
// audio数据流分支功能使能。
|
||||
const int config_audio_stream_frame_copy_en = 0;
|
||||
|
||||
// audio dec app调用mixer相关函数控制。关闭后需上层设置数据流的输出节点
|
||||
const int audio_dec_app_mix_en = 0;
|
||||
|
||||
#else
|
||||
|
||||
// mixer模块使能。不使能将关闭大部分功能,mix为直通
|
||||
const int config_mixer_en = 1;
|
||||
// mixer变采样使能
|
||||
const int config_mixer_src_en = 1;
|
||||
|
||||
// audio解码资源叠加功能使能。不使能,如果配置了叠加方式,将改成抢占方式
|
||||
const int config_audio_dec_wait_protect_en = 1;
|
||||
|
||||
// audio数据流分支功能使能。
|
||||
const int config_audio_stream_frame_copy_en = 1;
|
||||
|
||||
// audio dec app调用mixer相关函数控制。关闭后需上层设置数据流的输出节点
|
||||
const int audio_dec_app_mix_en = 1;
|
||||
|
||||
#endif
|
||||
|
||||
// audio数据流分支cbuf大小控制
|
||||
const int config_audio_stream_frame_copy_cbuf_min = 128;
|
||||
const int config_audio_stream_frame_copy_cbuf_max = 1024;
|
||||
|
||||
// 超时等待其他解码unactive步骤完成
|
||||
const int config_audio_dec_unactive_to = 0;
|
||||
// audio数据流ioctrl使能
|
||||
const int config_audio_stream_frame_ioctrl_en = 0;
|
||||
|
||||
// audio dec app tws同步使能
|
||||
const int audio_dec_app_sync_en = 0;
|
||||
|
||||
// 解码使用单独任务做输出
|
||||
#if TCFG_AUDIO_DEC_OUT_TASK
|
||||
const int config_audio_dec_out_task_en = 1;
|
||||
#else
|
||||
const int config_audio_dec_out_task_en = 0;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
const char config_audio_mini_enable = 1;
|
||||
#else
|
||||
const char config_audio_mini_enable = 0;
|
||||
#endif
|
||||
|
||||
enum {
|
||||
PLATFORM_FREQSHIFT_CORDIC = 0,
|
||||
PLATFORM_FREQSHIFT_CORDICV2 = 1
|
||||
};
|
||||
|
||||
/* 备注: */
|
||||
/* br23/br25/br30/br34/br40是PLATFORM_FREQSHIFT_CORDIC */
|
||||
/* , br36/br28/br27是PLATFORM_FREQSHIFT_CORDICV2 */
|
||||
|
||||
#if (CONFIG_CPU_BR28 || CONFIG_CPU_BR27 || CONFIG_CPU_BR36)
|
||||
#define PLATFORM_PARM_SEL PLATFORM_FREQSHIFT_CORDICV2
|
||||
#else
|
||||
#define PLATFORM_PARM_SEL PLATFORM_FREQSHIFT_CORDIC
|
||||
#endif
|
||||
|
||||
const int howling_freshift_PLATFORM = PLATFORM_PARM_SEL;
|
||||
const int howling_freshift_highmode_flag = 0; //移频快速模式
|
||||
const int howling_pitchshift_fastmode_flag = 1;//移频啸叫抑制快速模式使能
|
||||
|
||||
const int vc_pitchshift_fastmode_flag = 1; //变声快速模式使能
|
||||
const int vc_pitchshift_downmode_flag = 0; //变声下采样处理使能
|
||||
const int VC_KINDO_TVM = 1; //含义为EFFECT_VOICECHANGE_KIN0是否另一种算法 : 0表示跟原来一样,1表示用另一种
|
||||
const int RS_FAST_MODE_QUALITY = 2; //软件变采样 滤波阶数配置,范围2到8, 8代表16阶的变采样模式 ,速度跟它的大小呈正相关
|
||||
const int config_howling_enable_pemafrow_mode = 0;
|
||||
const int config_howling_enable_trap_mode = 1;//陷波啸叫抑制模式使能
|
||||
const int config_howling_enable_pitchps_mode = 1; //移频啸叫抑制模式使能
|
||||
|
||||
const unsigned char config_audio_dac_underrun_protect = 1;
|
||||
|
||||
#if ((SYS_VOL_TYPE == VOL_TYPE_DIGITAL_HW) || (SYS_VOL_TYPE == VOL_TYPE_DIGITAL))
|
||||
const char config_audio_dac_trim_enable = 1;
|
||||
#else
|
||||
const char config_audio_dac_trim_enable = 1;
|
||||
#endif
|
||||
|
||||
#if TCFG_LOWPOWER_LOWPOWER_SEL
|
||||
const int config_audio_dac_delay_off_ms = 300;
|
||||
#else
|
||||
const int config_audio_dac_delay_off_ms = 0;
|
||||
#endif
|
||||
|
||||
const int config_audio_dac_vcm_chsel_delay = 1500;
|
||||
|
||||
|
||||
// 解码任务测试
|
||||
const int audio_decoder_test_en = 0;
|
||||
// 当audio_decoder_test_en使能时需要实现以下接口
|
||||
#if 0
|
||||
void audio_decoder_test_out_before(struct audio_decoder *dec, void *buff, int len) {} ;
|
||||
void audio_decoder_test_out_after(struct audio_decoder *dec, int wlen) {} ;
|
||||
void audio_decoder_test_read_before(struct audio_decoder *dec, int len, u32 offset) {} ;
|
||||
void audio_decoder_test_read_after(struct audio_decoder *dec, u8 *data, int rlen) {} ;
|
||||
void audio_decoder_test_get_frame_before(struct audio_decoder *dec) {} ;
|
||||
void audio_decoder_test_get_frame_after(struct audio_decoder *dec, u8 *frame, int rlen) {} ;
|
||||
void audio_decoder_test_fetch_before(struct audio_decoder *dec) {} ;
|
||||
void audio_decoder_test_fetch_after(struct audio_decoder *dec, u8 *frame, int rlen) {} ;
|
||||
void audio_decoder_test_run_before(struct audio_decoder *dec) {} ;
|
||||
void audio_decoder_test_run_after(struct audio_decoder *dec, int err) {} ;
|
||||
#else
|
||||
// 接口实现示例
|
||||
//#include "audio/demo/audio_decoder_test.c"
|
||||
#endif
|
||||
|
||||
|
||||
// 编码任务测试
|
||||
const int audio_encoder_test_en = 0;
|
||||
// 当audio_encoder_test_en使能时需要实现以下接口
|
||||
#if 0
|
||||
void audio_encoder_test_out_before(struct audio_encoder *enc, void *buff, int len) {} ;
|
||||
void audio_encoder_test_out_after(struct audio_encoder *enc, int wlen) {} ;
|
||||
void audio_encoder_test_get_frame_before(struct audio_encoder *enc, u16 frame_len) {} ;
|
||||
void audio_encoder_test_get_frame_after(struct audio_encoder *enc, s16 *frame, int rlen) {} ;
|
||||
void audio_encoder_test_run_before(struct audio_encoder *enc) {} ;
|
||||
void audio_encoder_test_run_after(struct audio_encoder *enc, int err) {} ;
|
||||
#else
|
||||
// 接口实现示例
|
||||
//#include "audio/demo/audio_encoder_test.c"
|
||||
#endif
|
||||
//数字音量节点 是否使用汇编优化 不支持的芯片需置0
|
||||
#if(CONFIG_CPU_BR18)
|
||||
const int const_config_digvol_use_round = 0;
|
||||
#else
|
||||
const int const_config_digvol_use_round = 1;
|
||||
#endif
|
||||
|
||||
/*杰理KWS关键词识别*/
|
||||
#if TCFG_SMART_VOICE_ENABLE
|
||||
const int CONFIG_KWS_WAKE_WORD_MODEL_ENABLE = 0;
|
||||
const int CONFIG_KWS_MULTI_CMD_MODEL_ENABLE = 1;
|
||||
#if TCFG_CALL_KWS_SWITCH_ENABLE
|
||||
const int CONFIG_KWS_CALL_CMD_MODEL_ENABLE = 1;
|
||||
#else
|
||||
const int CONFIG_KWS_CALL_CMD_MODEL_ENABLE = 0;
|
||||
#endif
|
||||
#ifdef CONFIG_CPU_BR28
|
||||
const int CONFIG_KWS_RAM_USE_ENABLE = 1;
|
||||
#else
|
||||
const int CONFIG_KWS_RAM_USE_ENABLE = 2;
|
||||
#endif
|
||||
const int CONFIG_KWS_ONLINE_MODEL = 1;
|
||||
const float CONFIG_KWS_MULTI_CONFIDENCE[] = {
|
||||
0.4, 0.4, 0.4, 0.4, //小杰小杰,小杰同学,播放音乐,停止播放
|
||||
0.4, 0.4, 0.4, 0.3, //暂停播放,增大音量,减小音量,上一首
|
||||
0.3, 0.35, 0.35, 0.35, //下一首,打开降噪,关闭降噪,打开通透
|
||||
};
|
||||
|
||||
const float CONFIG_KWS_CALL_CONFIDENCE[] = {
|
||||
0.4, 0.4, //接听电话,挂断电话
|
||||
};
|
||||
#else
|
||||
const int CONFIG_KWS_WAKE_WORD_MODEL_ENABLE = 0;
|
||||
const int CONFIG_KWS_MULTI_CMD_MODEL_ENABLE = 0;
|
||||
const int CONFIG_KWS_CALL_CMD_MODEL_ENABLE = 0;
|
||||
const int CONFIG_KWS_ONLINE_MODEL = 0;
|
||||
#endif
|
||||
|
||||
#if (defined TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN) && TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN
|
||||
const int config_resample_pcm_frame_buffer = 512;
|
||||
#else
|
||||
const int config_resample_pcm_frame_buffer = 128;
|
||||
#endif
|
||||
|
||||
/*第二版串口写卡工具,支持写不定长度数据*/
|
||||
u8 const_audio_pcm_debug_v2_en = 0;
|
||||
|
||||
/**
|
||||
* @brief Log (Verbose/Info/Debug/Warn/Error)
|
||||
*/
|
||||
/*-----------------------------------------------------------*/
|
||||
const char log_tag_const_v_EQ_CFG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_EQ_CFG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_EQ_CFG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_EQ_CFG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_EQ_CFG AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_EQ_CFG_TOOL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_EQ_CFG_TOOL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_EQ_CFG_TOOL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_EQ_CFG_TOOL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_EQ_CFG_TOOL AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_EQ_APPLY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_EQ_APPLY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_EQ_APPLY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_EQ_APPLY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_EQ_APPLY AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_APP_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_APP_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_APP_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_APP_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_APP_DRC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
|
||||
const char log_tag_const_v_EQ AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_EQ AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_EQ AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_EQ AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_EQ AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_AUD_ADC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_AUD_ADC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_AUD_ADC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_AUD_ADC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_AUD_ADC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
|
||||
const char log_tag_const_v_AUD_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_AUD_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_AUD_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_AUD_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_AUD_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
|
||||
const char log_tag_const_v_APP_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_APP_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_APP_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_APP_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_APP_DAC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
|
||||
const char log_tag_const_v_AUD_AUX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_AUD_AUX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_AUD_AUX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_w_AUD_AUX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_AUD_AUX AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
|
||||
const char log_tag_const_v_MIXER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_c_MIXER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_MIXER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_MIXER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_MIXER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_AUDIO_STREAM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_c_AUDIO_STREAM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_AUDIO_STREAM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_AUDIO_STREAM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_AUDIO_STREAM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_AUDIO_DECODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_c_AUDIO_DECODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_AUDIO_DECODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_AUDIO_DECODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_AUDIO_DECODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_AUDIO_ENCODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_c_AUDIO_ENCODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_AUDIO_ENCODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_AUDIO_ENCODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_AUDIO_ENCODER AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
|
||||
const char log_tag_const_v_SYNCTS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_c_SYNCTS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_i_SYNCTS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_d_SYNCTS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(0);
|
||||
const char log_tag_const_e_SYNCTS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
/*********************************************************************************************
|
||||
* Filename : lib_system_config.c
|
||||
|
||||
* Description : Optimized Code & RAM (编译优化配置)
|
||||
|
||||
* Author : Bingquan
|
||||
|
||||
* Email : caibingquan@zh-jieli.com
|
||||
|
||||
* Last modifiled : 2019-03-18 15:22
|
||||
|
||||
* Copyright:(c)JIELI 2011-2019 @ , All Rights Reserved.
|
||||
*********************************************************************************************/
|
||||
|
||||
#include "app_config.h"
|
||||
#include "system/includes.h"
|
||||
|
||||
|
||||
///打印是否时间打印信息
|
||||
const int config_printf_time = 1;
|
||||
|
||||
///异常中断,asser打印开启
|
||||
#ifdef CONFIG_RELEASE_ENABLE
|
||||
const int config_asser = 0;
|
||||
#else
|
||||
const int config_asser = 1;
|
||||
#endif
|
||||
|
||||
const int config_system_info = 0;
|
||||
|
||||
//================================================//
|
||||
// SDFILE 精简使能 //
|
||||
//================================================//
|
||||
const int SDFILE_VFS_REDUCE_ENABLE = 1;
|
||||
|
||||
//================================================//
|
||||
// dev使用异步读使能 //
|
||||
//================================================//
|
||||
#ifdef TCFG_DEVICE_BULK_READ_ASYNC_ENABLE
|
||||
const int device_bulk_read_async_enable = 1;
|
||||
#else
|
||||
const int device_bulk_read_async_enable = 0;
|
||||
#endif
|
||||
|
||||
|
||||
const int VIRFAT_FLASH_ENABLE = 0;
|
||||
|
||||
//================================================//
|
||||
// UI //
|
||||
//================================================//
|
||||
const int ENABLE_LUA_VIRTUAL_MACHINE = 0;
|
||||
|
||||
//================================================//
|
||||
// 不可屏蔽中断使能配置(unmask_irq) //
|
||||
//================================================//
|
||||
const int CONFIG_CPU_UNMASK_IRQ_ENABLE = 0;
|
||||
|
||||
/**
|
||||
* @brief Log (Verbose/Info/Debug/Warn/Error)
|
||||
*/
|
||||
/*-----------------------------------------------------------*/
|
||||
const char log_tag_const_v_SYS_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_SYS_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_SYS_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_SYS_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_SYS_TMR AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_JLFS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_JLFS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_JLFS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_JLFS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_JLFS AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
//FreeRTOS
|
||||
const char log_tag_const_v_PORT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_PORT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_PORT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_PORT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_PORT AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_KTASK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_KTASK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_KTASK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_KTASK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_KTASK AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_uECC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_uECC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_uECC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_uECC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_uECC AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_HEAP_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_HEAP_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_HEAP_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_w_HEAP_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_HEAP_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_V_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_V_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_V_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_V_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_V_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
|
||||
const char log_tag_const_v_P_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_i_P_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_d_P_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);
|
||||
const char log_tag_const_w_P_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
const char log_tag_const_e_P_MEM AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);
|
||||
@@ -0,0 +1,48 @@
|
||||
|
||||
#include "app_config.h"
|
||||
#include "system/includes.h"
|
||||
#include "update_loader_download.h"
|
||||
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
const int config_update_mode = UPDATE_UART_EN;
|
||||
#else
|
||||
const int config_update_mode = UPDATE_BT_LMP_EN \
|
||||
| UPDATE_STORAGE_DEV_EN | UPDATE_BLE_TEST_EN | UPDATE_APP_EN | UPDATE_UART_EN;
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_APP_BT_ENABLE
|
||||
//是否采用双备份升级方案:0-单备份;1-双备份
|
||||
#if CONFIG_DOUBLE_BANK_ENABLE
|
||||
const int support_dual_bank_update_en = 1;
|
||||
#else
|
||||
const int support_dual_bank_update_en = 0;
|
||||
#endif //CONFIG_DOUBLE_BANK_ENABLE
|
||||
#else
|
||||
|
||||
//是否采用双备份升级方案:0-单备份;1-双备份
|
||||
#if CONFIG_DOUBLE_BANK_ENABLE
|
||||
const int support_dual_bank_update_en = 1;
|
||||
#else
|
||||
const int support_dual_bank_update_en = 0;
|
||||
#endif //CONFIG_DOUBLE_BANK_ENABLE
|
||||
#endif
|
||||
|
||||
#if OTA_TWS_SAME_TIME_NEW //使用新的同步升级流程
|
||||
const int support_ota_tws_same_time_new = 1;
|
||||
#else
|
||||
const int support_ota_tws_same_time_new = 0;
|
||||
#endif
|
||||
//是否支持升级之后保留vm数据
|
||||
const int support_vm_data_keep = 1;
|
||||
|
||||
//是否支持外挂flash升级,需要打开Board.h中的TCFG_NOR_FS_ENABLE
|
||||
const int support_norflash_update_en = 0;
|
||||
|
||||
//支持从外挂flash读取ufw文件升级使能
|
||||
const int support_norflash_ufw_update_en = 0;
|
||||
|
||||
const char log_tag_const_v_UPDATE AT(.LOG_TAG_CONST) = LIB_DEBUG & FALSE;
|
||||
const char log_tag_const_i_UPDATE AT(.LOG_TAG_CONST) = LIB_DEBUG & TRUE;
|
||||
const char log_tag_const_d_UPDATE AT(.LOG_TAG_CONST) = LIB_DEBUG & FALSE;
|
||||
const char log_tag_const_w_UPDATE AT(.LOG_TAG_CONST) = LIB_DEBUG & TRUE;
|
||||
const char log_tag_const_e_UPDATE AT(.LOG_TAG_CONST) = LIB_DEBUG & TRUE;
|
||||
@@ -0,0 +1,345 @@
|
||||
#include "system/includes.h"
|
||||
//#include "music/music_player.h"
|
||||
//#include "music/breakpoint.h"
|
||||
#include "app_action.h"
|
||||
#include "key_event_deal.h"
|
||||
#include "audio_config.h"
|
||||
#include "bt_background.h"
|
||||
#include "default_event_handler.h"
|
||||
#include "usb/device/usb_stack.h"
|
||||
#include "usb/device/hid.h"
|
||||
#include "tone_player.h"
|
||||
#include "user_cfg.h"
|
||||
#include "app_task.h"
|
||||
#include "earphone.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "app_charge.h"
|
||||
|
||||
#if ((TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE) \
|
||||
&& TCFG_CHARGESTORE_PORT == IO_PORT_DP)
|
||||
#include "asm/chargestore.h"
|
||||
#endif
|
||||
|
||||
#define LOG_TAG_CONST PC
|
||||
#define LOG_TAG "[PC]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
#if TCFG_PC_ENABLE
|
||||
|
||||
|
||||
struct app_pc_var {
|
||||
u8 inited;
|
||||
u8 idle;
|
||||
};
|
||||
|
||||
static struct app_pc_var g_pc;
|
||||
|
||||
#if(TCFG_TYPE_C_ENABLE)
|
||||
static u8 pc_key_table[][KEY_EVENT_MAX] = {
|
||||
// SHORT LONG HOLD
|
||||
// UP DOUBLE TRIPLE
|
||||
{
|
||||
KEY_MUSIC_PP, KEY_CALL_ANSWER, KEY_NULL,
|
||||
KEY_CALL_ANSWER_UP, KEY_NULL, KEY_NULL
|
||||
},
|
||||
|
||||
{
|
||||
KEY_MUSIC_NEXT, KEY_VOL_UP, KEY_VOL_UP,
|
||||
KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
|
||||
{
|
||||
KEY_MUSIC_PREV, KEY_VOL_DOWN, KEY_VOL_DOWN,
|
||||
KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
};
|
||||
#else
|
||||
static u8 pc_key_table[][KEY_EVENT_MAX] = {
|
||||
// SHORT LONG HOLD
|
||||
// UP DOUBLE TRIPLE
|
||||
{
|
||||
KEY_MUSIC_PP, KEY_POWEROFF, KEY_POWEROFF_HOLD,
|
||||
KEY_NULL, KEY_MODE_SWITCH, KEY_NULL
|
||||
},
|
||||
|
||||
{
|
||||
KEY_MUSIC_NEXT, KEY_VOL_UP, KEY_VOL_UP,
|
||||
KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
|
||||
{
|
||||
KEY_MUSIC_PREV, KEY_VOL_DOWN, KEY_VOL_DOWN,
|
||||
KEY_NULL, KEY_NULL, KEY_NULL
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
static u8 pc_idle_query()
|
||||
{
|
||||
return !g_pc.idle;
|
||||
}
|
||||
REGISTER_LP_TARGET(pc_lp_target) = {
|
||||
.name = "pc",
|
||||
.is_idle = pc_idle_query,
|
||||
};
|
||||
|
||||
|
||||
//*----------------------------------------------------------------------------*/
|
||||
/**@brief pc 在线检测 切换模式判断使用
|
||||
@param 无
|
||||
@return 1 linein设备在线 0 设备不在线
|
||||
@note
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
int pc_app_check(void)
|
||||
{
|
||||
log_info("pc_app_check");
|
||||
#if TCFG_ONLY_PC_ENABLE
|
||||
return true; //不需要检测
|
||||
#endif
|
||||
u32 r = usb_otg_online(0);
|
||||
if ((r == SLAVE_MODE) ||
|
||||
(r == SLAVE_MODE_WAIT_CONFIRMATION)) {
|
||||
return true;
|
||||
}
|
||||
log_info("pc check offline");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
static void app_pc_exit();
|
||||
static void app_pc_init(enum app_state state)
|
||||
{
|
||||
log_info("app_pc_init");
|
||||
g_pc.idle = 1;
|
||||
#if TCFG_PC_ENABLE
|
||||
clk_set("sys", 96000000); //提高系统时钟,优化usb出盘符速度
|
||||
if (pc_app_check() == false) {
|
||||
if (state == APP_STA_RESUME) {
|
||||
log_info("APP_PC_RESUME err");
|
||||
/* APP_STA_RESUME时若设备不在线,不可在该位置切模式,
|
||||
因为上一次的app切换还没完成,还未真正进入PC模式 */
|
||||
app_pc_exit();
|
||||
} else {
|
||||
app_task_switch_next();
|
||||
}
|
||||
} else {
|
||||
#if TCFG_USB_CDC_BACKGROUND_RUN
|
||||
usb_stop();
|
||||
#endif
|
||||
usb_start();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void app_pc_exit()
|
||||
{
|
||||
log_info("app_pc_exit");
|
||||
if (pc_app_check() == false) {
|
||||
usb_stop();
|
||||
} else {
|
||||
usb_pause();
|
||||
#if TCFG_USB_CDC_BACKGROUND_RUN
|
||||
usb_cdc_background_run();
|
||||
#endif
|
||||
}
|
||||
g_pc.idle = 0;
|
||||
}
|
||||
|
||||
static int app_pc_key_event_handler(struct sys_event *event)
|
||||
{
|
||||
struct key_event *key = &event->u.key;
|
||||
int key_event = pc_key_table[key->value][key->event];
|
||||
switch (key_event) {
|
||||
#if TCFG_USB_SLAVE_HID_ENABLE
|
||||
case KEY_MUSIC_PP:
|
||||
log_info("KEY_MUSIC_PP");
|
||||
hid_key_handler(0, USB_AUDIO_PP);
|
||||
break;
|
||||
case KEY_MUSIC_NEXT:
|
||||
log_info("KEY_MUSIC_NEXT");
|
||||
#if(TCFG_TYPE_C_ENABLE)
|
||||
hid_key_handler(0, USB_AUDIO_PP);
|
||||
os_time_dly(2);
|
||||
hid_key_handler(0, USB_AUDIO_PP);
|
||||
#else
|
||||
hid_key_handler(0, USB_AUDIO_NEXTFILE);
|
||||
#endif
|
||||
break;
|
||||
case KEY_MUSIC_PREV:
|
||||
log_info("KEY_MUSIC_PREV");
|
||||
#if(TCFG_TYPE_C_ENABLE)
|
||||
hid_key_handler(0, USB_AUDIO_PP);
|
||||
os_time_dly(2);
|
||||
hid_key_handler(0, USB_AUDIO_PP);
|
||||
os_time_dly(2);
|
||||
hid_key_handler(0, USB_AUDIO_PP);
|
||||
#else
|
||||
hid_key_handler(0, USB_AUDIO_PREFILE);
|
||||
#endif
|
||||
break;
|
||||
case KEY_VOL_UP:
|
||||
log_info("KEY_MUSIC_UP");
|
||||
hid_key_handler(0, USB_AUDIO_VOLUP);
|
||||
break;
|
||||
case KEY_VOL_DOWN:
|
||||
log_info("KEY_MUSIC_DOWN");
|
||||
hid_key_handler(0, USB_AUDIO_VOLDOWN);
|
||||
break;
|
||||
#if(TCFG_TYPE_C_ENABLE)
|
||||
case KEY_CALL_ANSWER:
|
||||
puts("KEY_CALL_ANSWER\n");
|
||||
hid_key_handler_send_one_packet(0, USB_AUDIO_PP);
|
||||
break;
|
||||
case KEY_CALL_ANSWER_UP:
|
||||
puts("KEY_CALL_ANSWER_UP\n");
|
||||
hid_key_handler_send_one_packet(0, 0);
|
||||
break;
|
||||
#endif
|
||||
#endif//end TCFG_USB_SLAVE_HID_ENABLE
|
||||
case KEY_MODE_SWITCH:
|
||||
log_info("KEY_MODE_SWITCH");
|
||||
app_task_switch_next();
|
||||
break;
|
||||
case KEY_POWEROFF:
|
||||
case KEY_POWEROFF_HOLD:
|
||||
app_earphone_key_event_handler(event);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 系统事件处理函数
|
||||
*/
|
||||
static int event_handler(struct application *app, struct sys_event *event)
|
||||
{
|
||||
/*if (SYS_EVENT_REMAP(event)) {
|
||||
g_printf("****SYS_EVENT_REMAP**** \n");
|
||||
return 0;
|
||||
}*/
|
||||
|
||||
switch (event->type) {
|
||||
case SYS_KEY_EVENT:
|
||||
/*
|
||||
* 普通按键消息处理
|
||||
*/
|
||||
return app_pc_key_event_handler(event);
|
||||
case SYS_BT_EVENT:
|
||||
/*
|
||||
* 蓝牙事件处理
|
||||
*/
|
||||
break;
|
||||
case SYS_DEVICE_EVENT:
|
||||
/*
|
||||
* 系统设备事件处理
|
||||
*/
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_OTG) {
|
||||
if (event->u.dev.event == DEVICE_EVENT_OUT) {
|
||||
app_task_switch_next();
|
||||
return true;
|
||||
}
|
||||
} else if ((u32)event->arg == DEVICE_EVENT_FROM_POWER) {
|
||||
app_power_event_handler(&event->u.dev);
|
||||
return true;
|
||||
} else if ((u32)event->arg == DEVICE_EVENT_FROM_CHARGE) {
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
app_charge_event_handler(&event->u.dev);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
#if(!TCFG_ONLY_PC_ENABLE)
|
||||
default_event_handler(event);
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int state_machine(struct application *app, enum app_state state,
|
||||
struct intent *it)
|
||||
{
|
||||
switch (state) {
|
||||
case APP_STA_CREATE:
|
||||
log_info("APP_STA_CREATE");
|
||||
STATUS *p_tone = get_tone_config();
|
||||
tone_play(TONE_PC_MODE, 1);
|
||||
break;
|
||||
case APP_STA_START:
|
||||
log_info("APP_STA_START");
|
||||
if (!it) {
|
||||
break;
|
||||
}
|
||||
switch (it->action) {
|
||||
case ACTION_PC_MAIN:
|
||||
log_info("ACTION_PC_MAIN");
|
||||
///按键使能
|
||||
sys_key_event_enable();
|
||||
//关闭自动关机
|
||||
sys_auto_shut_down_disable();
|
||||
#if ((TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE) \
|
||||
&& TCFG_CHARGESTORE_PORT == IO_PORT_DP)
|
||||
power_wakeup_index_enable(2, 0);
|
||||
chargestore_api_stop();
|
||||
#endif
|
||||
app_pc_init(state);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case APP_STA_PAUSE:
|
||||
log_info("APP_STA_PAUSE");
|
||||
app_pc_exit();
|
||||
break;
|
||||
case APP_STA_RESUME:
|
||||
log_info("APP_STA_RESUME");
|
||||
app_pc_init(state);
|
||||
break;
|
||||
case APP_STA_STOP:
|
||||
log_info("APP_STA_STOP");
|
||||
app_pc_exit();
|
||||
#if ((TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE) \
|
||||
&& TCFG_CHARGESTORE_PORT == IO_PORT_DP)
|
||||
chargestore_api_restart();
|
||||
power_wakeup_index_enable(2, 1);
|
||||
#endif
|
||||
break;
|
||||
case APP_STA_DESTROY:
|
||||
log_info("APP_STA_DESTROY");
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct application_operation app_pc_ops = {
|
||||
.state_machine = state_machine,
|
||||
.event_handler = event_handler,
|
||||
};
|
||||
|
||||
/*
|
||||
* 注册pc模式
|
||||
*/
|
||||
REGISTER_APPLICATION(app_pc) = {
|
||||
.name = "pc",
|
||||
.action = ACTION_PC_MAIN,
|
||||
.ops = &app_pc_ops,
|
||||
.state = APP_STA_DESTROY,
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,743 @@
|
||||
#include "app_config.h"
|
||||
#include "asm/charge.h"
|
||||
#include "asm/pwm_led.h"
|
||||
#include "asm/power_interface.h"
|
||||
#include "ui_manage.h"
|
||||
#include "system/event.h"
|
||||
#include "system/app_core.h"
|
||||
#include "system/includes.h"
|
||||
#include "app_action.h"
|
||||
#include "asm/wdt.h"
|
||||
#include "app_power_manage.h"
|
||||
//#include "app_chargestore.h"
|
||||
#include "app_testbox.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "app_action.h"
|
||||
#include "app_main.h"
|
||||
#include "bt_tws.h"
|
||||
#include "usb/otg.h"
|
||||
#include "bt_common.h"
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#include "audio_anc.h"
|
||||
#endif
|
||||
|
||||
#if NTC_DET_EN
|
||||
#include "ntc_det_api.h"
|
||||
#endif
|
||||
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
#include "app_ancbox.h"
|
||||
#endif
|
||||
|
||||
#define LOG_TAG_CONST APP_CHARGE
|
||||
#define LOG_TAG "[APP_CHARGE]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
extern void sys_enter_soft_poweroff(void *priv);
|
||||
extern void gSensor_wkupup_enable(void);
|
||||
extern void gSensor_wkupup_disable(void);
|
||||
extern u32 dual_bank_update_exist_flag_get(void);
|
||||
extern u32 classic_update_task_exist_flag_get(void);
|
||||
extern void lp_touch_key_disable(void);
|
||||
extern void linein_det_disable(void);
|
||||
extern void linein_det_enable(void);
|
||||
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
|
||||
static u8 charge_full_flag = 0;
|
||||
#if TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE
|
||||
static int ldo5v_keep_timer = 0;
|
||||
#endif
|
||||
static u8 delay_timeout = 20;
|
||||
static int ldo5v_in_reset_timer = 0;
|
||||
static void ldo5v_in_reset_delay(void)
|
||||
{
|
||||
int deal_state = tws_api_get_tws_state();
|
||||
u8 cpu_reset_flag = 1;
|
||||
if (delay_timeout) {
|
||||
delay_timeout--;
|
||||
}
|
||||
if (deal_state & TWS_STA_SIBLING_CONNECTED && deal_state & TWS_STA_PHONE_CONNECTED && !(deal_state & TWS_STA_MONITOR_START)) {
|
||||
//tws已连接 手机已连接 从机未监听手机
|
||||
cpu_reset_flag = 0;
|
||||
} else {
|
||||
if (deal_state & TWS_STA_SIBLING_CONNECTED && deal_state & TWS_STA_ESCO_OPEN && !get_esco_coder_busy_flag()) {
|
||||
//手机有请求但没建立ESCO链路
|
||||
cpu_reset_flag = 0;
|
||||
}
|
||||
}
|
||||
printf("----------------ldo5v_in_reset_delay tws state:%x, delay_timeout:%d, cpu_reset_flag:%d\n", deal_state, delay_timeout, cpu_reset_flag);
|
||||
if (delay_timeout == 0 || cpu_reset_flag == 1) {
|
||||
if (ldo5v_in_reset_timer) {
|
||||
sys_timer_del(ldo5v_in_reset_timer);
|
||||
ldo5v_in_reset_timer = 0;
|
||||
}
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
}
|
||||
}
|
||||
|
||||
extern void power_event_to_user(u8 event);
|
||||
|
||||
u8 get_charge_full_flag(void)
|
||||
{
|
||||
return charge_full_flag;
|
||||
}
|
||||
|
||||
void charge_start_deal(void)
|
||||
{
|
||||
log_info("%s\n", __FUNCTION__);
|
||||
|
||||
power_set_mode(PWR_LDO15);
|
||||
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
//在IDLE时才开启充电UI
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE))) {
|
||||
ui_update_status(STATUS_CHARGE_START);
|
||||
}
|
||||
}
|
||||
|
||||
static void ldo5v_keep_delay_deal(void *priv)
|
||||
{
|
||||
log_info("%s\n", __func__);
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
ldo5v_keep_timer = 0;
|
||||
if (testbox_get_status()) {
|
||||
log_info("testbox online!\n");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
ldo5v_keep_timer = 0;
|
||||
if (ancbox_get_status()) {
|
||||
log_info("ancbox online!\n");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
if (app) {
|
||||
if (strcmp(app->name, APP_NAME_IDLE)) {
|
||||
sys_enter_soft_poweroff((void *)2);
|
||||
}
|
||||
}
|
||||
|
||||
pwm_led_mode_set(PWM_LED_ALL_OFF);
|
||||
os_time_dly(30);
|
||||
pwm_led_mode_set(PWM_LED1_ON);
|
||||
os_time_dly(40);
|
||||
|
||||
//兼容一些充电仓5v输出慢的时候会导致无法充电的问题
|
||||
if (get_lvcmp_det()) {
|
||||
log_info("...charge ing...\n");
|
||||
cpu_reset();
|
||||
}
|
||||
|
||||
log_info("get_charge_online_flag:%d %d\n", get_charge_online_flag(), get_ldo5v_online_hw());
|
||||
if (get_ldo5v_online_hw() && get_charge_online_flag()) {
|
||||
power_set_soft_poweroff();
|
||||
} else {
|
||||
#if TCFG_CHARGE_OFF_POWERON_NE
|
||||
cpu_reset();
|
||||
#else
|
||||
charge_check_and_set_pinr(1);
|
||||
power_set_soft_poweroff();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*ldoin电压大于拔出电压(0.6V左右)且小于VBat电压时调用该函数进行一些错误提示或其他处理*/
|
||||
void ldo5v_keep_deal(void)
|
||||
{
|
||||
|
||||
log_info("%s\n", __func__);
|
||||
|
||||
//插入交换
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
|
||||
#if TCFG_GSENSOR_ENABLE
|
||||
//在舱关闭gSensor
|
||||
gSensor_wkupup_disable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LINEIN_ENABLE
|
||||
//入舱关闭linein
|
||||
linein_det_disable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
extern void lp_touch_key_charge_mode_enter();
|
||||
lp_touch_key_charge_mode_enter();
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
|
||||
#if TCFG_GX8002_NPU_ENABLE
|
||||
extern void gx8002_module_suspend(u8 keep_vddio);
|
||||
gx8002_module_suspend(0);
|
||||
#endif /* #if TCFG_GX8002_NPU_ENABLE */
|
||||
|
||||
|
||||
charge_check_and_set_pinr(0);
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
if (!ancbox_get_status())
|
||||
#endif
|
||||
{
|
||||
anc_suspend();
|
||||
}
|
||||
#endif
|
||||
|
||||
if (get_charge_poweron_en() == 0) {
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
//智能充电舱不处理充电err
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE))) {
|
||||
ui_update_status(STATUS_CHARGE_LDO5V_OFF);
|
||||
}
|
||||
|
||||
#else //TCFG_CHARGESTORE_ENABLE
|
||||
|
||||
#if defined(TCFG_CHARGE_KEEP_UPDATA) && TCFG_CHARGE_KEEP_UPDATA
|
||||
if (dual_bank_update_exist_flag_get() || classic_update_task_exist_flag_get()) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE
|
||||
if (testbox_get_ex_enter_dut_flag()) {
|
||||
putchar('D');
|
||||
return;
|
||||
}
|
||||
|
||||
if (testbox_get_ex_enter_storage_mode_flag()) {
|
||||
putchar('S');
|
||||
return;
|
||||
}
|
||||
|
||||
if (ldo5v_keep_timer == 0) {
|
||||
//延时执行避免测试盒通信不上
|
||||
ldo5v_keep_timer = sys_timeout_add(NULL, ldo5v_keep_delay_deal, 250);
|
||||
}
|
||||
#else
|
||||
ldo5v_keep_delay_deal(NULL);
|
||||
#endif//TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE
|
||||
#endif//TCFG_CHARGESTORE_ENABLE
|
||||
} else {
|
||||
ui_update_status(STATUS_CHARGE_ERR);
|
||||
}
|
||||
}
|
||||
|
||||
extern u8 umidigi_chargestore_get_cover_status(void);
|
||||
void charge_full_deal(void)
|
||||
{
|
||||
log_info("%s\n", __func__);
|
||||
|
||||
charge_full_flag = 1;
|
||||
|
||||
charge_close();
|
||||
if (get_charge_poweron_en() == 0) {
|
||||
|
||||
#if (TCFG_LP_TOUCH_KEY_ENABLE && CHARGING_CLEAN_PHONE_INFO)
|
||||
extern void lp_touch_key_charge_mode_enter();
|
||||
lp_touch_key_charge_mode_enter();
|
||||
#endif
|
||||
/* power_set_soft_poweroff(); */
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
|
||||
#else
|
||||
ui_update_status(STATUS_CHARGE_FULL);
|
||||
#endif
|
||||
#if (!TCFG_CHARGESTORE_ENABLE)
|
||||
#if TCFG_UMIDIGI_BOX_ENABLE
|
||||
//当前为开盖
|
||||
if (umidigi_chargestore_get_cover_status() == 1) {
|
||||
vbat_timer_delete();
|
||||
}
|
||||
#else
|
||||
vbat_timer_delete();
|
||||
#endif
|
||||
#endif
|
||||
} else {
|
||||
ui_update_status(STATUS_CHARGE_FULL);
|
||||
}
|
||||
}
|
||||
|
||||
void charge_close_deal(void)
|
||||
{
|
||||
log_info("%s\n", __FUNCTION__);
|
||||
|
||||
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
//在idle的时候才执行充电关闭的UI
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE))) {
|
||||
ui_update_status(STATUS_CHARGE_CLOSE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void charge_ldo5v_in_deal(void)
|
||||
{
|
||||
log_info("%s\n", __FUNCTION__);
|
||||
|
||||
|
||||
#if TCFG_IRSENSOR_ENABLE
|
||||
if (get_bt_tws_connect_status()) {
|
||||
tws_api_sync_call_by_uuid('T', SYNC_CMD_EARPHONE_CHAREG_START, 300);
|
||||
}
|
||||
#endif
|
||||
|
||||
//插入交换
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
|
||||
charge_full_flag = 0;
|
||||
|
||||
#if TCFG_GSENSOR_ENABLE
|
||||
//入舱关闭gSensor
|
||||
gSensor_wkupup_disable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LINEIN_ENABLE
|
||||
//入舱关闭linein
|
||||
linein_det_disable();
|
||||
#endif
|
||||
|
||||
#if (TCFG_LP_TOUCH_KEY_ENABLE && !CHARGING_CLEAN_PHONE_INFO)
|
||||
extern void lp_touch_key_charge_mode_enter();
|
||||
lp_touch_key_charge_mode_enter();
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
|
||||
#if TCFG_GX8002_NPU_ENABLE
|
||||
extern void gx8002_module_suspend(u8 keep_vddio);
|
||||
gx8002_module_suspend(0);
|
||||
#endif /* #if TCFG_GX8002_NPU_ENABLE */
|
||||
|
||||
charge_check_and_set_pinr(0);
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
anc_suspend();
|
||||
#endif
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
testbox_clear_status();
|
||||
if (ldo5v_keep_timer) {
|
||||
sys_timeout_del(ldo5v_keep_timer);
|
||||
ldo5v_keep_timer = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
ancbox_clear_status();
|
||||
if (ldo5v_keep_timer) {
|
||||
sys_timeout_del(ldo5v_keep_timer);
|
||||
ldo5v_keep_timer = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
chargestore_shutdown_reset();
|
||||
#endif
|
||||
|
||||
if (get_charge_poweron_en() == 0) {
|
||||
#if defined(TCFG_CHARGE_KEEP_UPDATA) && TCFG_CHARGE_KEEP_UPDATA
|
||||
if (dual_bank_update_exist_flag_get() || classic_update_task_exist_flag_get()) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
|
||||
#if TCFG_WIRELESS_MIC_ENABLE
|
||||
if (strcmp(app->name, APP_NAME_IDLE) != 0) {
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
}
|
||||
#endif
|
||||
if (app && strcmp(app->name, APP_NAME_IDLE)) {
|
||||
#if (TCFG_CHARGESTORE_ENABLE && TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
if (!chargestore_check_going_to_poweroff()) {
|
||||
#endif
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
printf("----------------tws_api_get_tws_state %x\n", tws_api_get_tws_state());
|
||||
int deal_state = tws_api_get_tws_state();
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER && deal_state & TWS_STA_SIBLING_CONNECTED && deal_state & TWS_STA_PHONE_CONNECTED && !(deal_state & TWS_STA_MONITOR_START)) {
|
||||
if (ldo5v_in_reset_timer == 0) {
|
||||
delay_timeout = 30;
|
||||
ldo5v_in_reset_timer = sys_timer_add(NULL, ldo5v_in_reset_delay, 100);
|
||||
}
|
||||
} else {
|
||||
if (ldo5v_in_reset_timer) {
|
||||
sys_timer_del(ldo5v_in_reset_timer);
|
||||
ldo5v_in_reset_timer = 0;
|
||||
}
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
}
|
||||
#else
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
#endif
|
||||
#if (TCFG_CHARGESTORE_ENABLE && TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
} else {
|
||||
log_info("chargestore do poweroff!\n");
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
charge_start();
|
||||
wdt_init(WDT_32S);
|
||||
log_info("set wdt to 32s!\n");
|
||||
goto _check_reset;
|
||||
}
|
||||
} else {
|
||||
charge_start();
|
||||
goto _check_reset;
|
||||
}
|
||||
return;
|
||||
|
||||
_check_reset:
|
||||
//防止耳机低电时,插拔充电有几率出现关机不充电问题
|
||||
if (app_var.goto_poweroff_flag) {
|
||||
cpu_reset();
|
||||
}
|
||||
}
|
||||
|
||||
#if TCFG_EARTCH_EVENT_HANDLE_ENABLE
|
||||
static u8 _enter_softoff_flag = 0;
|
||||
extern lp_touch_key_testbox_inear_trim(u8 flag);
|
||||
void exit_lp_touch_eartch_trim(void *priv)
|
||||
{
|
||||
log_info("<<<<<<<<<< exit_lp_touch_eartch_trim!\n");
|
||||
lp_touch_key_testbox_inear_trim(0);
|
||||
#if TCFG_PWMLED_ENABLE
|
||||
gpio_set_direction(TCFG_PWMLED_PIN, 1);
|
||||
#endif
|
||||
if (_enter_softoff_flag) {
|
||||
log_info("<<<<<<<<<<< sys_enter_soft_poweroff after eartch_trim!\n");
|
||||
sys_enter_soft_poweroff(NULL);
|
||||
} else {
|
||||
cpu_reset();
|
||||
}
|
||||
}
|
||||
void enter_lp_touch_eartch_trim(void *priv)
|
||||
{
|
||||
log_info(">>>>>>>>>> enter_lp_touch_eartch_trim!\n");
|
||||
lp_touch_key_testbox_inear_trim(1);
|
||||
sys_timeout_add(NULL, exit_lp_touch_eartch_trim, 1000);
|
||||
}
|
||||
#endif
|
||||
|
||||
//外置触摸断电
|
||||
void __attribute__((weak)) external_touch_key_disable(void)
|
||||
{
|
||||
|
||||
}
|
||||
//使能外置电源控制芯片对耳机进行断电
|
||||
void __attribute__((weak)) external_storage_io_disable(void)
|
||||
{
|
||||
|
||||
}
|
||||
//关闭vddio keep
|
||||
u8 __attribute__((weak)) power_set_vddio_keep(u8 en)
|
||||
{
|
||||
|
||||
}
|
||||
void charge_ldo5v_off_deal(void)
|
||||
{
|
||||
log_info("%s\n", __FUNCTION__);
|
||||
|
||||
//拨出交换
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
#if (TCFG_CHARGESTORE_ENABLE && TCFG_USER_TWS_ENABLE)
|
||||
if (TWS_ROLE_SLAVE == tws_api_get_role()) {
|
||||
chargestore_set_power_level(0xFF);
|
||||
}
|
||||
#endif
|
||||
charge_full_flag = 0;
|
||||
|
||||
charge_close();
|
||||
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
//在idle的时候才执行充电拔出的UI
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE))) {
|
||||
ui_update_status(STATUS_CHARGE_LDO5V_OFF);
|
||||
}
|
||||
|
||||
charge_check_and_set_pinr(1);
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
|
||||
#if TCFG_EARTCH_EVENT_HANDLE_ENABLE
|
||||
u8 sec = 0;
|
||||
u8 eartch_trim_en = testbox_get_touch_trim_en(&sec);
|
||||
if (eartch_trim_en) {
|
||||
log_info("******* testbox_get_touch_trim_en : %ds\n", sec);
|
||||
sys_timeout_add(NULL, enter_lp_touch_eartch_trim, sec * 1000);
|
||||
#if TCFG_PWMLED_ENABLE
|
||||
gpio_set_pull_up(TCFG_PWMLED_PIN, 0);
|
||||
gpio_set_pull_down(TCFG_PWMLED_PIN, 0);
|
||||
gpio_set_die(TCFG_PWMLED_PIN, 0);
|
||||
gpio_set_direction(TCFG_PWMLED_PIN, 0);
|
||||
gpio_write(TCFG_PWMLED_PIN, 1);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
if (testbox_get_status() && !get_total_connect_dev()) {
|
||||
if (!testbox_get_keep_tws_conn_flag()) {
|
||||
log_info("<<<<<<<<<<<<<<testbox out and bt noconn reset>>>>>>>>>>>>>>>\n");
|
||||
if (testbox_get_testbox_tws_paired() && testbox_get_softpwroff_after_paired()) {
|
||||
#if TCFG_EARTCH_EVENT_HANDLE_ENABLE
|
||||
if (eartch_trim_en) {
|
||||
_enter_softoff_flag = 1;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
sys_enter_soft_poweroff(NULL);
|
||||
}
|
||||
} else {
|
||||
#if TCFG_EARTCH_EVENT_HANDLE_ENABLE
|
||||
if (eartch_trim_en) {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
cpu_reset();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log_info("testbox out ret\n");
|
||||
}
|
||||
}
|
||||
testbox_clear_status();
|
||||
if (ldo5v_keep_timer) {
|
||||
sys_timeout_del(ldo5v_keep_timer);
|
||||
ldo5v_keep_timer = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
chargestore_shutdown_reset();
|
||||
#endif
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
if (ldo5v_keep_timer) {
|
||||
sys_timeout_del(ldo5v_keep_timer);
|
||||
ldo5v_keep_timer = 0;
|
||||
}
|
||||
if (ancbox_get_status()) {
|
||||
return;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
anc_resume();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if (testbox_get_ex_enter_storage_mode_flag()) {
|
||||
power_set_vddio_keep(0);//关VDDIO KEEP
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
lp_touch_key_disable();//仓储模式关内置触摸
|
||||
#else
|
||||
external_touch_key_disable(); //仓储模式关外置触摸供电
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
#if TCFG_EXTERN_STORAGE_MODE_ENABLE
|
||||
external_storage_io_disable();
|
||||
#endif/* TCFG_EXTERN_STORAGE_MODE_ENABLE */
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if ((get_charge_poweron_en() == 0)) {
|
||||
|
||||
wdt_init(WDT_4S);
|
||||
log_info("set wdt to 4s!\n");
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
if (chargestore_get_power_status()) {
|
||||
#endif
|
||||
#if TCFG_CHARGE_OFF_POWERON_NE
|
||||
log_info("ldo5v off,task switch to BT\n");
|
||||
app_var.play_poweron_tone = 0;
|
||||
#if TCFG_SYS_LVD_EN
|
||||
vbat_check_init();
|
||||
#endif
|
||||
if (app && (app_var.goto_poweroff_flag == 0)) {
|
||||
if (strcmp(app->name, APP_NAME_BT)) {
|
||||
#if TCFG_SYS_LVD_EN
|
||||
if (get_vbat_need_shutdown() == FALSE) {
|
||||
#if TCFG_WIRELESS_MIC_ENABLE
|
||||
cpu_reset();
|
||||
#endif
|
||||
task_switch_to_bt();
|
||||
} else {
|
||||
log_info("ldo5v off,lowpower,need enter softpoweroff\n");
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
#else
|
||||
task_switch_to_bt();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#else //TCFG_CHARGE_OFF_POWERON_NE
|
||||
log_info("ldo5v off,enter softpoweroff\n");
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
extern void lp_touch_key_charge_mode_exit();
|
||||
lp_touch_key_charge_mode_exit();
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
power_set_soft_poweroff();
|
||||
#endif //TCFG_CHARGE_OFF_POWERON_NE
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
} else {
|
||||
log_info("ldo5v off,enter softpoweroff\n");
|
||||
if (app && (!strcmp(app->name, APP_NAME_BT))) { //软关机
|
||||
sys_enter_soft_poweroff(NULL);
|
||||
} else {
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE)) && (app_var.goto_poweroff_flag == 0)) {
|
||||
#if TCFG_CHARGE_OFF_POWERON_NE
|
||||
log_info("ldo5v off,task switch to BT\n");
|
||||
app_var.play_poweron_tone = 0;
|
||||
#if TCFG_SYS_LVD_EN
|
||||
vbat_check_init();
|
||||
#endif
|
||||
#if TCFG_SYS_LVD_EN
|
||||
if (get_vbat_need_shutdown() == FALSE) {
|
||||
task_switch_to_bt();
|
||||
} else {
|
||||
log_info("ldo5v off,lowpower,need enter softpoweroff\n");
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
#else
|
||||
task_switch_to_bt();
|
||||
#endif
|
||||
#else
|
||||
power_set_soft_poweroff();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#if TCFG_GSENSOR_ENABLE
|
||||
//出舱使能gSensor
|
||||
gSensor_wkupup_enable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LINEIN_ENABLE
|
||||
//出舱开启linein检测
|
||||
linein_det_enable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
extern void lp_touch_key_charge_mode_exit();
|
||||
lp_touch_key_charge_mode_exit();
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if (testbox_get_ex_enter_storage_mode_flag()) {
|
||||
power_set_vddio_keep(0);//关VDDIO KEEP
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
lp_touch_key_disable();//仓储模式关内置触摸
|
||||
#else
|
||||
external_touch_key_disable(); //仓储模式关外置触摸供电
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
//测试盒仓储模式使能后,断开测试盒直接关机
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_GX8002_NPU_ENABLE
|
||||
extern void gx8002_module_resumed();
|
||||
gx8002_module_resumed();
|
||||
#endif /* #if TCFG_GX8002_NPU_ENABLE */
|
||||
}
|
||||
|
||||
int app_charge_event_handler(struct device_event *dev)
|
||||
{
|
||||
int ret = false;
|
||||
u8 otg_status = 0;
|
||||
|
||||
switch (dev->event) {
|
||||
case CHARGE_EVENT_CHARGE_START:
|
||||
#if NTC_DET_EN
|
||||
ntc_det_start();
|
||||
#endif
|
||||
charge_start_deal();
|
||||
break;
|
||||
case CHARGE_EVENT_CHARGE_CLOSE:
|
||||
#if NTC_DET_EN
|
||||
ntc_det_stop();
|
||||
#endif
|
||||
charge_close_deal();
|
||||
break;
|
||||
case CHARGE_EVENT_CHARGE_FULL:
|
||||
charge_full_deal();
|
||||
break;
|
||||
case CHARGE_EVENT_LDO5V_KEEP:
|
||||
#if NTC_DET_EN
|
||||
ntc_det_stop();
|
||||
#endif
|
||||
ldo5v_keep_deal();
|
||||
break;
|
||||
case CHARGE_EVENT_LDO5V_IN:
|
||||
#if ((TCFG_OTG_MODE & OTG_SLAVE_MODE) && (TCFG_OTG_MODE & OTG_CHARGE_MODE))
|
||||
while (1) {
|
||||
otg_status = usb_otg_online(0);
|
||||
if (otg_status != IDLE_MODE) {
|
||||
break;
|
||||
}
|
||||
os_time_dly(2);
|
||||
}
|
||||
if (otg_status == SLAVE_MODE) {
|
||||
set_charge_poweron_en(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (get_charge_poweron_en() || (otg_status != SLAVE_MODE)) {
|
||||
charge_ldo5v_in_deal();
|
||||
}
|
||||
break;
|
||||
case CHARGE_EVENT_LDO5V_OFF:
|
||||
#if ((TCFG_OTG_MODE & OTG_SLAVE_MODE) && (TCFG_OTG_MODE & OTG_CHARGE_MODE))
|
||||
while (1) {
|
||||
otg_status = usb_otg_online(0);
|
||||
if (otg_status != IDLE_MODE) {
|
||||
break;
|
||||
}
|
||||
os_time_dly(2);
|
||||
}
|
||||
#endif
|
||||
if (get_charge_poweron_en() || (otg_status != SLAVE_MODE)) {
|
||||
charge_ldo5v_off_deal();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
u8 get_charge_full_flag(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,475 @@
|
||||
#include "system/includes.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "app_main.h"
|
||||
#include "app_config.h"
|
||||
#include "app_action.h"
|
||||
#include "asm/charge.h"
|
||||
#include "ui_manage.h"
|
||||
#include "tone_player.h"
|
||||
#include "asm/adc_api.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "user_cfg.h"
|
||||
#include "asm/charge.h"
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
#include "bt_tws.h"
|
||||
#endif
|
||||
|
||||
#define LOG_TAG_CONST APP_POWER
|
||||
#define LOG_TAG "[APP_POWER]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
enum {
|
||||
VBAT_NORMAL = 0,
|
||||
VBAT_WARNING,
|
||||
VBAT_LOWPOWER,
|
||||
} VBAT_STATUS;
|
||||
|
||||
#define VBAT_DETECT_CNT 6
|
||||
static int vbat_slow_timer = 0;
|
||||
static int vbat_fast_timer = 0;
|
||||
static int lowpower_timer = 0;
|
||||
static u8 old_battery_level = 9;
|
||||
static u16 bat_val = 0;
|
||||
static volatile u8 cur_battery_level = 0;
|
||||
static u16 battery_full_value = 0;
|
||||
static u8 tws_sibling_bat_level = 0xff;
|
||||
static u8 tws_sibling_bat_percent_level = 0xff;
|
||||
static u8 cur_bat_st = VBAT_NORMAL;
|
||||
|
||||
void vbat_check(void *priv);
|
||||
void sys_enter_soft_poweroff(void *priv);
|
||||
void clr_wdt(void);
|
||||
void power_event_to_user(u8 event);
|
||||
|
||||
|
||||
u8 get_tws_sibling_bat_level(void)
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
/* log_info("***********get_tws_sibling_bat_level: %2x", tws_sibling_bat_percent_level); */
|
||||
return tws_sibling_bat_level & 0x7f;
|
||||
#endif
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
u8 get_tws_sibling_bat_persent(void)
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
/* log_info("***********get_tws_sibling_bat_level: %2x", tws_sibling_bat_percent_level); */
|
||||
return tws_sibling_bat_percent_level;
|
||||
#endif
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
void app_power_set_tws_sibling_bat_level(u8 vbat, u8 percent)
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
tws_sibling_bat_level = vbat;
|
||||
tws_sibling_bat_percent_level = percent;
|
||||
/*
|
||||
** 发出电量同步事件进行进一步处理
|
||||
**/
|
||||
power_event_to_user(POWER_EVENT_SYNC_TWS_VBAT_LEVEL);
|
||||
|
||||
log_info("set_sibling_bat_level: %d, %d\n", vbat, percent);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void set_tws_sibling_bat_level(void *_data, u16 len, bool rx)
|
||||
{
|
||||
u8 *data = (u8 *)_data;
|
||||
|
||||
if (rx) {
|
||||
app_power_set_tws_sibling_bat_level(data[0], data[1]);
|
||||
}
|
||||
}
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
REGISTER_TWS_FUNC_STUB(vbat_sync_stub) = {
|
||||
.func_id = TWS_FUNC_ID_VBAT_SYNC,
|
||||
.func = set_tws_sibling_bat_level,
|
||||
};
|
||||
#endif
|
||||
|
||||
void tws_sync_bat_level(void)
|
||||
{
|
||||
#if (TCFG_USER_TWS_ENABLE && BT_SUPPORT_DISPLAY_BAT)
|
||||
u8 battery_level = cur_battery_level;
|
||||
#if CONFIG_DISPLAY_DETAIL_BAT
|
||||
u8 percent_level = get_vbat_percent();
|
||||
#else
|
||||
u8 percent_level = get_self_battery_level() * 10 + 10;
|
||||
#endif
|
||||
if (get_charge_online_flag()) {
|
||||
percent_level |= BIT(7);
|
||||
}
|
||||
|
||||
u8 data[2];
|
||||
data[0] = battery_level;
|
||||
data[1] = percent_level;
|
||||
tws_api_send_data_to_sibling(data, 2, TWS_FUNC_ID_VBAT_SYNC);
|
||||
|
||||
log_info("tws_sync_bat_level: %d,%d\n", battery_level, percent_level);
|
||||
#endif
|
||||
}
|
||||
|
||||
void power_event_to_user(u8 event)
|
||||
{
|
||||
struct sys_event e;
|
||||
e.type = SYS_DEVICE_EVENT;
|
||||
e.arg = (void *)DEVICE_EVENT_FROM_POWER;
|
||||
e.u.dev.event = event;
|
||||
e.u.dev.value = 0;
|
||||
sys_event_notify(&e);
|
||||
}
|
||||
|
||||
int app_power_event_handler(struct device_event *dev)
|
||||
{
|
||||
int ret = false;
|
||||
|
||||
#if(TCFG_SYS_LVD_EN == 1)
|
||||
switch (dev->event) {
|
||||
case POWER_EVENT_POWER_NORMAL:
|
||||
ui_update_status(STATUS_EXIT_LOWPOWER);
|
||||
break;
|
||||
case POWER_EVENT_POWER_WARNING:
|
||||
ui_update_status(STATUS_LOWPOWER);
|
||||
/* tone_play(TONE_LOW_POWER); */
|
||||
STATUS *p_tone = get_tone_config();
|
||||
tone_play_index(p_tone->lowpower, 0);
|
||||
if (lowpower_timer == 0) {
|
||||
lowpower_timer = sys_timer_add((void *)POWER_EVENT_POWER_WARNING, (void (*)(void *))power_event_to_user, LOW_POWER_WARN_TIME);
|
||||
}
|
||||
break;
|
||||
case POWER_EVENT_POWER_LOW:
|
||||
printf(" POWER_EVENT_POWER_LOW");
|
||||
vbat_timer_delete();
|
||||
if (lowpower_timer) {
|
||||
sys_timer_del(lowpower_timer);
|
||||
lowpower_timer = 0 ;
|
||||
}
|
||||
#if TCFG_APP_BT_EN
|
||||
#if (RCSP_ADV_EN)
|
||||
extern u8 adv_tws_both_in_charge_box(u8 type);
|
||||
adv_tws_both_in_charge_box(1);
|
||||
#endif
|
||||
sys_enter_soft_poweroff(NULL);
|
||||
#else
|
||||
void app_entry_idle() ;
|
||||
app_entry_idle() ;
|
||||
#endif
|
||||
break;
|
||||
#if TCFG_APP_BT_EN
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
case POWER_EVENT_SYNC_TWS_VBAT_LEVEL:
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CMD_UPDATE_BATTARY, 0, NULL);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case POWER_EVENT_POWER_CHANGE:
|
||||
/* log_info("POWER_EVENT_POWER_CHANGE\n"); */
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (tws_api_get_tws_state() & TWS_STA_SIBLING_CONNECTED) {
|
||||
if (tws_api_get_tws_state()&TWS_STA_ESCO_OPEN) {
|
||||
break;
|
||||
}
|
||||
tws_sync_bat_level();
|
||||
}
|
||||
#endif
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CMD_UPDATE_BATTARY, 0, NULL);
|
||||
#endif
|
||||
break;
|
||||
case POWER_EVENT_POWER_CHARGE:
|
||||
if (lowpower_timer) {
|
||||
sys_timer_del(lowpower_timer);
|
||||
lowpower_timer = 0 ;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
u16 get_vbat_level(void)
|
||||
{
|
||||
//return 370; //debug
|
||||
return (adc_get_voltage(AD_CH_VBAT) * 4/* / 10*/);
|
||||
}
|
||||
|
||||
__attribute__((weak)) u8 remap_calculate_vbat_percent(u16 bat_val)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16 get_vbat_value(void)
|
||||
{
|
||||
return bat_val;
|
||||
}
|
||||
|
||||
u8 get_vbat_percent(void)
|
||||
{
|
||||
u16 tmp_bat_val;
|
||||
u16 bat_val = get_vbat_level();
|
||||
if (battery_full_value == 0) {
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
battery_full_value = (get_charge_full_value() - 100) / 10; //防止部分电池充不了这么高电量,充满显示未满的情况
|
||||
#else
|
||||
battery_full_value = 420;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (bat_val <= app_var.poweroff_tone_v) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
tmp_bat_val = remap_calculate_vbat_percent(bat_val);
|
||||
if (!tmp_bat_val) {
|
||||
tmp_bat_val = ((u32)bat_val - app_var.poweroff_tone_v) * 100 / (battery_full_value - app_var.poweroff_tone_v);
|
||||
if (tmp_bat_val > 100) {
|
||||
tmp_bat_val = 100;
|
||||
}
|
||||
}
|
||||
return (u8)tmp_bat_val;
|
||||
}
|
||||
|
||||
bool get_vbat_need_shutdown(void)
|
||||
{
|
||||
if ((bat_val <= LOW_POWER_SHUTDOWN) || adc_check_vbat_lowpower()) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//将当前电量转换为1~9级发送给手机同步电量
|
||||
u8 battery_value_to_phone_level(u16 bat_val)
|
||||
{
|
||||
u8 battery_level = 0;
|
||||
u8 vbat_percent = get_vbat_percent();
|
||||
|
||||
if (vbat_percent < 5) { //小于5%电量等级为0,显示10%
|
||||
return 0;
|
||||
}
|
||||
|
||||
battery_level = (vbat_percent - 5) / 10;
|
||||
|
||||
return battery_level;
|
||||
}
|
||||
|
||||
//获取自身的电量
|
||||
u8 get_self_battery_level(void)
|
||||
{
|
||||
return cur_battery_level;
|
||||
}
|
||||
|
||||
u8 get_cur_battery_level(void)
|
||||
{
|
||||
u8 bat_lev = tws_sibling_bat_level & (~BIT(7));
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (bat_lev == 0x7f) {
|
||||
return cur_battery_level;
|
||||
}
|
||||
|
||||
#if (CONFIG_DISPLAY_TWS_BAT_TYPE == CONFIG_DISPLAY_TWS_BAT_LOWER)
|
||||
return cur_battery_level < bat_lev ? cur_battery_level : bat_lev;
|
||||
#elif (CONFIG_DISPLAY_TWS_BAT_TYPE == CONFIG_DISPLAY_TWS_BAT_HIGHER)
|
||||
return cur_battery_level < bat_lev ? bat_lev : cur_battery_level;
|
||||
#elif (CONFIG_DISPLAY_TWS_BAT_TYPE == CONFIG_DISPLAY_TWS_BAT_LEFT)
|
||||
return tws_api_get_local_channel() == 'L' ? cur_battery_level : bat_lev;
|
||||
#elif (CONFIG_DISPLAY_TWS_BAT_TYPE == CONFIG_DISPLAY_TWS_BAT_RIGHT)
|
||||
return tws_api_get_local_channel() == 'R' ? cur_battery_level : bat_lev;
|
||||
#else
|
||||
return cur_battery_level;
|
||||
#endif //END CONFIG_DISPLAY_TWS_BAT_TYPE
|
||||
|
||||
#else //TCFG_USER_TWS_ENABLE == 0
|
||||
return cur_battery_level;
|
||||
#endif
|
||||
}
|
||||
|
||||
void vbat_check_slow(void *priv)
|
||||
{
|
||||
if (vbat_fast_timer == 0) {
|
||||
vbat_fast_timer = usr_timer_add(NULL, vbat_check, 10, 1);
|
||||
}
|
||||
if (get_charge_online_flag()) {
|
||||
sys_timer_modify(vbat_slow_timer, 60 * 1000);
|
||||
} else {
|
||||
sys_timer_modify(vbat_slow_timer, 10 * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
void vbat_check_init(void)
|
||||
{
|
||||
if (vbat_slow_timer == 0) {
|
||||
vbat_slow_timer = sys_timer_add(NULL, vbat_check_slow, 10 * 1000);
|
||||
} else {
|
||||
sys_timer_modify(vbat_slow_timer, 10 * 1000);
|
||||
}
|
||||
|
||||
if (vbat_fast_timer == 0) {
|
||||
vbat_fast_timer = usr_timer_add(NULL, vbat_check, 10, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void vbat_timer_delete(void)
|
||||
{
|
||||
if (vbat_slow_timer) {
|
||||
sys_timer_del(vbat_slow_timer);
|
||||
vbat_slow_timer = 0;
|
||||
}
|
||||
if (vbat_fast_timer) {
|
||||
usr_timer_del(vbat_fast_timer);
|
||||
vbat_fast_timer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void vbat_check(void *priv)
|
||||
{
|
||||
static u8 unit_cnt = 0;
|
||||
static u8 low_warn_cnt = 0;
|
||||
static u8 low_off_cnt = 0;
|
||||
static u8 low_voice_cnt = 0;
|
||||
static u8 low_power_cnt = 0;
|
||||
static u8 power_normal_cnt = 0;
|
||||
static u8 charge_online_flag = 0;
|
||||
static u8 low_voice_first_flag = 1;//进入低电后先提醒一次
|
||||
|
||||
if (!bat_val) {
|
||||
bat_val = get_vbat_level();
|
||||
} else {
|
||||
bat_val = (get_vbat_level() + bat_val) / 2;
|
||||
}
|
||||
|
||||
cur_battery_level = battery_value_to_phone_level(bat_val);
|
||||
|
||||
/* printf("bv:%d, bl:%d , check_vbat:%d\n", bat_val, cur_battery_level, adc_check_vbat_lowpower()); */
|
||||
|
||||
unit_cnt++;
|
||||
|
||||
/* if (bat_val < LOW_POWER_OFF_VAL) { */
|
||||
if (adc_check_vbat_lowpower() || (bat_val <= app_var.poweroff_tone_v)) {
|
||||
low_off_cnt++;
|
||||
}
|
||||
/* if (bat_val < LOW_POWER_WARN_VAL) { */
|
||||
if (bat_val <= app_var.warning_tone_v) {
|
||||
low_warn_cnt++;
|
||||
}
|
||||
|
||||
/* log_info("unit_cnt:%d\n", unit_cnt); */
|
||||
|
||||
if (unit_cnt >= VBAT_DETECT_CNT) {
|
||||
|
||||
if (get_charge_online_flag() == 0) {
|
||||
if (low_off_cnt > (VBAT_DETECT_CNT / 2)) { //低电关机
|
||||
low_power_cnt++;
|
||||
low_voice_cnt = 0;
|
||||
power_normal_cnt = 0;
|
||||
cur_bat_st = VBAT_LOWPOWER;
|
||||
if (low_power_cnt > 6) {
|
||||
log_info("\n*******Low Power,enter softpoweroff********\n");
|
||||
low_power_cnt = 0;
|
||||
power_event_to_user(POWER_EVENT_POWER_LOW);
|
||||
usr_timer_del(vbat_fast_timer);
|
||||
vbat_fast_timer = 0;
|
||||
}
|
||||
} else if (low_warn_cnt > (VBAT_DETECT_CNT / 2)) { //低电提醒
|
||||
low_voice_cnt ++;
|
||||
low_power_cnt = 0;
|
||||
power_normal_cnt = 0;
|
||||
cur_bat_st = VBAT_WARNING;
|
||||
if ((low_voice_first_flag && low_voice_cnt > 1) || //第一次进低电10s后报一次
|
||||
(!low_voice_first_flag && low_voice_cnt >= 5)) {
|
||||
low_voice_first_flag = 0;
|
||||
low_voice_cnt = 0;
|
||||
if (!lowpower_timer) {
|
||||
log_info("\n**Low Power,Please Charge Soon!!!**\n");
|
||||
power_event_to_user(POWER_EVENT_POWER_WARNING);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
power_normal_cnt++;
|
||||
low_voice_cnt = 0;
|
||||
low_power_cnt = 0;
|
||||
if (power_normal_cnt > 2) {
|
||||
if (cur_bat_st != VBAT_NORMAL) {
|
||||
log_info("[Noraml power]\n");
|
||||
cur_bat_st = VBAT_NORMAL;
|
||||
power_event_to_user(POWER_EVENT_POWER_NORMAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
power_event_to_user(POWER_EVENT_POWER_CHARGE);
|
||||
}
|
||||
|
||||
unit_cnt = 0;
|
||||
low_off_cnt = 0;
|
||||
low_warn_cnt = 0;
|
||||
|
||||
if (cur_bat_st != VBAT_LOWPOWER) {
|
||||
usr_timer_del(vbat_fast_timer);
|
||||
vbat_fast_timer = 0;
|
||||
cur_battery_level = battery_value_to_phone_level(bat_val);
|
||||
if (cur_battery_level != old_battery_level) {
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
} else {
|
||||
if (charge_online_flag != get_charge_online_flag()) {
|
||||
//充电变化也要交换,确定是否在充电仓
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
}
|
||||
}
|
||||
charge_online_flag = get_charge_online_flag();
|
||||
old_battery_level = cur_battery_level;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool vbat_is_low_power(void)
|
||||
{
|
||||
return (cur_bat_st != VBAT_NORMAL);
|
||||
}
|
||||
|
||||
void check_power_on_voltage(void)
|
||||
{
|
||||
#if(TCFG_SYS_LVD_EN == 1)
|
||||
|
||||
u16 val = 0;
|
||||
u8 normal_power_cnt = 0;
|
||||
u8 low_power_cnt = 0;
|
||||
|
||||
while (1) {
|
||||
clr_wdt();
|
||||
val = get_vbat_level();
|
||||
printf("vbat: %d\n", val);
|
||||
if ((val < app_var.poweroff_tone_v) || adc_check_vbat_lowpower()) {
|
||||
low_power_cnt++;
|
||||
normal_power_cnt = 0;
|
||||
if (low_power_cnt > 10) {
|
||||
ui_update_status(STATUS_POWERON_LOWPOWER);
|
||||
os_time_dly(100);
|
||||
log_info("power on low power , enter softpoweroff!\n");
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
} else {
|
||||
normal_power_cnt++;
|
||||
low_power_cnt = 0;
|
||||
if (normal_power_cnt > 10) {
|
||||
vbat_check_init();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
#include "app_config.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "adv_music_info_setting.h"
|
||||
|
||||
#if (JL_EARPHONE_APP_EN)
|
||||
|
||||
int jl_phone_app_init()
|
||||
{
|
||||
#if RCSP_ADV_MUSIC_INFO_ENABLE
|
||||
bt_music_info_handle_register(rcsp_adv_music_info_deal);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,481 @@
|
||||
#include "app_config.h"
|
||||
|
||||
#if RCSP_ADV_EN
|
||||
|
||||
#include "earphone.h"
|
||||
#include "app_main.h"
|
||||
#include "le_rcsp_adv_module.h"
|
||||
#include "rcsp_adv_bluetooth.h"
|
||||
#include "rcsp_bluetooth.h"
|
||||
#include "adv_mic_setting.h"
|
||||
#include "JL_rcsp_api.h"
|
||||
#include "update_tws.h"
|
||||
#include "update_tws_new.h"
|
||||
#include "3th_profile_api.h"
|
||||
#include "adv_time_stamp_setting.h"
|
||||
#include "adv_anc_voice.h"
|
||||
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "btstack/btstack_task.h"
|
||||
#include "bt_tws.h"
|
||||
|
||||
#define LOG_TAG "[RCSP-ADV]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
extern APP_VAR app_var;
|
||||
extern void rcsp_spp_init();
|
||||
extern u8 get_app_connect_type(void);
|
||||
extern void ble_app_disconnect(void);
|
||||
extern u8 get_app_connect_type(void);
|
||||
extern void mic_data_sync_tx_deal(void);
|
||||
extern void set_ble_connect_type(u8 type);
|
||||
extern void bt_ble_adv_enable(u8 enable);
|
||||
extern void app_tws_get_data_from_sibling(u8 cmd, u8 *data, u8 len);
|
||||
extern u8 JL_get_cur_bt_channel_sel(void);
|
||||
extern void send_version_to_sibling(void);
|
||||
extern void set_rcsp_dev_type_spp(void);
|
||||
extern u8 rcsp_get_update_flag(void);
|
||||
|
||||
u8 ble_adv_miss_flag = 0;
|
||||
u8 ble_adv_poweron_flag = 0;
|
||||
|
||||
int rcsp_earphone_state_set_page_scan_enable()
|
||||
{
|
||||
#if (TCFG_USER_TWS_ENABLE == 0)
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
#elif (CONFIG_NO_DISPLAY_BUTTON_ICON || !TCFG_CHARGESTORE_ENABLE)
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("switch_icon_ctl11...\n");
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rcsp_earphone_state_get_connect_mac_addr()
|
||||
{
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTING, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rcsp_earphone_state_cancel_page_scan()
|
||||
{
|
||||
#if (TCFG_USER_TWS_ENABLE == 0)
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
#elif (CONFIG_NO_DISPLAY_BUTTON_ICON || !TCFG_CHARGESTORE_ENABLE)
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
if (ble_adv_miss_flag) {
|
||||
ble_adv_miss_flag = 0;
|
||||
puts("ble_adv_miss_flag...\n");
|
||||
} else {
|
||||
printf("switch_icon_ctl00...\n");
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rcsp_earphone_state_tws_init(int paired)
|
||||
{
|
||||
ble_adv_poweron_flag = 1;
|
||||
|
||||
if (paired) {
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
bt_ble_adv_ioctl(BT_ADV_ENABLE, 0, 1);
|
||||
} else {
|
||||
//slave close
|
||||
bt_ble_adv_ioctl(BT_ADV_DISABLE, 0, 1);
|
||||
}
|
||||
} else {
|
||||
#if 0 //disable
|
||||
//no_pair_adv,last do
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("switch_icon_ctl no_pair...\n");
|
||||
bt_ble_set_control_en(1);
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
} else {
|
||||
bt_ble_set_control_en(0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rcsp_earphone_state_tws_connected(int first_pair, u8 *comm_addr)
|
||||
{
|
||||
#if JL_EARPHONE_APP_EN
|
||||
#if RCSP_ADV_MUSIC_INFO_ENABLE
|
||||
extern void stop_get_music_timer(u8 en) ;
|
||||
stop_get_music_timer(0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (first_pair) {
|
||||
extern void ble_module_enable(u8 en);
|
||||
extern void bt_update_mac_addr(u8 * addr);
|
||||
extern void lib_make_ble_address(u8 * ble_address, u8 * edr_address);
|
||||
/* bt_ble_adv_enable(0); */
|
||||
u8 tmp_ble_addr[6] = {0};
|
||||
lib_make_ble_address(tmp_ble_addr, comm_addr);
|
||||
le_controller_set_mac(tmp_ble_addr);//将ble广播地址改成公共地址
|
||||
bt_update_mac_addr(comm_addr);
|
||||
/* bt_ble_adv_enable(1); */
|
||||
|
||||
|
||||
/*新的连接,公共地址改变了,要重新将新的地址广播出去*/
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("\nNew Connect Master!!!\n\n");
|
||||
ble_app_disconnect();
|
||||
bt_ble_adv_enable(0);
|
||||
bt_ble_adv_enable(1);
|
||||
} else {
|
||||
printf("\nConnect Slave!!!\n\n");
|
||||
/*从机ble关掉*/
|
||||
ble_app_disconnect();
|
||||
bt_ble_adv_enable(0);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rcsp_earphone_state_enter_soft_poweroff()
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
u8 adv_cmd = 0x3;
|
||||
extern u8 adv_info_device_request(u8 * buf, u16 len);
|
||||
extern u8 adv_tws_both_in_charge_box(u8 type);
|
||||
if (adv_tws_both_in_charge_box(0)) {
|
||||
adv_info_device_request(&adv_cmd, sizeof(adv_cmd));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
extern void bt_ble_exit(void);
|
||||
bt_ble_exit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rcsp_adv_bt_status_event_handler(struct bt_event *bt)
|
||||
{
|
||||
switch (bt->event) {
|
||||
case BT_STATUS_SECOND_CONNECTED:
|
||||
case BT_STATUS_FIRST_CONNECTED:
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER || JL_get_cur_bt_channel_sel() == RCSP_SPP) {
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTED, 1);
|
||||
} else {
|
||||
//maybe slave already open
|
||||
bt_ble_adv_ioctl(BT_ADV_DISABLE, 0, 1);
|
||||
}
|
||||
#else
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTED, 1);
|
||||
#endif
|
||||
break;
|
||||
case BT_STATUS_FIRST_DISCONNECT:
|
||||
case BT_STATUS_SECOND_DISCONNECT:
|
||||
bt_adv_seq_change();
|
||||
if (!app_var.goto_poweroff_flag) {
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER || JL_get_cur_bt_channel_sel() == RCSP_SPP) {
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
} else {
|
||||
//maybe slave already open
|
||||
bt_ble_adv_ioctl(BT_ADV_DISABLE, 0, 1);
|
||||
}
|
||||
#else
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case BT_STATUS_SCO_STATUS_CHANGE:
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (bt->value != 0xff) {
|
||||
rcsp_user_mic_fixed_deal(1);
|
||||
} else {
|
||||
rcsp_user_mic_fixed_deal(0);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case BT_STATUS_PHONE_INCOME:
|
||||
case BT_STATUS_PHONE_OUT:
|
||||
case BT_STATUS_PHONE_ACTIVE:
|
||||
printf("BT_STATUS_PHONE_ACTIVE\n");
|
||||
#if RCSP_ADV_FIND_DEVICE_ENABLE
|
||||
extern void send_find_device_stop(void);
|
||||
send_find_device_stop();
|
||||
#endif
|
||||
// 更新通话状态
|
||||
extern void JL_bt_phone_state_update(void);
|
||||
JL_bt_phone_state_update();
|
||||
break;
|
||||
case BT_STATUS_PHONE_HANGUP:
|
||||
printf("BT_STATUS_PHONE_HANGUP\n");
|
||||
// 更新通话状态
|
||||
extern void JL_bt_phone_state_update(void);
|
||||
JL_bt_phone_state_update();
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int rcsp_adv_hci_event_handler(struct bt_event *bt)
|
||||
{
|
||||
switch (bt->event) {
|
||||
case HCI_EVENT_CONNECTION_COMPLETE:
|
||||
switch (bt->value) {
|
||||
case ERROR_CODE_PIN_OR_KEY_MISSING:
|
||||
#if (CONFIG_NO_DISPLAY_BUTTON_ICON && TCFG_CHARGESTORE_ENABLE)
|
||||
//已取消配对了, 切换广播
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void rcsp_bt_tws_event_handler(struct bt_event *bt)
|
||||
{
|
||||
int role = bt->args[0];
|
||||
int phone_link_connection = bt->args[1];
|
||||
int reason = bt->args[2];
|
||||
|
||||
switch (bt->event) {
|
||||
case TWS_EVENT_CONNECTED:
|
||||
//bt_ble_adv_enable(1);
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
//master enable
|
||||
log_info("master do icon_open\n");
|
||||
if (phone_link_connection) {
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTED, 1);
|
||||
} else {
|
||||
#if (TCFG_CHARGESTORE_ENABLE && !CONFIG_NO_DISPLAY_BUTTON_ICON)
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTED, 1);
|
||||
#else
|
||||
if (ble_adv_poweron_flag) { //上电标记
|
||||
if (bt_user_priv_var.auto_connection_counter > 0) {
|
||||
//有回连手机动作
|
||||
/* g_printf("ICON_TYPE_RECONNECT"); */
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTING, 1);
|
||||
//没按键配对的话,等回连成功的时候才显示电量。如果在这里显示,手机取消配对后耳机开机,会显示出按键的界面
|
||||
} else {
|
||||
//没有回连,设可连接
|
||||
/* g_printf("ICON_TYPE_INQUIRY"); */
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
//slave disable
|
||||
printf("\nConnect Slave!!!\n\n");
|
||||
/*从机ble关掉*/
|
||||
ble_app_disconnect();
|
||||
bt_ble_adv_enable(0);
|
||||
}
|
||||
send_version_to_sibling();
|
||||
ble_adv_poweron_flag = 0;
|
||||
|
||||
#if RCSP_ADV_ANC_VOICE
|
||||
anc_voice_setting_sync();
|
||||
#endif
|
||||
|
||||
sync_setting_by_time_stamp();
|
||||
|
||||
#if (RCSP_ADV_FIND_DEVICE_ENABLE && TCFG_USER_TWS_ENABLE)
|
||||
extern void find_decice_tws_connect_handle(u8 flag, u8 * param);
|
||||
find_decice_tws_connect_handle(0, NULL);
|
||||
#endif
|
||||
|
||||
break;
|
||||
case TWS_EVENT_PHONE_LINK_DETACH:
|
||||
/*
|
||||
* 跟手机的链路LMP层已完全断开, 只有tws在连接状态才会收到此事件
|
||||
*/
|
||||
if (reason == 0x0b) {
|
||||
//CONNECTION ALREADY EXISTS
|
||||
ble_adv_miss_flag = 1;
|
||||
} else {
|
||||
ble_adv_miss_flag = 0;
|
||||
}
|
||||
break;
|
||||
case TWS_EVENT_CONNECTION_DETACH:
|
||||
/*
|
||||
* TWS连接断开
|
||||
*/
|
||||
if (app_var.goto_poweroff_flag) {
|
||||
break;
|
||||
}
|
||||
if (get_app_connect_type() == 0) {
|
||||
printf("\ntws detach to open ble~~~\n\n");
|
||||
bt_ble_adv_enable(1);
|
||||
}
|
||||
set_ble_connect_type(TYPE_NULL);
|
||||
|
||||
deal_adv_setting_gain_time_stamp();
|
||||
break;
|
||||
case TWS_EVENT_SYNC_FUN_CMD:
|
||||
#if JL_EARPHONE_APP_EN
|
||||
if (reason == SYNC_CMD_APP_RESET_LED_UI) {
|
||||
#if RCSP_ADV_LED_SET_ENABLE
|
||||
extern void update_led_setting_state(void);
|
||||
update_led_setting_state();
|
||||
#endif
|
||||
} else if (reason == SYNC_CMD_MUSIC_INFO) {
|
||||
#if RCSP_ADV_MUSIC_INFO_ENABLE
|
||||
extern void get_music_info(void);
|
||||
get_music_info();
|
||||
#endif
|
||||
} else if (reason == SYNC_CMD_RCSP_AUTH_RES) {
|
||||
extern void rcsp_tws_auth_sync_deal(void);
|
||||
rcsp_tws_auth_sync_deal();
|
||||
} else if (reason == SYNC_CMD_MUSIC_PLAYER_STATE) {
|
||||
#if RCSP_ADV_MUSIC_INFO_ENABLE
|
||||
void rcsp_update_player_state(void);
|
||||
rcsp_update_player_state();
|
||||
#endif
|
||||
} else if (reason == SYNC_CMD_MUSIC_PLAYER_TIEM_EN) {
|
||||
#if RCSP_ADV_MUSIC_INFO_ENABLE
|
||||
extern void reset_player_time_en(void);
|
||||
reset_player_time_en();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case TWS_EVENT_ROLE_SWITCH:
|
||||
if (role == TWS_ROLE_MASTER) { // 切换后触发
|
||||
#if JL_EARPHONE_APP_EN
|
||||
#if RCSP_ADV_LED_SET_ENABLE
|
||||
extern void update_led_setting_state(void);
|
||||
update_led_setting_state();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
{
|
||||
extern void adv_role_switch_handle(void);
|
||||
adv_role_switch_handle();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#if OTA_TWS_SAME_TIME_ENABLE
|
||||
tws_ota_app_event_deal(bt->event);
|
||||
#endif
|
||||
}
|
||||
|
||||
int rcsp_sys_event_handler_specific(struct sys_event *event)
|
||||
{
|
||||
switch (event->type) {
|
||||
case SYS_BT_EVENT:
|
||||
if ((u32)event->arg == SYS_BT_EVENT_TYPE_CON_STATUS) {
|
||||
rcsp_adv_bt_status_event_handler(&event->u.bt);
|
||||
} else if ((u32)event->arg == SYS_BT_EVENT_TYPE_HCI_STATUS) {
|
||||
rcsp_adv_hci_event_handler(&event->u.bt);
|
||||
}
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
else if (((u32)event->arg == SYS_BT_EVENT_FROM_TWS)) {
|
||||
rcsp_bt_tws_event_handler(&event->u.bt);
|
||||
}
|
||||
#endif
|
||||
#if 1//OTA_TWS_SAME_TIME_ENABLE
|
||||
else if (((u32)event->arg == SYS_BT_OTA_EVENT_TYPE_STATUS)) {
|
||||
bt_ota_event_handler(&event->u.bt);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case SYS_DEVICE_EVENT:
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_RCSP) {
|
||||
int JL_rcsp_event_handler(struct rcsp_event * rcsp);
|
||||
JL_rcsp_event_handler(&event->u.rcsp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int user_spp_state_specific(u8 packet_type)
|
||||
{
|
||||
u8 tws_need_update = 0;
|
||||
|
||||
switch (packet_type) {
|
||||
case 1:
|
||||
ble_app_disconnect();
|
||||
bt_ble_adv_enable(0);
|
||||
// set_app_connect_type(TYPE_SPP);
|
||||
#if (0 == BT_CONNECTION_VERIFY)
|
||||
JL_rcsp_auth_reset();
|
||||
#endif
|
||||
|
||||
set_rcsp_dev_type_spp();
|
||||
set_connect_flag(2);
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_NOTIFY_EN, 1, 1);
|
||||
break;
|
||||
case 2:
|
||||
|
||||
// set_app_connect_type(TYPE_NULL);
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (syscfg_read(VM_UPDATE_FLAG, &tws_need_update, sizeof(tws_need_update)) == 1) {
|
||||
printf("packet_type:%d need:%d\n", packet_type, tws_need_update);
|
||||
if (tws_need_update) { //这里直接return防止升级过程从机断开SPP之后又开广播然后被主机误连
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (!(tws_api_get_tws_state() & TWS_STA_SIBLING_CONNECTED)) {
|
||||
if (!rcsp_get_update_flag()) {
|
||||
ble_module_enable(1);
|
||||
}
|
||||
} else {
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
if (!rcsp_get_update_flag()) {
|
||||
ble_module_enable(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
ble_module_enable(1);
|
||||
#endif
|
||||
|
||||
#if (0 == BT_CONNECTION_VERIFY)
|
||||
JL_rcsp_auth_reset();
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int rcsp_earphone_state_init()
|
||||
{
|
||||
// rcsp_spp_init();
|
||||
rcsp_init();
|
||||
spp_data_deal_handle_register(user_spp_data_handler);
|
||||
|
||||
#if JL_EARPHONE_APP_EN
|
||||
extern int jl_phone_app_init();
|
||||
jl_phone_app_init();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,4 @@
|
||||
.section .sys.version, "ax"
|
||||
|
||||
.long 254991771
|
||||
.asciz "JL701N_V1.6.1-@20240130-$8f8f3995"
|
||||
@@ -0,0 +1,223 @@
|
||||
#include "tone_player.h"
|
||||
#include "system/includes.h"
|
||||
|
||||
|
||||
#ifdef CONFIG_MEDIA_NEW_ENABLE
|
||||
|
||||
|
||||
|
||||
static const char *const tone_index[] = {
|
||||
TONE_NUM_0,
|
||||
TONE_NUM_1,
|
||||
TONE_NUM_2,
|
||||
TONE_NUM_3,
|
||||
TONE_NUM_4,
|
||||
TONE_NUM_5,
|
||||
TONE_NUM_6,
|
||||
TONE_NUM_7,
|
||||
TONE_NUM_8,
|
||||
TONE_NUM_9,
|
||||
TONE_BT_MODE,
|
||||
TONE_BT_CONN,
|
||||
TONE_BT_DISCONN,
|
||||
TONE_TWS_CONN,
|
||||
TONE_TWS_DISCONN,
|
||||
TONE_LOW_POWER,
|
||||
TONE_POWER_OFF,
|
||||
TONE_POWER_ON,
|
||||
TONE_RING,
|
||||
TONE_MAX_VOL,
|
||||
TONE_NORMAL,
|
||||
TONE_ANC_OFF,
|
||||
TONE_ANC_ON,
|
||||
TONE_TRANSPARENCY,
|
||||
TONE_ANC_ADAPTIVE,
|
||||
TONE_ANC_ADAPTIVE_COEFF,
|
||||
TONE_ANC_NORMAL_COEFF,
|
||||
};
|
||||
|
||||
/*
|
||||
* 参数配置:
|
||||
* freq : 实际频率 * 512
|
||||
* points : 正弦波点数
|
||||
* win : 正弦窗
|
||||
* decay : 衰减系数(百分比), 正弦窗模式下为频率设置:频率*512
|
||||
*
|
||||
*/
|
||||
static const struct sin_param sine_16k_normal[] __BANK_TONE = {
|
||||
/*{0, 1000, 0, 100},*/
|
||||
{1000 << 9, 4000, 0, 100},
|
||||
};
|
||||
|
||||
static const struct sin_param sine_key_tone[] __BANK_TONE = {
|
||||
/*sine_make.c/fade_points = 0效果更加*/
|
||||
{2800 << 9, 1400, 1, 60 << 9},
|
||||
};
|
||||
|
||||
static const struct sin_param sine_low_latency_in[] __BANK_TONE = {
|
||||
/*{0, 1000, 0, 100},*/
|
||||
{400 << 9, 4000, 0, 100},
|
||||
};
|
||||
|
||||
static const struct sin_param sine_low_latency_out[] __BANK_TONE = {
|
||||
/*{0, 1000, 0, 100},*/
|
||||
{600 << 9, 8000, 0, 100},
|
||||
};
|
||||
|
||||
static const struct sin_param sine_tws_disconnect_16k[] __BANK_TONE = {
|
||||
/*
|
||||
{390 << 9, 4026, SINE_TOTAL_VOLUME / 4026},
|
||||
{262 << 9, 8000, SINE_TOTAL_VOLUME / 8000},
|
||||
*/
|
||||
{262 << 9, 4026, 0, 100},
|
||||
{390 << 9, 8000, 0, 100},
|
||||
};
|
||||
|
||||
static const struct sin_param sine_tws_connect_16k[] __BANK_TONE = {
|
||||
/*
|
||||
{262 << 9, 4026, SINE_TOTAL_VOLUME / 4026},
|
||||
{390 << 9, 8000, SINE_TOTAL_VOLUME / 8000},
|
||||
*/
|
||||
{262.298 * 512, 8358, 0, 100},
|
||||
};
|
||||
|
||||
static const struct sin_param sine_low_power[] __BANK_TONE = {
|
||||
{424 << 9, 3613, 0, 100},
|
||||
{319 << 9, 3623, 0, 100},
|
||||
};
|
||||
|
||||
static const struct sin_param sine_ring[] __BANK_TONE = {
|
||||
{450 << 9, 24960, 1, 16.667 * 512},
|
||||
{0, 16000, 0, 100},
|
||||
};
|
||||
|
||||
static const struct sin_param sine_tws_max_volume[] __BANK_TONE = {
|
||||
{210 << 9, 2539, 0, 100},
|
||||
{260 << 9, 7619, 0, 100},
|
||||
{400 << 9, 2539, 0, 100},
|
||||
};
|
||||
|
||||
static const struct sin_param sine_anc_adaptive_1[] __BANK_TONE = {
|
||||
{330 << 9, 2539, 0, 100}, //低 mi
|
||||
{392 << 9, 7619, 0, 100}, //低 so
|
||||
};
|
||||
|
||||
static const struct sin_param sine_anc_adaptive_2[] __BANK_TONE = {
|
||||
{392 << 9, 2539, 0, 100}, //低 so
|
||||
{330 << 9, 7619, 0, 100}, //低 mi
|
||||
};
|
||||
|
||||
|
||||
__BANK_TONE_ENTRY
|
||||
static const struct sin_param *get_sine_param_by_index(u8 index, u8 *num)
|
||||
{
|
||||
const struct sin_param *param_data;
|
||||
|
||||
switch (index) {
|
||||
case SINE_WTONE_NORAML:
|
||||
param_data = sine_16k_normal;
|
||||
*num = ARRAY_SIZE(sine_16k_normal);
|
||||
break;
|
||||
case SINE_WTONE_TWS_CONNECT:
|
||||
param_data = sine_tws_connect_16k;
|
||||
*num = ARRAY_SIZE(sine_tws_connect_16k);
|
||||
break;
|
||||
case SINE_WTONE_TWS_DISCONNECT:
|
||||
param_data = sine_tws_disconnect_16k;
|
||||
*num = ARRAY_SIZE(sine_tws_disconnect_16k);
|
||||
break;
|
||||
case SINE_WTONE_LOW_POWER:
|
||||
param_data = sine_low_power;
|
||||
*num = ARRAY_SIZE(sine_low_power);
|
||||
break;
|
||||
case SINE_WTONE_RING:
|
||||
param_data = sine_ring;
|
||||
*num = ARRAY_SIZE(sine_ring);
|
||||
break;
|
||||
case SINE_WTONE_MAX_VOLUME:
|
||||
param_data = sine_tws_max_volume;
|
||||
*num = ARRAY_SIZE(sine_tws_max_volume);
|
||||
break;
|
||||
case SINE_WTONE_LOW_LATENRY_IN:
|
||||
param_data = sine_low_latency_in;
|
||||
*num = ARRAY_SIZE(sine_low_latency_in);
|
||||
break;
|
||||
case SINE_WTONE_LOW_LATENRY_OUT:
|
||||
param_data = sine_low_latency_out;
|
||||
*num = ARRAY_SIZE(sine_low_latency_out);
|
||||
break;
|
||||
case SINE_WTONE_ANC_ADAPTIVE_1:
|
||||
param_data = sine_anc_adaptive_1;
|
||||
*num = ARRAY_SIZE(sine_anc_adaptive_1);
|
||||
break;
|
||||
case SINE_WTONE_ANC_ADAPTIVE_2:
|
||||
param_data = sine_anc_adaptive_2;
|
||||
*num = ARRAY_SIZE(sine_anc_adaptive_2);
|
||||
break;
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return param_data;
|
||||
}
|
||||
|
||||
/*
|
||||
*index:提示音索引
|
||||
*preemption:抢断标志
|
||||
*/
|
||||
__BANK_TONE_ENTRY
|
||||
int tone_play_index(u8 index, u8 preemption)
|
||||
{
|
||||
printf("tone_play_index:%d,preemption:%d", index, preemption);
|
||||
if (index >= IDEX_TONE_NONE) {
|
||||
return 0;
|
||||
}
|
||||
return tone_play(tone_index[index], preemption);
|
||||
}
|
||||
/*
|
||||
*@brief:提示音比较,确认目标提示音和正在播放的提示音是否一致
|
||||
*@return: 0 匹配
|
||||
* 非0 不匹配或者当前没有提示音播放
|
||||
*@note:通过提示音索引比较
|
||||
*/
|
||||
int tone_name_cmp_by_index(u8 index)
|
||||
{
|
||||
if (index >= IDEX_TONE_NONE) {
|
||||
return 0;
|
||||
}
|
||||
return tone_name_compare(tone_index[index]);
|
||||
}
|
||||
|
||||
__BANK_TONE_ENTRY
|
||||
int tone_play_index_no_tws(u8 index, u8 preemption)
|
||||
{
|
||||
printf("tone_play_index no tws:%d,preemption:%d", index, preemption);
|
||||
if (index >= IDEX_TONE_NONE) {
|
||||
return 0;
|
||||
}
|
||||
return tone_play_no_tws(tone_index[index], preemption);
|
||||
}
|
||||
|
||||
/* __BANK_TONE_ENTRY */
|
||||
int tone_play_index_with_callback(u8 index, u8 preemption, void (*user_evt_handler)(void *priv), void *priv)
|
||||
{
|
||||
printf("tone_play_index:%d,preemption:%d", index, preemption);
|
||||
if (index >= IDEX_TONE_NONE) {
|
||||
return 0;
|
||||
}
|
||||
return tone_play_with_callback(tone_index[index], preemption, user_evt_handler, priv);
|
||||
}
|
||||
|
||||
|
||||
|
||||
__BANK_INIT_ENTRY
|
||||
int tone_table_init()
|
||||
{
|
||||
tone_play_set_sine_param_handler(get_sine_param_by_index);
|
||||
return 0;
|
||||
}
|
||||
__initcall(tone_table_init);
|
||||
|
||||
#endif /*CONFIG_MEDIA_NEW_ENABLE*/
|
||||
|
||||
@@ -0,0 +1,217 @@
|
||||
#include "app_config.h"
|
||||
|
||||
|
||||
#include "earphone.h"
|
||||
#include "app_main.h"
|
||||
#include "update_tws.h"
|
||||
#include "3th_profile_api.h"
|
||||
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "btstack/btstack_task.h"
|
||||
#include "bt_tws.h"
|
||||
#include "spp_trans_data.h"
|
||||
#include "spp_user.h"
|
||||
|
||||
|
||||
#if TRANS_DATA_EN
|
||||
|
||||
#define LOG_TAG "[TRANS_DATA]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
u8 ble_adv_miss_flag = 0;
|
||||
u8 ble_adv_poweron_flag = 0;
|
||||
|
||||
int trans_data_earphone_state_set_page_scan_enable()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trans_data_earphone_state_get_connect_mac_addr()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trans_data_earphone_state_cancel_page_scan()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trans_data_earphone_state_tws_init(int paired)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trans_data_earphone_state_tws_connected(int first_pair, u8 *comm_addr)
|
||||
{
|
||||
if (first_pair) {
|
||||
extern void ble_module_enable(u8 en);
|
||||
extern void bt_update_mac_addr(u8 * addr);
|
||||
extern void lib_make_ble_address(u8 * ble_address, u8 * edr_address);
|
||||
/* bt_ble_adv_enable(0); */
|
||||
u8 tmp_ble_addr[6] = {0};
|
||||
lib_make_ble_address(tmp_ble_addr, comm_addr);
|
||||
le_controller_set_mac(tmp_ble_addr);//将ble广播地址改成公共地址
|
||||
bt_update_mac_addr(comm_addr);
|
||||
/* bt_ble_adv_enable(1); */
|
||||
|
||||
|
||||
/*新的连接,公共地址改变了,要重新将新的地址广播出去*/
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("\nNew Connect Master!!!\n\n");
|
||||
ble_app_disconnect();
|
||||
bt_ble_adv_enable(0);
|
||||
bt_ble_adv_enable(1);
|
||||
} else {
|
||||
printf("\nConnect Slave!!!\n\n");
|
||||
/*从机ble关掉*/
|
||||
ble_app_disconnect();
|
||||
bt_ble_adv_enable(0);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trans_data_earphone_state_enter_soft_poweroff()
|
||||
{
|
||||
extern void bt_ble_exit(void);
|
||||
bt_ble_exit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int trans_data_adv_bt_status_event_handler(struct bt_event *bt)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int trans_data_adv_hci_event_handler(struct bt_event *bt)
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void trans_data_bt_tws_event_handler(struct bt_event *bt)
|
||||
{
|
||||
int role = bt->args[0];
|
||||
int phone_link_connection = bt->args[1];
|
||||
int reason = bt->args[2];
|
||||
|
||||
switch (bt->event) {
|
||||
case TWS_EVENT_CONNECTED:
|
||||
//bt_ble_adv_enable(1);
|
||||
if (tws_api_get_role() == TWS_ROLE_SLAVE) {
|
||||
//master enable
|
||||
printf("\nConnect Slave!!!\n\n");
|
||||
/*从机ble关掉*/
|
||||
ble_app_disconnect();
|
||||
bt_ble_adv_enable(0);
|
||||
}
|
||||
|
||||
break;
|
||||
case TWS_EVENT_PHONE_LINK_DETACH:
|
||||
/*
|
||||
* 跟手机的链路LMP层已完全断开, 只有tws在连接状态才会收到此事件
|
||||
*/
|
||||
break;
|
||||
case TWS_EVENT_CONNECTION_DETACH:
|
||||
/*
|
||||
* TWS连接断开
|
||||
*/
|
||||
if (app_var.goto_poweroff_flag) {
|
||||
break;
|
||||
}
|
||||
if (get_app_connect_type() == 0) {
|
||||
printf("\ntws detach to open ble~~~\n\n");
|
||||
bt_ble_adv_enable(1);
|
||||
}
|
||||
set_ble_connect_type(TYPE_NULL);
|
||||
|
||||
break;
|
||||
case TWS_EVENT_SYNC_FUN_CMD:
|
||||
break;
|
||||
case TWS_EVENT_ROLE_SWITCH:
|
||||
break;
|
||||
}
|
||||
|
||||
#if OTA_TWS_SAME_TIME_ENABLE
|
||||
tws_ota_app_event_deal(bt->event);
|
||||
#endif
|
||||
}
|
||||
|
||||
int trans_data_sys_event_handler_specific(struct sys_event *event)
|
||||
{
|
||||
switch (event->type) {
|
||||
case SYS_BT_EVENT:
|
||||
if ((u32)event->arg == SYS_BT_EVENT_TYPE_CON_STATUS) {
|
||||
|
||||
} else if ((u32)event->arg == SYS_BT_EVENT_TYPE_HCI_STATUS) {
|
||||
|
||||
}
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
else if (((u32)event->arg == SYS_BT_EVENT_FROM_TWS)) {
|
||||
trans_data_bt_tws_event_handler(&event->u.bt);
|
||||
}
|
||||
#endif
|
||||
#if OTA_TWS_SAME_TIME_ENABLE
|
||||
else if (((u32)event->arg == SYS_BT_OTA_EVENT_TYPE_STATUS)) {
|
||||
bt_ota_event_handler(&event->u.bt);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case SYS_DEVICE_EVENT:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int user_spp_state_specific(u8 packet_type)
|
||||
{
|
||||
|
||||
switch (packet_type) {
|
||||
case 1:
|
||||
bt_ble_adv_enable(0);
|
||||
set_app_connect_type(TYPE_SPP);
|
||||
break;
|
||||
case 2:
|
||||
|
||||
set_app_connect_type(TYPE_NULL);
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (!(tws_api_get_tws_state() & TWS_STA_SIBLING_CONNECTED)) {
|
||||
ble_module_enable(1);
|
||||
} else {
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
ble_module_enable(1);
|
||||
}
|
||||
}
|
||||
#else
|
||||
ble_module_enable(1);
|
||||
#endif
|
||||
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int trans_data_earphone_state_init()
|
||||
{
|
||||
transport_spp_init();
|
||||
spp_data_deal_handle_register(user_spp_data_handler);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,352 @@
|
||||
#include "ui_manage.h"
|
||||
#include "asm/pwm_led.h"
|
||||
#include "system/includes.h"
|
||||
#include "app_config.h"
|
||||
#include "user_cfg.h"
|
||||
#include "classic/tws_api.h"
|
||||
|
||||
#define LOG_TAG_CONST UI
|
||||
#define LOG_TAG "[UI]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
#define LED_VDDIO_KEEP 1
|
||||
#define UI_MANAGE_BUF 8
|
||||
|
||||
typedef struct _ui_var {
|
||||
u8 ui_init_flag;
|
||||
u8 other_status;
|
||||
u8 power_status;
|
||||
u8 current_status;
|
||||
volatile u8 ui_flash_cnt;
|
||||
cbuffer_t ui_cbuf;
|
||||
u8 ui_buf[UI_MANAGE_BUF];
|
||||
int sys_ui_timer;
|
||||
} ui_var;
|
||||
|
||||
static ui_var sys_ui_var = {.power_status = STATUS_NORMAL_POWER};
|
||||
|
||||
extern int get_bt_tws_connect_status();
|
||||
|
||||
u8 get_ui_status(u8 *status)
|
||||
{
|
||||
return cbuf_read(&(sys_ui_var.ui_cbuf), status, 1);
|
||||
}
|
||||
|
||||
u8 get_ui_status_len(void)
|
||||
{
|
||||
return cbuf_get_data_size(&(sys_ui_var.ui_cbuf));
|
||||
}
|
||||
|
||||
u8 get_ui_busy_status()
|
||||
{
|
||||
return sys_ui_var.ui_flash_cnt;
|
||||
}
|
||||
|
||||
#if (RCSP_ADV_EN)
|
||||
u8 adv_get_led_status(void)
|
||||
{
|
||||
return sys_ui_var.other_status;
|
||||
}
|
||||
#endif
|
||||
|
||||
void ui_manage_scan(void *priv)
|
||||
{
|
||||
|
||||
STATUS *p_led = get_led_config();
|
||||
|
||||
sys_ui_var.sys_ui_timer = 0;
|
||||
|
||||
log_info("ui_flash_cnt:%d cur_ui_status:%d", sys_ui_var.ui_flash_cnt, sys_ui_var.current_status);
|
||||
|
||||
if (sys_ui_var.ui_flash_cnt == 0 || sys_ui_var.ui_flash_cnt == 7) { //有特殊的闪烁状态等当前状态执行完再进入下一个状态
|
||||
if (get_ui_status(&sys_ui_var.current_status)) {
|
||||
if (sys_ui_var.current_status >= STATUS_CHARGE_START && sys_ui_var.current_status <= STATUS_NORMAL_POWER) {
|
||||
sys_ui_var.power_status = sys_ui_var.current_status;
|
||||
} else {
|
||||
sys_ui_var.other_status = sys_ui_var.current_status;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sys_ui_var.ui_flash_cnt) {
|
||||
sys_ui_var.ui_flash_cnt --;
|
||||
sys_ui_var.sys_ui_timer = usr_timeout_add(NULL, ui_manage_scan, 300, 1);
|
||||
} else if (get_ui_status_len()) {
|
||||
sys_ui_var.sys_ui_timer = usr_timeout_add(NULL, ui_manage_scan, 100, 1);
|
||||
}
|
||||
|
||||
#if ((RCSP_ADV_EN)&&(JL_EARPHONE_APP_EN))
|
||||
if (tws_api_get_role() == TWS_ROLE_SLAVE) {
|
||||
pwm_led_mode_set(PWM_LED_ALL_OFF);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (sys_ui_var.other_status != STATUS_POWEROFF && sys_ui_var.power_status != STATUS_NORMAL_POWER) { //关机的状态优先级要高于电源状态
|
||||
switch (sys_ui_var.power_status) {
|
||||
case STATUS_LOWPOWER:
|
||||
log_info("[STATUS_LOWPOWER]\n");
|
||||
pwm_led_mode_set(p_led->lowpower);
|
||||
return;
|
||||
|
||||
case STATUS_CHARGE_START:
|
||||
log_info("[STATUS_CHARGE_START]\n");
|
||||
pwm_led_mode_set(p_led->charge_start);
|
||||
return;
|
||||
|
||||
case STATUS_CHARGE_FULL:
|
||||
log_info("[STATUS_CHARGE_FULL]\n");
|
||||
pwm_led_mode_set(p_led->charge_full);
|
||||
return;
|
||||
|
||||
case STATUS_CHARGE_ERR:
|
||||
log_info("[STATUS_CHARGE_ERR]\n");
|
||||
pwm_led_mode_set(PWM_LED0_ON);
|
||||
pwm_led_mode_set(PWM_LED1_ON);
|
||||
return;
|
||||
|
||||
case STATUS_CHARGE_CLOSE:
|
||||
log_info("[STATUS_CHARGE_CLOSE]\n");
|
||||
pwm_led_mode_set(PWM_LED0_OFF);
|
||||
pwm_led_mode_set(PWM_LED1_OFF);
|
||||
return;
|
||||
|
||||
case STATUS_CHARGE_LDO5V_OFF:
|
||||
log_info("[STATUS_CHARGE_LDO5V_OFF]\n");
|
||||
case STATUS_EXIT_LOWPOWER:
|
||||
case STATUS_NORMAL_POWER:
|
||||
//pwm_led_mode_set(PWM_LED0_OFF);
|
||||
//pwm_led_mode_set(PWM_LED1_OFF);
|
||||
sys_ui_var.power_status = STATUS_NORMAL_POWER;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (sys_ui_var.other_status) {
|
||||
case STATUS_POWERON:
|
||||
log_info("[STATUS_POWERON]\n");
|
||||
if (p_led->power_on != PWM_LED0_FLASH_THREE) {
|
||||
pwm_led_mode_set(p_led->power_on);
|
||||
} else {
|
||||
if (sys_ui_var.ui_flash_cnt) {
|
||||
if (get_bt_tws_connect_status()) {
|
||||
sys_ui_var.ui_flash_cnt = 0;
|
||||
ui_manage_scan(NULL);
|
||||
return;
|
||||
}
|
||||
if (sys_ui_var.ui_flash_cnt % 2) {
|
||||
pwm_led_mode_set(PWM_LED0_OFF);
|
||||
} else {
|
||||
pwm_led_mode_set(PWM_LED0_ON);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case STATUS_POWEROFF:
|
||||
log_info("[STATUS_POWEROFF]\n");
|
||||
if (p_led->power_off != PWM_LED1_FLASH_THREE) {
|
||||
pwm_led_mode_set(p_led->power_off);
|
||||
} else {
|
||||
if (sys_ui_var.ui_flash_cnt) {
|
||||
if (sys_ui_var.ui_flash_cnt % 2) {
|
||||
pwm_led_mode_set(PWM_LED1_OFF);
|
||||
} else {
|
||||
pwm_led_mode_set(PWM_LED1_ON);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case STATUS_BT_INIT_OK:
|
||||
log_info("[STATUS_BT_INIT_OK]\n");
|
||||
pwm_led_mode_set(p_led->bt_init_ok);
|
||||
break;
|
||||
|
||||
case STATUS_BT_SLAVE_CONN_MASTER:
|
||||
pwm_led_mode_set(PWM_LED1_SLOW_FLASH);
|
||||
break;
|
||||
|
||||
case STATUS_BT_CONN:
|
||||
log_info("[STATUS_BT_CONN]\n");
|
||||
pwm_led_mode_set(p_led->bt_connect_ok);
|
||||
break;
|
||||
|
||||
case STATUS_BT_MASTER_CONN_ONE:
|
||||
log_info("[STATUS_BT_MASTER_CONN_ONE]\n");
|
||||
pwm_led_mode_set(PWM_LED0_LED1_SLOW_FLASH);
|
||||
break;
|
||||
|
||||
case STATUS_BT_DISCONN:
|
||||
log_info("[STATUS_BT_DISCONN]\n");
|
||||
pwm_led_mode_set(p_led->bt_disconnect);
|
||||
break;
|
||||
|
||||
case STATUS_PHONE_INCOME:
|
||||
log_info("[STATUS_PHONE_INCOME]\n");
|
||||
pwm_led_mode_set(p_led->phone_in);
|
||||
break;
|
||||
|
||||
case STATUS_PHONE_OUT:
|
||||
log_info("[STATUS_PHONE_OUT]\n");
|
||||
pwm_led_mode_set(p_led->phone_out);
|
||||
break;
|
||||
|
||||
case STATUS_PHONE_ACTIV:
|
||||
log_info("[STATUS_PHONE_ACTIV]\n");
|
||||
pwm_led_mode_set(p_led->phone_activ);
|
||||
break;
|
||||
|
||||
case STATUS_POWERON_LOWPOWER:
|
||||
log_info("[STATUS_POWERON_LOWPOWER]\n");
|
||||
pwm_led_mode_set(p_led->lowpower);
|
||||
break;
|
||||
|
||||
case STATUS_BT_TWS_CONN:
|
||||
log_info("[STATUS_BT_TWS_CONN]\n");
|
||||
pwm_led_mode_set(p_led->tws_connect_ok);
|
||||
break;
|
||||
case STATUS_BT_TWS_DISCONN:
|
||||
log_info("[STATUS_BT_TWS_DISCONN]\n");
|
||||
pwm_led_mode_set(p_led->tws_disconnect);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int ui_manage_init(void)
|
||||
{
|
||||
if (!sys_ui_var.ui_init_flag) {
|
||||
cbuf_init(&(sys_ui_var.ui_cbuf), &(sys_ui_var.ui_buf), UI_MANAGE_BUF);
|
||||
sys_ui_var.ui_init_flag = 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ui_update_status(u8 status)
|
||||
{
|
||||
STATUS *p_led = get_led_config();
|
||||
if (!sys_ui_var.ui_init_flag) { //更新UI状态之前需先初始化ui_cbuf
|
||||
ui_manage_init();
|
||||
}
|
||||
log_info("update ui status :%d", status);
|
||||
if ((status == STATUS_POWERON && p_led->power_on == PWM_LED0_FLASH_THREE) || (status == STATUS_POWEROFF && p_led->power_off == PWM_LED1_FLASH_THREE)) {
|
||||
log_info(">>>set ui_flash_cnt");
|
||||
sys_ui_var.ui_flash_cnt = 7;
|
||||
}
|
||||
cbuf_write(&(sys_ui_var.ui_cbuf), &status, 1);
|
||||
/* if (!sys_ui_var.sys_ui_timer) { */
|
||||
/* sys_ui_var.sys_ui_timer = usr_timeout_add(NULL, ui_manage_scan, 10); */
|
||||
/* } */
|
||||
if (sys_ui_var.ui_flash_cnt >= 1 && sys_ui_var.ui_flash_cnt <= 6) {
|
||||
return;
|
||||
}
|
||||
|
||||
ui_manage_scan(NULL);
|
||||
}
|
||||
|
||||
u8 pdown_keep_pw_gate()
|
||||
{
|
||||
#if(LED_VDDIO_KEEP == 1) //led 进入powerdown时模块的电源是否降低,降低会导致灯抖动,不降的话功耗会高100ua
|
||||
return true;
|
||||
#else
|
||||
if ((sys_ui_var.current_status == STATUS_BT_DISCONN) ||
|
||||
(sys_ui_var.current_status == STATUS_BT_INIT_OK) ||
|
||||
(sys_ui_var.current_status == STATUS_BT_TWS_DISCONN)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if (TCFG_USER_TWS_ENABLE == 1)
|
||||
__attribute__((weak))
|
||||
bool is_led_module_on()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void led_module_on()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void led_module_off()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void led_timer_del()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void led_module_enter_sniff_mode()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void led_module_exit_sniff_mode()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
void led_sniff_mode_double_display(u32 index)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
extern int get_bt_tws_connect_status();
|
||||
//对耳连接成功之后利用SNIFF的节奏来进行闪灯同步,只是通过开关LED模块来实现同步
|
||||
void sniff_achor_point_hook(u32 slot)
|
||||
{
|
||||
u8 led_mode = pwm_led_display_mode_get();
|
||||
if (led_mode != PWM_LED0_ONE_FLASH_5S && led_mode != PWM_LED1_ONE_FLASH_5S) {
|
||||
if (get_bt_tws_connect_status()) {
|
||||
//交替闪进sniff同步
|
||||
if (led_mode == PWM_LED0_LED1_FAST_FLASH) {
|
||||
if ((slot % ((CFG_DOUBLE_FAST_FLASH_FREQ * 1000) / 625)) < 800) {
|
||||
led_sniff_mode_double_display((slot / ((CFG_DOUBLE_FAST_FLASH_FREQ * 1000) / 625)) & BIT(0));
|
||||
}
|
||||
} else if (led_mode == PWM_LED0_LED1_SLOW_FLASH) {
|
||||
if ((slot % ((CFG_DOUBLE_SLOW_FLASH_FREQ * 1000) / 625)) < 800) {
|
||||
led_sniff_mode_double_display((slot / ((CFG_DOUBLE_SLOW_FLASH_FREQ * 1000) / 625)) & BIT(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
/* if (get_bt_tws_connect_status()) { */
|
||||
#if defined CFG_LED_MODE && (CFG_LED_MODE == CFG_LED_SOFT_MODE)
|
||||
led_timer_del();
|
||||
#endif
|
||||
if (is_led_module_on()) {
|
||||
led_module_off();
|
||||
}
|
||||
if ((slot % (1600 * 5)) < 800) { //一个slot = 0.625ms 1600*0.625 = 1s
|
||||
led_module_on();
|
||||
}
|
||||
/* } else { */
|
||||
|
||||
/* } */
|
||||
}
|
||||
#else
|
||||
|
||||
__attribute__((weak))
|
||||
int get_bt_tws_connect_status()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,583 @@
|
||||
#include "app_config.h"
|
||||
#include "user_cfg.h"
|
||||
#include "fs.h"
|
||||
#include "string.h"
|
||||
#include "system/includes.h"
|
||||
#include "vm.h"
|
||||
#include "btcontroller_config.h"
|
||||
#include "app_main.h"
|
||||
#include "media/includes.h"
|
||||
#include "audio_config.h"
|
||||
#include "asm/pwm_led.h"
|
||||
#include "aec_user.h"
|
||||
#include "app_power_manage.h"
|
||||
|
||||
#define LOG_TAG_CONST USER_CFG
|
||||
#define LOG_TAG "[USER_CFG]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
#define LOG_DUMP_ENABLE
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
void lp_winsize_init(struct lp_ws_t *lp);
|
||||
void bt_max_pwr_set(u8 pwr, u8 pg_pwr, u8 iq_pwr, u8 ble_pwr);
|
||||
void app_set_sys_vol(s16 vol_l, s16 vol_r);
|
||||
|
||||
BT_CONFIG bt_cfg = {
|
||||
.edr_name = {'Y', 'L', '-', 'B', 'R', '3', '0'},
|
||||
.mac_addr = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
|
||||
.tws_local_addr = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
|
||||
.rf_power = 10,
|
||||
.dac_analog_gain = 25,
|
||||
.mic_analog_gain = 7,
|
||||
.tws_device_indicate = 0x6688,
|
||||
};
|
||||
|
||||
|
||||
AUDIO_CONFIG audio_cfg = {
|
||||
.max_sys_vol = SYS_MAX_VOL,
|
||||
.default_vol = SYS_DEFAULT_VOL,
|
||||
.tone_vol = SYS_DEFAULT_TONE_VOL,
|
||||
};
|
||||
|
||||
//======================================================================================//
|
||||
// BTIF配置项表 //
|
||||
// 参数1: 配置项名字 //
|
||||
// 参数2: 配置项需要多少个byte存储 //
|
||||
// 说明: 配置项ID注册到该表后该配置项将读写于BTIF区域, 其它没有注册到该表 //
|
||||
// 的配置项则默认读写于VM区域. //
|
||||
//======================================================================================//
|
||||
const struct btif_item btif_table[] = {
|
||||
// item id len //
|
||||
{CFG_BT_MAC_ADDR, 6 },
|
||||
{CFG_BT_FRE_OFFSET, 6 }, //测试盒矫正频偏值
|
||||
//{CFG_DAC_DTB, 2 },
|
||||
//{CFG_MC_BIAS, 1 },
|
||||
{0, 0 }, //reserved cfg
|
||||
};
|
||||
|
||||
//============================= VM 区域空间最大值 ======================================//
|
||||
//以下宏在app_cfg中配置:
|
||||
const int vm_max_page_align_size_config = VM_MAX_PAGE_ALIGN_SIZE_CONFIG; //page对齐vm管理空间最大值配置
|
||||
const int vm_max_sector_align_size_config = VM_MAX_SECTOR_ALIGN_SIZE_CONFIG; //sector对齐vm管理空间最大值配置
|
||||
//======================================================================================//
|
||||
|
||||
struct lp_ws_t lp_winsize = {
|
||||
.lrc_ws_inc = 480, //260
|
||||
.lrc_ws_init = 160,
|
||||
.bt_osc_ws_inc = 100,
|
||||
.bt_osc_ws_init = 140,
|
||||
.osc_change_mode = 0,
|
||||
};
|
||||
|
||||
u16 bt_get_tws_device_indicate(u8 *tws_device_indicate)
|
||||
{
|
||||
return bt_cfg.tws_device_indicate;
|
||||
}
|
||||
|
||||
const u8 *bt_get_mac_addr()
|
||||
{
|
||||
return bt_cfg.mac_addr;
|
||||
}
|
||||
|
||||
void bt_update_mac_addr(u8 *addr)
|
||||
{
|
||||
memcpy(bt_cfg.mac_addr, addr, 6);
|
||||
}
|
||||
|
||||
static u8 bt_mac_addr_for_testbox[6] = {0};
|
||||
void bt_get_vm_mac_addr(u8 *addr)
|
||||
{
|
||||
#if 0
|
||||
//中断不能调用syscfg_read;
|
||||
int ret = 0;
|
||||
|
||||
ret = syscfg_read(CFG_BT_MAC_ADDR, addr, 6);
|
||||
if ((ret != 6)) {
|
||||
syscfg_write(CFG_BT_MAC_ADDR, addr, 6);
|
||||
}
|
||||
#else
|
||||
|
||||
memcpy(addr, bt_mac_addr_for_testbox, 6);
|
||||
#endif
|
||||
}
|
||||
|
||||
void bt_get_tws_local_addr(u8 *addr)
|
||||
{
|
||||
memcpy(addr, bt_cfg.tws_local_addr, 6);
|
||||
}
|
||||
|
||||
const char *sdk_version_info_get(void)
|
||||
{
|
||||
extern u32 __VERSION_BEGIN;
|
||||
char *version_str = ((char *)&__VERSION_BEGIN) + 4;
|
||||
|
||||
return version_str;
|
||||
}
|
||||
|
||||
const char *bt_get_local_name()
|
||||
{
|
||||
return (const char *)(bt_cfg.edr_name);
|
||||
}
|
||||
|
||||
const char *bt_get_pin_code()
|
||||
{
|
||||
return "0000";
|
||||
}
|
||||
|
||||
extern STATUS_CONFIG status_config;
|
||||
extern struct charge_platform_data charge_data;
|
||||
/* extern struct dac_platform_data dac_data; */
|
||||
extern struct adkey_platform_data adkey_data;
|
||||
extern struct led_platform_data pwm_led_data;
|
||||
extern struct adc_platform_data adc_data;
|
||||
|
||||
extern u8 key_table[KEY_EVENT_MAX][KEY_NUM_MAX];
|
||||
|
||||
u8 get_max_sys_vol(void)
|
||||
{
|
||||
return (audio_cfg.max_sys_vol);
|
||||
}
|
||||
|
||||
u8 get_tone_vol(void)
|
||||
{
|
||||
if (!audio_cfg.tone_vol) {
|
||||
return (get_max_sys_vol());
|
||||
}
|
||||
if (audio_cfg.tone_vol > get_max_sys_vol()) {
|
||||
return (get_max_sys_vol());
|
||||
}
|
||||
|
||||
return (audio_cfg.tone_vol);
|
||||
}
|
||||
|
||||
#define USE_CONFIG_BIN_FILE 0
|
||||
|
||||
#define USE_CONFIG_STATUS_SETTING 1 //状态设置,包括灯状态和提示音
|
||||
#define USE_CONFIG_AUDIO_SETTING USE_CONFIG_BIN_FILE //音频设置
|
||||
#define USE_CONFIG_CHARGE_SETTING USE_CONFIG_BIN_FILE //充电设置
|
||||
#define USE_CONFIG_KEY_SETTING USE_CONFIG_BIN_FILE //按键消息设置
|
||||
#define USE_CONFIG_MIC_TYPE_SETTING USE_CONFIG_BIN_FILE //MIC类型设置
|
||||
#define USE_CONFIG_LOWPOWER_V_SETTING USE_CONFIG_BIN_FILE //低电提示设置
|
||||
#define USE_CONFIG_AUTO_OFF_SETTING USE_CONFIG_BIN_FILE //自动关机时间设置
|
||||
#define USE_CONFIG_VOL_SETTING 1 //音量表读配置
|
||||
|
||||
__attribute__((weak))
|
||||
void get_config_mic_gain(u8 mic_gain0, u8 mic_gain1, u8 mic_gain2)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/*更加mic通道值获取使用的第几个mic*/
|
||||
u8 get_mic_num(u8 bit)
|
||||
{
|
||||
u8 i = 0;
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (bit & 0x1) {
|
||||
return i;
|
||||
}
|
||||
bit >>= 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
__BANK_INIT_ENTRY
|
||||
void cfg_file_parse(u8 idx)
|
||||
{
|
||||
u8 tmp[128] = {0};
|
||||
int ret = 0;
|
||||
|
||||
memset(tmp, 0x00, sizeof(tmp));
|
||||
|
||||
/*************************************************************************/
|
||||
/* CFG READ IN cfg_tools.bin */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
//-----------------------------CFG_BT_NAME--------------------------------------//
|
||||
ret = syscfg_read(CFG_BT_NAME, tmp, 32);
|
||||
if (ret < 0) {
|
||||
log_info("read bt name err");
|
||||
} else if (ret >= LOCAL_NAME_LEN) {
|
||||
memset(bt_cfg.edr_name, 0x00, LOCAL_NAME_LEN);
|
||||
memcpy(bt_cfg.edr_name, tmp, LOCAL_NAME_LEN);
|
||||
bt_cfg.edr_name[LOCAL_NAME_LEN - 1] = 0;
|
||||
} else {
|
||||
memset(bt_cfg.edr_name, 0x00, LOCAL_NAME_LEN);
|
||||
memcpy(bt_cfg.edr_name, tmp, ret);
|
||||
}
|
||||
/* g_printf("bt name config:%s", bt_cfg.edr_name); */
|
||||
log_info("bt name config:%s", bt_cfg.edr_name);
|
||||
|
||||
//-----------------------------CFG_TWS_PAIR_CODE_ID----------------------------//
|
||||
ret = syscfg_read(CFG_TWS_PAIR_CODE_ID, &bt_cfg.tws_device_indicate, 2);
|
||||
if (ret < 0) {
|
||||
log_debug("read pair code err");
|
||||
bt_cfg.tws_device_indicate = 0x8888;
|
||||
}
|
||||
/* g_printf("tws pair code config:"); */
|
||||
log_info("tws pair code config:");
|
||||
log_info_hexdump(&bt_cfg.tws_device_indicate, 2);
|
||||
|
||||
//-----------------------------CFG_BT_RF_POWER_ID----------------------------//
|
||||
ret = syscfg_read(CFG_BT_RF_POWER_ID, &app_var.rf_power, 1);
|
||||
if (ret < 0) {
|
||||
log_debug("read rf err");
|
||||
app_var.rf_power = 10;
|
||||
}
|
||||
bt_max_pwr_set(app_var.rf_power, 5, 8, 9);//last is ble tx_pwer(0~9)
|
||||
/* g_printf("rf config:%d\n", app_var.rf_power); */
|
||||
log_info("rf config:%d\n", app_var.rf_power);
|
||||
|
||||
//-----------------------------CFG_AEC_ID------------------------------------//
|
||||
#if TCFG_AUDIO_TRIPLE_MIC_ENABLE
|
||||
log_info("3mic config:");
|
||||
AEC_TMS_CONFIG aec;
|
||||
ret = syscfg_read(CFG_TMS_DNS_ID, &aec, sizeof(aec));
|
||||
#elif TCFG_AUDIO_DUAL_MIC_ENABLE
|
||||
#if ((defined TCFG_AUDIO_DMS_SEL) && (TCFG_AUDIO_DMS_SEL == DMS_FLEXIBLE))
|
||||
#if(TCFG_AUDIO_CVP_NS_MODE == CVP_ANS_MODE)
|
||||
log_info("dms_flexible config:");/*双mic话务耳机降噪*/
|
||||
DMS_FLEXIBLE_CONFIG aec;
|
||||
ret = syscfg_read(CFG_DMS_FLEXIBLE_ID, &aec, sizeof(aec));
|
||||
#else /*DMS_DNS*/
|
||||
log_info("dms_dns_flexible config:");/*双mic话务耳机神经网络降噪*/
|
||||
DMS_FLEXIBLE_CONFIG aec;
|
||||
ret = syscfg_read(CFG_DMS_DNS_FLEXIBLE_ID, &aec, sizeof(aec));
|
||||
#endif/*TCFG_AUDIO_CVP_NS_MODE*/
|
||||
#else /*TCFG_AUDIO_DMS_SEL == DMS_NORMAL*/
|
||||
#if(TCFG_AUDIO_CVP_NS_MODE == CVP_ANS_MODE)
|
||||
log_info("dms_ans config:");/*双mic传统降噪*/
|
||||
AEC_DMS_CONFIG aec;
|
||||
ret = syscfg_read(CFG_DMS_ID, &aec, sizeof(aec));
|
||||
#else /*DMS_DNS*/
|
||||
log_info("dms_dns config:");/*双mic神经网络降噪*/
|
||||
AEC_DMS_CONFIG aec;
|
||||
ret = syscfg_read(CFG_DMS_DNS_ID, &aec, sizeof(aec));
|
||||
#endif/*TCFG_AUDIO_CVP_NS_MODE*/
|
||||
#if TCFG_AUDIO_MIC_ARRAY_TRIM_ENABLE
|
||||
app_var.enc_degradation = aec.target_signal_degradation;
|
||||
#endif /*TCFG_AUDIO_MIC_ARRAY_TRIM_ENABLE*/
|
||||
#endif/*TCFG_AUDIO_DMS_SEL*/
|
||||
#else /*single mic*/
|
||||
AEC_CONFIG aec;
|
||||
#if(TCFG_AUDIO_CVP_NS_MODE == CVP_ANS_MODE)
|
||||
log_info("sms_ans config:");
|
||||
ret = syscfg_read(CFG_AEC_ID, &aec, sizeof(aec));
|
||||
#else /*SMS_DNS*/
|
||||
log_info("sms_dns config:");
|
||||
ret = syscfg_read(CFG_SMS_DNS_ID, &aec, sizeof(aec));
|
||||
#endif/*TCFG_AUDIO_CVP_NS_MODE*/
|
||||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||||
//log_info("ret:%d,aec_cfg size:%d\n",ret,sizeof(aec));
|
||||
if (ret == sizeof(aec)) {
|
||||
log_info("aec cfg read succ\n");
|
||||
log_info_hexdump(&aec, sizeof(aec));
|
||||
|
||||
app_var.aec_mic_gain = aec.mic_again;
|
||||
app_var.aec_mic1_gain = aec.mic_again;
|
||||
app_var.aec_mic2_gain = aec.mic_again;
|
||||
app_var.aec_mic3_gain = aec.mic_again;
|
||||
#if TCFG_AUDIO_DUAL_MIC_ENABLE
|
||||
#if ((defined TCFG_AUDIO_DMS_SEL) && (TCFG_AUDIO_DMS_SEL == DMS_FLEXIBLE))
|
||||
app_var.aec_mic1_gain = aec.mic1_again;
|
||||
#endif/*TCFG_AUDIO_DMS_SEL*/
|
||||
#endif/*TCFG_AUDIO_DUAL_MIC_ENABLE*/
|
||||
get_config_mic_gain(app_var.aec_mic_gain, app_var.aec_mic1_gain, app_var.aec_mic1_gain);
|
||||
|
||||
/*3麦增益设置*/
|
||||
#if TCFG_AUDIO_TRIPLE_MIC_ENABLE
|
||||
app_var.talk_mic_ch = aec.talk_mic_ch;
|
||||
app_var.talk_ref_mic_ch = aec.talk_ref_mic_ch;
|
||||
app_var.talk_fb_mic_ch = aec.talk_fb_mic_ch;
|
||||
printf("3 mic ch sel , talk : %d, ref : %d, fb : %d", app_var.talk_mic_ch, app_var.talk_ref_mic_ch, app_var.talk_fb_mic_ch);
|
||||
|
||||
u8 gain[4] = {0};
|
||||
gain[get_mic_num(aec.talk_mic_ch)] = aec.mic_again;
|
||||
gain[get_mic_num(aec.talk_ref_mic_ch)] = aec.mic_again;
|
||||
gain[get_mic_num(aec.talk_fb_mic_ch)] = aec.fb_mic_again;
|
||||
app_var.aec_mic_gain = gain[0];
|
||||
app_var.aec_mic1_gain = gain[1];
|
||||
app_var.aec_mic2_gain = gain[2];
|
||||
app_var.aec_mic3_gain = gain[3];
|
||||
#endif
|
||||
|
||||
app_var.aec_dac_gain = aec.dac_again;
|
||||
#if AEC_READ_CONFIG
|
||||
#ifdef CONFIG_MEDIA_ORIGIN_ENABLE
|
||||
aec_cfg_fill(&aec);
|
||||
#endif/*CONFIG_MEDIA_ORIGIN_ENABLE*/
|
||||
#endif/*AEC_READ_CONFIG*/
|
||||
} else {
|
||||
log_info("aec cfg read err ret: %d, aec : %d,use default value\n", ret, sizeof(aec));
|
||||
app_var.talk_mic_ch = 1;
|
||||
app_var.talk_ref_mic_ch = 2;
|
||||
app_var.talk_fb_mic_ch = 4;
|
||||
|
||||
app_var.aec_mic_gain = 6;
|
||||
app_var.aec_mic1_gain = 6;
|
||||
app_var.aec_mic2_gain = 1;
|
||||
app_var.aec_mic3_gain = 1;
|
||||
app_var.aec_dac_gain = 12;/*初始化默认值要注意不能大于芯片支持最大模拟音量*/
|
||||
}
|
||||
log_info("CVP_cfg Mic0_gain:%d Mic1_gain:%d Mic2_gain:%d Mic3_gain:%d DAC_Gain:%d",
|
||||
app_var.aec_mic_gain, app_var.aec_mic1_gain, app_var.aec_mic2_gain, app_var.aec_mic3_gain, app_var.aec_dac_gain);
|
||||
|
||||
//-----------------------------CFG_MIC_ARRAY_TRIM-------------------------------------//
|
||||
#if TCFG_AUDIO_MIC_ARRAY_TRIM_ENABLE
|
||||
|
||||
extern void put_float(double fv);
|
||||
ret = syscfg_read(CFG_MIC_ARRAY_TRIM_EN, (u8 *)(&app_var.audio_mic_array_trim_en), sizeof(app_var.audio_mic_array_trim_en));
|
||||
if (ret != sizeof(app_var.audio_mic_array_trim_en)) {
|
||||
log_info("audio_mic_array_trim_en vm read fail %d, %d!!!", ret, sizeof(app_var.audio_mic_array_trim_en));
|
||||
}
|
||||
ret = syscfg_read(CFG_MIC_ARRAY_DIFF_CMP_VALUE, (u8 *)(&app_var.audio_mic_array_diff_cmp), sizeof(app_var.audio_mic_array_diff_cmp));
|
||||
if (ret != sizeof(app_var.audio_mic_array_diff_cmp)) {
|
||||
log_info("audio_mic_array_diff_cmp vm read fail %d, %d!!!", ret, sizeof(app_var.audio_mic_array_diff_cmp));
|
||||
app_var.audio_mic_array_diff_cmp = 1.0f;
|
||||
}
|
||||
ret = syscfg_read(CFG_MIC_TARGET_DIFF_CMP, (u8 *)(&app_var.audio_mic_cmp), sizeof(audio_mic_cmp_t));
|
||||
if (ret != sizeof(audio_mic_cmp_t)) {
|
||||
log_info("audio_mic_array_diff_cmp vm read fail %d, %d!!!", ret, sizeof(audio_mic_cmp_t));
|
||||
app_var.audio_mic_cmp.talk = 1.0f;
|
||||
app_var.audio_mic_cmp.ff = 1.0f;
|
||||
app_var.audio_mic_cmp.fb = 1.0f;
|
||||
}
|
||||
|
||||
log_info("mic array trim en: %d\n", app_var.audio_mic_array_trim_en);
|
||||
log_info("mic_array_diff_cmp:");
|
||||
put_float(app_var.audio_mic_array_diff_cmp);
|
||||
log_info("mic_cmp-talk:");
|
||||
put_float(app_var.audio_mic_cmp.talk);
|
||||
log_info("mic_cmp-ff:");
|
||||
put_float(app_var.audio_mic_cmp.ff);
|
||||
log_info("mic_cmp-fb:");
|
||||
put_float(app_var.audio_mic_cmp.fb);
|
||||
|
||||
#endif
|
||||
|
||||
//-----------------------------CFG_VOL_LIST-------------------------------------//
|
||||
audio_volume_list_init(USE_CONFIG_VOL_SETTING);
|
||||
|
||||
//-----------------------------CFG_MIC_TYPE_ID------------------------------------//
|
||||
#if USE_CONFIG_MIC_TYPE_SETTING
|
||||
log_info("mic_type_config:");
|
||||
extern int read_mic_type_config(void);
|
||||
read_mic_type_config();
|
||||
|
||||
#endif
|
||||
|
||||
#if TCFG_MC_BIAS_AUTO_ADJUST
|
||||
ret = syscfg_read(CFG_MC_BIAS, &adc_data.mic_bias_res, 1);
|
||||
log_info("mic_bias_res:%d", adc_data.mic_bias_res);
|
||||
if (ret != 1) {
|
||||
log_info("mic_bias_adjust NULL");
|
||||
}
|
||||
u8 mic_ldo_idx;
|
||||
ret = syscfg_read(CFG_MIC_LDO_VSEL, &mic_ldo_idx, 1);
|
||||
if (ret == 1) {
|
||||
adc_data.mic_ldo_vsel = mic_ldo_idx & 0x3;
|
||||
log_info("mic_ldo_vsel:%d,%d\n", adc_data.mic_ldo_vsel, mic_ldo_idx);
|
||||
} else {
|
||||
log_info("mic_ldo_vsel_adjust NULL\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
#if USE_CONFIG_STATUS_SETTING
|
||||
/* g_printf("status_config:"); */
|
||||
log_info("status_config:");
|
||||
STATUS_CONFIG *status = (STATUS_CONFIG *)tmp;
|
||||
ret = syscfg_read(CFG_UI_TONE_STATUS_ID, status, sizeof(STATUS_CONFIG));
|
||||
if (ret > 0) {
|
||||
memcpy((u8 *)&status_config, (u8 *)status, sizeof(STATUS_CONFIG));
|
||||
log_info_hexdump(&status_config, sizeof(STATUS_CONFIG));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if USE_CONFIG_AUDIO_SETTING
|
||||
/* g_printf("app audio_config:"); */
|
||||
log_info("app audio_config:");
|
||||
ret = syscfg_read(CFG_AUDIO_ID, (u8 *)&audio_cfg, sizeof(AUDIO_CONFIG));
|
||||
if (ret > 0) {
|
||||
log_info_hexdump((u8 *)&audio_cfg, sizeof(AUDIO_CONFIG));
|
||||
#else
|
||||
{
|
||||
#endif
|
||||
/* dac_data.max_ana_vol = audio_cfg.max_sys_vol; */
|
||||
/* if (dac_data.max_ana_vol > 30) { */
|
||||
/* dac_data.max_ana_vol = 30; */
|
||||
/* } */
|
||||
|
||||
u8 default_volume = audio_cfg.default_vol;
|
||||
s8 music_volume = -1;
|
||||
#if SYS_DEFAULT_VOL
|
||||
default_volume = audio_cfg.default_vol;
|
||||
#else
|
||||
syscfg_read(CFG_SYS_VOL, &default_volume, 1);
|
||||
ret = syscfg_read(CFG_MUSIC_VOL, &music_volume, 1);
|
||||
if (ret < 0) {
|
||||
music_volume = -1;
|
||||
}
|
||||
#endif
|
||||
if (default_volume > audio_cfg.max_sys_vol) {
|
||||
default_volume = audio_cfg.max_sys_vol;
|
||||
}
|
||||
if (default_volume == 0) {
|
||||
default_volume = audio_cfg.max_sys_vol / 2;
|
||||
}
|
||||
|
||||
app_var.music_volume = music_volume == -1 ? default_volume : music_volume;
|
||||
app_var.wtone_volume = audio_cfg.tone_vol;
|
||||
#if TCFG_CALL_USE_DIGITAL_VOLUME
|
||||
app_var.call_volume = 15;
|
||||
#else
|
||||
app_var.call_volume = app_var.aec_dac_gain;
|
||||
#endif
|
||||
app_var.opid_play_vol_sync = default_volume * 127 / audio_cfg.max_sys_vol;
|
||||
|
||||
log_info("max vol:%d default vol:%d tone vol:%d", audio_cfg.max_sys_vol, default_volume, audio_cfg.tone_vol);
|
||||
}
|
||||
|
||||
#if (USE_CONFIG_CHARGE_SETTING) && (TCFG_CHARGE_ENABLE)
|
||||
/* g_printf("app charge config:"); */
|
||||
log_info("app charge config:");
|
||||
CHARGE_CONFIG *charge = (CHARGE_CONFIG *)tmp;
|
||||
ret = syscfg_read(CFG_CHARGE_ID, charge, sizeof(CHARGE_CONFIG));
|
||||
if (ret > 0) {
|
||||
log_info_hexdump(charge, sizeof(CHARGE_CONFIG));
|
||||
log_info("sw:%d poweron_en:%d full_v:%d full_mA:%d charge_mA:%d",
|
||||
charge->sw, charge->poweron_en, charge->full_v, charge->full_c, charge->charge_c);
|
||||
memcpy((u8 *)&charge_data, (u8 *)charge, sizeof(CHARGE_CONFIG));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (USE_CONFIG_KEY_SETTING) && (TCFG_ADKEY_ENABLE || TCFG_IOKEY_ENABLE)
|
||||
/* g_printf("app key config:"); */
|
||||
log_info("app key config:");
|
||||
KEY_OP *key_msg = (KEY_OP *)tmp;
|
||||
ret = syscfg_read(CFG_KEY_MSG_ID, key_msg, sizeof(KEY_OP) * KEY_NUM_MAX);
|
||||
if (ret > 0) {
|
||||
log_info_hexdump(key_msg, sizeof(KEY_OP) * KEY_NUM);
|
||||
memcpy(key_table, key_msg, sizeof(KEY_OP) * KEY_NUM);
|
||||
}
|
||||
|
||||
log_info("key_msg:");
|
||||
log_info_hexdump((u8 *)key_table, KEY_EVENT_MAX * KEY_NUM_MAX);
|
||||
#endif
|
||||
|
||||
|
||||
#if USE_CONFIG_LOWPOWER_V_SETTING
|
||||
/* g_printf("auto low power config:"); */
|
||||
log_info("auto low power config:");
|
||||
AUTO_LOWPOWER_V_CONFIG auto_lowpower;
|
||||
ret = syscfg_read(CFG_LOWPOWER_V_ID, &auto_lowpower, sizeof(AUTO_LOWPOWER_V_CONFIG));
|
||||
if (ret > 0) {
|
||||
app_var.warning_tone_v = auto_lowpower.warning_tone_v;
|
||||
app_var.poweroff_tone_v = auto_lowpower.poweroff_tone_v;
|
||||
}
|
||||
log_info("warning_tone_v:%d poweroff_tone_v:%d", app_var.warning_tone_v, app_var.poweroff_tone_v);
|
||||
#else
|
||||
app_var.warning_tone_v = LOW_POWER_WARN_VAL;
|
||||
app_var.poweroff_tone_v = LOW_POWER_OFF_VAL;
|
||||
log_info("warning_tone_v:%d poweroff_tone_v:%d", app_var.warning_tone_v, app_var.poweroff_tone_v);
|
||||
#endif
|
||||
|
||||
#if USE_CONFIG_AUTO_OFF_SETTING
|
||||
/* g_printf("auto off time config:"); */
|
||||
log_info("auto off time config:");
|
||||
AUTO_OFF_TIME_CONFIG auto_off_time;
|
||||
ret = syscfg_read(CFG_AUTO_OFF_TIME_ID, &auto_off_time, sizeof(AUTO_OFF_TIME_CONFIG));
|
||||
if (ret > 0) {
|
||||
app_var.auto_off_time = auto_off_time.auto_off_time * 60;
|
||||
}
|
||||
log_info("auto_off_time:%d", app_var.auto_off_time);
|
||||
#else
|
||||
app_var.auto_off_time = TCFG_AUTO_SHUT_DOWN_TIME;
|
||||
log_info("auto_off_time:%d", app_var.auto_off_time);
|
||||
#endif
|
||||
|
||||
/*************************************************************************/
|
||||
/* CFG READ IN VM */
|
||||
/*************************************************************************/
|
||||
u8 mac_buf[6];
|
||||
u8 mac_buf_tmp[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
||||
u8 mac_buf_tmp2[6] = {0, 0, 0, 0, 0, 0};
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
int len = syscfg_read(CFG_TWS_LOCAL_ADDR, bt_cfg.tws_local_addr, 6);
|
||||
if (len != 6) {
|
||||
get_random_number(bt_cfg.tws_local_addr, 6);
|
||||
syscfg_write(CFG_TWS_LOCAL_ADDR, bt_cfg.tws_local_addr, 6);
|
||||
}
|
||||
log_debug("tws_local_mac:");
|
||||
log_info_hexdump(bt_cfg.tws_local_addr, sizeof(bt_cfg.tws_local_addr));
|
||||
|
||||
ret = syscfg_read(CFG_TWS_COMMON_ADDR, mac_buf, 6);
|
||||
if (ret != 6 || !memcmp(mac_buf, mac_buf_tmp, 6))
|
||||
#endif
|
||||
do {
|
||||
ret = syscfg_read(CFG_BT_MAC_ADDR, mac_buf, 6);
|
||||
if ((ret != 6) || !memcmp(mac_buf, mac_buf_tmp, 6) || !memcmp(mac_buf, mac_buf_tmp2, 6)) {
|
||||
get_random_number(mac_buf, 6);
|
||||
syscfg_write(CFG_BT_MAC_ADDR, mac_buf, 6);
|
||||
}
|
||||
} while (0);
|
||||
|
||||
|
||||
syscfg_read(CFG_BT_MAC_ADDR, bt_mac_addr_for_testbox, 6);
|
||||
if (!memcmp(bt_mac_addr_for_testbox, mac_buf_tmp, 6)) {
|
||||
get_random_number(bt_mac_addr_for_testbox, 6);
|
||||
syscfg_write(CFG_BT_MAC_ADDR, bt_mac_addr_for_testbox, 6);
|
||||
log_info(">>>init mac addr!!!\n");
|
||||
}
|
||||
|
||||
log_info("mac:");
|
||||
log_info_hexdump(mac_buf, sizeof(mac_buf));
|
||||
memcpy(bt_cfg.mac_addr, mac_buf, 6);
|
||||
|
||||
#if (CONFIG_BT_MODE != BT_NORMAL)
|
||||
const u8 dut_name[] = "AC693x_DUT";
|
||||
const u8 dut_addr[6] = {0x12, 0x34, 0x56, 0x56, 0x34, 0x12};
|
||||
memcpy(bt_cfg.edr_name, dut_name, sizeof(dut_name));
|
||||
memcpy(bt_cfg.mac_addr, dut_addr, 6);
|
||||
#endif
|
||||
|
||||
/*************************************************************************/
|
||||
/* CFG READ IN isd_config.ini */
|
||||
/*************************************************************************/
|
||||
LRC_CONFIG lrc_cfg;
|
||||
ret = syscfg_read(CFG_LRC_ID, &lrc_cfg, sizeof(LRC_CONFIG));
|
||||
if (ret > 0) {
|
||||
log_info("lrc cfg:");
|
||||
log_info_hexdump(&lrc_cfg, sizeof(LRC_CONFIG));
|
||||
lp_winsize.lrc_ws_inc = lrc_cfg.lrc_ws_inc;
|
||||
lp_winsize.lrc_ws_init = lrc_cfg.lrc_ws_init;
|
||||
lp_winsize.bt_osc_ws_inc = lrc_cfg.btosc_ws_inc;
|
||||
lp_winsize.bt_osc_ws_init = lrc_cfg.btosc_ws_init;
|
||||
lp_winsize.osc_change_mode = lrc_cfg.lrc_change_mode;
|
||||
}
|
||||
/* printf("%d %d %d ",lp_winsize.lrc_ws_inc,lp_winsize.lrc_ws_init,lp_winsize.osc_change_mode); */
|
||||
lp_winsize_init(&lp_winsize);
|
||||
}
|
||||
|
||||
extern void lmp_hci_write_local_name(const char *name);
|
||||
int bt_modify_name(u8 *new_name)
|
||||
{
|
||||
u8 new_len = strlen(new_name);
|
||||
|
||||
if (new_len >= LOCAL_NAME_LEN) {
|
||||
new_name[LOCAL_NAME_LEN - 1] = 0;
|
||||
}
|
||||
|
||||
if (strcmp(new_name, bt_cfg.edr_name)) {
|
||||
syscfg_write(CFG_BT_NAME, new_name, LOCAL_NAME_LEN);
|
||||
memcpy(bt_cfg.edr_name, new_name, LOCAL_NAME_LEN);
|
||||
lmp_hci_write_local_name(bt_get_local_name());
|
||||
log_info("mdy_name sucess\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#include "system/includes.h"
|
||||
#include "generic/log.h"
|
||||
|
||||
extern char __VERSION_BEGIN[];
|
||||
extern char __VERSION_END[];
|
||||
|
||||
_INLINE_
|
||||
int app_version_check()
|
||||
{
|
||||
/*lib_version_check();*/
|
||||
|
||||
char *version;
|
||||
|
||||
puts("=================Version===============\n");
|
||||
for (version = __VERSION_BEGIN; version < __VERSION_END;) {
|
||||
version += 4;
|
||||
printf("%s\n", version);
|
||||
version += strlen(version) + 1;
|
||||
}
|
||||
puts("=======================================\n");
|
||||
|
||||
/*#ifdef CONFIG_FATFS_ENBALE
|
||||
VERSION_CHECK(fatfs, FATFS_VERSION);
|
||||
#endif
|
||||
|
||||
#ifdef SDFILE_VERSION
|
||||
VERSION_CHECK(sdfile, SDFILE_VERSION);
|
||||
#endif*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
#include "typedef.h"
|
||||
#include "app_main.h"
|
||||
#include "app_config.h"
|
||||
#include "vol_sync.h"
|
||||
#include "tone_player.h"
|
||||
#include "app_core.h"
|
||||
|
||||
u8 vol_sys_tab[17] = {0, 2, 3, 4, 6, 8, 10, 11, 12, 14, 16, 18, 19, 20, 22, 23, 25};
|
||||
const u8 vol_sync_tab[17] = {0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 127};
|
||||
|
||||
extern u8 get_max_sys_vol(void);
|
||||
extern bool get_esco_busy_flag(void);
|
||||
|
||||
void vol_sys_tab_init(void)
|
||||
{
|
||||
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
|
||||
#if 1
|
||||
u8 i = 0;
|
||||
u8 max_vol = get_max_sys_vol();
|
||||
for (i = 0; i < 17; i++) {
|
||||
vol_sys_tab[i] = i * max_vol / 16;
|
||||
}
|
||||
#else
|
||||
u8 i = 0;
|
||||
u8 max_vol = get_max_sys_vol();
|
||||
vol_sys_tab[0] = 0;
|
||||
|
||||
//最大音量<16,补最大值
|
||||
if (max_vol <= 16) {
|
||||
for (i = 1; i <= max_vol; i++) {
|
||||
vol_sys_tab[i] = i;
|
||||
}
|
||||
for (; i < 17; i++) {
|
||||
vol_sys_tab[i] = max_vol;
|
||||
}
|
||||
} else {
|
||||
u8 j = max_vol - 16;
|
||||
u8 k = 1;
|
||||
for (i = 1; i <= max_vol; i++) {
|
||||
/* g_printf("i=%d j=%d k=%d",i,j,k); */
|
||||
if (i % 2) {
|
||||
} else {
|
||||
//忽略多余的级数
|
||||
if (j > 0) {
|
||||
j--;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (k < 17) {
|
||||
vol_sys_tab[k] = i;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
|
||||
vol_sys_tab[16] = max_vol;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
for (i = 0; i < 17; i++) {
|
||||
g_printf("[%d]:%d ", i, vol_sys_tab[i]);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
}
|
||||
|
||||
//注册给库的回调函数,用户手机设置设备音量
|
||||
void set_music_device_volume(int volume)
|
||||
{
|
||||
r_printf("set_music_device_volume=%d\n", volume);
|
||||
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
s16 music_volume;
|
||||
|
||||
#if CONFIG_BT_BACKGROUND_ENABLE
|
||||
struct application *app = get_current_app();
|
||||
if (app->name != "earphone") {
|
||||
app_var.bt_volume = ((volume + 1) * 16) / 127;
|
||||
r_printf("set_app_var.bt_volume=%d\n", app_var.bt_volume);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
//音量同步最大是127,请计数比例
|
||||
if (volume > 127) {
|
||||
/*log_info("vol %d invalid\n", volume);*/
|
||||
#if TCFG_VOL_RESET_WHEN_NO_SUPPORT_VOL_SYNC
|
||||
/*不支持音量同步的设备,默认设置到最大值,可以根据实际需要进行修改。
|
||||
注意如果不是最大值,设备又没有按键可以调音量到最大,则输出也就达不到最大*/
|
||||
music_volume = get_max_sys_vol();
|
||||
log_i("unsupport vol_sync,reset vol:%d\n", music_volume);
|
||||
app_audio_set_volume(APP_AUDIO_STATE_MUSIC, music_volume, 1);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
if (tone_get_status() || get_esco_busy_flag()) {
|
||||
log_i("It's not smart to sync a2dp vol now\n");
|
||||
//app_var.music_volume = vol_sys_tab[(volume + 1) / 8];
|
||||
app_var.music_volume = ((volume + 1) * 16) / 127;
|
||||
return;
|
||||
}
|
||||
|
||||
#if 1
|
||||
/*
|
||||
*0~16,总共17级
|
||||
*这里将手机的0~127的音量值换成实际的dac音量等级
|
||||
*/
|
||||
music_volume = ((volume + 1) * 16) / 127;
|
||||
#else
|
||||
music_volume = vol_sys_tab[(volume + 1) / 8];
|
||||
#endif
|
||||
y_printf("phone_vol:%d,dac_vol:%d", volume, music_volume);
|
||||
app_var.opid_play_vol_sync = vol_sync_tab[(volume + 1) / 8];
|
||||
|
||||
app_audio_set_volume(APP_AUDIO_STATE_MUSIC, music_volume, 1);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
//注册给库的回调函数,用于手机获取当前设备音量
|
||||
int phone_get_device_vol(void)
|
||||
{
|
||||
//音量同步最大是127,请计数比例
|
||||
#if 0
|
||||
return (app_var.sys_vol_l * get_max_sys_vol() / 127) ;
|
||||
#else
|
||||
return app_var.opid_play_vol_sync;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void opid_play_vol_sync_fun(u8 *vol, u8 mode)
|
||||
{
|
||||
#if BT_SUPPORT_MUSIC_VOL_SYNC
|
||||
u8 i = 0;
|
||||
vol_sys_tab[16] = get_max_sys_vol();
|
||||
|
||||
if (*vol == 0) {
|
||||
if (mode) {
|
||||
*vol = vol_sys_tab[1];
|
||||
app_var.opid_play_vol_sync = vol_sync_tab[1];
|
||||
} else {
|
||||
*vol = vol_sys_tab[0];
|
||||
app_var.opid_play_vol_sync = vol_sync_tab[0];
|
||||
}
|
||||
} else if (*vol >= get_max_sys_vol()) {
|
||||
if (mode) {
|
||||
*vol = vol_sys_tab[16];
|
||||
app_var.opid_play_vol_sync = vol_sync_tab[16];
|
||||
} else {
|
||||
*vol = vol_sys_tab[15];
|
||||
app_var.opid_play_vol_sync = vol_sync_tab[15];
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < sizeof(vol_sys_tab); i++) {
|
||||
if (*vol == vol_sys_tab[i]) {
|
||||
if (mode) {
|
||||
app_var.opid_play_vol_sync = vol_sync_tab[i + 1];
|
||||
*vol = vol_sys_tab[i + 1];
|
||||
} else {
|
||||
app_var.opid_play_vol_sync = vol_sync_tab[i - 1];
|
||||
*vol = vol_sys_tab[i - 1];
|
||||
}
|
||||
break;
|
||||
} else if (*vol < vol_sys_tab[i]) {
|
||||
if (mode) {
|
||||
*vol = vol_sys_tab[i + 1];
|
||||
app_var.opid_play_vol_sync = vol_sync_tab[i];
|
||||
} else {
|
||||
*vol = vol_sys_tab[i - 1];
|
||||
app_var.opid_play_vol_sync = vol_sync_tab[i - 1];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user