123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817 |
- #include "include.h"
- #include "func.h"
- #include "func_bt.h"
- #include "func_bt_quick_test.h"
- extern func_bt_t f_bt;
- bool tws_res_is_busy(void);
- void func_bt_status_update(void);
- void func_bt_tws_set_channel(void);
- u16 func_bt_chkclr_warning(u16 bits);
- void func_bt_tws_bre_led_ctl(void);
- void bt_ear_in(void);
- void bt_ear_out(void);
- void func_bt_inear_process(void);
- bool bt_play_data_check(void);
- void bt_play_data_init(void);
- bool bt_tws_vbat_switch(void);
- void ble_box_process(void);
- void bsp_get_real_time_process(void);
- void soft_timer_run(void);
- //snoop_rssi_threshold: 检测手机的信号强度 tws_rssi_threshold: 检测tws的信号强度 cnt:在50ms * cnt时间内一直低于设置的阈值则主从切换
- bool bt_check_snoop_rssi(int8_t snoop_rssi_threshold,uint8_t tws_rssi_threshold,uint cnt);
- #if FUNC_BT_EN
- void func_bt_tws_status_update(u16 tws_warning)
- {
- if(xcfg_cb.bt_tws_en) {
- func_bt_status_update();
- if(sys_cb.bt_tws_lr_mode != 0) {
- func_bt_tws_set_channel();
- }
- #if LED_BREATHE_EN
- if ((tws_warning & BT_WARN_TWS_DISCON) && (sys_cb.breathe_led_sta >= T_BRE_TWS_CON)) {
- breathe_led_stop();
- }
- #endif
- }
- }
- void func_bt_warning_discon(void)
- {
- #if BT_TWS_EN
- if(xcfg_cb.bt_tws_en) {
- func_bt_status_update();
- if(sys_cb.bt_tws_lr_mode != 0) {
- func_bt_tws_set_channel();
- }
- }
- #endif
- #if WARNING_BT_DISCONNECT
- motor_enable(MOTOR_DISCONN, T_MOTOR_DISCONN_SEL);
- if (bt_tws_is_sync_voice()) {
- tws_res_play(TWS_RES_DISCONNECT);
- } else {
- sys_warning_play(T_WARNING_BT_DISCONNECT, PIANO_BT_DISCONNECT);
- }
- #endif // WARNING_BT_DISCONNECT
- #if LED_BREATHE_EN
- if (sys_led.tws_con_bre_en) {
- if (bt_tws_is_connected()) {
- tws_res_play(TWS_BRE_LED_START);
- }
- }
- #endif // LED_BREATHE_EN
- #if WARNING_BT_WAIT_CONNECT
- sys_warning_play(T_WARNING_BT_WAIT4CONN, 0);
- #endif // WARNING_BT_WAIT_CONNECT
- f_bt.autoplay = 0;
- sys_cb.ear_menu_en = 0;
- #if BT_A2DP_VOL_CTRL_EN
- if (xcfg_cb.bt_vol_reset_for_discon_en && !bt_nor_is_connected()) {
- bsp_set_volume(SYS_INIT_VOLUME + 1); //恢复默认音量
- bsp_bt_vol_change();
- }
- #endif
- }
- void func_bt_warning_conn(void)
- {
- #if BT_TWS_EN
- if(xcfg_cb.bt_tws_en) {
- func_bt_status_update();
- }
- #endif
- motor_enable(MOTOR_CONN, T_MOTOR_CONN_SEL);
- #if LED_BREATHE_EN
- if (sys_led.tws_con_bre_en) {
- tws_res_play(TWS_BRE_LED_STOP);
- }
- #endif
- if (bt_tws_is_sync_voice()) {
- tws_res_play(TWS_RES_NOR_CONNECTED);
- } else {
- sys_warning_play(T_WARNING_BT_CONNECT, PIANO_BT_CONNECT);
- }
- f_bt.autoplay = 1;
- }
- void func_bt_warning_tws_con(u16 tws_warning)
- {
- if (sys_cb.bt_tws_lr_mode != 0) {
- func_bt_tws_set_channel();
- }
- #if LED_BREATHE_EN
- if (sys_led.tws_con_bre_en) {
- if ((tws_warning & BT_WARN_TWS_MCON) && (!bt_nor_is_connected())) {
- tws_res_play(TWS_BRE_LED_START);
- }
- }
- #endif
- if ((sys_cb.bt_tws_lr_mode != 0) && (!xcfg_cb.bt_tws_lr_voice_sel)) {
- u8 left_channel = func_bt_tws_get_channel();
- u8 left_index, right_index;
- left_index = T_WARNING_LEFT_CH;
- right_index = T_WARNING_RIGHT_CH;
- if (left_channel) {
- sys_warning_play(left_index, PIANO_TWS_CH);
- delay_5ms(230);
- } else {
- bt_audio_bypass();
- delay_5ms(190);
- sys_warning_play(right_index, PIANO_TWS_CH);
- bt_audio_enable();
- }
- } else {
- if (tws_warning & BT_WARN_TWS_MCON) {
- f_bt.w4_tws_warning = 1;
- #if !TRY_TOUCH_WARNING_DELAY_FIX
- tws_res_play(TWS_RES_CONNECTED);
- #endif // TRY_TOUCH_WARNING_DELAY_FIX
- }
- }
- }
- AT(.text.bfunc.warning)
- void func_bt_warning_hid_menu(void)
- {
- if (func_bt_chkclr_warning(BT_WARN_HID_CON)) {
- #if WARNING_BT_HID_MENU
- sys_warning_play(T_WARNING_CAMERA_ON, PIANO_CAMERA_ON);
- #endif
- }
- if (func_bt_chkclr_warning(BT_WARN_HID_DISCON)) {
- #if WARNING_BT_HID_MENU
- sys_warning_play(T_WARNING_CAMERA_OFF, PIANO_CAMERA_OFF);
- #endif
- }
- #if BT_HID_DISCON_DEFAULT_EN
- if (f_bt.hid_discon_flag) {
- if (bt_hid_is_ready_to_discon()) {
- f_bt.hid_discon_flag = 0;
- bt_hid_disconnect();
- }
- }
- #endif // BT_HID_DISCON_DEFAULT_EN
- }
- AT(.text.bfunc.bt)
- static void func_bt_warning(void)
- {
- u16 tws_warning;
- while(tws_res_is_busy()) {
- tws_res_proc();
- }
- #if BT_TWS_EN
- tws_warning = func_bt_chkclr_warning(BT_WARN_TWS_DISCON | BT_WARN_TWS_CON);
- if(tws_warning) {
- func_bt_tws_status_update(tws_warning);
- }
- #endif
- if(func_bt_chkclr_warning(BT_WARN_DISCON)) {
- func_bt_warning_discon();
- }
- if(func_bt_chkclr_warning(BT_WARN_CON)) {
- func_bt_warning_conn();
- }
- #if BT_TWS_EN
- if(xcfg_cb.bt_tws_en) {
- u16 tws_warning = func_bt_chkclr_warning(BT_WARN_TWS_SCON | BT_WARN_TWS_MCON );
- if (tws_warning != 0) {
- func_bt_warning_tws_con(tws_warning);
- }
- }
- #endif
- if(func_bt_chkclr_warning(BT_WARN_PAIRING)) {
- if (bt_tws_is_sync_voice()) {
- tws_res_play(TWS_RES_PAIRING); //左右耳同步播放pairing提示音
- } else {
- if (f_bt.w4_tws_warning) { //先等TWS Connected同步提示音播完
- f_bt.warning_status |= BT_WARN_PAIRING;
- } else {
- sys_warning_play(T_WARNING_PAIRING, PIANO_PAIR);
- }
- }
- }
- #if BT_HID_MENU_EN
- //按键手动断开HID Profile的提示音
- if (xcfg_cb.bt_hid_menu_en) {
- func_bt_warning_hid_menu();
- }
- #endif // BT_HID_MENU_EN
- }
- void func_bt_dac_ctrl(void)
- {
- if (xcfg_cb.dac_off_for_bt_disconn) {
- if (bt_nor_is_connected()) {
- if (sys_cb.dac_sta == 0) {
- func_bt_set_dac(1);
- }
- } else {
- if (sys_cb.dac_sta == 1) {
- func_bt_set_dac(0);
- }
- }
- }
- }
- void func_bt_disp_status_do(void)
- {
- #if TRY_LOWBAT_WARNING_SWITCH
- // if(sys_cb.vbat < TRY_LOWBAT_WARNING_VBAT)
- if(f_bt.loc_vbat <= 2)
- {
- return;
- }
- #endif // TRY_LOWBAT_WARNING_SWITCH
- if(!bt_is_connected()) {
- en_auto_pwroff();
- sys_cb.sleep_en = BT_PAIR_SLEEP_EN;
- } else {
- dis_auto_pwroff();
- sys_cb.sleep_en = 1;
- }
- printf("f_bt.disp_status === %d \n",f_bt.disp_status);
- switch (f_bt.disp_status) {
- case BT_STA_CONNECTING:
- led_bt_reconnect();
- break;
- case BT_STA_INITING:
- case BT_STA_IDLE:
- led_bt_idle();
- #if WARNING_BT_PAIR
- if(f_bt.need_pairing && f_bt.disp_status == BT_STA_IDLE) {
- f_bt.need_pairing = 0;
- if(xcfg_cb.warning_bt_pair && xcfg_cb.bt_tws_en) {
- #if TRY_WARNING_SWITCH
- if(sys_cb1.tws_is_slave_flag)
- {
- sys_cb1.tws_is_slave_flag = false;
- break;
- }
- #endif // TRY_WARNING_SWITCH
- #if TRY_WARNING_SWITCH
- delay_5ms(100);
- #endif // TRY_WARNING_SWITCH
- f_bt.warning_status |= BT_WARN_PAIRING;
- }
- }
- #endif
- break;
- case BT_STA_SCANNING:
- led_bt_scan();
- break;
- case BT_STA_DISCONNECTING:
- led_bt_connected();
- break;
- case BT_STA_CONNECTED:
- #if TRY_LED_SWITCH
- printf("bt_nor_is_connected =%d \n",bt_nor_is_connected());
- if(!bt_nor_is_connected())
- {
- led_set_sta(0x00,0x00,0,0);
- }
- else
- {
- led_bt_connected();
- }
- #else
- led_bt_connected();
- #endif // TRY_LED_SWITCH
- break;
- case BT_STA_INCOMING:
- #if TRY_LED_SWITCH
- led_set_sta(0x00,0xc0,3,0);
- #else
- led_bt_ring();
- #endif // TRY_LED_SWITCH
- break;
- case BT_STA_PLAYING:
- led_bt_play();
- break;
- case BT_STA_OUTGOING:
- case BT_STA_INCALL:
- led_bt_call();
- break;
- }
- if(f_bt.disp_status >= BT_STA_CONNECTED) {
- f_bt.need_pairing = 1;
- }
- }
- AT(.text.bfunc.bt)
- static void func_bt_disp_status(void)
- {
- uint status = bt_get_disp_status();
- if(f_bt.disp_status != status) {
- f_bt.disp_status = status;
- func_bt_disp_status_do();
- }
- func_bt_dac_ctrl();
- func_bt_tws_bre_led_ctl();
- }
- AT(.text.bfunc.bt)
- void func_bt_status(void)
- {
- while(1) {
- func_bt_disp_status();
- {
- func_bt_warning();
- }
- if(f_bt.disp_status != 0xff) {
- break;
- }
- }
- }
- #if BT_EARIN_DETECT_EN
- //入耳检测处理
- //AT(.text.bfunc.bt)
- //void func_bt_inear_process(void)
- //{
- // if (xcfg_cb.earin_gpio_sel) {
- // if (touchear_is_online()) {
- // if ((!sys_cb.loc_ear_sta) && tick_check_expire(sys_cb.te_tick, 5000)) {
- // bsp_bcnt_temp_calibration();
- // }
- // }
- // if (touchear_is_online() || device_is_online(DEV_EARIN)) {
- // if (sys_cb.loc_ear_sta) {
- // bsp_bcnt_temp_calibration_start();
- // bt_ear_in();
- // }
- // //BT_EARIN_USAGE_PP_EN = 1, 等待手机连接后自动播放
- // if ((sys_cb.inear_sta & 0x3) == 0x01 && bt_nor_is_connected()) {
- // sys_cb.inear_sta |= 0x02;
- // if (f_bt.disp_status < BT_STA_INCOMING) {
- // bt_music_play();
- // }
- // }
- // } else {
- // if (!sys_cb.loc_ear_sta) {
- // bsp_bcnt_temp_calibration_stop();
- // bt_ear_out();
- // }
- // sys_cb.inear_sta = 0;
- // }
- // }
- //}
- #endif // BT_EARIN_DETECT_EN
- //#if BT_2ACL_AUTO_SWITCH
- //struct {
- // uint32_t check_tick;
- // uint16_t play_timer_cnt;
- // uint16_t clear_timer_cnt;
- // uint16_t protect_timer_cnt;
- //} bt_silence;
- //
- //bool bt_play_data_check(void)
- //{
- // bool ret = false;
- // if (tick_check_expire(bt_silence.check_tick, 10)) {
- // bt_silence.check_tick = tick_get();
- // } else {
- // return ret;
- // }
- //
- // if (bt_silence.protect_timer_cnt) {
- // bt_silence.protect_timer_cnt--;
- // return ret;
- // }
- // //消抖
- // if (!bt_is_silence()) {
- // bt_silence.clear_timer_cnt = 0;
- // bt_silence.play_timer_cnt++;
- // if (bt_silence.play_timer_cnt > 100) {
- // ret = true;
- // bt_silence.play_timer_cnt = 0;
- // bt_silence.protect_timer_cnt = 200;
- // }
- // } else {
- // bt_silence.clear_timer_cnt++;
- // if (bt_silence.clear_timer_cnt > 100) {
- // bt_silence.play_timer_cnt = 0;
- // }
- // }
- // return ret;
- //}
- //
- //
- //void bt_play_data_init(void)
- //{
- // memset(&bt_silence, 0, sizeof(bt_silence));
- //}
- //
- //void bt_play_switch_device()
- //{
- // bt_silence.play_timer_cnt = 0;
- // bt_silence.clear_timer_cnt = 0;
- // bt_silence.protect_timer_cnt = 400;
- // bt_music_play_switch();
- //}
- //#endif //BT_2ACL_AUTO_SWITCH
- ///根据tws电量进行主从切换
- //#if BT_TWS_VBAT_AUTO_SWITCH
- //bool bt_tws_vbat_switch(void)
- //{
- // if (tick_check_expire(f_bt.tick_vbat, 10000)) {
- // f_bt.tick_vbat = tick_get();
- // } else {
- // return false;
- // }
- // if (bt_tws_is_connected()) {
- // f_bt.loc_vbat = hfp_get_bat_level();
- // if (!bt_tws_is_slave()) {
- // int8_t rssi[4];
- // if (f_bt.rem_vbat - f_bt.loc_vbat > 1 && bt_tws_get_link_rssi(rssi, true)) {
- // //rssi[0]:主耳tws, rssi[1]:从耳tws, rssi[2]:主耳与手机, rssi[3]:从耳与手机
- // // 1、主从RSSI都低于-70允许切换
- // // 2、从耳电量高并且从耳信号也好,允许切换
- // if((rssi[0] > -78) && ((rssi[2] > -70 && rssi[3] > -70) || (rssi[3] - rssi[2] > 3))){
- // bt_tws_switch();
- // }
- // }
- // } else {
- // bt_send_msg(BT_MSG_TWS_SYNC_INFO); //报告副耳电量给主耳
- // }
- // }
- // return false;
- //}
- //#endif // BT_TWS_VBAT_AUTO_SWITCH
- #if BT_A2DP_DEFAULT_VOLUME_EN
- void func_bt_default_volume_process(void)
- {
- #if BT_A2DP_IOS_DEFAULT_VOLUME_FIX
- if (bt_is_ios_device()) {
- if (sys_cb1.delay_send_vol_ticks && tick_check_expire(sys_cb1.delay_send_vol_ticks, 2000)) {
- sys_cb1.delay_send_vol_ticks = 0;
- msg_enqueue(EVT_A2DP_DEFAULT_VOLUME);
- }
- return;
- }
- #endif
- if (sys_cb1.a2dp_default_volume_ticks) {
- u32 ticks = 2000; //这里修改连上笔记本的修改速度
- if (sys_cb1.a2dp_default_volume == 3) {
- ticks = 500; //这里修改连上IOS播放时的修改速度
- }
- if (tick_check_expire(sys_cb1.a2dp_default_volume_ticks, ticks)) {
- sys_cb1.a2dp_default_volume_ticks = 0;
- if (bt_is_ios_device() && (sys_cb1.a2dp_default_volume != 3)) {
- return;
- }
- sys_cb1.a2dp_default_volume = 0; //笔记本超时2s未发absolute volume,清flag并设置默认音量
- msg_enqueue(EVT_A2DP_DEFAULT_VOLUME);
- }
- }
- }
- #endif
- AT(.text.bfunc.bt)
- void func_bt_sub_process(void)
- {
- func_bt_status();
- #if USER_TKEY
- bsp_tkey_spp_tx();
- #endif
- #if BT_EARIN_DETECT_EN
- func_bt_inear_process();
- #endif
- #if VUSB_SMART_VBAT_HOUSE_EN
- bsp_smart_vhouse_process(0);
- #endif
- ble_popup_delay_process();
- #if BT_2ACL_AUTO_SWITCH
- if (xcfg_cb.bt_2acl_auto_switch) {
- if (bt_play_data_check()) {
- bt_music_play_switch();
- }
- }
- #endif
- #if BT_TWS_VBAT_AUTO_SWITCH
- if (xcfg_cb.bt_tswi_vbat_en && f_bt.disp_status != BT_STA_INCOMING) {
- bt_tws_vbat_switch();
- }
- #endif
- #if BT_A2DP_DEFAULT_VOLUME_EN
- func_bt_default_volume_process();
- #endif
- #if BT_TWS_STANDBY_SUPPORT_SWITCH_EN
- if(bt_check_snoop_rssi(-65,-65,30)){
- printf("Standby_AUDIO SWITCH\n");
- bt_tws_switch();
- }
- #endif
- #if BT_DISP_LOW_VBAT_EN
- if(bt_tws_is_slave() && (tick_check_expire(sys_cb1.disp_low_vbat_ticks,10000) || sys_cb1.disp_low_vbat_flag)) {
- sys_cb1.disp_low_vbat_ticks = tick_get();
- sys_cb1.disp_low_vbat_flag = 0;
- f_bt.loc_vbat = hfp_get_bat_level();
- bt_send_msg(BT_MSG_TWS_SYNC_INFO);
- }
- #endif
- }
- AT(.text.bfunc.bt)
- static void func_bt_process(void)
- {
- func_process();
- func_bt_sub_process();
- #if BT_TWS_AUTO_SWITCH
- if ((xcfg_cb.bt_tswi_msc_en) && tws_switch_is_need()) {
- bt_tws_switch();
- }
- #endif
- #if BT_MAP_EN
- bsp_get_real_time_process();
- #endif
- #if BT_QUICK_TEST_EN
- if(f_bt.quick_test_flag){
- func_bt_quick_test();
- }
- #endif // BT_QUICK_TEST_EN
- if(f_bt.disp_status == BT_STA_INCOMING) {
- sfunc_bt_ring();
- reset_sleep_delay();
- reset_pwroff_delay();
- f_bt.siri_kl_flag = 0;
- f_bt.user_kl_flag = 0;
- } else if(f_bt.disp_status >= BT_STA_OUTGOING && f_bt.disp_status <= BT_STA_INCALL) {
- sfunc_bt_call();
- reset_sleep_delay();
- reset_pwroff_delay();
- f_bt.siri_kl_flag = 0;
- f_bt.user_kl_flag = 0;
- }
- if(sys_cb.pwroff_delay == 0) {
- if (f_bt.disp_status < BT_STA_CONNECTED) {
- sys_cb.discon_reason = 1; //连接超时关主从切换,同步关机
- sys_cb.pwrdwn_tone_en = 1;
- func_cb.sta = FUNC_PWROFF;
- return;
- }
- }
- if(sleep_process(bt_is_sleep)) {
- f_bt.disp_status = 0xff;
- }
- }
- void func_bt_init(void)
- {
- if (!f_bt.bt_is_inited) {
- msg_queue_clear();
- bt_ring_var_init();
- memset(&f_bt, 0, sizeof(func_bt_t));
- tws_res_init();
- bsp_bt_init();
- f_bt.bt_is_inited = 1;
- ble_popup_ctrl(1);
- }
- }
- void func_bt_chk_off(void)
- {
- if ((func_cb.sta != FUNC_BT) && (f_bt.bt_is_inited)) {
- #if BT_PWRKEY_5S_DISCOVER_EN
- bsp_bt_pwrkey5s_clr();
- #endif
- bt_disconnect();
- bt_off();
- f_bt.bt_is_inited = 0;
- }
- }
- void func_bt_enter(void)
- {
- led_bt_init();
- func_bt_init();
- en_auto_pwroff();
- #if WARNING_FUNC_BT
- sys_warning_play(T_WARNING_BT_MODE, PIANO_BT_MODE);
- #endif
- #if WARNING_BT_WAIT_CONNECT
- sys_warning_play(T_WARNING_BT_WAIT4CONN, 0);
- #endif
- if (f_bt.disp_status < BT_STA_CONNECTED || f_bt.disp_status == 0xfe) {
- func_bt_set_dac(0);
- }
- bsp_bt_redial_init();
- bt_audio_enable();
- #if DAC_DNR_EN
- dac_dnr_set_sta(xcfg_cb.dac_dnr_en);
- #endif
- #if BT_PWRKEY_5S_DISCOVER_EN
- if(bsp_bt_pwrkey5s_check()) {
- f_bt.need_pairing = 0; //已经播报了
- func_bt_disp_status(); //先更新显示,再播报
- if (xcfg_cb.bt_pwrkey_nsec_clr_pair_en) {
- bt_clr_all_link_info('5');
- }
- #if WARNING_BT_PAIR
- sys_warning_play(T_WARNING_PAIRING, PIANO_PAIR);
- #endif // WARNING_BT_PAIR
- } else {
- func_bt_disp_status(); //先更新显示,再播报
- #if WARNING_BT_PAIR
- if (xcfg_cb.warning_bt_pair && !xcfg_cb.bt_tws_en) {
- sys_warning_play(T_WARNING_PAIRING, PIANO_PAIR);
- }
- #endif // WARNING_BT_PAIR
- }
- #endif
- #if BT_2ACL_AUTO_SWITCH
- if (xcfg_cb.bt_2acl_auto_switch) {
- bt_play_data_init();
- }
- #endif
- }
- void func_bt_exit(void)
- {
- bt_ring_tone_stop(1);
- #if DAC_DNR_EN
- dac_dnr_set_sta(0);
- #endif
- bsp_change_volume(sys_cb.vol);
- #if BT_PWRKEY_5S_DISCOVER_EN
- bsp_bt_pwrkey5s_clr();
- #endif
- // func_bt_exit_display();
- tws_res_reset();
- dis_auto_pwroff();
- ble_popup_ctrl(0);
- printf("bt_disconnect_start\n");
- bt_disconnect();
- printf("bt_disconnect_end\n");
- dac_fade_out();
- bt_audio_bypass();
- printf("bt_off_start\n");
- bt_off();
- printf("bt_off_end\n");
- #if LED_BREATHE_EN
- if (sys_cb.breathe_led_sta >= T_BRE_TWS_CON) {
- breathe_led_stop();
- }
- #endif
- if (get_music_dec_sta() != MUSIC_STOP) {
- music_control(MUSIC_MSG_STOP);
- }
- func_bt_set_dac(1);
- if (sys_cb.pwroff_tick) {
- bt_exit_wait_ticks(sys_cb.pwroff_tick);
- sys_cb.pwroff_tick = 0;
- }
- f_bt.ring_sta = 0;
- f_bt.ring_stop = 0;
- f_bt.disp_status = BT_STA_OFF;
- f_bt.bt_is_inited = 0;
- func_cb.last = FUNC_BT;
- }
- AT(.text.bfunc.bt)
- void func_bt(void)
- {
- printf("%s\n", __func__);
- func_bt_enter();
- while (func_cb.sta == FUNC_BT) {
- func_bt_process();
- func_bt_message(msg_dequeue());
- }
- func_bt_exit();
- }
- AT(.rodata.bt.cbt)
- const u8 led_bt_dut_tbl[] = {
- 0xff, 0x00, 0x02, 0x00,
- 0xff, 0x00, 0x02, 0x00,
- 0xff, 0x00, 0x02, 0x00,
- };
- #if BT_DUT_TEST_EN
- //DUT测试模式, 红灯常亮
- AT(.text.func.bt)
- void func_bt_dut(void)
- {
- u8 addr[6];
- u8 led[12];
- u8 bt_addr_config_en;
- u8 warning_bt_pair;
- u8 bt_tws_pair_mode;
- u8 bt_tws_en;
- if (f_bt.bt_is_inited) {
- bt_disconnect();
- bt_off();
- f_bt.bt_is_inited = 0;
- }
- memcpy(addr, xcfg_cb.bt_addr, 6);
- memcpy(led, &xcfg_cb.led_reconnect, 12);
- bt_addr_config_en = xcfg_cb.bt_addr_config_en;
- warning_bt_pair = xcfg_cb.warning_bt_pair;
- bt_tws_pair_mode = xcfg_cb.bt_tws_pair_mode;
- bt_tws_en = xcfg_cb.bt_tws_en;
- //printf("%s\n", __func__);
- sys_cb.pwroff_delay = sys_cb.pwroff_time = -1; //关闭未连接自动关机
- sys_cb.sleep_time = -1; //不进siff mode
- sys_cb.sleep_en = 0;
- memcpy(&xcfg_cb.led_reconnect, led_bt_dut_tbl, sizeof(led_bt_dut_tbl)); //红灯常亮
- if (xcfg_cb.bb_dut_test_addr_fixed_en) {
- xcfg_cb.bt_addr_config_en = 1;
- memset(xcfg_cb.bt_addr, 0x66, 6); //固定蓝牙地址
- }
- cfg_bt_work_mode = MODE_BQB_RF_BREDR; //使能DUT模式
- xcfg_cb.warning_bt_pair = 0; //关闭配对提示音
- xcfg_cb.bt_tws_pair_mode = 2; //手动配对
- xcfg_cb.bt_tws_en = 0;
- func_bt_enter();
- while (func_cb.sta == FUNC_BT_DUT) {
- func_bt_process();
- func_bt_message(msg_dequeue());
- }
- func_bt_exit();
- memcpy(xcfg_cb.bt_addr, addr, 6);
- memcpy(&xcfg_cb.led_reconnect, led, 12);
- xcfg_cb.bt_addr_config_en = bt_addr_config_en;
- xcfg_cb.warning_bt_pair = warning_bt_pair;
- xcfg_cb.bt_tws_pair_mode = bt_tws_pair_mode;
- xcfg_cb.bt_tws_en = bt_tws_en;
- }
- #endif // BT_DUT_TEST_EN
- #if BT_FCC_TEST_EN
- //FCC 测试模式
- AT(.text.func.bt)
- void func_bt_fcc(void)
- {
- printf("%s\n", __func__);
- sys_cb.pwroff_delay = sys_cb.pwroff_time = -1; //关闭未连接自动关机
- sys_cb.sleep_time = -1; //不进siff mode
- sys_cb.sleep_en = 0;
- memcpy(&xcfg_cb.led_reconnect, led_bt_dut_tbl, sizeof(led_bt_dut_tbl)); //红灯常亮
- // if (xcfg_cb.bb_cbt_test_addr_fixed_en) {
- // xcfg_cb.bt_addr_config_en = 1;
- // memset(xcfg_cb.bt_addr, 0x68, 6); //固定蓝牙地址
- // }
- u8 fcc_en = xcfg_cb.bt_fcc_en;
- xcfg_cb.bt_fcc_en = 1;
- cfg_bt_work_mode = MODE_FCC_TEST;
- fcc_init_hook();
- func_bt_enter();
- while (func_cb.sta == FUNC_BT_FCC) {
- func_bt_process();
- func_bt_message(msg_dequeue());
- }
- fcc_exit_hook();
- xcfg_cb.bt_fcc_en = fcc_en;
- func_bt_exit();
- bt_work_mode_init();
- }
- #endif // BT_FCC_TEST_EN
- #endif //FUNC_BT_EN
|