diff --git a/apps/earphone/board/br28/board_jl701n_demo_global_build_cfg.h b/apps/earphone/board/br28/board_jl701n_demo_global_build_cfg.h index d460b1a..7cf63ad 100644 --- a/apps/earphone/board/br28/board_jl701n_demo_global_build_cfg.h +++ b/apps/earphone/board/br28/board_jl701n_demo_global_build_cfg.h @@ -8,7 +8,7 @@ /* 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_DOUBLE_BANK_ENABLE 0 //单双备份选择(若打开了改宏,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的硬件模块全部关闭) diff --git a/apps/earphone/earphone.c b/apps/earphone/earphone.c index d823fee..feab82d 100644 --- a/apps/earphone/earphone.c +++ b/apps/earphone/earphone.c @@ -20,7 +20,7 @@ #include "pbg_user.h" #include "btstack/bluetooth.h" #include "colorful_lights/colorful_lights.h" - +#if 0 #if TCFG_AUDIO_ANC_ENABLE #include "audio_anc.h" #endif/*TCFG_AUDIO_ANC_ENABLE*/ @@ -2792,3 +2792,4 @@ static int state_machine(struct application *app, enum app_state state, struct i // .state = APP_STA_DESTROY, // }; +#endif \ No newline at end of file diff --git a/apps/earphone/include/app_config.h b/apps/earphone/include/app_config.h index 0c6517f..ff0f07c 100644 --- a/apps/earphone/include/app_config.h +++ b/apps/earphone/include/app_config.h @@ -24,7 +24,7 @@ #define TRANS_DATA_EN 0 #define RCSP_BTMATE_EN 0 #if BLE_WIRELESS_CLIENT_EN == 0 -#define RCSP_ADV_EN 1 // lmx,打开这个,则作为ble从设备 +#define RCSP_ADV_EN 1 #else #define RCSP_ADV_EN 0 #endif diff --git a/apps/earphone/log_config/lib_btstack_config.c b/apps/earphone/log_config/lib_btstack_config.c index 29874cd..6b35c31 100644 --- a/apps/earphone/log_config/lib_btstack_config.c +++ b/apps/earphone/log_config/lib_btstack_config.c @@ -55,7 +55,7 @@ const int config_rcsp_stack_enable = 0; 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角色个数 +const int config_le_gatt_server_num = 1; //支持server角色个数 #elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_WIRELESS_MIC_SERVER) const int config_le_hci_connection_num = 1;//支持同时连接个数 diff --git a/apps/earphone/tone_table.c b/apps/earphone/tone_table.c index f6698d7..3611c31 100644 --- a/apps/earphone/tone_table.c +++ b/apps/earphone/tone_table.c @@ -169,6 +169,7 @@ static const struct sin_param *get_sine_param_by_index(u8 index, u8 *num) __BANK_TONE_ENTRY int tone_play_index(u8 index, u8 preemption) { + return 0; //xtell printf("tone_play_index:%d,preemption:%d", index, preemption); if (index >= IDEX_TONE_NONE) { return 0; @@ -202,6 +203,7 @@ int tone_play_index_no_tws(u8 index, u8 preemption) /* __BANK_TONE_ENTRY */ int tone_play_index_with_callback(u8 index, u8 preemption, void (*user_evt_handler)(void *priv), void *priv) { + return 0; //xtell printf("tone_play_index:%d,preemption:%d", index, preemption); if (index >= IDEX_TONE_NONE) { return 0; diff --git a/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c b/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c index 4a12ca8..7bcc202 100644 --- a/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c +++ b/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c @@ -12,7 +12,7 @@ #include "btctrler/btctrler_task.h" #include "btstack/frame_queque.h" #include "user_cfg.h" -// #include "aec_user.h" +#include "aec_user.h" #include "classic/hci_lmp.h" #include "bt_common.h" #include "bt_ble.h" @@ -21,7 +21,38 @@ #include "btstack/bluetooth.h" #include "colorful_lights/colorful_lights.h" + + +unsigned char xtell_uart_ai_14_bt_connect[5]={0xBB,0xAA,0x0E,0xFB,0xFA}; //蓝牙连接成功, +unsigned char xtell_uart_ai_34_bt_break[5]={0xBB,0xAA,0x22,0xFB,0xFA}; //蓝牙断开连接 +u8 bt_newname =0; +#if TCFG_AUDIO_ANC_ENABLE +#include "audio_anc.h" +#endif/*TCFG_AUDIO_ANC_ENABLE*/ + +#if TCFG_ANC_BOX_ENABLE +#include "app_ancbox.h" +#endif + +#if TCFG_USER_TWS_ENABLE +#include "bt_tws.h" +#endif + +#if TCFG_AUDIO_SPATIAL_EFFECT_ENABLE +#include "spatial_imu_trim.h" +#endif /*TCFG_AUDIO_SPATIAL_EFFECT_ENABLE*/ + +#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV) +#include "include/bt_ble.h" +#endif + +#if TCFG_AUDIO_CVP_DUT_ENABLE +#include "audio_cvp_dut.h" +#endif /*TCFG_AUDIO_CVP_DUT_ENABLE*/ + +#if TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE #include "app_chargestore.h" +#endif #include "jl_kws/jl_kws_api.h" #include "asm/charge.h" @@ -43,20 +74,609 @@ #include "vol_sync.h" #include "bt_background.h" #include "default_event_handler.h" -#include "debug.h" -#include "system/event.h" -#include "../nvs/nvs.h" -#if (JL_EARPHONE_APP_EN) -#include "rcsp_adv_bluetooth.h" -#endif -/////////////////////////////////////////////////////////////////////////////////////////////////// -//宏定义 + +#ifdef CONFIG_BOARD_AISPEECH_VAD_ASR +extern int ais_platform_asr_open(void); +extern void ais_platform_asr_close(void); +#endif /*CONFIG_BOARD_AISPEECH_VAD_ASR*/ + #define LOG_TAG_CONST EARPHONE #define LOG_TAG "[EARPHONE]" #define LOG_ERROR_ENABLE #define LOG_DEBUG_ENABLE -#define xlog_ENABLE +#define LOG_INFO_ENABLE +/* #define LOG_DUMP_ENABLE */ +#define LOG_CLI_ENABLE +#include "debug.h" +#define TIMEOUT_CONN_TIME 60 //超时断开之后回连的时间s +#define POWERON_AUTO_CONN_TIME 12 //开机去回连的时间 +#define TWS_RETRY_CONN_TIMEOUT ((rand32() & BIT(0)) ? 200 : 400) +#define PHONE_DLY_DISCONN_TIME 0//4000 //超时断开,快速连接上不播提示音 + +extern void dac_analog_power_control(u8 en); +extern u8 is_dac_power_off(); +extern u8 get_esco_coder_busy_flag(); +extern void dac_power_off(void); +extern void bredr_fcc_init(u8 mode, u8 fre); +extern void bredr_set_dut_enble(u8 en, u8 phone); +extern int lmp_private_esco_suspend_resume(int flag); +extern void tws_user_sync_call_vol(); +extern void ble_enter_single_carrier_mode(u8 ch_index); +extern int music_player_get_play_status(void); + +/* extern void set_adjust_conn_dac_check(u8 value); */ + +void sys_auto_shut_down_disable(void); +extern void bt_pll_para(u32 osc, u32 sys, u8 low_power, u8 xosc); + +BT_USER_COMM_VAR bt_user_comm_var; +BT_USER_PRIV_VAR bt_user_priv_var; +/*********xtell code */ +extern unsigned char xt_bl_new_name[13]; +extern unsigned char xt_ble_new_name[9]; +/*******end xtell cocde */ + +int phone_call_begin(void *priv); +int phone_call_end(void *priv); +int earphone_a2dp_audio_codec_open(int media_type); +void earphone_a2dp_audio_codec_close(); +u8 bt_audio_is_running(void); +void tws_try_connect_disable(void); +int lmp_private_esco_suspend_resume(int flag); + +u8 hci_standard_connect_check(void); +void ble_adv_enable(u8 enable); +int a2dp_dec_open(int media_type); +int a2dp_dut_dec_open(int media_type); +void a2dp_dec_close(); +int esco_dec_open(void *, u8); +void esco_dec_close(); +void esco_enc_close(); +void __set_sbc_cap_bitpool(u8 sbc_cap_bitpoola); + + +static u16 power_mode_timer = 0; + +u8 init_ok = 0; +u8 get_bt_init_status(void) +{ + return init_ok; +} + +static u8 sniff_out = 0; +u8 get_sniff_out_status() +{ + return sniff_out; +} +void clear_sniff_out_status() +{ + sniff_out = 0; +} + +void earphone_change_pwr_mode(int mode, int msec) +{ +#if TCFG_POWER_MODE_QUIET_ENABLE + if (power_mode_timer) { + sys_timeout_del(power_mode_timer); + power_mode_timer = 0; + } + if (msec == 0) { + power_set_mode(mode); + } else { + power_mode_timer = sys_timeout_add((void *)mode, power_set_mode, msec); + } +#endif +} + + +/*开关可发现可连接的函数接口*/ +void bt_wait_phone_connect_control(u8 enable) +{ +#if TCFG_USER_TWS_ENABLE + return; +#endif + + if (enable && app_var.goto_poweroff_flag) { + return; + } + + if (enable) { + log_info("is_1t2_connection:%d \t total_conn_dev:%d\n", is_1t2_connection(), get_total_connect_dev()); + if (is_1t2_connection()) { + /*达到最大连接数,可发现(0)可连接(0)*/ + user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL); + user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL); + } else { + if (get_total_connect_dev() == 1) { + /*支持连接2台,只连接一台的情况下,可发现(0)可连接(1)*/ + user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL); + user_send_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL); + } else { + /*可发现(1)可连接(1)*/ + EARPHONE_STATE_SET_PAGE_SCAN_ENABLE(); + user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL); + user_send_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL); + } + } + } else { + user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL); + user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL); + } +} + +void bt_send_keypress(u8 key) +{ + user_send_cmd_prepare(USER_CTRL_KEYPRESS, 1, &key); +} + +void bt_send_pair(u8 en) +{ + user_send_cmd_prepare(USER_CTRL_PAIR, 1, &en); +} + +void bt_init_ok_search_index(void) +{ + if (!bt_user_priv_var.auto_connection_counter && get_current_poweron_memory_search_index(bt_user_priv_var.auto_connection_addr)) { + log_info("bt_wait_connect_and_phone_connect_switch\n"); + clear_current_poweron_memory_search_index(1); + bt_user_priv_var.auto_connection_counter = POWERON_AUTO_CONN_TIME * 1000; //8000ms + EARPHONE_STATE_GET_CONNECT_MAC_ADDR(); + } +} + +int bt_wait_connect_and_phone_connect_switch(void *p) +{ + int ret = 0; + int timeout = 0; + s32 wait_timeout; + + if (bt_user_priv_var.auto_connection_counter <= 0) { + bt_user_priv_var.auto_connection_timer = 0; + bt_user_priv_var.auto_connection_counter = 0; + + EARPHONE_STATE_CANCEL_PAGE_SCAN(); + + log_info("auto_connection_counter = 0\n"); + user_send_cmd_prepare(USER_CTRL_PAGE_CANCEL, 0, NULL); + + if (get_current_poweron_memory_search_index(NULL)) { + bt_init_ok_search_index(); + return bt_wait_connect_and_phone_connect_switch(0); + } else { + bt_wait_phone_connect_control(1); + return 0; + } + } + /* log_info(">>>phone_connect_switch=%d\n",bt_user_priv_var.auto_connection_counter ); */ + if ((int)p == 0) { + if (bt_user_priv_var.auto_connection_counter) { + timeout = 5600; + bt_wait_phone_connect_control(0); + user_send_cmd_prepare(USER_CTRL_START_CONNEC_VIA_ADDR, 6, bt_user_priv_var.auto_connection_addr); + ret = 1; + } + } else { + timeout = 400; + user_send_cmd_prepare(USER_CTRL_PAGE_CANCEL, 0, NULL); + bt_wait_phone_connect_control(1); + } + if (bt_user_priv_var.auto_connection_counter) { + bt_user_priv_var.auto_connection_counter -= timeout ; + log_info("do=%d\n", bt_user_priv_var.auto_connection_counter); + } + bt_user_priv_var.auto_connection_timer = sys_timeout_add((void *)(!(int)p), + bt_wait_connect_and_phone_connect_switch, timeout); + + return ret; +} + +void bt_close_page_scan(void *p) +{ + log_info(">>>%s\n", __func__); + bt_wait_phone_connect_control(0); + sys_timer_del(app_var.auto_stop_page_scan_timer); +} + + +extern bool get_esco_busy_flag(); +extern u8 get_cur_battery_level(void); +extern void audio_adc_mic_demo(u8 mic_idx, u8 gain, u8 mic_2_dac); +extern void audio_fast_mode_test(); +extern void audio_adc_mic_demo_close(); +static int bt_get_battery_value() +{ + //取消默认蓝牙定时发送电量给手机,需要更新电量给手机使用USER_CTRL_HFP_CMD_UPDATE_BATTARY命令 + /*电量协议的是0-9个等级,请比例换算*/ + return get_cur_battery_level(); +} + +void bt_fast_test_api(void) +{ + log_info("------------bt_fast_test_api---------\n"); + //进入快速测试模式,用户根据此标志判断测试,如测试按键-开按键音 、测试mic-开扩音 、根据fast_test_mode根据改变led闪烁方式、关闭可发现可连接 + if (bt_user_priv_var.fast_test_mode == 0) { + bt_user_priv_var.fast_test_mode = 1; + audio_fast_mode_test(); + pwm_led_mode_set(PWM_LED_ALL_ON); + } +} + +static void bt_dut_api(void) +{ + log_info("bt in dut \n"); + sys_auto_shut_down_disable(); +#if TCFG_USER_TWS_ENABLE + extern void tws_cancle_all_noconn(); + tws_cancle_all_noconn() ; +#else + sys_timer_del(app_var.auto_stop_page_scan_timer); + extern void bredr_close_all_scan(); + bredr_close_all_scan(); +#endif + + if (bt_user_priv_var.auto_connection_timer) { + sys_timeout_del(bt_user_priv_var.auto_connection_timer); + bt_user_priv_var.auto_connection_timer = 0; + } + +#if TCFG_USER_BLE_ENABLE +#if (CONFIG_BT_MODE == BT_NORMAL) + bt_ble_adv_enable(0); +#endif +#endif +} + +void bit_clr_ie(unsigned char index); +void bt_fix_fre_api(u8 fre) +{ + bt_dut_api(); + + bit_clr_ie(IRQ_BREDR_IDX); + bit_clr_ie(IRQ_BT_CLKN_IDX); + + bredr_fcc_init(BT_FRE, fre); +} + +/*----------------------------------------------------------------------------*/ +/**@brief 蓝牙模式进入定频测试接收发射 + @param mode :0 测试发射 1:测试接收 + mac_addr:测试设置的地址 + fre:定频的频点 0=2402 1=2403 + packet_type:数据包类型 + + #define DH1_1 0 + #define DH3_1 1 + #define DH5_1 2 + #define DH1_2 3 + #define DH3_2 4 + #define DH5_2 5 + + payload:数据包内容 0x0000 0x0055 0x00aa 0x00ff + 0xffff:prbs9 + @return + @note 量产的时候通过串口,发送设置的参数,设置发送接收的参数 + + 关闭定频接收发射测试 + void link_fix_txrx_disable(); + + 更新接收结果 + void bt_updata_fix_rx_result() + +struct link_fix_rx_result { + u32 rx_err_b; //接收到err bit + u32 rx_sum_b; //接收到正确bit + u32 rx_perr_p; //接收到crc 错误 包数 + u32 rx_herr_p; //接收到crc 以外其他错误包数 + u32 rx_invail_p; //接收到crc错误bit太多的包数,丢弃不统计到err bit中 +}; + +*/ + +/*----------------------------------------------------------------------------*/ +void bt_fix_txrx_api(u8 mode, u8 *mac_addr, u8 fre, u8 packet_type, u16 payload) +{ + bt_dut_api(); + local_irq_disable(); + link_fix_txrx_disable(); + if (mode) { + link_fix_rx_enable(mac_addr, fre, packet_type, 0xffff); + } else { + link_fix_tx_enable(mac_addr, fre, packet_type, 0xffff); + } + local_irq_enable(); +} + + +void bt_updata_fix_rx_result() +{ + struct link_fix_rx_result fix_rx_result; + link_fix_rx_update_result(&fix_rx_result); + printf("err_b:%d sum_b:%d perr:%d herr_b:%d invaile:%d \n", + fix_rx_result.rx_err_b, + fix_rx_result.rx_sum_b, + fix_rx_result.rx_perr_p, + fix_rx_result.rx_herr_p, + fix_rx_result.rx_invail_p + ); +} +#if (defined TCFG_USER_RSSI_TEST_EN && TCFG_USER_RSSI_TEST_EN) +extern s8 get_rssi_api(s8 *phone_rssi, s8 *tws_rssi); +static void spp_send_rssi(int slave_rssi) +{ + s8 send_buf[8]; + send_buf[0] = 0xfe; + send_buf[1] = 0xdc; + send_buf[2] = 0x04; + send_buf[3] = 0x02; +#if TCFG_USER_TWS_ENABLE + if (tws_api_get_local_channel() == 'L') { + get_rssi_api(&send_buf[4], &send_buf[6]); + send_buf[5] = (s8)slave_rssi; + } else +#endif + { + get_rssi_api(&send_buf[5], &send_buf[6]); + send_buf[4] = (s8)slave_rssi; + } + send_buf[7] = 0xba; + user_send_cmd_prepare(USER_CTRL_SPP_SEND_DATA, sizeof(send_buf), send_buf); + /* put_buf(send_buf, sizeof(send_buf)); */ + /* printf("get rssi, l:%d, r:%d, tws:%d", send_buf[4], send_buf[5], send_buf[6]); */ +} + +static void app_core_send_rssi(int slave_rssi) +{ + int msg[3]; + + msg[0] = spp_send_rssi; + msg[1] = 1; + msg[2] = slave_rssi; + os_taskq_post_type("app_core", Q_CALLBACK, 3, msg); +} + +#if TCFG_USER_TWS_ENABLE +#define TWS_FUNC_ID_RSSI_SYNC TWS_FUNC_ID('R', 'S', 'S', 'I') + +static void tws_get_rssi_handler(void *_data, u16 len, bool rx) +{ + u8 *data = (u8 *)_data; + + if (rx) { + app_core_send_rssi(data[0]); + } +} + +REGISTER_TWS_FUNC_STUB(tws_get_rssi) = { + .func_id = TWS_FUNC_ID_RSSI_SYNC, + .func = tws_get_rssi_handler, +}; +#endif + +static int spp_get_rssi_handler(u8 *packet, u16 size) +{ + const u8 get_rssi_cmd[] = {0xfe, 0xdc, 0x01, 0x01, 0xba}; + u8 send_cmd_buffer[2]; + if (size == strlen(get_rssi_cmd) && !memcmp(packet, get_rssi_cmd, size)) { +#if TCFG_USER_TWS_ENABLE + if (tws_api_get_tws_state() & TWS_STA_SIBLING_CONNECTED) { + if (tws_api_get_role() == TWS_ROLE_SLAVE) { + get_rssi_api(&send_cmd_buffer[0], &send_cmd_buffer[1]); + tws_api_send_data_to_sibling(send_cmd_buffer, sizeof(send_cmd_buffer), TWS_FUNC_ID_RSSI_SYNC); + } + } else +#endif + { + app_core_send_rssi(-127); + } + return 1; + } + return 0; +} +#endif + + +void spp_data_handler(u8 packet_type, u16 ch, u8 *packet, u16 size) +{ + switch (packet_type) { + case 1: + log_info("spp connect\n"); + break; + case 2: + log_info("spp disconnect\n"); + break; + case 7: + //log_info("spp_rx:"); + //put_buf(packet,size); +#if AEC_DEBUG_ONLINE + aec_debug_online(packet, size); +#endif + +#if (defined TCFG_USER_RSSI_TEST_EN && TCFG_USER_RSSI_TEST_EN) + spp_get_rssi_handler(packet, size); +#endif + break; + } +} + +extern const char *sdk_version_info_get(void); +static u8 *bt_get_sdk_ver_info(u8 *len) +{ + char *p = sdk_version_info_get(); + if (len) { + *len = strlen(p); + } + + log_info("sdk_ver:%s %x\n", p, *len); + return (u8 *)p; +} + +extern void bt_set_tx_power(u8 txpower); +extern void __set_aac_bitrate(u32 bitrate); +extern void user_spp_data_handler(u8 packet_type, u16 ch, u8 *packet, u16 size); +extern void online_spp_init(void); +extern u16 get_vbat_value(void); +extern u8 get_vbat_percent(void); +extern u8 *sdfile_get_burn_code(u8 *len); + +void bredr_handle_register() +{ +#if (USER_SUPPORT_PROFILE_SPP==1) +#if APP_ONLINE_DEBUG + spp_data_deal_handle_register(user_spp_data_handler); + online_spp_init(); +#else + spp_data_deal_handle_register(spp_data_handler); +#endif +#endif + bt_fast_test_handle_register(bt_fast_test_api);//测试盒快速测试接口 +#if BT_SUPPORT_MUSIC_VOL_SYNC + music_vol_change_handle_register(set_music_device_volume, phone_get_device_vol); +#endif +#if BT_SUPPORT_DISPLAY_BAT + get_battery_value_register(bt_get_battery_value); /*电量显示获取电量的接口*/ +#endif + + bt_dut_test_handle_register(bt_dut_api); +} + +extern void __set_support_ldac_flag(bool flag); +extern void lib_make_ble_address(u8 *ble_address, u8 *edr_address); +extern int le_controller_set_mac(void *addr); +void bt_function_select_init() +{ + + /* #if TCFG_LOWEST_POWER_EN */ + void set_qos_value(u8 qos_on_value, u8 qos_off_value); + void set_pure_monitor_eanble_qos(u8 en); + /* set_pure_monitor_eanble_qos(1); */ + /* set_qos_value(5, 15); */ + /* #endif */ + /* set_bt_data_rate_acl_3mbs_mode(1); */ + if (CONFIG_WIFI_DETECT_ENABLE) { + set_bt_afh_classs_enc(1);//report 手机用wifi_detect的频点,不设置用回手机 + } + __set_user_ctrl_conn_num(TCFG_BD_NUM); +#ifdef CONFIG_CPU_BR21 + __set_support_msbc_flag(0); +#else + __set_support_msbc_flag(1); +#endif + + __set_aac_bitrate(131 * 1000); +#if TCFG_BT_SUPPORT_AAC && (!CONFIG_A2DP_GAME_MODE_ENABLE) + /* #if TCFG_BT_SUPPORT_AAC */ + __set_support_aac_flag(1); +#else + __set_support_aac_flag(0); +#endif +#if TCFG_BT_SUPPORT_LDAC && (!CONFIG_A2DP_GAME_MODE_ENABLE) + __set_support_ldac_flag(1); + __set_a2dp_ldac_sampling_freq(LDAC_SAMPLING_FREQ_44100 | LDAC_SAMPLING_FREQ_48000 | LDAC_SAMPLING_FREQ_88200 | LDAC_SAMPLING_FREQ_96000); /* 设置ldac支持采样率,0x20//44.1KHZ,0x10//48KHZ,0x08//88.1KHZ,0x04//96KHZ */ +#else + __set_support_ldac_flag(0); +#endif +#if BT_SUPPORT_DISPLAY_BAT + __bt_set_update_battery_time(60); +#else + __bt_set_update_battery_time(0); +#endif + + __set_simple_pair_flag(0); //xtell + + __set_page_timeout_value(8000); /*回连搜索时间长度设置,可使用该函数注册使用,ms单位,u16*/ + __set_super_timeout_value(8000); /*回连时超时参数设置。ms单位。做主机有效*/ +#if (TCFG_BD_NUM == 2) + __set_auto_conn_device_num(2); +#endif +#if BT_SUPPORT_MUSIC_VOL_SYNC + vol_sys_tab_init(); +#endif + //io_capabilities ; /*0: Display only 1: Display YesNo 2: KeyboardOnly 3: NoInputNoOutput*/ + //authentication_requirements: 0:not protect 1 :protect + __set_simple_pair_param(3, 0, 2); + bt_testbox_ex_info_get_handle_register(TESTBOX_INFO_VBAT_VALUE, get_vbat_value); + bt_testbox_ex_info_get_handle_register(TESTBOX_INFO_VBAT_PERCENT, get_vbat_percent); + bt_testbox_ex_info_get_handle_register(TESTBOX_INFO_BURN_CODE, sdfile_get_burn_code); + bt_testbox_ex_info_get_handle_register(TESTBOX_INFO_SDK_VERSION, bt_get_sdk_ver_info); + +#if TCFG_USER_BLE_ENABLE + { + u8 tmp_ble_addr[6]; +#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV) + /* bt_set_tx_power(9);//ble txpwer level:0~9 */ + memcpy(tmp_ble_addr, (void *)bt_get_mac_addr(), 6); +#else + lib_make_ble_address(tmp_ble_addr, (void *)bt_get_mac_addr()); +#endif // + le_controller_set_mac((void *)tmp_ble_addr); + printf("\n-----edr + ble 's address-----"); + printf_buf((void *)bt_get_mac_addr(), 6); + printf_buf((void *)tmp_ble_addr, 6); + } +#endif // TCFG_USER_BLE_ENABLE + + /* #if (CONFIG_BT_MODE != BT_NORMAL) */ + set_bt_enhanced_power_control(1); + /* #endif */ +//#endif +#if (TCFG_USER_TWS_ENABLE==0) + extern void set_g_need_inc_power(u8 en); + set_g_need_inc_power(1); +#endif +} + +void phone_sync_vol(void) +{ + user_send_cmd_prepare(USER_CTRL_HFP_CALL_SET_VOLUME, 1, &bt_user_priv_var.phone_vol); +} + +/*配置通话时前面丢掉的数据包包数*/ +#define ESCO_DUMP_PACKET_ADJUST 1 /*配置使能*/ +#define ESCO_DUMP_PACKET_DEFAULT 0 +#ifdef CONFIG_NEW_BREDR_ENABLE +#define ESCO_DUMP_PACKET_CALL 60 /*0~0xFF*/ +#else +#define ESCO_DUMP_PACKET_CALL 120 /*0~0xFF*/ +#endif + +static u8 esco_dump_packet = ESCO_DUMP_PACKET_CALL; +#if ESCO_DUMP_PACKET_ADJUST +u8 get_esco_packet_dump(void) +{ + //log_info("esco_dump_packet:%d\n", esco_dump_packet); + return esco_dump_packet; +} +#endif + +/* + * app模式切换 + */ +void task_switch(const char *name, int action) +{ + struct intent it; + struct application *app; + + log_info("app_exit\n"); + + init_intent(&it); + app = get_current_app(); + if (app) { + /* + * 退出当前app, 会执行state_machine()函数中APP_STA_STOP 和 APP_STA_DESTORY + */ + it.name = app->name; + it.action = ACTION_BACK; + start_app(&it); + } + + /* + * 切换到app (name)并执行action分支 + */ + it.name = name; + it.action = action; + start_app(&it); +} #if(USE_DMA_UART_TEST) //使用dm串口测试时不能同时打开 #define MY_SNIFF_EN 0 @@ -64,193 +684,540 @@ #define MY_SNIFF_EN 1 //默认打开 #endif -#define ENABLE_XLOG 1 -#ifdef xlog -#undef xlog -#endif -#if ENABLE_XLOG - #define xlog(format, ...) printf("[XT:%s] " format, __func__, ##__VA_ARGS__) -#else - #define xlog(format, ...) ((void)0) -#endif -// -/////////////////////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////////////////////////// -//变量 -extern u8 init_ok; -extern u8 sniff_out; -unsigned char xtell_bl_state=0; //存放经典蓝牙的连接状态,0断开,1是连接 -u8 bt_newname =0; -unsigned char xt_ble_new_name[9] = "CM-55555"; -static u16 play_poweron_ok_timer_id = 0; - -// -- 初始化标志位 -- -u8 SC7U22_init = 0x10; //六轴是否初始化 -u8 MMC5603nj_init = 0x20; //地磁是否初始化 -u8 BMP280_init = 0x30; //气压计初始化 -// -- 线程id -- -u16 SC7U22_calibration_id; -u16 start_collect_fuc_id; -u16 BLE_send_fuc_id; -u16 rfid_fuc_id; -// -/////////////////////////////////////////////////////////////////////////////////////////////////// -extern int bt_hci_event_handler(struct bt_event *bt); -extern void SC7U22_static_calibration(void); -extern void create_process(u16* pid, const char* name, void *priv, void (*func)(void *priv), u32 msec); -extern void close_process(u16* pid,char* name); -extern void start_collect_fuc(void); -extern void BLE_send_fuc(void); -extern void xtell_ble_central_test_start(void); -/////////////////////////////////////////////////////////////////////////////////////////////////// /* - * 模式状态机, 通过start_app()控制状态切换 + *以下情况,关闭sniff + *(1)通过spp在线调试eq + *(2)通过spp导出数据 */ -/* extern int audio_mic_init(); */ +#if APP_ONLINE_DEBUG +#if (TCFG_EQ_ONLINE_ENABLE || (TCFG_AUDIO_DATA_EXPORT_ENABLE == AUDIO_DATA_EXPORT_USE_SPP) || TCFG_LP_TOUCH_KEY_BT_TOOL_ENABLE) +#undef MY_SNIFF_EN +#define MY_SNIFF_EN 0 +#endif +#endif/*APP_ONLINE_DEBUG*/ -static int state_machine(struct application *app, enum app_state state, struct intent *it){ - int error = 0; - static u8 tone_player_err = 0; - xlog("bt_state_machine=%d\n", state); - switch (state) { - case APP_STA_CREATE: - xlog("APP_STA_CREATE\n"); - /* set_adjust_conn_dac_check(0); */ +#define SNIFF_CNT_TIME 10/////<空闲10S之后进入sniff模式 - break; - case APP_STA_START: - xlog("APP_STA_START\n"); - if (!it) { - xlog("APP_STA_START:it none\n"); - break; - } - switch (it->action) { - case ACTION_EARPHONE_MAIN: - xlog("ble init\n"); - /* - * handler 初始化 - */ - clk_set("sys", BT_NORMAL_HZ); - u32 sys_clk = clk_get("sys"); - bt_pll_para(TCFG_CLOCK_OSC_HZ, sys_clk, 0, 0); - /* bredr_set_dut_enble(1, 1); */ - bt_function_select_init(); - bredr_handle_register(); - EARPHONE_STATE_INIT(); - btstack_init(); - sys_auto_shut_down_enable(); - bt_sniff_feature_init(); - sys_auto_sniff_controle(MY_SNIFF_EN, NULL); - app_var.dev_volume = -1; - break; - case ACTION_A2DP_START: //蓝牙音频传输协议 - xlog("ACTION_A2DP_START\n"); - break; - case ACTION_BY_KEY_MODE: - xlog("ACTION_BY_KEY_MODE\n"); - break; - case ACTION_TONE_PLAY: - xlog("ACTION_TONE_PLAY\n"); - // STATUS *p_tone = get_tone_config(); - // tone_play_index(p_tone->bt_init_ok, 1); - break; - case ACTION_DO_NOTHING: - xlog("ACTION_DO_NOTHING\n"); - break; - } - break; - case APP_STA_PAUSE: - xlog("APP_STA_PAUSE\n"); - break; - case APP_STA_RESUME: - xlog("APP_STA_RESUME\n"); - //恢复前台运行 - sys_auto_shut_down_disable(); - sys_key_event_enable(); - break; - case APP_STA_STOP: - xlog("APP_STA_STOP\n"); - break; - case APP_STA_DESTROY: - xlog("APP_STA_DESTROY\n"); - r_printf("APP_STA_DESTROY\n"); - if (!app_var.goto_poweroff_flag) { - bt_app_exit(NULL); - } - break; - } - xlog("state machine error\n"); - return error; -} +#define SNIFF_MAX_INTERVALSLOT 800 +#define SNIFF_MIN_INTERVALSLOT 100 +#define SNIFF_ATTEMPT_SLOT 4 +#define SNIFF_TIMEOUT_SLOT 1 -/////////////////////////////////////////////////////////////////////////////////////////////////// -//handle +u8 sniff_ready_status = 0; //0:sniff_ready 1:sniff_not_ready +int exit_sniff_timer = 0; - -void le_user_app_send_event(size_t command, unsigned char* data, size_t size) +bool bt_is_sniff_close(void) { - // 中断->事件 - static unsigned char buffer[512]; - if(data && size && size <= sizeof(buffer)) { - // 拷贝到缓存,避免转发事件的时候,地址发送改变。 - memcpy(buffer, data, size); - struct sys_event event; - event.type = SYS_APP_USER_EVENT; - event.u.app.command = command; - event.u.app.buffer = buffer; - event.u.app.size = size; - sys_event_notify(&event); - } + return (bt_user_priv_var.sniff_timer == 0); } -void le_user_app_event_handler(struct sys_event* event){ +void bt_check_exit_sniff() +{ + sys_timeout_del(exit_sniff_timer); + exit_sniff_timer = 0; - switch (event->type) { - // 打印接收到的数据 - printf("BLE data\n"); - put_buf(event->u.app.buffer, event->u.app.size); - case SYS_APP_USER_EVENT: - if (event->u.app.buffer[0] == 0xBE && event->u.app.buffer[1] == 0xBB) { - if(event->u.app.buffer[2] == 0x01){ //后面的数据长度 1 - switch (event->u.app.buffer[3]){ - case 0x01: - nvs_test_factory_info(); - break; - case 0x02: - // factory_info_t read_info;; - // nvs_read_factory_info(&read_info); - extern void rfid_task_fuc(void); - create_process(&rfid_fuc_id,"rfid",NULL,rfid_task_fuc,2000); - break; - case 0xff: //测试 - int ret = hw_iic_init(0); - // int ret = soft_iic_init(0); - xlog("init iic result:%d\n", ret); //返回0成功 - extern void i2c_scanner_probe(void); - i2c_scanner_probe(); - - break; - default: - break; - } - }else if(event->u.app.buffer[2] == 0x02){ //后面数据长度为2 - switch (event->u.app.buffer[3]){ //数据包类型 - case 0x00: - break; - } - } +#if TCFG_USER_TWS_ENABLE + if (tws_api_get_role() == TWS_ROLE_SLAVE) { + return; + } +#endif + user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL); +} + +void bt_sniff_ready_clean(void) +{ + sniff_ready_status = 1; +} + +static u8 bt_sniff_enable = 1; +void bt_check_enter_sniff() +{ + struct sniff_ctrl_config_t sniff_ctrl_config; + u8 addr[12]; + u8 conn_cnt = 0; + u8 i = 0; + + if (!bt_sniff_enable) { + return; + } + +#if TCFG_AUDIO_ANC_ENABLE + if (anc_train_open_query() || anc_online_busy_get()) { //如果ANC训练则不进入SNIFF + return; + } +#endif +#if (RCSP_ADV_EN) + extern u8 get_ble_adv_modify(void); + extern u8 get_ble_adv_notify(void); + if (get_ble_adv_modify() || get_ble_adv_notify()) { + return; + } +#endif + if (sniff_ready_status) { + sniff_ready_status = 0; + return; + } + /*putchar('H');*/ + conn_cnt = bt_api_enter_sniff_status_check(SNIFF_CNT_TIME, addr); + +#if (TCFG_BD_NUM == 2) + /* if (BT_STATUS_PLAYING_MUSIC == get_bt_connect_status() || get_esco_coder_busy_flag()) { */ + if (get_esco_coder_busy_flag()) { + return; + } +#endif + ASSERT(conn_cnt <= 2); + + for (i = 0; i < conn_cnt; i++) { + log_info("-----USER SEND SNIFF IN %d %d\n", i, conn_cnt); + sniff_ctrl_config.sniff_max_interval = SNIFF_MAX_INTERVALSLOT; + sniff_ctrl_config.sniff_mix_interval = SNIFF_MIN_INTERVALSLOT; + sniff_ctrl_config.sniff_attemp = SNIFF_ATTEMPT_SLOT; + sniff_ctrl_config.sniff_timeout = SNIFF_TIMEOUT_SLOT; + memcpy(sniff_ctrl_config.sniff_addr, addr + i * 6, 6); +#if TCFG_USER_TWS_ENABLE + if (tws_api_get_role() == TWS_ROLE_SLAVE) { + return; + } +#endif + user_send_cmd_prepare(USER_CTRL_SNIFF_IN, sizeof(struct sniff_ctrl_config_t), (u8 *)&sniff_ctrl_config); + } + +} +void sys_auto_sniff_controle(u8 enable, u8 *addr) +{ + if (app_var.goto_poweroff_flag) { + return; + } + + if (addr) { + if (bt_api_conn_mode_check(enable, addr) == 0) { + log_info("sniff ctr not change\n"); + return; + } + } + + if (enable) { + if (addr) { + log_info("sniff cmd timer init\n"); + user_send_cmd_prepare(USER_CTRL_HALF_SEC_LOOP_CREATE, 0, NULL); + /* user_cmd_timer_init(); */ + } + + if (bt_user_priv_var.sniff_timer == 0) { + log_info("check_sniff_enable\n"); + bt_user_priv_var.sniff_timer = sys_timer_add(NULL, bt_check_enter_sniff, 1000); + } + EARPHONE_STATE_SNIFF(0); + } else { + + if (addr) { + log_info("sniff cmd timer remove\n"); + user_send_cmd_prepare(USER_CTRL_HALF_SEC_LOOP_DEL, 0, NULL); + /* remove_user_cmd_timer(); */ + } + + if (bt_user_priv_var.sniff_timer) { + log_info("check_sniff_disable\n"); + sys_timeout_del(bt_user_priv_var.sniff_timer); + bt_user_priv_var.sniff_timer = 0; + + if (exit_sniff_timer == 0) { + /* exit_sniff_timer = sys_timer_add(NULL, bt_check_exit_sniff, 5000); */ } - break; - - default: - xlog("%d\n",event->type); - break; + } + EARPHONE_STATE_SNIFF(1); } - - } +u8 lmp_rx_sniff_req_check() +{ + return !bt_sniff_enable; +} + +extern void tws_tx_unsniff_req(void); +void bt_sniff_set_enable(u8 en) +{ + bt_sniff_enable = en; + + if (en) { + sys_auto_sniff_controle(1, NULL); + tws_sniff_controle_check_enable(); + } else { +#if TCFG_USER_TWS_ENABLE + if (get_tws_phone_connect_state() == TRUE) { + user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL); + } else { + tws_tx_unsniff_req(); + } + tws_sniff_controle_check_disable(); +#else + user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL); +#endif + sys_auto_sniff_controle(0, NULL); + } +} + +void bt_sniff_feature_init() +{ +#if TCFG_BT_SNIFF_DISABLE + u8 feature = lmp_hci_read_local_supported_features(0); + feature &= ~BIT(7); //BIT_SNIFF_MODE; + lmp_hci_write_local_supported_features(feature, 0); +#endif +} + +int btstack_exit(); + +void wait_exit_btstack_flag(void *priv) +{ + if (!bt_audio_is_running()) { + //btstack_exit(); + lmp_hci_reset(); + os_time_dly(2); + sys_timer_del(app_var.wait_exit_timer); + if (priv == NULL) { + log_info("task_switch to idle...\n"); + task_switch("idle", ACTION_IDLE_MAIN); + } else if (priv == (void *)1) { + log_info("cpu_reset!!!\n"); + cpu_reset(); + } + + } else { + app_var.goto_poweroff_cnt++; + if (app_var.goto_poweroff_cnt > 200) { + log_info("audio:%d, status:%d, hci:%d\n", + bt_audio_is_running(), + get_curr_channel_state(), + hci_standard_connect_check()); + log_info("mabe ..... death!\n"); + log_info("cpu_reset!!!\n"); + cpu_reset(); + } + } +} + +#if TCFG_USER_TWS_ENABLE +static void power_off_at_same_time(void *p) +{ + + if (!bt_audio_is_running()) { + int state = tws_api_get_tws_state(); + log_info("wait_phone_link_detach: %x\n", state); + if (state & TWS_STA_PHONE_DISCONNECTED) { + if (state & TWS_STA_SIBLING_CONNECTED) { + if (tws_api_get_role() == TWS_ROLE_MASTER) { + bt_tws_play_tone_at_same_time(SYNC_TONE_POWER_OFF, 400); + } else { + /* 防止TWS异常断开导致从耳不关机 */ + bt_tws_play_tone_at_same_time(SYNC_TONE_POWER_OFF, 2400); + } + sys_timer_del(app_var.wait_exit_timer); + task_switch("idle", ACTION_IDLE_POWER_OFF); + } else { + sys_timer_del(app_var.wait_exit_timer); + task_switch("idle", ACTION_IDLE_MAIN); + } + } else { + lmp_hci_reset(); + os_time_dly(2); + } + } else { + app_var.goto_poweroff_cnt++; + if (app_var.goto_poweroff_cnt > 200) { + log_info("audio:%d, status:%d, hci:%d\n", + bt_audio_is_running(), + get_curr_channel_state(), + hci_standard_connect_check()); + log_info("mabe ..... death!\n"); + log_info("cpu_reset!!!\n"); + cpu_reset(); + } + } +} +#endif + +extern int tws_sniff_state_check(); +void poweroff_sniff_all_exit() +{ + u8 exit_cnt = 0; + sys_auto_sniff_controle(0, NULL); +#if TCFG_USER_TWS_ENABLE + log_info("%s %d %d %d %d\n", __func__, get_tws_phone_connect_state(), get_tws_sibling_connect_state(), bt_api_get_sniff_state(), tws_sniff_state_check()); + if (get_tws_phone_connect_state()) { + while (bt_api_get_sniff_state() || tws_sniff_state_check()) { //wait lmp and tws_sniff exit + if (exit_cnt % 5 == 0) { + user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL); //lmp_sniff exit then tws_sniff will exit + } + if (exit_cnt ++ >= 25) { + exit_cnt = 0; + break; + } + os_time_dly(10); //500ms * 5 + } + } else if (get_tws_sibling_connect_state()) { //if only tws connect + while (tws_sniff_state_check()) { + if (exit_cnt % 5 == 0) { + tws_tx_unsniff_req(); + } + if (exit_cnt ++ >= 25) { + exit_cnt = 0; + break; + } + os_time_dly(10); //500ms * 5 + } + } + log_info("%s %d %d %d %d\n", __func__, get_tws_phone_connect_state(), get_tws_sibling_connect_state(), bt_api_get_sniff_state(), tws_sniff_state_check()); +#else + while (bt_api_get_sniff_state()) { //wait lmp and tws_sniff exit + if (exit_cnt % 5 == 0) { + user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL); //lmp_sniff exit then tws_sniff will exit + } + if (exit_cnt ++ >= 25) { + exit_cnt = 0; + break; + } + os_time_dly(10); //500ms * 5 + } +#endif /*TCFG_USER_TWS_ENABLE*/ +} + + +void sys_enter_soft_poweroff(void *priv) +{ + int detach_phone = 1; + struct sys_event clear_key_event = {.type = SYS_KEY_EVENT, .arg = "key"}; + + log_info("%s, %d\n", __func__, (int)priv); + + if (app_var.goto_poweroff_flag) { + return; + } + + if ((int)priv != 4) { +#if CONFIG_BT_BACKGROUND_ENABLE + bt_switch_to_foreground(ACTION_DO_NOTHING, 1); +#endif + ui_update_status(STATUS_POWEROFF); + } + + sys_auto_sniff_controle(0, NULL); + app_var.goto_poweroff_flag = 1; + app_var.goto_poweroff_cnt = 0; + sys_key_event_disable(); + sys_event_clear(&clear_key_event); + sys_auto_shut_down_disable(); + + poweroff_sniff_all_exit(); //确保关机前sniff已经退出 + /* user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL); */ + + EARPHONE_STATE_ENTER_SOFT_POWEROFF(); + +#if TCFG_AUDIO_ANC_ENABLE + anc_poweroff(); +#endif/*TCFG_AUDIO_ANC_ENABLE*/ + +#if TCFG_USER_TWS_ENABLE + if ((int)priv == 3) { + user_send_cmd_prepare(USER_CTRL_POWER_OFF, 0, NULL); + if (app_var.wait_exit_timer == 0) { + app_var.wait_exit_timer = sys_timer_add(NULL, power_off_at_same_time, 50); + } + return; + } + +#if TCFG_CHARGESTORE_ENABLE + if (chargestore_get_earphone_online() != 2) { + bt_tws_poweroff(); + } +#else + bt_tws_poweroff(); +#endif + + int state = tws_api_get_tws_state(); + if (state & TWS_STA_PHONE_DISCONNECTED) { + detach_phone = 0; + } + log_info("detach_phone: %x, %d\n", state, detach_phone); +#endif + + if (detach_phone) { + user_send_cmd_prepare(USER_CTRL_POWER_OFF, 0, NULL); + } + + if (app_var.wait_exit_timer == 0) { + app_var.wait_exit_timer = sys_timer_add(priv, wait_exit_btstack_flag, 50); + } +} + +static void sys_auto_shut_down_deal(void *priv) +{ + r_printf("%s\n", __func__); +#if TCFG_USER_TWS_ENABLE + if (get_bt_tws_connect_status()) { + if (tws_api_get_role() == TWS_ROLE_MASTER) { + tws_api_sync_call_by_uuid('T', SYNC_CMD_POWER_OFF_TOGETHER, 400); + } + } else +#endif + { + sys_enter_soft_poweroff(0); + } +} + +void sys_auto_shut_down_enable(void) +{ +#if TCFG_AUTO_SHUT_DOWN_TIME + log_info("sys_auto_shut_down_enable\n"); +#if TCFG_AUDIO_ANC_ENABLE + /*ANC打开,不支持自动关机*/ + if (anc_status_get()) { + return; + } +#endif/*TCFG_AUDIO_ANC_ENABLE*/ +#if TCFG_APP_PC_EN + /*PC模式下,不支持自动关机*/ + if (app_get_curr_task() == APP_PC_TASK) { + log_info("APP_PC_TASK now sys_auto_shut_down_disable\n"); + return; + } +#endif/*TCFG_APP_PC_EN*/ + if (app_var.auto_shut_down_timer == 0) { + app_var.auto_shut_down_timer = sys_timeout_add(NULL, sys_auto_shut_down_deal, (app_var.auto_off_time * 1000)); + } +#endif +} + +void sys_auto_shut_down_disable(void) +{ +#if TCFG_AUTO_SHUT_DOWN_TIME + log_info("sys_auto_shut_down_disable\n"); + if (app_var.auto_shut_down_timer) { + sys_timeout_del(app_var.auto_shut_down_timer); + app_var.auto_shut_down_timer = 0; + } +#endif +} + +/*static u32 len_lst[34];*/ + +static const u32 num0_9[] = { + (u32)TONE_NUM_0, + (u32)TONE_NUM_1, + (u32)TONE_NUM_2, + (u32)TONE_NUM_3, + (u32)TONE_NUM_4, + (u32)TONE_NUM_5, + (u32)TONE_NUM_6, + (u32)TONE_NUM_7, + (u32)TONE_NUM_8, + (u32)TONE_NUM_9, +} ; +static u8 check_phone_income_idle(void) +{ + if (bt_user_priv_var.phone_ring_flag) { + return 0; + } + return 1; +} +REGISTER_LP_TARGET(phone_incom_lp_target) = { + .name = "phone_check", + .is_idle = check_phone_income_idle, +}; + +static void number_to_play_list(char *num, u32 *lst) +{ + u8 i = 0; + +#if BT_PHONE_NUMBER + if (num) { + for (; i < strlen(num); i++) { + lst[i] = num0_9[num[i] - '0'] ; + } + } +#endif + + lst[i++] = (u32)TONE_REPEAT_BEGIN(-1); + lst[i++] = (u32)TONE_RING; + lst[i++] = (u32)TONE_REPEAT_END(); + lst[i++] = (u32)NULL; +} + +extern u8 is_siri_open(); +void phone_num_play_timer(void *priv) +{ + char *len_lst[34]; + + if (get_call_status() == BT_CALL_HANGUP || is_siri_open()) { + log_info("hangup,--phone num play return\n"); + return; + } + log_info("%s\n", __FUNCTION__); + + if (bt_user_priv_var.phone_num_flag) { + tone_play_stop(); + number_to_play_list((char *)(bt_user_priv_var.income_phone_num), (u32 *)len_lst); + tone_file_list_play((const char *)len_lst, 1); + } else { + /*电话号码还没有获取到,定时查询*/ + bt_user_priv_var.phone_timer_id = sys_timeout_add(NULL, phone_num_play_timer, 200); + } +} + +static void phone_num_play_start(void) +{ + /* check if support inband ringtone */ + if (!bt_user_priv_var.inband_ringtone) { + bt_user_priv_var.phone_num_flag = 0; + bt_user_priv_var.phone_timer_id = sys_timeout_add(NULL, phone_num_play_timer, 500); + } +} + +void phone_check_inband_ring_play_timer(void *priv) +{ +#if BT_INBAND_RINGTONE + if (bt_user_priv_var.inband_ringtone && bt_user_priv_var.phone_ring_flag) { + if (!get_esco_coder_busy_flag()) { + r_printf("phone_check_inband_ring_play_timer play"); + bt_user_priv_var.inband_ringtone = 0; +#if TCFG_USER_TWS_ENABLE + if (!bt_tws_sync_phone_num(NULL)) +#endif + { + extern u8 phone_ring_play_start(void); + phone_ring_play_start(); + } + } + } +#endif +} +u8 phone_ring_play_start(void) +{ + char *len_lst[34]; + + if (get_call_status() == BT_CALL_HANGUP || is_siri_open()) { + log_info("hangup,--phone ring play return\n"); + return 0; + } + log_info("%s,%d\n", __FUNCTION__, bt_user_priv_var.inband_ringtone); + /* check if support inband ringtone */ + if (!bt_user_priv_var.inband_ringtone) { + tone_play_stop(); + number_to_play_list(NULL, len_lst); + tone_file_list_play((const char **)len_lst, 1); + return 1; + } else { +#if BT_INBAND_RINGTONE + //xtell打开注释 + bt_user_priv_var.phone_timer_id = sys_timeout_add(NULL, phone_check_inband_ring_play_timer, 4000); //4s之后检测有没建立通话链路,没有建立播本地铃声 +#endif + } + return 0; +} + + +static u16 play_poweron_ok_timer_id = 0; static void play_poweron_ok_timer(void *priv) { @@ -268,7 +1235,6 @@ static void play_poweron_ok_timer(void *priv) app_var.wait_timer_do = sys_timeout_add(priv, play_poweron_ok_timer, 100); } - static void play_bt_connect_dly(void *priv) { app_var.wait_timer_do = 0; @@ -283,18 +1249,183 @@ static void play_bt_connect_dly(void *priv) +//=============================================================================// +//NOTE by MO: For fix Make, should be implemented later; +__attribute__((weak)) +int earphone_a2dp_codec_get_low_latency_mode() +{ + return 0; +} + +__attribute__((weak)) +int earphone_a2dp_codec_set_low_latency_mode(int enable, int msec) +{ + return 0; +} +//=============================================================================// + + +int bt_get_low_latency_mode() +{ + return earphone_a2dp_codec_get_low_latency_mode(); +} + +void bt_set_low_latency_mode(int enable) +{ +#if TCFG_USER_TWS_ENABLE + if (tws_api_get_role() == TWS_ROLE_MASTER) { + if (tws_api_get_tws_state() & TWS_STA_SIBLING_CONNECTED) { + if (enable) { + tws_api_sync_call_by_uuid('T', SYNC_CMD_LOW_LATENCY_ENABLE, 300); + } else { + tws_api_sync_call_by_uuid('T', SYNC_CMD_LOW_LATENCY_DISABLE, 300); + } + } else { + if (earphone_a2dp_codec_set_low_latency_mode(enable, enable ? 800 : 600) == 0) { + if (enable) { + tone_play(TONE_LOW_LATENCY_IN, 1); + } else { + tone_play(TONE_LOW_LATENCY_OUT, 1); + } + } + } + } +#else + earphone_a2dp_codec_set_low_latency_mode(enable, enable ? 800 : 600); +#endif +} + +static void bt_discon_dly_handle(void *priv) +{ + app_var.phone_dly_discon_time = 0; + + STATUS *p_tone = get_tone_config(); + +#if(TCFG_BD_NUM == 2) //对耳在bt_tws同步播放提示音 + /* tone_play(TONE_DISCONN); */ + tone_play_index(p_tone->bt_disconnect, 1); +#else + +#if TCFG_USER_TWS_ENABLE + if (!get_bt_tws_connect_status() && !get_bt_tws_discon_dly_state()) +#endif + { + tone_play_index(p_tone->bt_disconnect, 1); + } +#endif + +#if TCFG_USER_TWS_ENABLE + STATUS *p_led = get_led_config(); + if (get_bt_tws_connect_status()) { +#if TCFG_CHARGESTORE_ENABLE + chargestore_set_phone_disconnect(); +#endif + if (tws_api_get_role() == TWS_ROLE_MASTER) { + bt_tws_play_tone_at_same_time(SYNC_TONE_PHONE_DISCONNECTED, 400); + } + } else { + //断开手机时,如果对耳未连接,要把LED时钟切到RC(因为单台会进SNIFF) + pwm_led_clk_set((!TCFG_LOWPOWER_BTOSC_DISABLE) ? PWM_LED_CLK_RC32K : PWM_LED_CLK_BTOSC_24M); + //pwm_led_clk_set(PWM_LED_CLK_RC32K); + ui_update_status(STATUS_BT_DISCONN); + } +#endif + +} + +#if TCFG_CALL_KWS_SWITCH_ENABLE +extern int audio_phone_call_kws_start(void); +extern int audio_phone_call_kws_close(void); +extern void audio_smart_voice_detect_close(void); +extern int esco_ul_stream_switch(u8 en); +extern u8 bt_phone_dec_is_running(); +#endif + +static void jl_call_kws_handler(int event) +{ + if (event == BT_STATUS_PHONE_INCOME) { + printf("jl_call_kws_handler: event==BT_STATUS_PHONE_INCOME\n"); //xtell +#if TCFG_KWS_VOICE_RECOGNITION_ENABLE + extern void a2dp_media_suspend_resume(u8 flag); + a2dp_media_suspend_resume(1); + a2dp_dec_close(); + audio_aec_reboot(1); + jl_kws_speech_recognition_open(); + jl_kws_speech_recognition_start(); +#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */ +#if TCFG_CALL_KWS_SWITCH_ENABLE + extern void a2dp_media_suspend_resume(u8 flag); + a2dp_media_suspend_resume(1); + a2dp_dec_close(); + audio_aec_reboot(1); + //esco_ul_stream_switch(0); + audio_phone_call_kws_start(); +#endif /* #if TCFG_CALL_KWS_SWITCH_ENABLE */ + } else if (event == BT_STATUS_PHONE_ACTIVE) { +#if TCFG_KWS_VOICE_RECOGNITION_ENABLE + jl_kws_speech_recognition_close(); + audio_aec_reboot(0); +#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */ +#ifdef CONFIG_BOARD_AISPEECH_VAD_ASR + printf("----aispeech_state phone active"); + ais_platform_asr_close(); + esco_mic_reset(); +#endif /*CONFIG_BOARD_AISPEECH_VAD_ASR*/ +#if TCFG_CALL_KWS_SWITCH_ENABLE + audio_smart_voice_detect_close(); + audio_aec_reboot(0); + //esco_ul_stream_switch(1); +#endif /* TCFG_CALL_KWS_SWITCH_ENABLE */ + } else if (event == BT_STATUS_PHONE_HANGUP) { +#if TCFG_KWS_VOICE_RECOGNITION_ENABLE + jl_kws_speech_recognition_close(); +#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */ +#if TCFG_CALL_KWS_SWITCH_ENABLE + if (!bt_phone_dec_is_running()) { + audio_phone_call_kws_close(); + } +#endif /* TCFG_CALL_KWS_SWITCH_ENABLE */ + } +} + +extern void tws_page_scan_deal_by_esco(u8 esco_flag); + +/* + * 对应原来的状态处理函数,连接,电话状态等 + */ +void tws_conn_switch_role(); static int bt_connction_status_event_handler(struct bt_event *bt) { STATUS *p_tone = get_tone_config(); u8 *phone_number = NULL; +#if CONFIG_BT_BACKGROUND_ENABLE + int ret = bt_background_event_probe_handler(bt); + if (ret == -EINVAL) { + return 0; + } +#endif + //log_info("bt_conn_event:%d", bt->event); + switch (bt->event) { case BT_STATUS_INIT_OK: /* * 蓝牙初始化完成 */ - xlog("BT_STATUS_INIT_OK\n"); + log_info("BT_STATUS_INIT_OK\n"); init_ok = 1; + +#if TCFG_AUDIO_DATA_EXPORT_ENABLE +#if (TCFG_AUDIO_DATA_EXPORT_ENABLE == AUDIO_DATA_EXPORT_USE_SPP) + lmp_hci_set_role_switch_supported(0); +#endif/*AUDIO_DATA_EXPORT_USE_SPP*/ + extern int audio_capture_init(); + audio_capture_init(); +#endif/*TCFG_AUDIO_DATA_EXPORT_ENABLE*/ + +#if TCFG_AUDIO_ANC_ENABLE + anc_poweron(); +#endif/*TCFG_AUDIO_ANC_ENABLE*/ __set_sbc_cap_bitpool(38); #if (TCFG_USER_BLE_ENABLE) @@ -302,21 +1433,51 @@ static int bt_connction_status_event_handler(struct bt_event *bt) ble_bqb_test_thread_init(); } else { #if !TCFG_WIRELESS_MIC_ENABLE - bt_ble_init(); // lmx,初始化完,初始化ble,决定ble是作为主设备还是从设备 - // xtell_ble_central_test_start(); //xtell + bt_ble_init(); +#endif + +#if BLE_HID_EN && (!TCFG_USER_TWS_ENABLE) + ble_module_enable(1); #endif } + #endif + +#if TCFG_USER_TWS_ENABLE + extern void pbg_demo_init(void); + pbg_demo_init(); +#endif + +#if TCFG_USER_EMITTER_ENABLE +////发射器设置回调等 + void bt_emitter_init() ; + bt_emitter_init(); + extern u8 emitter_search_result(char *name, u8 name_len, u8 * addr, u32 dev_class, char rssi); + inquiry_result_handle_register(emitter_search_result); + extern void emitter_or_receiver_switch(u8 flag); + emitter_or_receiver_switch(BT_EMITTER_EN); + break; +#endif + bt_init_ok_search_index(); + ui_update_status(STATUS_BT_INIT_OK); +#if TCFG_CHARGESTORE_ENABLE + chargestore_set_bt_init_ok(1); +#endif #if TCFG_TEST_BOX_ENABLE testbox_set_bt_init_ok(1); #endif + #if ((CONFIG_BT_MODE == BT_BQB)||(CONFIG_BT_MODE == BT_PER)) bt_wait_phone_connect_control(1); #else if (is_dac_power_off()) { +#if TCFG_USER_TWS_ENABLE + bt_tws_poweron(); +#else bt_wait_connect_and_phone_connect_switch(0); +#endif } else { app_var.wait_timer_do = sys_timeout_add(NULL, play_poweron_ok_timer, 100); } @@ -330,23 +1491,90 @@ static int bt_connction_status_event_handler(struct bt_event *bt) case BT_STATUS_SECOND_CONNECTED: clear_current_poweron_memory_search_index(0); case BT_STATUS_FIRST_CONNECTED: - xlog("BT_STATUS_CONNECTED\n"); - xtell_bl_state = 1; //蓝牙连接成功 置1 - if(strcmp(xt_ble_new_name,"CM-11111") != 0){ + log_info("BT_STATUS_CONNECTED\n"); + if(strcmp(xt_ble_new_name,"CM-XXXXX") != 0){ //蓝牙连接成功 bt_newname =1; + // queue_ai_msg(xtell_uart_ai_14_bt_connect,5,14); u8 temp[5]={0xBB,0xBE,0x02,0x04,0x00}; - temp[4] = xtell_bl_state; //经典蓝牙连接状态 // send_data_to_ble_client(&temp,5); } earphone_change_pwr_mode(PWR_DCDC15, 3000); sys_auto_shut_down_disable(); +#if TCFG_ADSP_UART_ENABLE + ADSP_UART_Init(); +#endif +#if(JL_EARPHONE_APP_EN && RCSP_UPDATE_EN) + extern u8 rcsp_update_get_role_switch(void); + if (rcsp_update_get_role_switch()) { + tws_conn_switch_role(); + tws_api_auto_role_switch_disable(); + } +#endif + +#if(TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV) + { + u8 connet_type; + if (get_auto_connect_state(bt->args)) { + connet_type = ICON_TYPE_RECONNECT; + } else { + connet_type = ICON_TYPE_CONNECTED; + } + +#if TCFG_USER_TWS_ENABLE + if (tws_api_get_role() == TWS_ROLE_MASTER) { + bt_ble_icon_open(connet_type); + } else { + //maybe slave already open + bt_ble_icon_close(0); + } + +#else + bt_ble_icon_open(connet_type); +#endif + } +#endif + + +#if (TCFG_BD_NUM == 2) + if (get_current_poweron_memory_search_index(NULL) == 0) { + bt_wait_phone_connect_control(1); + } +#endif + +#if TCFG_USER_TWS_ENABLE + if (!get_bt_tws_connect_status()) { //如果对耳还未连接就连上手机,要切换闪灯状态 + ui_update_status(STATUS_BT_CONN); + } + +#if TCFG_CHARGESTORE_ENABLE + chargestore_set_phone_connect(); +#endif + + if (bt_tws_phone_connected()) { + break; + } +#else ui_update_status(STATUS_BT_CONN); //单台在此处设置连接状态,对耳的连接状态需要同步,在bt_tws.c中去设置 - +#if (TCFG_AUTO_STOP_PAGE_SCAN_TIME && TCFG_BD_NUM == 2) + if (get_total_connect_dev() == 1) { //当前有一台连接上了 + if (app_var.auto_stop_page_scan_timer == 0) { + app_var.auto_stop_page_scan_timer = sys_timeout_add(NULL, bt_close_page_scan, (TCFG_AUTO_STOP_PAGE_SCAN_TIME * 1000)); //2 + } + } else { + if (app_var.auto_stop_page_scan_timer) { + sys_timeout_del(app_var.auto_stop_page_scan_timer); + app_var.auto_stop_page_scan_timer = 0; + } + } +#endif //endif AUTO_STOP_PAGE_SCAN_TIME +#endif /* tone_play(TONE_CONN); */ + + /*os_time_dly(40); // for test*/ - xlog("tone status:%d\n", tone_get_status()); + log_info("tone status:%d\n", tone_get_status()); if (get_call_status() == BT_CALL_HANGUP) { if (app_var.phone_dly_discon_time) { sys_timeout_del(app_var.phone_dly_discon_time); @@ -357,57 +1585,328 @@ static int bt_connction_status_event_handler(struct bt_event *bt) } } - /*int timeout = 5000 + rand32() % 10000; sys_timeout_add(NULL, connect_phone_test, timeout);*/ break; case BT_STATUS_FIRST_DISCONNECT: case BT_STATUS_SECOND_DISCONNECT: - xlog("BT_STATUS_DISCONNECT\n"); - xtell_bl_state = 0; //断开蓝牙 清0 + log_info("BT_STATUS_DISCONNECT\n"); //蓝牙断开连接 if(bt_newname){ //已经改成新蓝牙名字,断开才播报 bt_newname=0; + // queue_ai_msg(xtell_uart_ai_34_bt_break,5,14); u8 temp[5]={0xBB,0xBE,0x02,0x04,0x00}; - temp[4] = xtell_bl_state; //经典蓝牙连接状态 // send_data_to_ble_client(&temp,5); } +#if TCFG_ADSP_UART_ENABLE + ADSP_UART_Deinit(); +#endif if (app_var.goto_poweroff_flag) { /*关机不播断开提示音*/ /*关机时不改UI*/ break; } - // bt_discon_dly_handle(NULL); + +#if PHONE_DLY_DISCONN_TIME + if (app_var.phone_dly_discon_time == 0) { + app_var.phone_dly_discon_time = sys_timeout_add(NULL, bt_discon_dly_handle, PHONE_DLY_DISCONN_TIME); + } +#else + bt_discon_dly_handle(NULL); +#endif break; //phone status deal case BT_STATUS_PHONE_INCOME: + log_info("BT_STATUS_PHONE_INCOME _1\n"); + esco_dump_packet = ESCO_DUMP_PACKET_CALL; + ui_update_status(STATUS_PHONE_INCOME); + u8 tmp_bd_addr[6]; + memcpy(tmp_bd_addr, bt->args, 6); + jl_call_kws_handler(BT_STATUS_PHONE_INCOME); + /* + *(1)1t2有一台通话的时候,另一台如果来电不要提示 + *(2)1t2两台同时来电,现来的题示,后来的不播 + */ + if ((check_esco_state_via_addr(tmp_bd_addr) != BD_ESCO_BUSY_OTHER) && + (bt_user_priv_var.phone_ring_flag == 0)) { + +#if BT_INBAND_RINGTONE + extern u8 get_device_inband_ringtone_flag(void); + bt_user_priv_var.inband_ringtone = get_device_inband_ringtone_flag(); +#else + bt_user_priv_var.inband_ringtone = 0 ; + lmp_private_esco_suspend_resume(3); +#endif + + g_printf("bt_user_priv_var.inband_ringtone=0x%x\n", bt_user_priv_var.inband_ringtone); + bt_user_priv_var.phone_ring_flag = 1; + bt_user_priv_var.phone_income_flag = 1; +#if TCFG_USER_TWS_ENABLE + if (!bt_tws_sync_phone_num(NULL)) +#endif + { +#if BT_PHONE_NUMBER + phone_num_play_start(); +#else + phone_ring_play_start(); +#endif + + } + user_send_cmd_prepare(USER_CTRL_HFP_CALL_CURRENT, 0, NULL); //发命令获取电话号码 + } else { + log_info("SCO busy now:%d,%d\n", check_esco_state_via_addr(tmp_bd_addr), + bt_user_priv_var.phone_ring_flag); + } break; case BT_STATUS_PHONE_OUT: - + log_info("BT_STATUS_PHONE_OUT\n"); + esco_dump_packet = ESCO_DUMP_PACKET_CALL; + ui_update_status(STATUS_PHONE_OUT); + bt_user_priv_var.phone_income_flag = 0; + user_send_cmd_prepare(USER_CTRL_HFP_CALL_CURRENT, 0, NULL); //发命令获取电话号码 break; case BT_STATUS_PHONE_ACTIVE: - break; - case BT_STATUS_PHONE_HANGUP: - break; - case BT_STATUS_PHONE_NUMBER: - break; - case BT_STATUS_INBAND_RINGTONE: //铃声 - break; - case BT_STATUS_CALL_VOL_CHANGE: + jl_call_kws_handler(BT_STATUS_PHONE_ACTIVE); + log_info("BT_STATUS_PHONE_ACTIVE\n"); + ui_update_status(STATUS_PHONE_ACTIV); + if (bt_user_priv_var.phone_call_dec_begin) { + log_info("call_active,dump_packet clear\n"); + esco_dump_packet = ESCO_DUMP_PACKET_DEFAULT; + } + if (bt_user_priv_var.phone_ring_flag) { + bt_user_priv_var.phone_ring_flag = 0; + tone_play_stop(); + if (bt_user_priv_var.phone_timer_id) { + sys_timeout_del(bt_user_priv_var.phone_timer_id); + bt_user_priv_var.phone_timer_id = 0; + } + } + lmp_private_esco_suspend_resume(4); + bt_user_priv_var.phone_income_flag = 0; + bt_user_priv_var.phone_num_flag = 0; + bt_user_priv_var.phone_con_sync_num_ring = 0; + bt_user_priv_var.phone_con_sync_ring = 0; + bt_user_priv_var.phone_vol = 15; + //phone_sync_vol(); +#if TCFG_USER_TWS_ENABLE + bt_tws_sync_volume(); +#endif + r_printf("phone_active:%d\n", app_var.call_volume); + printf("in bt_coon phone_active:%d\n", app_var.call_volume); + app_audio_set_volume(APP_AUDIO_STATE_CALL, app_var.call_volume, 1); +#if TCFG_EAR_DETECT_ENABLE +#if TCFG_EAR_DETECT_CALL_CTL_SCO + ear_detect_phone_active_deal(); +#endif +#if (TCFG_EAR_DETECT_AUTO_CHG_MASTER && TCFG_USER_TWS_ENABLE) + ear_detect_call_chg_master_deal(); +#endif //TCFG_EAR_DETECT_AUTO_CHG_MASTER +#endif // TCFG_EAR_DETECT_ENABLE + break; + case BT_STATUS_PHONE_HANGUP: + esco_dump_packet = ESCO_DUMP_PACKET_CALL; + log_info("phone_handup _1\n"); + jl_call_kws_handler(BT_STATUS_PHONE_HANGUP); + if (bt_user_priv_var.phone_ring_flag) { + bt_user_priv_var.phone_ring_flag = 0; + tone_play_stop(); + if (bt_user_priv_var.phone_timer_id) { + sys_timeout_del(bt_user_priv_var.phone_timer_id); + bt_user_priv_var.phone_timer_id = 0; + } + } + bt_user_priv_var.phone_income_flag = 0; + bt_user_priv_var.phone_num_flag = 0; + bt_user_priv_var.phone_con_sync_num_ring = 0; + bt_user_priv_var.phone_con_sync_ring = 0; + lmp_private_esco_suspend_resume(4); +#if (TCFG_EAR_DETECT_ENABLE && TCFG_EAR_DETECT_AUTO_CHG_MASTER && TCFG_USER_TWS_ENABLE) + ear_detect_change_master_timer_del(); //假如通话结束了,但是还没开始切换主从,取消切换 +#endif + break; + case BT_STATUS_PHONE_NUMBER: + log_info("BT_STATUS_PHONE_NUMBER\n"); + phone_number = (u8 *)bt->value; + //put_buf(phone_number, strlen((const char *)phone_number)); + if (bt_user_priv_var.phone_num_flag == 1) { + break; + } + bt_user_priv_var.income_phone_len = 0; + memset(bt_user_priv_var.income_phone_num, '\0', sizeof(bt_user_priv_var.income_phone_num)); + for (int i = 0; i < strlen((const char *)phone_number); i++) { + if (phone_number[i] >= '0' && phone_number[i] <= '9') { + //过滤,只有数字才能报号 + bt_user_priv_var.income_phone_num[bt_user_priv_var.income_phone_len++] = phone_number[i]; + if (bt_user_priv_var.income_phone_len >= sizeof(bt_user_priv_var.income_phone_num)) { + break; /*buffer 空间不够,后面不要了*/ + } + } + } + if (bt_user_priv_var.income_phone_len > 0) { + bt_user_priv_var.phone_num_flag = 1; + } else { + log_info("PHONE_NUMBER len err\n"); + } + //xtell code + if (bt_user_priv_var.last_call_type == BT_STATUS_PHONE_INCOME) { + user_send_cmd_prepare(USER_CTRL_HFP_CALL_CURRENT, bt_user_priv_var.income_phone_len,bt_user_priv_var.income_phone_num); + // // 将电话号码的每个字符转换为对应的 HEX 值 + // for (u8 i = 0; i < bt_user_priv_var.income_phone_len; i++) { + // // 将字符数字 ('0'-'9') 转换为其对应的数值 (0x00-0x09) + // // phone_num_hex[i] = bt_user_priv_var.income_phone_num[i] - '0'; + // xtell_uart_ai_12_call_number[i+3] = bt_user_priv_var.income_phone_num[i] - '0'; + // } + // // 打印转换后的 HEX 数据 + // printf("xtell call:"); + // for (u8 i = 0; i < bt_user_priv_var.income_phone_len+3; i++) { + // printf("%02X ", xtell_uart_ai_12_call_number[i+3]); + // } + // // uart0_ai_send_data(xtell_uart_ai_12_call_number,16); + // queue_ai_msg(xtell_uart_ai_12_call_number,16,12); + } + //end xtell code + break; + case BT_STATUS_INBAND_RINGTONE: + log_info("BT_STATUS_INBAND_RINGTONE\n"); +#if BT_INBAND_RINGTONE + bt_user_priv_var.inband_ringtone = bt->value; +#else + bt_user_priv_var.inband_ringtone = 0; +#endif + printf("bt_user_priv_var.inband_ringtone=0x%x\n", bt_user_priv_var.inband_ringtone); + break; + case BT_STATUS_BEGIN_AUTO_CON: + log_info("BT_STATUS_BEGIN_AUTO_CON\n"); + break; + case BT_STATUS_A2DP_MEDIA_START: + log_info(" BT_STATUS_A2DP_MEDIA_START:0x%x", bt->value); +#if TCFG_AUDIO_CVP_DUT_ENABLE + if (audio_dec_dut_en_get(0)) { + a2dp_dut_dec_open(bt->value); + } else +#endif /*TCFG_AUDIO_CVP_DUT_ENABLE*/ + { + a2dp_dec_open(bt->value); + } + break; + case BT_STATUS_A2DP_MEDIA_STOP: + log_info(" BT_STATUS_A2DP_MEDIA_STop"); + a2dp_dec_close(); + + extern void free_a2dp_using_decoder_conn(); + free_a2dp_using_decoder_conn(); + break; + case BT_STATUS_SCO_STATUS_CHANGE: + printf(" BT_STATUS_SCO_STATUS_CHANGE len:%d ,type:%d", (bt->value >> 16), (bt->value & 0x0000ffff)); + if (bt->value != 0xff) { + puts("<<<<<<<<<<value);*/ + esco_dec_open(&bt->value, 0); + + bt_user_priv_var.phone_call_dec_begin = 1; + if (get_call_status() == BT_CALL_ACTIVE) { + log_info("dec_begin,dump_packet clear\n"); + esco_dump_packet = ESCO_DUMP_PACKET_DEFAULT; + } +#if TCFG_USER_TWS_ENABLE + tws_page_scan_deal_by_esco(1); + pbg_user_mic_fixed_deal(1); +#endif + } else { + puts("<<<<<<<<<<value); + //u8 volume = app_audio_get_max_volume() * bt->value / 15; + u8 volume = bt->value; + u8 call_status = get_call_status(); + +#if BT_INBAND_RINGTONE + if ((call_status != BT_CALL_ACTIVE) && (bt->value == 0)) { + printf("not set vol\n"); + break; + } +#endif + + bt_user_priv_var.phone_vol = bt->value; + if ((call_status == BT_CALL_ACTIVE) || (call_status == BT_CALL_OUTGOING) || app_var.siri_stu) { + app_audio_set_volume(APP_AUDIO_STATE_CALL, volume, 1); + // printf("in bt_connctio app_audio_set_volume"); +#if TCFG_USER_TWS_ENABLE + if (call_status == BT_CALL_ACTIVE) { + bt_tws_sync_volume(); + } +#endif + } else { /*if (call_status != BT_CALL_HANGUP)*/ + /* + *只保存,不设置到dac + *微信语音通话的时候,会更新音量到app,但是此时的call status可能是hangup + */ + app_var.call_volume = volume; + } break; case BT_STATUS_SNIFF_STATE_UPDATE: - xlog(" BT_STATUS_SNIFF_STATE_UPDATE %d\n", bt->value); //0退出SNIFF + log_info(" BT_STATUS_SNIFF_STATE_UPDATE %d\n", bt->value); //0退出SNIFF if (bt->value == 0) { sniff_out = 1; +#if defined CFG_LED_MODE && (CFG_LED_MODE == CFG_LED_SOFT_MODE) + pwm_led_mode_set(pwm_led_display_mode_get()); +#endif +#if(TCFG_USER_TWS_ENABLE == 1) + led_module_exit_sniff_mode(); + pwm_led_clk_set(PWM_LED_CLK_BTOSC_24M); +#endif sys_auto_sniff_controle(MY_SNIFF_EN, bt->args); } else { +#if(TCFG_USER_TWS_ENABLE == 1) + led_module_enter_sniff_mode(); + pwm_led_clk_set((!TCFG_LOWPOWER_BTOSC_DISABLE) ? PWM_LED_CLK_RC32K : PWM_LED_CLK_BTOSC_24M); +#endif sys_auto_sniff_controle(0, bt->args); } break; case BT_STATUS_LAST_CALL_TYPE_CHANGE: + log_info("BT_STATUS_LAST_CALL_TYPE_CHANGE:%d\n", bt->value); + bt_user_priv_var.last_call_type = bt->value; break; case BT_STATUS_CONN_A2DP_CH: @@ -422,26 +1921,522 @@ static int bt_connction_status_event_handler(struct bt_event *bt) } break; case BT_STATUS_PHONE_MANUFACTURER: + log_info("BT_STATUS_PHONE_MANUFACTURER:%d\n", bt->value); + extern const u8 hid_conn_depend_on_dev_company; + app_var.remote_dev_company = bt->value; + if (hid_conn_depend_on_dev_company) { + if (bt->value) { + //user_send_cmd_prepare(USER_CTRL_HID_CONN, 0, NULL); + } else { + + if (get_curr_channel_state() == HID_CH) { + //如果只连上hid 先不断开 + } else { + user_send_cmd_prepare(USER_CTRL_HID_DISCONNECT, 0, NULL); + } + } + } break; case BT_STATUS_VOICE_RECOGNITION: - + log_info(" BT_STATUS_VOICE_RECOGNITION:%d \n", bt->value); + /* put_buf(bt, sizeof(struct bt_event)); */ + app_var.siri_stu = bt->value; + esco_dump_packet = ESCO_DUMP_PACKET_DEFAULT; break; case BT_STATUS_AVRCP_INCOME_OPID: - xlog("BT_STATUS_AVRCP_INCOME_OPID:%d\n", bt->value); +#define AVC_VOLUME_UP 0x41 +#define AVC_VOLUME_DOWN 0x42 + log_info("BT_STATUS_AVRCP_INCOME_OPID:%d\n", bt->value); + if (bt->value == AVC_VOLUME_UP) { + + } + if (bt->value == AVC_VOLUME_DOWN) { + + } break; default: - xlog(" BT STATUS DEFAULT\n"); + log_info(" BT STATUS DEFAULT\n"); break; } return 0; } + + +static void sys_time_auto_connection_deal(void *arg) +{ + if (bt_user_priv_var.auto_connection_counter) { + log_info("------------------------auto_timeout conuter %d", bt_user_priv_var.auto_connection_counter); + bt_user_priv_var.auto_connection_counter--; + user_send_cmd_prepare(USER_CTRL_START_CONNEC_VIA_ADDR, 6, bt_user_priv_var.auto_connection_addr); + } +} + +static void bt_hci_event_inquiry(struct bt_event *bt) +{ +#if TCFG_USER_EMITTER_ENABLE + if (bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) { + extern void emitter_search_stop(); + emitter_search_stop(); + } +#endif +} + +static void bt_hci_event_connection(struct bt_event *bt) +{ + //clk_set_sys_lock(BT_CONNECT_HZ, 0); + log_info("tws_conn_state=%d\n", bt_user_priv_var.tws_conn_state); + +#if TCFG_USER_TWS_ENABLE + bt_tws_hci_event_connect(); +#ifndef CONFIG_NEW_BREDR_ENABLE + tws_try_connect_disable(); +#endif +#else + if (bt_user_priv_var.auto_connection_timer) { + sys_timeout_del(bt_user_priv_var.auto_connection_timer); + bt_user_priv_var.auto_connection_timer = 0; + } + bt_user_priv_var.auto_connection_counter = 0; + bt_wait_phone_connect_control(0); + user_send_cmd_prepare(USER_CTRL_ALL_SNIFF_EXIT, 0, NULL); +#endif + +} + +extern void bt_get_vm_mac_addr(u8 *addr); +static void bt_discovery_and_connectable_using_loca_mac_addr(u8 inquiry_scan_en, u8 page_scan_en) +{ + + u8 local_addr[6]; + log_info("<<<<<<<<<<>>>>>>>>>>>>\n", inquiry_scan_en, page_scan_en); + + bt_get_vm_mac_addr(local_addr); + //log_info("local_adr\n"); + //put_buf(local_addr,6); + + lmp_hci_write_local_address(local_addr); + if (page_scan_en) { + user_send_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL); + } + if (inquiry_scan_en) { + user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL); + } +} + +static void bt_hci_event_disconnect(struct bt_event *bt) +{ + if (app_var.goto_poweroff_flag) { + return; + } + earphone_change_pwr_mode(PWR_LDO15, 0); + + /* if (get_total_connect_dev() == 0) { //已经没有设备连接 */ + /* sys_auto_shut_down_enable(); */ + /* } */ + + log_info("<<<<<<<<<<<<<>>>>>>>>>>>>\n", get_total_connect_dev()); + if (!get_curr_channel_state()) { + /* if (get_total_connect_dev() == 0) { //已经没有设备连接 */ +#if (TCFG_USER_TWS_ENABLE == 0) + if (!app_var.goto_poweroff_flag) { /*关机时不改UI*/ + ui_update_status(STATUS_BT_DISCONN); + } +#endif + sys_auto_shut_down_enable(); + } +#if (TCFG_BD_NUM == 2) + log_info("get_bt_connect_status = 0x%x,%x\n", get_bt_connect_status(), get_curr_channel_state()); + if (!get_curr_channel_state()) { + sys_auto_shut_down_enable(); + } +#endif + +#if TCFG_TEST_BOX_ENABLE + if (testbox_get_ex_enter_dut_flag()) { + bt_discovery_and_connectable_using_loca_mac_addr(1, 1); + return; + } + + if (testbox_get_status()) { + bt_discovery_and_connectable_using_loca_mac_addr(0, 1); + return; + } +#endif + +#if (TCFG_AUTO_STOP_PAGE_SCAN_TIME && TCFG_BD_NUM == 2) + if (get_total_connect_dev() == 1) { //当前有一台连接上了 + if (app_var.auto_stop_page_scan_timer == 0) { + app_var.auto_stop_page_scan_timer = sys_timeout_add(NULL, bt_close_page_scan, (TCFG_AUTO_STOP_PAGE_SCAN_TIME * 1000)); //2 + } + } else { + if (app_var.auto_stop_page_scan_timer) { + sys_timeout_del(app_var.auto_stop_page_scan_timer); + app_var.auto_stop_page_scan_timer = 0; + } + } +#endif //endif AUTO_STOP_PAGE_SCAN_TIME + +#if (TCFG_BD_NUM == 2) + if ((bt->event == ERROR_CODE_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE_BD_ADDR) + || (bt->event == ERROR_CODE_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED) + || (bt->event == ERROR_CODE_ROLE_SWITCH_FAILED) + || (bt->event == ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS)) { + /* + *连接接受超时 + *如果支持1t2,可以选择继续回连下一台,除非已经回连完毕 + */ + if (get_current_poweron_memory_search_index(NULL)) { + user_send_cmd_prepare(USER_CTRL_START_CONNECTION, 0, NULL); + return; + } + } +#endif + +#if TCFG_USER_TWS_ENABLE + if (bt->value == ERROR_CODE_CONNECTION_TIMEOUT) { + bt_tws_phone_connect_timeout(); + } else { + bt_tws_phone_disconnected(); + } +#else + bt_wait_phone_connect_control(1); +#endif +} + +static void bt_hci_event_linkkey_missing(struct bt_event *bt) +{ +#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV) +#if (CONFIG_NO_DISPLAY_BUTTON_ICON && TCFG_CHARGESTORE_ENABLE) + //已取消配对了 + if (bt_ble_icon_get_adv_state() == ADV_ST_RECONN) { + //切换广播 + log_info("switch_INQ\n"); + bt_ble_icon_open(ICON_TYPE_INQUIRY); + } +#endif +#endif +} + +static void bt_hci_event_page_timeout() +{ + + log_info("------------------------HCI_EVENT_PAGE_TIMEOUT conuter %d", bt_user_priv_var.auto_connection_counter); +#if TCFG_USER_TWS_ENABLE + bt_tws_phone_page_timeout(); +#else + /* if (!bt_user_priv_var.auto_connection_counter) { */ + if (bt_user_priv_var.auto_connection_timer) { + sys_timer_del(bt_user_priv_var.auto_connection_timer); + bt_user_priv_var.auto_connection_timer = 0; + } + +#if (TCFG_BD_NUM == 2) + if (get_current_poweron_memory_search_index(NULL)) { + user_send_cmd_prepare(USER_CTRL_START_CONNECTION, 0, NULL); + } +#endif + + bt_wait_phone_connect_control(1); +#endif +} + +static void bt_hci_event_connection_timeout(struct bt_event *bt) +{ + earphone_change_pwr_mode(PWR_LDO15, 0); + +#if TCFG_TEST_BOX_ENABLE + if (testbox_get_ex_enter_dut_flag()) { + bt_discovery_and_connectable_using_loca_mac_addr(1, 1); + return; + } +#endif + + if (!get_remote_test_flag() && !get_esco_busy_flag()) { + bt_user_priv_var.auto_connection_counter = (TIMEOUT_CONN_TIME * 1000); + memcpy(bt_user_priv_var.auto_connection_addr, bt->args, 6); +#if TCFG_USER_TWS_ENABLE + bt_tws_phone_connect_timeout(); +#else + +#if ((CONFIG_BT_MODE == BT_BQB)||(CONFIG_BT_MODE == BT_PER)) + bt_wait_phone_connect_control(1); +#else + user_send_cmd_prepare(USER_CTRL_PAGE_CANCEL, 0, NULL); +#if (TCFG_BD_NUM == 2) + if (bt_user_priv_var.auto_connection_timer) { + log_info("1To2 had registered timer,del it\n");//1To2 存在两个手机都断连的情况,所以要判断,删掉第一个手机断连时候的定时器 + sys_timeout_del(bt_user_priv_var.auto_connection_timer); + bt_user_priv_var.auto_connection_timer = 0; + } +#endif + bt_wait_connect_and_phone_connect_switch(0); +#endif + //user_send_cmd_prepare(USER_CTRL_START_CONNEC_VIA_ADDR, 6, bt->args); +#endif + } else { +#if TCFG_USER_TWS_ENABLE + bt_tws_phone_disconnected(); +#else + bt_wait_phone_connect_control(1); +#endif + + } +} + +static void bt_hci_event_connection_exist(struct bt_event *bt) +{ + + if (!get_remote_test_flag() && !get_esco_busy_flag()) { + bt_user_priv_var.auto_connection_counter = (8 * 1000); + memcpy(bt_user_priv_var.auto_connection_addr, bt->args, 6); +#if TCFG_USER_TWS_ENABLE + bt_tws_phone_connect_timeout(); +#else + if (bt_user_priv_var.auto_connection_timer) { + sys_timer_del(bt_user_priv_var.auto_connection_timer); + bt_user_priv_var.auto_connection_timer = 0; + } + bt_wait_connect_and_phone_connect_switch(0); + //user_send_cmd_prepare(USER_CTRL_START_CONNEC_VIA_ADDR, 6, bt->args); +#endif + } else { +#if TCFG_USER_TWS_ENABLE + bt_tws_phone_disconnected(); +#else + bt_wait_phone_connect_control(1); +#endif + + } +} + + + +void eartch_testbox_flag(u8 flag); + +enum { + TEST_STATE_INIT = 1, + TEST_STATE_EXIT = 3, +}; + +enum { + ITEM_KEY_STATE_DETECT = 0, + ITEM_IN_EAR_DETECT, +}; + +static u8 in_ear_detect_test_flag = 0; +static void testbox_in_ear_detect_test_flag_set(u8 flag) +{ + in_ear_detect_test_flag = flag; +} + +u8 testbox_in_ear_detect_test_flag_get(void) +{ + return in_ear_detect_test_flag; +} + +static void bt_in_ear_detection_test_state_handle(u8 state, u8 *value) +{ + switch (state) { + case TEST_STATE_INIT: + testbox_in_ear_detect_test_flag_set(1); + +#if TCFG_EARTCH_EVENT_HANDLE_ENABLE + eartch_testbox_flag(1); +#endif + //start trim + break; + case TEST_STATE_EXIT: + testbox_in_ear_detect_test_flag_set(0); +#if TCFG_EARTCH_EVENT_HANDLE_ENABLE + eartch_testbox_flag(0); +#endif + break; + } +} + +static void bt_vendor_meta_event_handle(u8 sub_evt, u8 *arg, u8 len) +{ + log_info("vendor event:%x\n", sub_evt); + log_info_hexdump(arg, 6); + + if (sub_evt != HCI_SUBEVENT_VENDOR_TEST_MODE_CFG) { + log_info("unknow_sub_evt:%x\n", sub_evt); + return; + } + + u8 test_item = arg[0]; + u8 state = arg[1]; + + if (ITEM_IN_EAR_DETECT == test_item) { + bt_in_ear_detection_test_state_handle(state, NULL); + } +} + +extern void set_remote_test_flag(u8 own_remote_test); + +static int bt_hci_event_handler(struct bt_event *bt) +{ + //对应原来的蓝牙连接上断开处理函数 ,bt->value=reason + log_info("------------------------bt_hci_event_handler reason %x %x", bt->event, bt->value); + + if (bt->event == HCI_EVENT_VENDOR_REMOTE_TEST) { + if (VENDOR_TEST_DISCONNECTED == bt->value) { +#if TCFG_TEST_BOX_ENABLE + if (testbox_get_status()) { + if (get_remote_test_flag()) { + testbox_clear_connect_status(); + } + } +#endif + set_remote_test_flag(0); + log_info("clear_test_box_flag"); + cpu_reset(); + return 0; + } else { + +#if TCFG_USER_BLE_ENABLE +#if (CONFIG_BT_MODE == BT_NORMAL) + //1:edr con;2:ble con; + if (VENDOR_TEST_LEGACY_CONNECTED_BY_BT_CLASSIC == bt->value) { + extern void bt_ble_adv_enable(u8 enable); + bt_ble_adv_enable(0); + } +#endif +#endif +#if TCFG_USER_TWS_ENABLE + if (VENDOR_TEST_CONNECTED_WITH_TWS != bt->value) { + bt_tws_poweroff(); + } +#endif + } + } + + /* if (((bt->event != HCI_EVENT_CONNECTION_COMPLETE) && (bt->event != HCI_EVENT_VENDOR_REMOTE_TEST)) \ */ + /* || ((bt->event == HCI_EVENT_CONNECTION_COMPLETE) && (bt->value != ERROR_CODE_SUCCESS))) { */ + /* #if TCFG_TEST_BOX_ENABLE */ + /* if (testbox_get_status()) { */ + /* if (get_remote_test_flag()) { */ + /* chargestore_clear_connect_status(); */ + /* } */ + /* //return 0; */ + /* } */ + /* #endif */ + /* } */ + + switch (bt->event) { + case HCI_EVENT_VENDOR_META: + bt_vendor_meta_event_handle(bt->value, bt->args, 6); + break; + case HCI_EVENT_INQUIRY_COMPLETE: + log_info(" HCI_EVENT_INQUIRY_COMPLETE \n"); + bt_hci_event_inquiry(bt); + break; + case HCI_EVENT_USER_CONFIRMATION_REQUEST: + log_info(" HCI_EVENT_USER_CONFIRMATION_REQUEST \n"); + ///<可通过按键来确认是否配对 1:配对 0:取消 + bt_send_pair(1); + break; + case HCI_EVENT_USER_PASSKEY_REQUEST: + log_info(" HCI_EVENT_USER_PASSKEY_REQUEST \n"); + ///<可以开始输入6位passkey + break; + case HCI_EVENT_USER_PRESSKEY_NOTIFICATION: + log_info(" HCI_EVENT_USER_PRESSKEY_NOTIFICATION %x\n", bt->value); + ///<可用于显示输入passkey位置 value 0:start 1:enrer 2:earse 3:clear 4:complete + break; + case HCI_EVENT_PIN_CODE_REQUEST : + log_info("HCI_EVENT_PIN_CODE_REQUEST \n"); + bt_send_pair(1); + break; + + case HCI_EVENT_VENDOR_NO_RECONN_ADDR : + log_info("HCI_EVENT_VENDOR_NO_RECONN_ADDR \n"); + bt_hci_event_disconnect(bt) ; + break; + + case HCI_EVENT_DISCONNECTION_COMPLETE : + log_info("HCI_EVENT_DISCONNECTION_COMPLETE \n"); + bt_hci_event_disconnect(bt) ; + break; + + case BTSTACK_EVENT_HCI_CONNECTIONS_DELETE: + case HCI_EVENT_CONNECTION_COMPLETE: +#if PHONE_DLY_DISCONN_TIME + if (bt->value == ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION) { + if (app_var.phone_dly_discon_time) { + sys_timeout_del(app_var.phone_dly_discon_time); + bt_discon_dly_handle(NULL); + } + } +#endif + log_info(" HCI_EVENT_CONNECTION_COMPLETE \n"); + switch (bt->value) { + case ERROR_CODE_SUCCESS : + log_info("ERROR_CODE_SUCCESS \n"); + testbox_in_ear_detect_test_flag_set(0); + bt_hci_event_connection(bt); + break; + case ERROR_CODE_PIN_OR_KEY_MISSING: + log_info(" ERROR_CODE_PIN_OR_KEY_MISSING \n"); + bt_hci_event_linkkey_missing(bt); + + case ERROR_CODE_SYNCHRONOUS_CONNECTION_LIMIT_TO_A_DEVICE_EXCEEDED : + case ERROR_CODE_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES: + case ERROR_CODE_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE_BD_ADDR: + case ERROR_CODE_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED : + case ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION : + case ERROR_CODE_CONNECTION_TERMINATED_BY_LOCAL_HOST : + case ERROR_CODE_AUTHENTICATION_FAILURE : + //case CUSTOM_BB_AUTO_CANCEL_PAGE: + bt_hci_event_disconnect(bt) ; + break; + + case ERROR_CODE_PAGE_TIMEOUT: + log_info(" ERROR_CODE_PAGE_TIMEOUT \n"); + bt_hci_event_page_timeout(); + break; + + case ERROR_CODE_CONNECTION_TIMEOUT: + log_info(" ERROR_CODE_CONNECTION_TIMEOUT \n"); + bt_hci_event_connection_timeout(bt); + break; + + case ERROR_CODE_ROLE_SWITCH_FAILED: + log_info("ERROR_CODE_ROLE_SWITCH_FAILED \n"); + case ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS : + log_info("ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS \n"); + bt_hci_event_connection_exist(bt); + break; + default: + break; + + } + break; + default: + break; + + } + return 0; +} + + +//恢复前台运行 +static void earphone_run_at_foreground() +{ + sys_auto_shut_down_disable(); +} + + +/* + * 系统事件处理函数 + */ static int event_handler(struct application *app, struct sys_event *event) { - le_user_app_event_handler(event); - + // le_user_app_event_handler(event); + if (SYS_EVENT_REMAP(event)) { g_printf("****SYS_EVENT_REMAP**** \n"); return 0; @@ -449,7 +2444,21 @@ static int event_handler(struct application *app, struct sys_event *event) switch (event->type) { case SYS_KEY_EVENT: + /* + * 普通按键消息处理 + */ + if (bt_user_priv_var.fast_test_mode) { + audio_adc_mic_demo_close(); + tone_play_index(IDEX_TONE_NORMAL, 1); + } +#if CONFIG_BT_BACKGROUND_ENABLE + if (bt_in_background()) { + break; + } +#endif + app_earphone_key_event_handler(event); break; + case SYS_BT_EVENT: /* * 蓝牙事件处理 @@ -460,27 +2469,51 @@ static int event_handler(struct application *app, struct sys_event *event) } else if ((u32)event->arg == SYS_BT_EVENT_TYPE_HCI_STATUS) { bt_hci_event_handler(&event->u.bt); } +#if TCFG_ADSP_UART_ENABLE + else if (!strcmp(event->arg, "UART")) { + extern void bt_uart_command_handler(struct uart_event * event); + bt_uart_command_handler(&event->u.uart); + } else if (!strcmp(event->arg, "UART_CMD")) { + extern void adsp_uart_command_event_handle(struct uart_cmd_event * uart_cmd); + adsp_uart_command_event_handle(&event->u.uart_cmd); + } +#endif +#if TCFG_USER_TWS_ENABLE + else if (((u32)event->arg == SYS_BT_EVENT_FROM_TWS)) { + /* + * tws事件处理函数 + */ + bt_tws_connction_status_event_handler(&event->u.bt); + } +#endif break; 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 (TCFG_ONLINE_ENABLE || TCFG_CFG_TOOL_ENABLE) + } else 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); +#endif +#if TCFG_ONLINE_ENABLE + } else if ((u32)event->arg == DEVICE_EVENT_FROM_CI_UART) { + ci_data_rx_handler(CI_UART); +#if TCFG_USER_TWS_ENABLE + } else if ((u32)event->arg == DEVICE_EVENT_FROM_CI_TWS) { + ci_data_rx_handler(CI_TWS); +#endif +#endif } else if ((u32)event->arg == DEVICE_EVENT_FROM_POWER) { return app_power_event_handler(&event->u.dev); } -#if (JL_EARPHONE_APP_EN) - else if ((u32)event->arg == DEVICE_EVENT_FROM_RCSP) { - xlog("DEVICE_EVENT_FROM_RCSP: %d", event->u.rcsp.event); - switch (event->u.rcsp.event) { - case MSG_JL_UPDATE_START: - xlog(">>> Xtell APP: MSG_JL_UPDATE_START\n"); - // You can add UI notifications here, like LED blinking or a tone. - break; - default: - break; - } +#if TCFG_CHARGESTORE_ENABLE + else if ((u32)event->arg == DEVICE_EVENT_CHARGE_STORE) { + app_chargestore_event_handler(&event->u.chargestore); } #endif #if TCFG_UMIDIGI_BOX_ENABLE @@ -493,8 +2526,81 @@ static int event_handler(struct application *app, struct sys_event *event) app_testbox_event_handler(&event->u.testbox); } #endif +#if TCFG_EAR_DETECT_ENABLE + else if ((u32)event->arg == DEVICE_EVENT_FROM_EAR_DETECT) { + ear_detect_event_handle(event->u.ear.value); + } +#endif +#if TCFG_ANC_BOX_ENABLE + else if ((u32)event->arg == DEVICE_EVENT_FROM_ANC) { + return app_ancbox_event_handler(&event->u.ancbox); + } +#endif +#if TCFG_EARTCH_EVENT_HANDLE_ENABLE + else if ((u32)event->arg == DEVICE_EVENT_FROM_EARTCH) { + extern void eartch_event_handle(u8 state); + eartch_event_handle(event->u.ear.value); + } +#endif /* #if TCFG_EARTCH_EVENT_HANDLE_ENABLE */ + +#if APP_ONLINE_DEBUG + else if ((u32)event->arg == DEVICE_EVENT_ONLINE_DATA) { + extern void app_online_event_handle(int evt_value); + app_online_event_handle(event->u.dev.value); + } +#endif /* #if TCFG_EARTCH_EVENT_HANDLE_ENABLE */ + break; +#if TCFG_USER_TWS_ENABLE + case SYS_IR_EVENT: + g_printf("[SYS_IR_EVENT]"); +#if TCFG_USER_TWS_ENABLE + if (get_bt_tws_connect_status()) { + if (event->u.ir.event == IR_SENSOR_EVENT_FAR) { //FAR + tws_api_sync_call_by_uuid('T', SYNC_CMD_IRSENSOR_EVENT_FAR, 500); + } else if (event->u.ir.event == IR_SENSOR_EVENT_NEAR) { //NEAR + tws_api_sync_call_by_uuid('T', SYNC_CMD_IRSENSOR_EVENT_NEAR, 500); + } + } else +#endif + { + if (event->u.ir.event == IR_SENSOR_EVENT_FAR) { //FAR + g_printf("TWS FAR STOP MUSIC PLAY"); + g_printf("a2dp_get_status = %d", a2dp_get_status()); + if (a2dp_get_status() == BT_MUSIC_STATUS_STARTING) { + r_printf("STOP...\n"); + user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PAUSE, 0, NULL); + } + } else if (event->u.ir.event == IR_SENSOR_EVENT_NEAR) { //NEAR + g_printf("TWS NEAR START MUSIC PLAY"); + g_printf("a2dp_get_status = %d", a2dp_get_status()); + if (a2dp_get_status() != BT_MUSIC_STATUS_STARTING) { + r_printf("START...\n"); + user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PLAY, 0, NULL); + } + } + } + + return 0; + + case SYS_PBG_EVENT: + pbg_user_event_deal(&event->u.pbg); + break; +#endif +#if TCFG_AUDIO_SPATIAL_EFFECT_ENABLE + /*空间音频校准*/ + case SYS_AUD_EVENT: + if ((u32)event->arg == AUDIO_EVENT_TRIM_IMU_START) { + extern int spatial_imu_trim_start(); + spatial_imu_trim_task_start(); + } else if ((u32)event->arg == AUDIO_EVENT_TRIM_IMU_STOP) { + extern int spatial_imu_trim_task_stop(); + spatial_imu_trim_task_stop(); + } + break; +#endif /*TCFG_AUDIO_SPATIAL_EFFECT_ENABLE*/ + default: return false; } @@ -506,23 +2612,227 @@ static int event_handler(struct application *app, struct sys_event *event) } #endif return false; - } -/////////////////////////////////////////////////////////////////////////////////////////////////// +int bt_in_background_event_handler(struct sys_event *event) +{ + printf("bt_in_background_event_handler"); + return event_handler(NULL, event); +} -static const struct application_operation app_handler_ops = { +u8 bt_app_exit_check(void) +{ + int esco_state; + if (app_var.siri_stu && app_var.siri_stu != 3) { + // siri不退出 + return 0; + } + 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 0; + } + + return 1; +} + +int bt_app_exit(void *priv) +{ + int a2dp_state; + init_ok = 0; + a2dp_state = a2dp_get_status(); + extern u8 bt_media_is_running(); + extern void a2dp_dec_close(); + if (bt_media_is_running()) { + a2dp_dec_close(); + a2dp_media_clear_packet_before_seqn(0); + } + + tone_play_stop(); + + user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL); + user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL); + user_send_cmd_prepare(USER_CTRL_PAGE_CANCEL, 0, NULL); + user_send_cmd_prepare(USER_CTRL_CONNECTION_CANCEL, 0, NULL); + user_send_cmd_prepare(USER_CTRL_POWER_OFF, 0, NULL); + +#if TCFG_USER_TWS_ENABLE + if (tws_api_get_tws_state() & TWS_STA_SIBLING_DISCONNECTED) { + return 1; + } +#endif + btstack_exit(); + sys_auto_shut_down_disable(); + return 1; +} + +static void tone_play_end_callback(void *priv, int flag) +{ + int index = (int)priv; + + switch (index) { + case IDEX_TONE_BT_MODE: + printf("%s:IDEX_TONE_BT_MODE", __FUNCTION__); + /* 按键消息使能 */ + sys_key_event_enable(); + break; + } +} + +/* + * earphone 模式状态机, 通过start_app()控制状态切换 + */ +/* extern int audio_mic_init(); */ +static int state_machine(struct application *app, enum app_state state, struct intent *it) +{ + int error = 0; + static u8 tone_player_err = 0; + r_printf("bt_state_machine=%d\n", state); + switch (state) { + case APP_STA_CREATE: + /* set_adjust_conn_dac_check(0); */ +#if TCFG_SD0_ENABLE || TCFG_PC_ENABLE + STATUS *p_tone = get_tone_config(); + tone_play_index(p_tone->bt_init_ok, 1); +#else + if (app_var.play_poweron_tone) { + STATUS *p_tone = get_tone_config(); + /* tone_play_index(p_tone->power_on, 1); */ + tone_player_err = tone_play_index_with_callback(p_tone->power_on, 1, tone_play_end_callback, (void *)IDEX_TONE_BT_MODE); + } else { +#ifdef CONFIG_CURRENT_SOUND_DEAL_ENABLE + dac_analog_power_control(0); +#endif + } +#endif + break; + case APP_STA_START: + //进入蓝牙模式,UI退出充电状态 + ui_update_status(STATUS_EXIT_LOWPOWER); + if (!it) { + break; + } + switch (it->action) { + case ACTION_EARPHONE_MAIN: + /* + * earphone 模式初始化 + */ + + clk_set("sys", BT_NORMAL_HZ); + u32 sys_clk = clk_get("sys"); + bt_pll_para(TCFG_CLOCK_OSC_HZ, sys_clk, 0, 0); + + /* bredr_set_dut_enble(1, 1); */ + bt_function_select_init(); + bredr_handle_register(); + EARPHONE_STATE_INIT(); + btstack_init(); +#if TCFG_USER_TWS_ENABLE + tws_profile_init(); + sys_key_event_filter_disable(); +#endif + + /* 按键消息使能 */ + sys_key_event_enable(); +#if TCFG_AUDIO_WIDE_AREA_TAP_ENABLE + extern int audio_wat_click_open(); + audio_wat_click_open(); +#endif /*TCFG_AUDIO_WIDE_AREA_TAP_ENABLE*/ + sys_auto_shut_down_enable(); + bt_sniff_feature_init(); + sys_auto_sniff_controle(MY_SNIFF_EN, NULL); + app_var.dev_volume = -1; + + // colorful_lights_function().update_display_mode(COLORFUL_LIGHTS_GRADE_MODEL); + // colorful_lights_function().update_display_mode(COLORFUL_LIGHTS_DISPLAY_NULL); //关闭所有灯 + // colorful_lights_function().update_display_mode(COLORFUL_LIGHTS_POWER_ON); //开机时的白色呼吸灯 + // colorful_lights_function().update_display_mode(COLORFUL_LIGHTS_BREATHE_MODE); // 默认呼吸灯 + // colorful_lights_function().update_display_mode(COLORFUL_LIGHTS_XTELL_AUDION_MODE); //音频灯 + // colorful_lights_function().update_display_mode(COLORFUL_LIGHTS_XTELL_GREEN_BREATHE_MODE); + // colorful_lights_function().update_display_mode(COLORFUL_LIGHTS_XTELL_ORANGE_BREATHE_MODE); + + // 设置呼吸灯参数:红色,周期2秒 + // set_breathe_light_params(255,255, 0, 0,10,1000); + // colorful_lights_function().update_display_mode(COLORFUL_LIGHTS_XTELL_BREATHE_MODE); + + // 设置渐变灯参数:xtell + // Color top_color = {255,0, 0,0,10}; + // Color bottom_color = {0, 0, 255,5,15}; + // set_gradient_light_params(top_color, bottom_color); //配置灯的参数 + // colorful_lights_function().update_display_mode(COLORFUL_LIGHTS_XTELL_SECTION_MODE); // 启动模式 + break; + case ACTION_A2DP_START: +#if (BT_SUPPORT_MUSIC_VOL_SYNC && CONFIG_BT_BACKGROUND_ENABLE) + app_audio_set_volume(APP_AUDIO_STATE_MUSIC, app_var.bt_volume, 1); + r_printf("BT_BACKGROUND RESET ACTION_A2DP_START STATE_MUSIC bt_volume=%d\n", app_var.bt_volume); +#endif + a2dp_dec_open(0); + break; + case ACTION_BY_KEY_MODE: + user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_PLAY, 0, NULL); + break; + case ACTION_TONE_PLAY: + STATUS *p_tone = get_tone_config(); + tone_play_index(p_tone->bt_init_ok, 1); + break; + case ACTION_DO_NOTHING: + break; + } + break; + case APP_STA_PAUSE: + //转入后台运行 +#if CONFIG_BT_BACKGROUND_ENABLE + error = bt_switch_to_background(); + if (error == 0) { + sys_auto_shut_down_disable(); + } +#if (BT_SUPPORT_MUSIC_VOL_SYNC) + app_var.bt_volume = app_audio_get_volume(APP_AUDIO_STATE_MUSIC); + if (app_var.dev_volume != -1) { //切换到其它模式恢复上一次的音量 + r_printf("resume dev_volume=%d\n", app_var.dev_volume); + app_audio_set_volume(APP_AUDIO_STATE_MUSIC, app_var.dev_volume, 1); + app_var.dev_volume = -1; + } +#endif + log_info("APP_STA_PAUSE: %d\n", error); +#endif + break; + case APP_STA_RESUME: +#if (BT_SUPPORT_MUSIC_VOL_SYNC && CONFIG_BT_BACKGROUND_ENABLE) + app_var.dev_volume = app_audio_get_volume(APP_AUDIO_STATE_MUSIC); + r_printf("APP_STA_RESUME rec dev_volume=%d\n", app_audio_get_volume(APP_AUDIO_STATE_MUSIC)); +#endif + //恢复前台运行 + sys_auto_shut_down_disable(); + sys_key_event_enable(); + break; + case APP_STA_STOP: + break; + case APP_STA_DESTROY: + r_printf("APP_STA_DESTROY\n"); + if (!app_var.goto_poweroff_flag) { + bt_app_exit(NULL); + } + break; + } + + return error; +} + +static const struct application_operation app_earphone_ops = { .state_machine = state_machine, .event_handler = event_handler, }; - /* * 注册earphone模式 */ -REGISTER_APPLICATION(app_handler) = { - .name = "handler", - .action = ACTION_EARPHONE_MAIN, - .ops = &app_handler_ops, +REGISTER_APPLICATION(app_earphone) = { + .name = "handler", + .action = ACTION_EARPHONE_MAIN, + .ops = &app_earphone_ops, .state = APP_STA_DESTROY, }; diff --git a/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.HIDE b/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.HIDE new file mode 100644 index 0000000..e23b9c8 --- /dev/null +++ b/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.HIDE @@ -0,0 +1,528 @@ +#include "system/includes.h" +#include "media/includes.h" +#include "tone_player.h" +#include "earphone.h" + +#include "app_config.h" +#include "app_action.h" +#include "app_task.h" + +#include "btstack/avctp_user.h" +#include "btstack/btstack_task.h" +#include "btctrler/btctrler_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 "bt_ble.h" +#include "bt_tws.h" +#include "pbg_user.h" +#include "btstack/bluetooth.h" +#include "colorful_lights/colorful_lights.h" + +#include "app_chargestore.h" +#include "jl_kws/jl_kws_api.h" + +#include "asm/charge.h" +#include "app_charge.h" +#include "ui_manage.h" + +#include "app_chargestore.h" +#include "app_umidigi_chargestore.h" +#include "app_testbox.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 "ir_sensor/ir_manage.h" +#include "in_ear_detect/in_ear_manage.h" +#include "vol_sync.h" +#include "bt_background.h" +#include "default_event_handler.h" +#include "debug.h" +#include "system/event.h" +#include "../nvs/nvs.h" +#if (JL_EARPHONE_APP_EN) +#include "rcsp_adv_bluetooth.h" +#endif +/////////////////////////////////////////////////////////////////////////////////////////////////// +//宏定义 +#define LOG_TAG_CONST EARPHONE +#define LOG_TAG "[EARPHONE]" +#define LOG_ERROR_ENABLE +#define LOG_DEBUG_ENABLE +#define xlog_ENABLE + + +#if(USE_DMA_UART_TEST) //使用dm串口测试时不能同时打开 +#define MY_SNIFF_EN 0 +#else +#define MY_SNIFF_EN 1 //默认打开 +#endif + +#define ENABLE_XLOG 1 +#ifdef xlog +#undef xlog +#endif +#if ENABLE_XLOG + #define xlog(format, ...) printf("[XT:%s] " format, __func__, ##__VA_ARGS__) +#else + #define xlog(format, ...) ((void)0) +#endif +// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////////////////////// +//变量 +extern u8 init_ok; +extern u8 sniff_out; +unsigned char xtell_bl_state=0; //存放经典蓝牙的连接状态,0断开,1是连接 +u8 bt_newname =0; +unsigned char xt_ble_new_name[9] = "tws"; +static u16 play_poweron_ok_timer_id = 0; + +// -- 初始化标志位 -- +u8 SC7U22_init = 0x10; //六轴是否初始化 +u8 MMC5603nj_init = 0x20; //地磁是否初始化 +u8 BMP280_init = 0x30; //气压计初始化 +// -- 线程id -- +u16 SC7U22_calibration_id; +u16 start_collect_fuc_id; +u16 BLE_send_fuc_id; +u16 rfid_fuc_id; +// +/////////////////////////////////////////////////////////////////////////////////////////////////// +extern int bt_hci_event_handler(struct bt_event *bt); +extern void SC7U22_static_calibration(void); +extern void create_process(u16* pid, const char* name, void *priv, void (*func)(void *priv), u32 msec); +extern void close_process(u16* pid,char* name); +extern void start_collect_fuc(void); +extern void BLE_send_fuc(void); +extern void xtell_ble_central_test_start(void); +/////////////////////////////////////////////////////////////////////////////////////////////////// +/* + * 模式状态机, 通过start_app()控制状态切换 + */ +/* extern int audio_mic_init(); */ + +static int state_machine(struct application *app, enum app_state state, struct intent *it){ + int error = 0; + static u8 tone_player_err = 0; + xlog("bt_state_machine=%d\n", state); + switch (state) { + case APP_STA_CREATE: + xlog("APP_STA_CREATE\n"); + /* set_adjust_conn_dac_check(0); */ + + break; + case APP_STA_START: + xlog("APP_STA_START\n"); + if (!it) { + xlog("APP_STA_START:it none\n"); + break; + } + switch (it->action) { + case ACTION_EARPHONE_MAIN: + xlog("ble init\n"); + /* + * handler 初始化 + */ + clk_set("sys", BT_NORMAL_HZ); + u32 sys_clk = clk_get("sys"); + bt_pll_para(TCFG_CLOCK_OSC_HZ, sys_clk, 0, 0); + /* bredr_set_dut_enble(1, 1); */ + bt_function_select_init(); + bredr_handle_register(); + EARPHONE_STATE_INIT(); + btstack_init(); + sys_auto_shut_down_enable(); + bt_sniff_feature_init(); + sys_auto_sniff_controle(MY_SNIFF_EN, NULL); + app_var.dev_volume = -1; + break; + case ACTION_A2DP_START: //蓝牙音频传输协议 + xlog("ACTION_A2DP_START\n"); + break; + case ACTION_BY_KEY_MODE: + xlog("ACTION_BY_KEY_MODE\n"); + break; + case ACTION_TONE_PLAY: + xlog("ACTION_TONE_PLAY\n"); + // STATUS *p_tone = get_tone_config(); + // tone_play_index(p_tone->bt_init_ok, 1); + break; + case ACTION_DO_NOTHING: + xlog("ACTION_DO_NOTHING\n"); + break; + } + break; + case APP_STA_PAUSE: + xlog("APP_STA_PAUSE\n"); + break; + case APP_STA_RESUME: + xlog("APP_STA_RESUME\n"); + //恢复前台运行 + sys_auto_shut_down_disable(); + sys_key_event_enable(); + break; + case APP_STA_STOP: + xlog("APP_STA_STOP\n"); + break; + case APP_STA_DESTROY: + xlog("APP_STA_DESTROY\n"); + r_printf("APP_STA_DESTROY\n"); + if (!app_var.goto_poweroff_flag) { + bt_app_exit(NULL); + } + break; + } + xlog("state machine error\n"); + return error; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +//handle + + +void le_user_app_send_event(size_t command, unsigned char* data, size_t size) +{ + // 中断->事件 + static unsigned char buffer[512]; + if(data && size && size <= sizeof(buffer)) { + // 拷贝到缓存,避免转发事件的时候,地址发送改变。 + memcpy(buffer, data, size); + struct sys_event event; + event.type = SYS_APP_USER_EVENT; + event.u.app.command = command; + event.u.app.buffer = buffer; + event.u.app.size = size; + sys_event_notify(&event); + } +} + +void le_user_app_event_handler(struct sys_event* event){ + + switch (event->type) { + // 打印接收到的数据 + printf("BLE data\n"); + put_buf(event->u.app.buffer, event->u.app.size); + case SYS_APP_USER_EVENT: + if (event->u.app.buffer[0] == 0xBE && event->u.app.buffer[1] == 0xBB) { + if(event->u.app.buffer[2] == 0x01){ //后面的数据长度 1 + switch (event->u.app.buffer[3]){ + case 0x01: + nvs_test_factory_info(); + break; + case 0x02: + // factory_info_t read_info;; + // nvs_read_factory_info(&read_info); + extern void rfid_task_fuc(void); + create_process(&rfid_fuc_id,"rfid",NULL,rfid_task_fuc,2000); + break; + case 0xff: //测试 + int ret = hw_iic_init(0); + // int ret = soft_iic_init(0); + xlog("init iic result:%d\n", ret); //返回0成功 + extern void i2c_scanner_probe(void); + i2c_scanner_probe(); + + break; + default: + break; + } + }else if(event->u.app.buffer[2] == 0x02){ //后面数据长度为2 + switch (event->u.app.buffer[3]){ //数据包类型 + case 0x00: + break; + } + } + } + break; + + default: + xlog("%d\n",event->type); + break; + } + + +} + + +static void play_poweron_ok_timer(void *priv) +{ + app_var.wait_timer_do = 0; + + log_d("\n-------play_poweron_ok_timer-------\n", priv); + if (is_dac_power_off()) { +#if TCFG_USER_TWS_ENABLE + bt_tws_poweron(); +#else + bt_wait_connect_and_phone_connect_switch(0); +#endif + return; + } + + app_var.wait_timer_do = sys_timeout_add(priv, play_poweron_ok_timer, 100); +} + +static void play_bt_connect_dly(void *priv) +{ + app_var.wait_timer_do = 0; + + log_d("\n-------play_bt_connect_dly-------\n", priv); + + if (!app_var.goto_poweroff_flag) { + STATUS *p_tone = get_tone_config(); + tone_play_index(p_tone->bt_connect_ok, 1); + } +} + + + +static int bt_connction_status_event_handler(struct bt_event *bt) +{ + STATUS *p_tone = get_tone_config(); + u8 *phone_number = NULL; + + switch (bt->event) { + case BT_STATUS_INIT_OK: + /* + * 蓝牙初始化完成 + */ + xlog("BT_STATUS_INIT_OK\n"); + init_ok = 1; + __set_sbc_cap_bitpool(38); + +#if (TCFG_USER_BLE_ENABLE) + if (BT_MODE_IS(BT_BQB)) { + ble_bqb_test_thread_init(); + } else { +#if !TCFG_WIRELESS_MIC_ENABLE + bt_ble_init(); // lmx,初始化完,初始化ble,决定ble是作为主设备还是从设备 + // xtell_ble_central_test_start(); //xtell +#endif + } +#endif + bt_init_ok_search_index(); +#if TCFG_TEST_BOX_ENABLE + testbox_set_bt_init_ok(1); +#endif + +#if ((CONFIG_BT_MODE == BT_BQB)||(CONFIG_BT_MODE == BT_PER)) + bt_wait_phone_connect_control(1); +#else + if (is_dac_power_off()) { + bt_wait_connect_and_phone_connect_switch(0); + } else { + app_var.wait_timer_do = sys_timeout_add(NULL, play_poweron_ok_timer, 100); + } +#endif + + /*if (app_var.play_poweron_tone) { + tone_play_index(p_tone->power_on, 1); + }*/ + break; + + case BT_STATUS_SECOND_CONNECTED: + clear_current_poweron_memory_search_index(0); + case BT_STATUS_FIRST_CONNECTED: + xlog("BT_STATUS_CONNECTED\n"); + xtell_bl_state = 1; //蓝牙连接成功 置1 + if(strcmp(xt_ble_new_name,"CM-11111") != 0){ + //蓝牙连接成功 + bt_newname =1; + u8 temp[5]={0xBB,0xBE,0x02,0x04,0x00}; + temp[4] = xtell_bl_state; //经典蓝牙连接状态 + // send_data_to_ble_client(&temp,5); + } + earphone_change_pwr_mode(PWR_DCDC15, 3000); + sys_auto_shut_down_disable(); + + ui_update_status(STATUS_BT_CONN); //单台在此处设置连接状态,对耳的连接状态需要同步,在bt_tws.c中去设置 + + /* tone_play(TONE_CONN); */ + /*os_time_dly(40); // for test*/ + xlog("tone status:%d\n", tone_get_status()); + if (get_call_status() == BT_CALL_HANGUP) { + if (app_var.phone_dly_discon_time) { + sys_timeout_del(app_var.phone_dly_discon_time); + app_var.phone_dly_discon_time = 0; + } else { + app_var.wait_timer_do = sys_timeout_add(NULL, play_bt_connect_dly, 1600); + /* tone_play_index(p_tone->bt_connect_ok, 1); */ + } + } + + + /*int timeout = 5000 + rand32() % 10000; + sys_timeout_add(NULL, connect_phone_test, timeout);*/ + break; + case BT_STATUS_FIRST_DISCONNECT: + case BT_STATUS_SECOND_DISCONNECT: + xlog("BT_STATUS_DISCONNECT\n"); + xtell_bl_state = 0; //断开蓝牙 清0 + //蓝牙断开连接 + if(bt_newname){ //已经改成新蓝牙名字,断开才播报 + bt_newname=0; + u8 temp[5]={0xBB,0xBE,0x02,0x04,0x00}; + temp[4] = xtell_bl_state; //经典蓝牙连接状态 + // send_data_to_ble_client(&temp,5); + } + if (app_var.goto_poweroff_flag) { + /*关机不播断开提示音*/ + /*关机时不改UI*/ + break; + } + // bt_discon_dly_handle(NULL); + break; + + //phone status deal + case BT_STATUS_PHONE_INCOME: + break; + case BT_STATUS_PHONE_OUT: + + break; + case BT_STATUS_PHONE_ACTIVE: + break; + case BT_STATUS_PHONE_HANGUP: + break; + case BT_STATUS_PHONE_NUMBER: + break; + case BT_STATUS_INBAND_RINGTONE: //铃声 + break; + case BT_STATUS_CALL_VOL_CHANGE: + + break; + case BT_STATUS_SNIFF_STATE_UPDATE: + xlog(" BT_STATUS_SNIFF_STATE_UPDATE %d\n", bt->value); //0退出SNIFF + if (bt->value == 0) { + sniff_out = 1; + sys_auto_sniff_controle(MY_SNIFF_EN, bt->args); + } else { + sys_auto_sniff_controle(0, bt->args); + } + break; + + case BT_STATUS_LAST_CALL_TYPE_CHANGE: + break; + + case BT_STATUS_CONN_A2DP_CH: + case BT_STATUS_CONN_HFP_CH: + + if ((!is_1t2_connection()) && (get_current_poweron_memory_search_index(NULL))) { //回连下一个device + if (get_esco_coder_busy_flag()) { + clear_current_poweron_memory_search_index(0); + } else { + user_send_cmd_prepare(USER_CTRL_START_CONNECTION, 0, NULL); + } + } + break; + case BT_STATUS_PHONE_MANUFACTURER: + break; + case BT_STATUS_VOICE_RECOGNITION: + + break; + case BT_STATUS_AVRCP_INCOME_OPID: + xlog("BT_STATUS_AVRCP_INCOME_OPID:%d\n", bt->value); + break; + default: + xlog(" BT STATUS DEFAULT\n"); + break; + } + return 0; +} + + +static int event_handler(struct application *app, struct sys_event *event) +{ + + le_user_app_event_handler(event); + + if (SYS_EVENT_REMAP(event)) { + g_printf("****SYS_EVENT_REMAP**** \n"); + return 0; + } + + switch (event->type) { + case SYS_KEY_EVENT: + break; + case SYS_BT_EVENT: + /* + * 蓝牙事件处理 + */ + if ((u32)event->arg == SYS_BT_EVENT_TYPE_CON_STATUS) { + printf("in event_handler:bt_connction_status_event_handler"); + bt_connction_status_event_handler(&event->u.bt); + } else if ((u32)event->arg == SYS_BT_EVENT_TYPE_HCI_STATUS) { + bt_hci_event_handler(&event->u.bt); + } + break; + case SYS_DEVICE_EVENT: + /* + * 系统设备事件处理 + */ + if ((u32)event->arg == DEVICE_EVENT_FROM_CHARGE) { + + } else if ((u32)event->arg == DEVICE_EVENT_FROM_POWER) { + return app_power_event_handler(&event->u.dev); + } +#if (JL_EARPHONE_APP_EN) + else if ((u32)event->arg == DEVICE_EVENT_FROM_RCSP) { + xlog("DEVICE_EVENT_FROM_RCSP: %d", event->u.rcsp.event); + switch (event->u.rcsp.event) { + case MSG_JL_UPDATE_START: + xlog(">>> Xtell APP: MSG_JL_UPDATE_START\n"); + // You can add UI notifications here, like LED blinking or a tone. + break; + default: + break; + } + } +#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 + else if ((u32)event->arg == DEVICE_EVENT_TEST_BOX) { + app_testbox_event_handler(&event->u.testbox); + } +#endif + break; + + default: + return false; + } + + SYS_EVENT_HANDLER_SPECIFIC(event); +#ifdef CONFIG_BT_BACKGROUND_ENABLE + if (app) { + default_event_handler(event); + } +#endif + return false; + +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +static const struct application_operation app_handler_ops = { + .state_machine = state_machine, + .event_handler = event_handler, +}; + + +/* + * 注册earphone模式 + */ +REGISTER_APPLICATION(app_handler) = { + .name = "handler", + .action = ACTION_EARPHONE_MAIN, + .ops = &app_handler_ops, + .state = APP_STA_DESTROY, +}; diff --git a/apps/earphone/xtell_remote_control/ble_handler/ble_test.c b/apps/earphone/xtell_remote_control/ble_handler/ble_test.c index b82e23e..bf78344 100644 --- a/apps/earphone/xtell_remote_control/ble_handler/ble_test.c +++ b/apps/earphone/xtell_remote_control/ble_handler/ble_test.c @@ -6,6 +6,12 @@ #include "le_common.h" #include "ble_user.h" +unsigned char xt_bl_new_name[13] = "WEBIRD-XXXXX"; +unsigned char xt_ble_new_name[9] = "CM-XXXXX"; + + + + #if 0 //ENABLE_THIS_TEST #define LOG_TAG_CONST EARPHONE diff --git a/apps/earphone/xtell_remote_control/task_func.c b/apps/earphone/xtell_remote_control/task_func.c index 5379bba..ed3b89a 100644 --- a/apps/earphone/xtell_remote_control/task_func.c +++ b/apps/earphone/xtell_remote_control/task_func.c @@ -287,6 +287,6 @@ void test_task(void){ } void test_func_main(void){ #if TEST_FUNCTION == 1 - os_task_create(test_task, NULL, 1, 1024, 128, "rfid_test"); + // os_task_create(test_task, NULL, 1, 1024, 128, "rfid_test"); #endif } \ No newline at end of file diff --git a/apps/earphone/xtell_remote_control/task_func.h b/apps/earphone/xtell_remote_control/task_func.h index 09c4677..dd301b5 100644 --- a/apps/earphone/xtell_remote_control/task_func.h +++ b/apps/earphone/xtell_remote_control/task_func.h @@ -37,7 +37,7 @@ typedef enum { typedef enum { TEAM_NO, //未组队 TEAM_YES, -} RC_State_t; +} RC_Team_t; /** * @brief RFID读取到的设备类型 @@ -53,7 +53,7 @@ typedef enum { */ typedef struct { RC_State_t state; // 当前状态机状态 - RC_State_t team; //当前是否组队 + RC_Team_t team; //当前是否组队 u8 paired_mac_addr[UID_LENGTH]; // 已配对主板的MAC地址(包含前缀) // ... 可在此处添加更多运行时需要管理的数据 } RC_Context_t; diff --git a/apps/earphone/xtell_remote_control/xtell_app_main.c b/apps/earphone/xtell_remote_control/xtell_app_main.c index c9c5c12..4fee123 100644 --- a/apps/earphone/xtell_remote_control/xtell_app_main.c +++ b/apps/earphone/xtell_remote_control/xtell_app_main.c @@ -8,7 +8,7 @@ #include "app_charge.h" #include "bt_profile_cfg.h" #include "debug.h" - +#include "avctp_user.h" /////////////////////////////////////////////////////////////////////////////////////////////////// //宏定义 @@ -119,6 +119,16 @@ void xtell_app_main() xlog("==============xtell_app_end================\n"); + u8 mac_data[6]; + extern void rcsp_adv_fill_mac_addr(u8 *mac_addr_buf); + rcsp_adv_fill_mac_addr(mac_data); //读取MAC地址 + xlog("xtell BT mac data:%x:%x:%x:%x:%x:%x",mac_data[0],mac_data[1],mac_data[2],mac_data[3],mac_data[4],mac_data[5]); + + user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL); //打开蓝牙可发现,已连接时不能操作 + delay_2ms(50); + user_send_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL); //打开蓝牙可连接 + delay_2ms(50); + extern void test_func_main(void); test_func_main(); } diff --git a/cpu/br28/tools/aec.bin b/cpu/br28/tools/aec.bin index e69de29..b0ee5ae 100644 Binary files a/cpu/br28/tools/aec.bin and b/cpu/br28/tools/aec.bin differ diff --git a/cpu/br28/tools/app.bin b/cpu/br28/tools/app.bin index edf7706..28ef01f 100644 Binary files a/cpu/br28/tools/app.bin and b/cpu/br28/tools/app.bin differ diff --git a/cpu/br28/tools/data_code.bin b/cpu/br28/tools/data_code.bin index 82fa809..65ff4dc 100644 Binary files a/cpu/br28/tools/data_code.bin and b/cpu/br28/tools/data_code.bin differ diff --git a/cpu/br28/tools/download/earphone/jl_isd.bin b/cpu/br28/tools/download/earphone/jl_isd.bin index 33fac0f..7bc16b5 100644 Binary files a/cpu/br28/tools/download/earphone/jl_isd.bin and b/cpu/br28/tools/download/earphone/jl_isd.bin differ diff --git a/cpu/br28/tools/isd_config.ini b/cpu/br28/tools/isd_config.ini index 593bd11..77507f7 100644 --- a/cpu/br28/tools/isd_config.ini +++ b/cpu/br28/tools/isd_config.ini @@ -14,12 +14,13 @@ [EXTRA_CFG_PARAM] +NEW_FLASH_FS = YES; + + + + + -BR22_TWS_DB = YES; -FLASH_SIZE = 0x100000; -BR22_TWS_VERSION = 0; -FORCE_4K_ALIGN = YES; -SPECIAL_OPT = 0; CHIP_NAME = AC701N; ENTRY = 0x6000100; PID = AC701N; @@ -68,6 +69,18 @@ FILE_LIST = (file = ota.bin: type = 100); BTIF_ADR = AUTO; BTIF_LEN = 0x1000; BTIF_OPT = 1; + + +EXIF_ADR = AUTO; +EXIF_LEN = 0x1000; +EXIF_OPT = 1; + + + + + + + PRCT_ADR = 0; PRCT_LEN = CODE_LEN; PRCT_OPT = 2; diff --git a/cpu/br28/tools/sdk.elf.resolution.txt b/cpu/br28/tools/sdk.elf.resolution.txt index 98c6cfb..313c810 100644 --- a/cpu/br28/tools/sdk.elf.resolution.txt +++ b/cpu/br28/tools/sdk.elf.resolution.txt @@ -2275,168 +2275,6 @@ objs/apps/earphone/bt_tws.c.o objs/apps/earphone/default_event_handler.c.o -r=objs/apps/earphone/default_event_handler.c.o,default_event_handler,pl objs/apps/earphone/earphone.c.o --r=objs/apps/earphone/earphone.c.o,get_bt_init_status,pl --r=objs/apps/earphone/earphone.c.o,get_sniff_out_status,pl --r=objs/apps/earphone/earphone.c.o,clear_sniff_out_status,pl --r=objs/apps/earphone/earphone.c.o,earphone_change_pwr_mode,pl --r=objs/apps/earphone/earphone.c.o,bt_wait_phone_connect_control,pl --r=objs/apps/earphone/earphone.c.o,log_print,l --r=objs/apps/earphone/earphone.c.o,is_1t2_connection,l --r=objs/apps/earphone/earphone.c.o,get_total_connect_dev,l --r=objs/apps/earphone/earphone.c.o,user_send_cmd_prepare,l --r=objs/apps/earphone/earphone.c.o,bt_send_keypress,pl --r=objs/apps/earphone/earphone.c.o,bt_send_pair,pl --r=objs/apps/earphone/earphone.c.o,bt_init_ok_search_index,pl --r=objs/apps/earphone/earphone.c.o,get_current_poweron_memory_search_index,l --r=objs/apps/earphone/earphone.c.o,clear_current_poweron_memory_search_index,l --r=objs/apps/earphone/earphone.c.o,bt_wait_connect_and_phone_connect_switch,pl --r=objs/apps/earphone/earphone.c.o,sys_timeout_add,l --r=objs/apps/earphone/earphone.c.o,bt_close_page_scan,pl --r=objs/apps/earphone/earphone.c.o,sys_timer_del,l --r=objs/apps/earphone/earphone.c.o,bt_fast_test_api,pl --r=objs/apps/earphone/earphone.c.o,audio_fast_mode_test,l --r=objs/apps/earphone/earphone.c.o,pwm_led_mode_set,l --r=objs/apps/earphone/earphone.c.o,bt_fix_fre_api,pl --r=objs/apps/earphone/earphone.c.o,bit_clr_ie,l --r=objs/apps/earphone/earphone.c.o,bredr_fcc_init,l --r=objs/apps/earphone/earphone.c.o,bt_fix_txrx_api,pl --r=objs/apps/earphone/earphone.c.o,local_irq_disable,l --r=objs/apps/earphone/earphone.c.o,link_fix_txrx_disable, --r=objs/apps/earphone/earphone.c.o,link_fix_rx_enable, --r=objs/apps/earphone/earphone.c.o,link_fix_tx_enable, --r=objs/apps/earphone/earphone.c.o,local_irq_enable,l --r=objs/apps/earphone/earphone.c.o,bt_updata_fix_rx_result,pl --r=objs/apps/earphone/earphone.c.o,link_fix_rx_update_result, --r=objs/apps/earphone/earphone.c.o,printf,l --r=objs/apps/earphone/earphone.c.o,spp_data_handler,pl --r=objs/apps/earphone/earphone.c.o,bredr_handle_register,pl --r=objs/apps/earphone/earphone.c.o,spp_data_deal_handle_register,l --r=objs/apps/earphone/earphone.c.o,bt_fast_test_handle_register,l --r=objs/apps/earphone/earphone.c.o,music_vol_change_handle_register,l --r=objs/apps/earphone/earphone.c.o,set_music_device_volume,l --r=objs/apps/earphone/earphone.c.o,phone_get_device_vol,l --r=objs/apps/earphone/earphone.c.o,get_battery_value_register,l --r=objs/apps/earphone/earphone.c.o,bt_dut_test_handle_register,l --r=objs/apps/earphone/earphone.c.o,bt_function_select_init,pl --r=objs/apps/earphone/earphone.c.o,set_bt_afh_classs_enc,l --r=objs/apps/earphone/earphone.c.o,__set_user_ctrl_conn_num,l --r=objs/apps/earphone/earphone.c.o,__set_support_msbc_flag,l --r=objs/apps/earphone/earphone.c.o,__set_aac_bitrate,l --r=objs/apps/earphone/earphone.c.o,__set_support_aac_flag,l --r=objs/apps/earphone/earphone.c.o,__set_support_ldac_flag,l --r=objs/apps/earphone/earphone.c.o,__bt_set_update_battery_time,l --r=objs/apps/earphone/earphone.c.o,__set_page_timeout_value,l --r=objs/apps/earphone/earphone.c.o,__set_super_timeout_value,l --r=objs/apps/earphone/earphone.c.o,vol_sys_tab_init,l --r=objs/apps/earphone/earphone.c.o,__set_simple_pair_param,l --r=objs/apps/earphone/earphone.c.o,bt_testbox_ex_info_get_handle_register,l --r=objs/apps/earphone/earphone.c.o,get_vbat_value,l --r=objs/apps/earphone/earphone.c.o,get_vbat_percent,l --r=objs/apps/earphone/earphone.c.o,sdfile_get_burn_code,l --r=objs/apps/earphone/earphone.c.o,lib_make_ble_address,l --r=objs/apps/earphone/earphone.c.o,bt_get_mac_addr,l --r=objs/apps/earphone/earphone.c.o,le_controller_set_mac,l --r=objs/apps/earphone/earphone.c.o,printf_buf,l --r=objs/apps/earphone/earphone.c.o,set_bt_enhanced_power_control,l --r=objs/apps/earphone/earphone.c.o,set_g_need_inc_power,l --r=objs/apps/earphone/earphone.c.o,phone_sync_vol,pl --r=objs/apps/earphone/earphone.c.o,get_esco_packet_dump,pl --r=objs/apps/earphone/earphone.c.o,task_switch,pl --r=objs/apps/earphone/earphone.c.o,get_current_app,l --r=objs/apps/earphone/earphone.c.o,start_app,l --r=objs/apps/earphone/earphone.c.o,bt_is_sniff_close,pl --r=objs/apps/earphone/earphone.c.o,bt_check_exit_sniff,pl --r=objs/apps/earphone/earphone.c.o,sys_timeout_del,l --r=objs/apps/earphone/earphone.c.o,bt_sniff_ready_clean,pl --r=objs/apps/earphone/earphone.c.o,bt_check_enter_sniff,pl --r=objs/apps/earphone/earphone.c.o,bt_api_enter_sniff_status_check,l --r=objs/apps/earphone/earphone.c.o,cpu_assert_debug,l --r=objs/apps/earphone/earphone.c.o,sys_auto_sniff_controle,pl --r=objs/apps/earphone/earphone.c.o,bt_api_conn_mode_check,l --r=objs/apps/earphone/earphone.c.o,sys_timer_add,l --r=objs/apps/earphone/earphone.c.o,lmp_rx_sniff_req_check,pl --r=objs/apps/earphone/earphone.c.o,bt_sniff_set_enable,pl --r=objs/apps/earphone/earphone.c.o,tws_sniff_controle_check_enable, --r=objs/apps/earphone/earphone.c.o,bt_sniff_feature_init,pl --r=objs/apps/earphone/earphone.c.o,wait_exit_btstack_flag,pl --r=objs/apps/earphone/earphone.c.o,bt_audio_is_running,l --r=objs/apps/earphone/earphone.c.o,lmp_hci_reset,l --r=objs/apps/earphone/earphone.c.o,os_time_dly,l --r=objs/apps/earphone/earphone.c.o,get_curr_channel_state,l --r=objs/apps/earphone/earphone.c.o,hci_standard_connect_check,l --r=objs/apps/earphone/earphone.c.o,poweroff_sniff_all_exit,pl --r=objs/apps/earphone/earphone.c.o,bt_api_get_sniff_state,l --r=objs/apps/earphone/earphone.c.o,sys_enter_soft_poweroff,pl --r=objs/apps/earphone/earphone.c.o,ui_update_status,l --r=objs/apps/earphone/earphone.c.o,sys_key_event_disable,l --r=objs/apps/earphone/earphone.c.o,sys_event_clear,l --r=objs/apps/earphone/earphone.c.o,sys_auto_shut_down_disable,pl --r=objs/apps/earphone/earphone.c.o,sys_auto_shut_down_enable,pl --r=objs/apps/earphone/earphone.c.o,phone_num_play_timer,pl --r=objs/apps/earphone/earphone.c.o,get_call_status,l --r=objs/apps/earphone/earphone.c.o,is_siri_open,l --r=objs/apps/earphone/earphone.c.o,tone_play_stop,l --r=objs/apps/earphone/earphone.c.o,tone_file_list_play,l --r=objs/apps/earphone/earphone.c.o,phone_check_inband_ring_play_timer,pl --r=objs/apps/earphone/earphone.c.o,get_esco_coder_busy_flag,l --r=objs/apps/earphone/earphone.c.o,phone_ring_play_start,pl --r=objs/apps/earphone/earphone.c.o,earphone_a2dp_codec_get_low_latency_mode,l --r=objs/apps/earphone/earphone.c.o,earphone_a2dp_codec_set_low_latency_mode,l --r=objs/apps/earphone/earphone.c.o,bt_get_low_latency_mode,pl --r=objs/apps/earphone/earphone.c.o,bt_set_low_latency_mode,pl --r=objs/apps/earphone/earphone.c.o,testbox_in_ear_detect_test_flag_get,pl --r=objs/apps/earphone/earphone.c.o,bt_hci_event_handler,pl --r=objs/apps/earphone/earphone.c.o,set_remote_test_flag,l --r=objs/apps/earphone/earphone.c.o,bt_ble_adv_enable,l --r=objs/apps/earphone/earphone.c.o,bt_in_background_event_handler,pl --r=objs/apps/earphone/earphone.c.o,bt_app_exit_check,pl --r=objs/apps/earphone/earphone.c.o,bt_app_exit,pl --r=objs/apps/earphone/earphone.c.o,a2dp_get_status,l --r=objs/apps/earphone/earphone.c.o,bt_media_is_running,l --r=objs/apps/earphone/earphone.c.o,a2dp_dec_close,l --r=objs/apps/earphone/earphone.c.o,a2dp_media_clear_packet_before_seqn,l --r=objs/apps/earphone/earphone.c.o,btstack_exit,l --r=objs/apps/earphone/earphone.c.o,bredr_close_all_scan,l --r=objs/apps/earphone/earphone.c.o,get_cur_battery_level,l --r=objs/apps/earphone/earphone.c.o,sdk_version_info_get,l --r=objs/apps/earphone/earphone.c.o,strlen,l --r=objs/apps/earphone/earphone.c.o,p33_soft_reset,l --r=objs/apps/earphone/earphone.c.o,get_remote_test_flag,l --r=objs/apps/earphone/earphone.c.o,get_esco_busy_flag,l --r=objs/apps/earphone/earphone.c.o,audio_adc_mic_demo_close,l --r=objs/apps/earphone/earphone.c.o,tone_play_index,l --r=objs/apps/earphone/earphone.c.o,app_earphone_key_event_handler,l --r=objs/apps/earphone/earphone.c.o,app_power_event_handler,l --r=objs/apps/earphone/earphone.c.o,get_tone_config,l --r=objs/apps/earphone/earphone.c.o,__set_sbc_cap_bitpool,l --r=objs/apps/earphone/earphone.c.o,ble_bqb_test_thread_init,l --r=objs/apps/earphone/earphone.c.o,bt_ble_init,l --r=objs/apps/earphone/earphone.c.o,is_dac_power_off,l --r=objs/apps/earphone/earphone.c.o,tone_get_status,l --r=objs/apps/earphone/earphone.c.o,check_esco_state_via_addr,l --r=objs/apps/earphone/earphone.c.o,get_device_inband_ringtone_flag,l --r=objs/apps/earphone/earphone.c.o,lmp_private_esco_suspend_resume,l --r=objs/apps/earphone/earphone.c.o,app_audio_set_volume,l --r=objs/apps/earphone/earphone.c.o,a2dp_dec_open,l --r=objs/apps/earphone/earphone.c.o,free_a2dp_using_decoder_conn,l --r=objs/apps/earphone/earphone.c.o,puts,l --r=objs/apps/earphone/earphone.c.o,aac_decoder_energy_det_close,l --r=objs/apps/earphone/earphone.c.o,esco_dec_open,l --r=objs/apps/earphone/earphone.c.o,esco_dec_close,l --r=objs/apps/earphone/earphone.c.o,clk_set_sys_lock,l --r=objs/apps/earphone/earphone.c.o,init_ok,pl --r=objs/apps/earphone/earphone.c.o,sniff_out,pl --r=objs/apps/earphone/earphone.c.o,app_var,l --r=objs/apps/earphone/earphone.c.o,log_tag_const_i_EARPHONE,l --r=objs/apps/earphone/earphone.c.o,bt_user_priv_var,pl --r=objs/apps/earphone/earphone.c.o,CONFIG_WIFI_DETECT_ENABLE,l --r=objs/apps/earphone/earphone.c.o,sniff_ready_status,pl --r=objs/apps/earphone/earphone.c.o,exit_sniff_timer,pl --r=objs/apps/earphone/earphone.c.o,config_asser,l --r=objs/apps/earphone/earphone.c.o,phone_incom_lp_target,pl --r=objs/apps/earphone/earphone.c.o,bt_user_comm_var,pl --r=objs/apps/earphone/earphone.c.o,config_btctler_mode,l --r=objs/apps/earphone/earphone.c.o,hid_conn_depend_on_dev_company,l objs/apps/earphone/eartch_event_deal.c.o objs/apps/earphone/font/fontinit.c.o objs/apps/earphone/idle.c.o @@ -3345,14 +3183,12 @@ objs/apps/earphone/rcsp/jl_phone_app.c.o objs/apps/earphone/rcsp/rcsp_adv.c.o objs/apps/earphone/tone_table.c.o -r=objs/apps/earphone/tone_table.c.o,tone_play_index,pl --r=objs/apps/earphone/tone_table.c.o,printf,l --r=objs/apps/earphone/tone_table.c.o,tone_play,l -r=objs/apps/earphone/tone_table.c.o,tone_name_cmp_by_index,pl -r=objs/apps/earphone/tone_table.c.o,tone_name_compare,l -r=objs/apps/earphone/tone_table.c.o,tone_play_index_no_tws,pl +-r=objs/apps/earphone/tone_table.c.o,printf,l -r=objs/apps/earphone/tone_table.c.o,tone_play_no_tws,l -r=objs/apps/earphone/tone_table.c.o,tone_play_index_with_callback,pl --r=objs/apps/earphone/tone_table.c.o,tone_play_with_callback,l -r=objs/apps/earphone/tone_table.c.o,tone_table_init,pl -r=objs/apps/earphone/tone_table.c.o,tone_play_set_sine_param_handler,l -r=objs/apps/earphone/tone_table.c.o,__initcall_tone_table_init,pl @@ -5162,65 +4998,182 @@ objs/apps/common/colorful_lights/colorful_lights.c.o -r=objs/apps/common/colorful_lights/colorful_lights.c.o,usr_timer_del,l -r=objs/apps/common/colorful_lights/colorful_lights.c.o,spi_dma_set_addr_for_isr,l objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,le_user_app_send_event,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_event_notify,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,le_user_app_event_handler,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,nvs_test_factory_info,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,create_process,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,rfid_task_fuc,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,hw_iic_init,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_bt_init_status,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_sniff_out_status,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,clear_sniff_out_status,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,earphone_change_pwr_mode,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_wait_phone_connect_control,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,log_print,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,is_1t2_connection,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_total_connect_dev,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,user_send_cmd_prepare,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_send_keypress,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_send_pair,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_init_ok_search_index,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_current_poweron_memory_search_index,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,clear_current_poweron_memory_search_index,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_wait_connect_and_phone_connect_switch,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_timeout_add,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_close_page_scan,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_timer_del,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_fast_test_api,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,audio_fast_mode_test,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,pwm_led_mode_set,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_fix_fre_api,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bit_clr_ie,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bredr_fcc_init,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_fix_txrx_api,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,local_irq_disable,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,link_fix_txrx_disable, +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,link_fix_rx_enable, +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,link_fix_tx_enable, +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,local_irq_enable,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_updata_fix_rx_result,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,link_fix_rx_update_result, -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,printf,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,i2c_scanner_probe,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,clk_set,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,clk_get,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_pll_para,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_function_select_init,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bredr_handle_register,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,btstack_init,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_auto_shut_down_enable,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_sniff_feature_init,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_auto_sniff_controle,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_auto_shut_down_disable,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_key_event_enable,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_app_exit,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_hci_event_handler,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,spp_data_handler,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bredr_handle_register,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,spp_data_deal_handle_register,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_fast_test_handle_register,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,music_vol_change_handle_register,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,set_music_device_volume,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,phone_get_device_vol,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_battery_value_register,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_dut_test_handle_register,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_function_select_init,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,set_bt_afh_classs_enc,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_user_ctrl_conn_num,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_support_msbc_flag,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_aac_bitrate,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_support_aac_flag,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_support_ldac_flag,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__bt_set_update_battery_time,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_simple_pair_flag,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_page_timeout_value,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_super_timeout_value,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,vol_sys_tab_init,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_simple_pair_param,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_testbox_ex_info_get_handle_register,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_vbat_value,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_vbat_percent,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sdfile_get_burn_code,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,lib_make_ble_address,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_get_mac_addr,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,le_controller_set_mac,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,printf_buf,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,set_bt_enhanced_power_control,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,set_g_need_inc_power,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,phone_sync_vol,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_esco_packet_dump,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,task_switch,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_current_app,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,start_app,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_is_sniff_close,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_check_exit_sniff,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_timeout_del,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_sniff_ready_clean,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_check_enter_sniff,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_api_enter_sniff_status_check,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,cpu_assert_debug,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_auto_sniff_controle,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_api_conn_mode_check,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_timer_add,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,lmp_rx_sniff_req_check,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_sniff_set_enable,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,tws_sniff_controle_check_enable, +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_sniff_feature_init,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,wait_exit_btstack_flag,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_audio_is_running,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,lmp_hci_reset,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,os_time_dly,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_curr_channel_state,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,hci_standard_connect_check,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,poweroff_sniff_all_exit,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_api_get_sniff_state,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_enter_soft_poweroff,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,ui_update_status,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_key_event_disable,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_event_clear,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_auto_shut_down_disable,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_auto_shut_down_enable,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,phone_num_play_timer,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_call_status,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,is_siri_open,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,tone_play_stop,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,tone_file_list_play,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,phone_check_inband_ring_play_timer,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_esco_coder_busy_flag,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,phone_ring_play_start,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,earphone_a2dp_codec_get_low_latency_mode,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,earphone_a2dp_codec_set_low_latency_mode,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_get_low_latency_mode,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_set_low_latency_mode,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,testbox_in_ear_detect_test_flag_get,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_in_background_event_handler,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_app_exit_check,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_app_exit,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,a2dp_get_status,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_media_is_running,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,a2dp_dec_close,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,a2dp_media_clear_packet_before_seqn,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,btstack_exit,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bredr_close_all_scan,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_ble_adv_enable,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_cur_battery_level,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sdk_version_info_get,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,strlen,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,p33_soft_reset,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,audio_adc_mic_demo_close,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,tone_play_index,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,app_earphone_key_event_handler,l -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,app_power_event_handler,l -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,default_event_handler,l -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_tone_config,l -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,__set_sbc_cap_bitpool,l -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,ble_bqb_test_thread_init,l -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_ble_init,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_init_ok_search_index,l -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,is_dac_power_off,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_wait_connect_and_phone_connect_switch,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_timeout_add,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,clear_current_poweron_memory_search_index,l -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,strcmp,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,earphone_change_pwr_mode,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,ui_update_status,l -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,tone_get_status,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_call_status,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_timeout_del,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,is_1t2_connection,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_current_poweron_memory_search_index,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_esco_coder_busy_flag,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,user_send_cmd_prepare,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,tone_play_index,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,xtell_bl_state,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,check_esco_state_via_addr,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_device_inband_ringtone_flag,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,lmp_private_esco_suspend_resume,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,app_audio_set_volume,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,a2dp_dec_open,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,free_a2dp_using_decoder_conn,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,puts,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,aac_decoder_energy_det_close,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,esco_dec_open,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,esco_dec_close,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,clk_set_sys_lock,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,set_remote_test_flag,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_remote_test_flag,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,get_esco_busy_flag,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,tone_play_index_with_callback,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,clk_set,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,clk_get,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_pll_para,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,btstack_init,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sys_key_event_enable,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,xtell_uart_ai_14_bt_connect,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,xtell_uart_ai_34_bt_break,pl -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_newname,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,xt_ble_new_name,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,SC7U22_init,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,MMC5603nj_init,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,BMP280_init,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,rfid_fuc_id,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,SC7U22_calibration_id,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,start_collect_fuc_id,pl --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,BLE_send_fuc_id,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,init_ok,pl -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,app_var,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,init_ok,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,log_tag_const_i_EARPHONE,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_user_priv_var,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,CONFIG_WIFI_DETECT_ENABLE,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sniff_ready_status,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,exit_sniff_timer,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,config_asser,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,phone_incom_lp_target,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,bt_user_comm_var,pl -r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,config_btctler_mode,l --r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,sniff_out,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,xt_ble_new_name,l +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_handler.c.o,hid_conn_depend_on_dev_company,l objs/apps/earphone/xtell_remote_control/ble_handler/ble_test.c.o +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_test.c.o,xt_bl_new_name,pl +-r=objs/apps/earphone/xtell_remote_control/ble_handler/ble_test.c.o,xt_ble_new_name,pl objs/apps/earphone/xtell_remote_control/ble_handler/client_handler.c.o -r=objs/apps/earphone/xtell_remote_control/ble_handler/client_handler.c.o,ble_get_client_operation_table,pl -r=objs/apps/earphone/xtell_remote_control/ble_handler/client_handler.c.o,ble_profile_init,pl @@ -5263,6 +5216,7 @@ objs/apps/earphone/xtell_remote_control/nvs/nvs.c.o -r=objs/apps/earphone/xtell_remote_control/nvs/nvs.c.o,syscfg_write,l -r=objs/apps/earphone/xtell_remote_control/nvs/nvs.c.o,nvs_read_main_board_mac,pl -r=objs/apps/earphone/xtell_remote_control/nvs/nvs.c.o,syscfg_read,l +-r=objs/apps/earphone/xtell_remote_control/nvs/nvs.c.o,nvs_clear_info,pl -r=objs/apps/earphone/xtell_remote_control/nvs/nvs.c.o,nvs_write_factory_info,pl -r=objs/apps/earphone/xtell_remote_control/nvs/nvs.c.o,nvs_read_factory_info,pl -r=objs/apps/earphone/xtell_remote_control/nvs/nvs.c.o,nvs_clear_factory_info,pl @@ -5408,16 +5362,17 @@ objs/apps/earphone/xtell_remote_control/task_func.c.o -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,printf,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,strncmp,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,nvs_write_main_board_mac,l +-r=objs/apps/earphone/xtell_remote_control/task_func.c.o,nvs_clear_info,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,g_ble_get_state,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,rc_ble_callback_handler,pl -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,nvs_read_main_board_mac,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,rc_app_main_init,pl +-r=objs/apps/earphone/xtell_remote_control/task_func.c.o,FM176XX_HardInit,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,sys_timer_add,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,test_task,pl -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,TYPE_V_EVENT,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,os_time_dly,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,test_func_main,pl --r=objs/apps/earphone/xtell_remote_control/task_func.c.o,os_task_create,l -r=objs/apps/earphone/xtell_remote_control/task_func.c.o,puts,l objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o -r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,create_process,pl @@ -5434,6 +5389,9 @@ objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o -r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,vbat_check_init,l -r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,start_app,l -r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,check_power_on_voltage,l +-r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,rcsp_adv_fill_mac_addr,l +-r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,user_send_cmd_prepare,l +-r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,delay_2ms,l -r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,test_func_main,l -r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,cpu_reset_by_soft,l -r=objs/apps/earphone/xtell_remote_control/xtell_app_main.c.o,app_var,l diff --git a/objs/apps/common/audio/uartPcmSender.c.o-cb2cd9b4 b/objs/apps/common/audio/uartPcmSender.c.o-cb2cd9b4 new file mode 100644 index 0000000..e69de29