123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844 |
- #include "include.h"
- #include "func.h"
- #include "func_bt.h"
- #if HLW_UI
- #include "hlw_func.h"
- #endif // HLW_UI
- func_bt_t f_bt;
- void uart_cmd_process(void);
- ALIGNED(128)
- u16 func_bt_chkclr_warning(u16 bits)
- {
- u16 value;
- GLOBAL_INT_DISABLE();
- value = f_bt.warning_status & bits;
- if(value != 0) {
- f_bt.warning_status &= ~value;
- GLOBAL_INT_RESTORE();
- return value;
- }
- GLOBAL_INT_RESTORE();
- return value;
- }
- #if FUNC_BT_EN
- void func_bt_set_dac(u8 enable)
- {
- if (bsp_dac_off_for_bt_conn()) {
- if (enable) {
- if (!dac_get_pwr_sta()) {
- dac_restart();
- }
- } else {
- if (dac_get_pwr_sta()) {
- dac_power_off();
- }
- }
- }
- }
- void func_bt_mp3_res_play(u32 addr, u32 len)
- {
- if (len == 0) {
- return;
- }
- bt_audio_bypass();
- mp3_res_play(addr, len);
- bt_audio_enable();
- }
- //切换提示音语言
- void func_bt_switch_voice_lang(void)
- {
- #if (LANG_SELECT == LANG_EN_ZH)
- if (xcfg_cb.lang_id >= LANG_EN_ZH) {
- sys_cb.lang_id = (sys_cb.lang_id) ? 0 : 1;
- multi_lang_init(sys_cb.lang_id);
- param_lang_id_write();
- param_sync();
- if (xcfg_cb.bt_tws_en) {
- bt_tws_sync_setting(); //同步语言
- bsp_res_play(TWS_RES_LANGUAGE_EN + sys_cb.lang_id); //同步播放语言提示音
- } else {
- func_bt_mp3_res_play(RES_BUF_LANGUAGE, RES_LEN_LANGUAGE);
- }
- }
- #endif
- }
- #if BT_TWS_EN
- static void func_bt_tws_set_channel(void)
- {
- if(f_bt.tws_status & FEAT_TWS_FLAG) { //对箱状态.
- tws_get_lr_channel();
- dac_mono_init(0, sys_cb.tws_left_channel);
- } else {
- dac_mono_init(1, 0);
- }
- }
- #endif
- u8 func_bt_tws_get_channel(void)
- {
- #if BT_TWS_EN
- return sys_cb.tws_left_channel;
- #else
- return false;
- #endif
- }
- void func_bt_warning_do(void)
- {
- #if QTEST_EN
- if(qtest_get_mode()){
- func_bt_chkclr_warning(0xffff);
- return;
- }
- #endif
- if(func_bt_chkclr_warning(BT_WARN_TWS_DISCON | BT_WARN_TWS_CON)) {
- #if BT_TWS_EN
- if(xcfg_cb.bt_tws_en) {
- if(xcfg_cb.bt_tws_lr_mode != 0) {
- func_bt_tws_set_channel();
- }
- }
- #endif
- }
- if(func_bt_chkclr_warning(BT_WARN_DISCON)) {
- #if BT_HID_DOUYIN_EN
- cfg_bt_hid_android_param = 0;
- bt_hid_finger_select_ios();
- #endif
- #if WARNING_BT_DISCONNECT
- if(!bt_tws_is_slave()) {
- bsp_res_play(TWS_RES_DISCONNECT);
- return;
- }
- #endif // WARNING_BT_DISCONNECT
- }
- if(func_bt_chkclr_warning(BT_WARN_PAIRING)) {
- if(!bt_tws_is_slave()) {
- printf("pair ..........\n");
- bsp_res_play(TWS_RES_PAIRING);
- return;
- }
- }
- #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) {
- f_bt.tws_had_pair = 1;
- if (xcfg_cb.bt_tws_lr_mode != 0) {
- func_bt_tws_set_channel();
- }
- ///固定声道方案,TWS连接后异步播放声音提示音。否则同步播放连接提示音
- if (xcfg_cb.bt_tws_lr_mode >= 8) {
- func_bt_tws_set_channel();
- tws_get_lr_channel();
- if (!bsp_res_is_playing()) {
- #if WARNING_WSBC_EN
- if(sys_cb.tws_left_channel) {
- wsbc_res_play(RES_BUF_LEFT_CH, RES_LEN_LEFT_CH);
- } else {
- wsbc_res_play(RES_BUF_RIGHT_CH, RES_LEN_RIGHT_CH);
- }
- #else
- if(sys_cb.tws_left_channel) {
- func_cb.mp3_res_play(RES_BUF_LEFT_CH, RES_LEN_LEFT_CH);
- } else {
- bt_audio_bypass();
- u8 timer_cnt = 100;
- while (timer_cnt--) {
- bt_thread_check_trigger();
- bsp_res_process();
- delay_5ms(2);
- WDT_CLR();
- }
- func_cb.mp3_res_play(RES_BUF_RIGHT_CH, RES_LEN_RIGHT_CH);
- bt_audio_enable();
- }
- #endif
- }
- } else {
- if (tws_warning & BT_WARN_TWS_MCON) {
- bsp_res_play(TWS_RES_CONNECTED);
- return;
- }
- }
- }
- }
- #endif
- #if HLW_UI
- if(func_bt_chkclr_warning(BT_WARN_BAT_VOICE)) {
- if(!bt_tws_is_slave()) {
- hlw_func_battery_voice_handle();
- return;
- }
- }
- #endif // HLW_UI
- if(func_bt_chkclr_warning(BT_WARN_CON)) {
- #if WARNING_BT_CONNECT
- if(!bt_tws_is_slave()) {
- #if !HLW_UI
- bsp_res_play(TWS_RES_CONNECTED);
- #else
- printf("hlw_cb.poweron_connect_cnt 00: %d\n", hlw_cb.poweron_connect_cnt);
- if(hlw_cb.poweron_connect_cnt > 0)
- {
- hlw_cb.poweron_connect_cnt--;
- bsp_res_play(TWS_RES_CONNECTED);
- }
- printf("hlw_cb.poweron_connect_cnt 11: %d\n", hlw_cb.poweron_connect_cnt);
- if(hlw_cb.poweron_connect_cnt > 0)
- {
- hlw_cb.poweron_connect_cnt--;
- bsp_res_play(TWS_RES_CONNECTED);
- }
- printf("hlw_cb.poweron_connect_cnt 22: %d\n", hlw_cb.poweron_connect_cnt);
- /*
- while(1)
- {
- printf("hlw_cb.poweron_connect_cnt %d\n", hlw_cb.poweron_connect_cnt);
- if(hlw_cb.poweron_connect_cnt > 0)
- {
- hlw_cb.poweron_connect_cnt--;
- bsp_res_play(TWS_RES_CONNECTED);
- }
- if(hlw_cb.poweron_connect_cnt == 0)
- {
- break;
- }
- }
- */
- #endif // HLW_UI
- return;
- }
- #endif
- }
- #if BT_HID_MANU_EN
- //按键手动断开HID Profile的提示音
- if (xcfg_cb.bt_hid_manu_en) {
- #if WARNING_BT_HID_MENU
- if (func_bt_chkclr_warning(BT_WARN_HID_CON)) {
- func_cb.mp3_res_play(RES_BUF_CAMERA_ON_MP3, RES_LEN_CAMERA_ON_MP3);
- }
- #endif
- #if WARNING_BT_HID_MENU
- if (func_bt_chkclr_warning(BT_WARN_HID_DISCON)) {
- func_cb.mp3_res_play(RES_BUF_CAMERA_OFF_MP3, RES_LEN_CAMERA_OFF_MP3);
- }
- #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
- }
- #endif // BT_HID_MANU_EN
- }
- AT(.text.func.bt.process)
- void func_bt_warning(void)
- {
- if(f_bt.warning_status != 0 && !bsp_res_is_full()) {
- func_bt_warning_do();
- }
- }
- void func_bt_disp_status_do(void)
- {
- 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("%s f_bt.disp_status %d\n", __func__, f_bt.disp_status);
- switch (f_bt.disp_status) {
- case BT_STA_CONNECTING:
- if (BT_RECONN_LED_EN) {
- led_bt_reconnect();
- break;
- }
- case BT_STA_INITING:
- case BT_STA_IDLE:
- #if HLW_UI
- hlw_bt_poweron_enter_pairmode_handle();
- #else
- 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) {
- f_bt.warning_status |= BT_WARN_PAIRING;
- }
- }
- #endif
- #endif // HLW_UI
- break;
- case BT_STA_SCANNING:
- #if HLW_UI
- hlw_bt_reconnect_fail_no_pairlist_handle();
- #else
- led_bt_scan();
- #endif
- break;
- case BT_STA_DISCONNECTING:
- #if !HLW_UI
- led_bt_connected();
- #endif
- break;
- case BT_STA_CONNECTED:
- #if !HLW_UI
- led_bt_connected();
- #endif
- #if ABP_EN && ABP_MUSIC_DIS_PINK_EN
- if (sys_cb.abp_mode == ABP_MODE_PINK) {
- bsp_abp_set_mode(sys_cb.abp_mode);
- }
- #endif
- #if ANC_MAX_VOL_DIS_FB_EN
- bsp_anc_max_vol_dac_det_stop();
- #endif // ANC_MAX_VOL_DIS_FB_EN
- break;
- case BT_STA_INCOMING:
- led_bt_ring();
- break;
- case BT_STA_PLAYING:
- #if !HLW_UI
- led_bt_play();
- #endif
- #if ABP_EN && ABP_MUSIC_DIS_PINK_EN
- if (sys_cb.abp_mode == ABP_MODE_PINK) {
- abp_stop();
- }
- #endif
- #if ANC_MAX_VOL_DIS_FB_EN
- bsp_anc_max_vol_dac_det_start();
- #endif // ANC_MAX_VOL_DIS_FB_EN
- break;
- case BT_STA_OUTGOING:
- case BT_STA_INCALL:
- #if !HLW_UI
- led_bt_call();
- #endif
- break;
- }
- if(f_bt.disp_status >= BT_STA_CONNECTED) {
- f_bt.need_pairing = 1;
- sys_cb.dac_sta_bck = 1;
- func_bt_set_dac(1);
- dac_fade_in();
- } else {
- sys_cb.dac_sta_bck = 0;
- func_bt_set_dac(0);
- }
- #if BT_BACKSTAGE_EN
- if (f_bt.disp_status < BT_STA_PLAYING && func_cb.sta_break != FUNC_NULL) {
- func_cb.sta = func_cb.sta_break;
- }
- #endif
- }
- AT(.text.func.bt.process) ALIGNED(128)
- void func_bt_disp_status(void)
- {
- uint status = bt_get_disp_status();
- GLOBAL_INT_DISABLE();
- if(f_bt.disp_status != status || f_bt.disp_update) {
- f_bt.disp_status = status;
- f_bt.disp_update = 0;
- GLOBAL_INT_RESTORE();
- func_bt_disp_status_do();
- } else {
- GLOBAL_INT_RESTORE();
- }
- }
- AT(.text.func.bt.process)
- void func_bt_status(void)
- {
- func_bt_disp_status();
- #if FUNC_BTHID_EN
- if(is_bthid_mode()) {
- func_bt_hid_warning();
- } else
- #endif
- {
- func_bt_warning();
- }
- }
- #if USER_INEAR_DETECT_EN
- AT(.text.func.bt.process)
- void func_bt_inear_process(void)
- {
- if (dev_is_online(DEV_EARIN)) {
- if (sys_cb.loc_ear_sta) {
- if (sys_cb.rem_ear_sta) { //检测到对耳已经入耳,不用播放入耳提示音
- func_cb.mp3_res_play(RES_BUF_INEAR_DU_MP3, RES_LEN_INEAR_DU_MP3);
- }
- bt_set_ear_sta(0); //入耳
- // bt_music_play(); //播放音乐,需要时打开
- }
- } else {
- if (!sys_cb.loc_ear_sta) {
- bt_set_ear_sta(1); //摘下
- // bt_music_pause(); //暂停播放
- }
- }
- }
- #endif // USER_TKEY_INEAR
- #if BT_2ACL_AUTO_SWITCH
- struct {
- uint32_t check_tick;
- uint16_t play_timer_cnt;
- uint16_t clear_timer_cnt;
- uint8_t protect_timer_cnt;
- } bt_silence;
- AT(.text.func.bt.process)
- bool bt_play_data_check_do(void)
- {
- bool ret = false;
- if (bt_silence.protect_timer_cnt) {
- bt_silence.protect_timer_cnt--;
- return false;
- }
- //消抖
- 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;
- }
- AT(.text.func.bt.process)
- bool bt_play_data_check(void)
- {
- #if BT_TWS_EN
- if(bt_tws_is_slave()){
- return false;
- }
- #endif
- if (tick_check_expire(bt_silence.check_tick, 10)) {
- bt_silence.check_tick = tick_get();
- } else {
- return false;
- }
- return bt_play_data_check_do();
- }
- AT(.text.func.bt)
- 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 = 200;
- bt_music_play_switch();
- }
- #endif
- //借用读参数区做load flash的动作,使flash一直busy
- static void func_bt_load_flash(void)
- {
- static u32 tick = 0;
- u8 load_buf[32];
- if (tick_check_expire(tick, 1000)) {
- printf("load flash test\n");
- tick = tick_get();
- }
- cm_read(load_buf, PAGE0(0), 32);
- cm_read(load_buf, PAGE1(0), 32);
- cm_read(load_buf, PAGE2(0), 32);
- }
- AT(.text.func.bt.process)
- void func_bt_sub_process(void)
- {
- func_bt_status();
- #if USER_INEAR_DETECT_EN
- func_bt_inear_process();
- #endif
- #if USER_TKEY_DEBUG_EN
- bsp_tkey_spp_tx();
- #endif
- #if BT_2ACL_AUTO_SWITCH
- if (bt_play_data_check()) {
- bt_music_play_switch();
- }
- #endif
- #if BT_BQB_RF_EN
- if (func_cb.sta != FUNC_BT_DUT) {
- func_cb.sta = FUNC_BT_DUT;
- }
- #endif
- if (func_cb.sta == FUNC_BT_DUT || BT_DUT_MODE_EN) {
- func_bt_load_flash(); //如果在DUT模式就让flash动起来,测试flash对rf的影响
- }
- }
- AT(.text.func.bt.process)
- void func_bt_process(void)
- {
- func_process();
- func_bt_sub_process();
- #if BT_TWS_MS_SWITCH_EN
- if ((xcfg_cb.bt_tswi_msc_en) && bt_tws_need_switch(0) && !bsp_res_is_playing()) {
- printf("AUDIO SWITCH\n");
- bt_tws_switch();
- }
- #endif
- 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_OTA) {
- sfunc_bt_ota();
- reset_sleep_delay();
- reset_pwroff_delay();
- } else if(f_bt.disp_status >= BT_STA_OUTGOING) {
- sfunc_bt_call();
- reset_sleep_delay();
- reset_pwroff_delay();
- f_bt.siri_kl_flag = 0;
- f_bt.user_kl_flag = 0;
- }
- #if HLW_UI
- if((sys_cb.pwroff_delay == 0)&&(hlw_cb.auto_poweroff_enable_flag)){
- #else
- if(sys_cb.pwroff_delay == 0) {
- #endif // HLW_UI
- sys_cb.pwrdwn_tone_en = 1; //连接超时关主从切换,同步关机
- func_cb.sta = FUNC_PWROFF;
- return;
- }
- if(sleep_process(bt_is_allow_sleep)) {
- f_bt.disp_status = 0xff;
- }
- #if HLW_UI
- hlw_bt_disconnect_process();
- #endif
- }
- AT(.text.func.bt)
- void func_bt_init(void)
- {
- if (!f_bt.bt_is_inited) {
- msg_queue_clear();
- func_bt_set_dac(0);
- bsp_bt_init();
- f_bt.bt_is_inited = 1;
- }
- }
- AT(.text.func.bt)
- 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(0);
- bt_off();
- func_bt_set_dac(1);
- f_bt.bt_is_inited = 0;
- }
- }
- bool func_bt_charge_dcin(void)
- {
- #if QTEST_EN
- u32 qtest_5v_tick = tick_get();
- if(qtest_get_mode()){
- return false;
- }
- if(qtest_cb.sta) {
- while(!tick_check_expire(qtest_5v_tick, 1000)) {
- if(!CHARGE_DC_IN()) {
- return false;
- }
- if(func_cb.sta == FUNC_BT) {
- bt_thread_check_trigger();
- bsp_res_process();
- }
- }
- qtest_cb.sta = 0;
- }
- #endif
- if ((xcfg_cb.bt_tswi_charge_rst_en) || (func_cb.sta != FUNC_BT)) {
- sys_cb.discon_reason = 0;
- //开启UART2检测VUSB KEY,避免func_bt_exit过程太久,无法进入VUSB升级
- sys_clk_set(SYS_24M);
- #if !UART1_EN && !UART2_EN
- uart2_key_mode(9600);
- #endif
- func_bt_exit();
- sw_reset_kick(SW_RST_DC_IN); //直接复位进入充电
- while(1);
- }
- if(sys_cb.discon_reason == 0xff) {
- sys_cb.discon_reason = 0; //不同步关机
- }
- return true;
- }
- AT(.text.func.bt)
- void func_bt_enter(void)
- {
- if (func_cb.last != FUNC_NULL) { //开机进入不清res
- bsp_res_cleanup();
- }
- bsp_res_set_enable(true);
- func_cb.mp3_res_play = func_bt_mp3_res_play;
- func_bt_enter_display();
- #if !HLW_UI
- led_bt_init();
- #endif // HLW_UI
- func_bt_init();
- //en_auto_pwroff();
- #if WARNING_FUNC_BT
- mp3_res_play(RES_BUF_BT_MODE, RES_LEN_BT_MODE);
- #endif // WARNING_FUNC_BT
- #if WARNING_BT_WAIT_CONNECT
- mp3_res_play(RES_BUF_WAIT4CONN, RES_LEN_WAIT4CONN);
- #endif // WARNING_BT_WAIT_CONNECT
- f_bt.disp_status = 0xfe;
- f_bt.rec_pause = 0;
- f_bt.pp_2_unmute = 0;
- sys_cb.key2unmute_cnt = 0;
- bt_redial_init();
- bt_audio_enable();
- #if HLW_UI
- if(func_cb.sta == FUNC_BT)
- {
- if(func_bt_ldac_is_auth())
- {
- printf("ldac auth is ok!!!\n");
- }
- else
- {
- printf("ldac auth is err!!!\n");
- }
- //anc set
- printf("func_bt_enter anc mode %d\n", sys_cb.anc_user_mode);
- if(sys_cb.anc_user_mode != 0)
- {
- bsp_anc_set_mode(sys_cb.anc_user_mode);
- }
- }
- #endif
- #if HLW_UI
- if(func_cb.sta == FUNC_BT)
- #endif // HLW_UI
- {
- #if BT_PWRKEY_5S_DISCOVER_EN
- if(bsp_bt_pwrkey5s_check()) {
- f_bt.need_pairing = 0; //已经播报了
- #if HLW_UI
- hlw_cb.poweron_pwrkey5s_flag = true;
- #endif // HLW_UI
- func_bt_disp_status();
- #if HLW_UI
- #else
- func_bt_mp3_res_play(RES_BUF_PAIRING_MP3, RES_LEN_PAIRING_MP3);
- #endif // HLW_UI
- } else {
- #if HLW_UI
- if((!hlw_cb.poweron_reconnect_fail_flag)&&(bt_nor_get_link_info(NULL))&&(bt_get_connected_num() == 0))
- {
- f_bt.warning_status |= BT_WARN_BAT_VOICE;
- }
- #endif // HLW_UI
- func_bt_disp_status();
- #if WARNING_BT_PAIR
- if (xcfg_cb.warning_bt_pair && !xcfg_cb.bt_tws_en) {
- #if HLW_UI
- #else
- func_bt_mp3_res_play(RES_BUF_PAIRING_MP3, RES_LEN_PAIRING_MP3);
- #endif // HLW_UI
- }
- #endif // WARNING_BT_PAIR
- }
- }
- #endif
- #if BT_2ACL_AUTO_SWITCH
- bt_play_data_init();
- #endif
- #if LE_PRIV_EN
- ble_priv_adv_en(1);
- #endif
- }
- AT(.text.func.bt)
- void func_bt_exit(void)
- {
- bsp_res_set_enable(false);
- while(bsp_res_is_playing()) {
- bt_thread_check_trigger();
- bsp_res_process();
- }
- bsp_res_cleanup();
- bsp_res_set_break(false);
- if(sys_cb.discon_reason == 0xff && func_cb.sta == FUNC_PWROFF) {
- sys_cb.discon_reason = 1; //默认同步关机
- }
- dac_fade_out();
- #if ASR_EN
- if (sys_cb.asr_enable) {
- bsp_asr_stop();
- sys_cb.asr_enable = 0;
- }
- #endif
- #if BT_PWRKEY_5S_DISCOVER_EN
- bsp_bt_pwrkey5s_clr();
- #endif
- func_bt_exit_display();
- bt_audio_bypass();
- #if BT_TWS_EN
- dac_mono_init(1, 0);
- u16 timeout = 350;
- while (bt_nor_acl_is_connected() && bt_tws_is_connected() && !bt_tws_is_slave() && timeout--) { //如果没跑完回连流程,在这里等一下回连完HFP和A2DP
- if (hfp_is_connected() && a2dp_is_avctp_connect()) {
- break;
- }
- vusb4s_reset_clr_cnt();
- bt_thread_check_trigger();
- delay_5ms(2);
- WDT_CLR();
- }
- #endif
- #if !BT_BACKSTAGE_EN
- bt_disconnect(sys_cb.discon_reason);
- bt_off();
- f_bt.bt_is_inited = 0;
- #else
- if (bt_get_status() == BT_STA_PLAYING && !bt_is_testmode()) { //蓝牙退出停掉音乐
- delay_5ms(10);
- if(bt_get_status() == BT_STA_PLAYING) { //再次确认play状态
- u32 timeout = 850; //8.5s
- bt_music_pause();
- while (bt_get_status() == BT_STA_PLAYING && timeout > 0) {
- timeout--;
- delay_5ms(2);
- }
- }
- }
- #endif
- #if ABP_EN
- if (abp_is_playing()) {
- sys_cb.abp_mode = 0;
- abp_stop();
- }
- #endif // ABP_EN
- f_bt.rec_pause = 0;
- f_bt.pp_2_unmute = 0;
- sys_cb.key2unmute_cnt = 0;
- func_bt_set_dac(1);
- func_cb.last = FUNC_BT;
- }
- AT(.text.func.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_display();
- }
- func_bt_exit();
- }
- #if HLW_UI
- AT(.text.func.bt)
- bool func_bt_ldac_is_auth(void)
- {
- #if 0
- return true;
- #else
- u32 *key = (u32*)&xcfg_cb.soft_key[16];
- if (*key == 0xDDE05A0D) {
- return true;
- } else {
- return false;
- }
- #endif // 0
- }
- #endif // HLW_UI
- #endif //FUNC_BT_EN
|