123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- #include "include.h"
- extern func_cb_t func_cb;
- void bsp_bt_tws_switch_for_charge(void);
- void lowpower_vbat_process(void);
- void bsp_smic_parse_cmd(void);
- u8 bsp_bt_tws_charge_delay(void);
- void func_qtest_process(void);
- void ble_box_process(void);
- void soft_timer_run(void);
- AT(.text.func.process)
- void func_process(void)
- {
- WDT_CLR();
- #if VBAT_DETECT_EN
- lowpower_vbat_process();
- #endif // VBAT_DETECT_EN
- #if VUSB_TBOX_QTEST_EN
- func_qtest_process();
- qtest_other_usage_process();
- #endif
- //PWRKEY模拟硬开关关机处理
- if ((PWRKEY_2_HW_PWRON) && (sys_cb.pwrdwn_hw_flag)) {
- sys_cb.pwrdwn_tone_en = 1;
- func_cb.sta = FUNC_PWROFF;
- sys_cb.pwrdwn_hw_flag = 0;
- }
- hall_trigger_to_pwrdwn();
- #if USER_NTC
- if (sys_cb.ntc_2_pwrdwn_flag) {
- sys_cb.pwrdwn_tone_en = 1;
- func_cb.sta = FUNC_PWROFF;
- sys_cb.ntc_2_pwrdwn_flag = 0;
- }
- #endif // USER_NTC
- #if TRY_TWS_CONN_SCAN_CLOSE
- if(tick_check_expire(sys_cb1.tws_conn_ticks, 1500))
- {
- if(sys_cb1.tws_conn_ticks)
- {
- sys_cb1.tws_conn_ticks = 0;
- bt_tws_set_scan(2);
- }
- }
- #endif // TRY_TWS_CONN_SCAN_CLOSE
- }
- void func_volume_up(void)
- {
- if (func_cb.sta == FUNC_BT) {
- if (sys_cb.incall_flag) {
- bt_call_volume_change(KU_VOL_UP);
- } else {
- #if BT_HID_VOL_SYNC_EN
- if (bsp_bt_hid_vol_set(HID_KEY_VOL_UP)) {
- bsp_set_volume(bsp_volume_inc(sys_cb.vol, sys_cb.hfp2sys_mul));
- } else
- #endif
- {
- bsp_set_volume(bsp_volume_inc(sys_cb.vol, 1));
- }
- #if BT_A2DP_STORE_VOL_EN
- bt_store_a2dp_volume(sys_cb.vol);
- #endif
- bsp_bt_vol_change();
- #if WARNING_MAX_VOLUME
- if (sys_cb.vol == VOL_MAX && !f_bt.ring_sta) {
- if (bt_tws_is_sync_voice()) {
- delay_5ms(4);
- tws_res_play(TWS_RES_MAX_VOL);
- } else {
- #if TRY_TOUCH_WARNING_DELAY_FIX
- sys_warning_play(T_WARNING_MAX_VOL, 2);
- #else
- sys_warning_play(T_WARNING_MAX_VOL, PIANO_MAX_VOL);
- #endif // TRY_TOUCH_WARNING_DELAY_FIX
- }
- }
- #endif
- }
- } else {
- bsp_set_volume(bsp_volume_inc(sys_cb.vol, 1));
- if (sys_cb.vol == VOL_MAX) {
- sys_warning_play(T_WARNING_MAX_VOL, PIANO_MAX_VOL);
- }
- }
- if (func_cb.set_vol_callback) {
- func_cb.set_vol_callback(1);
- }
- }
- void func_volume_down(void)
- {
- if (func_cb.sta == FUNC_BT) {
- if (sys_cb.incall_flag) {
- bt_call_volume_change(KU_VOL_DOWN);
- } else {
- #if BT_HID_VOL_SYNC_EN
- if (bsp_bt_hid_vol_set(HID_KEY_VOL_DOWN)) {
- bsp_set_volume(bsp_volume_dec(sys_cb.vol, sys_cb.hfp2sys_mul));
- } else
- #endif
- {
- bsp_set_volume(bsp_volume_dec(sys_cb.vol, 1));
- }
- #if BT_A2DP_STORE_VOL_EN
- bt_store_a2dp_volume(sys_cb.vol);
- #endif
- bsp_bt_vol_change();
- #if WARNING_MIN_VOLUME
- if (sys_cb.vol == 0 && !f_bt.ring_sta) {
- minvol_tone_play();
- }
- #endif
- }
- } else {
- bsp_set_volume(bsp_volume_dec(sys_cb.vol, 1));
- if (sys_cb.vol == 0) {
- minvol_tone_play();
- }
- }
- if (func_cb.set_vol_callback) {
- func_cb.set_vol_callback(0);
- }
- }
- //func common message process
- AT(.text.bfunc.msg)
- void func_message(u16 msg)
- {
- switch (msg) {
- #if TRY_CHARGEBOX_PWROFF
- case EVT_CHARGE_PWROFF_BT_DISCONNECT:
- bt_nor_disconnect();
- bt_disconnect();
- break;
- #endif // TRY_CHARGEBOX_PWROFF
- #if WAV_KEY_VOICE_QUICK_EN
- case K_PLAY_PWR_USER_DEF:
- wav_res_play(RES_BUF_TEST_WAV, RES_LEN_TEST_WAV);
- sys_cb.tws_res_brk = 0;
- break;
- #endif
- case KL_NEXT_VOL_UP:
- case KH_NEXT_VOL_UP:
- case KL_PREV_VOL_UP:
- case KH_PREV_VOL_UP:
- case KU_VOL_UP_NEXT:
- case KU_VOL_UP_PREV:
- case KU_VOL_UP:
- case KL_VOL_UP:
- case KH_VOL_UP:
- case KU_VOL_UP_DOWN:
- func_volume_up();
- break;
- case KL_PREV_VOL_DOWN:
- case KH_PREV_VOL_DOWN:
- case KL_NEXT_VOL_DOWN:
- case KH_NEXT_VOL_DOWN:
- case KU_VOL_DOWN_PREV:
- case KU_VOL_DOWN_NEXT:
- case KU_VOL_DOWN:
- case KL_VOL_DOWN:
- case KH_VOL_DOWN:
- case KL_VOL_UP_DOWN:
- case KH_VOL_UP_DOWN:
- func_volume_down();
- break;
- //耳机入仓关机
- case EVT_CHARGE_INBOX:
- sys_cb.pwrdwn_tone_en = 0;
- sys_cb.inbox_pwrdwn_flag = 1;
- bsp_charge_inbox_wakeup_enable();
- func_cb.sta = FUNC_PWROFF;
- break;
- //长按PP/POWER软关机(通过PWROFF_PRESS_TIME控制长按时间)
- case KLH_POWER:
- case KLH_MODE_PWR:
- case KLH_PLAY_PWR_USER_DEF:
- if (!xcfg_cb.kl_pwrdwn_dis) {
- sys_cb.discon_reason = !xcfg_cb.bt_tswi_kpwr_en; //按键关机是否主从切换
- sys_cb.pwrdwn_tone_en = 1;
- func_cb.sta = FUNC_PWROFF;
- }
- break;
- #if IRRX_HW_EN
- case KU_IR_POWER:
- func_cb.sta = FUNC_SLEEPMODE;
- break;
- #endif
- case KU_MODE:
- case KU_MODE_PWR:
- #if FUNC_AUX_EN || FUNC_SPEAKER_EN || FUNC_MUSIC_EN
- func_cb.sta = FUNC_NULL;
- #endif
- break;
- #if EQ_MODE_EN
- case KU_EQ:
- sys_set_eq();
- break;
- #endif // EQ_MODE_EN
- // case KU_MUTE:
- // if (sys_cb.mute) {
- // bsp_sys_unmute();
- // } else {
- // bsp_sys_mute();
- // }
- // break;
- #if LINEIN_DETECT_EN
- case EVT_LINEIN_INSERT:
- if (device_is_online(DEV_LINEIN)) {
- if (xcfg_cb.linein_2_pwrdown_en) {
- sys_cb.pwrdwn_tone_en = LINEIN_2_PWRDOWN_TONE_EN;
- func_cb.sta = FUNC_PWROFF;
- } else {
- func_cb.sta = FUNC_AUX;
- }
- }
- break;
- #endif // LINEIN_DETECT_EN
- case EVT_HFP_SET_VOL:
- if(sys_cb.incall_flag & INCALL_FLAG_SCO){
- bsp_change_volume(bt_hfp_get_sys_vol(sys_cb.hfp_vol));
- }
- break;
- case EVT_TWS_SET_VOL:
- case EVT_A2DP_SET_VOL:
- if ((sys_cb.incall_flag & INCALL_FLAG_SCO) == 0) {
- printf("a2dp_vol: %d\n", sys_cb.vol);
- #if BT_A2DP_STORE_VOL_EN
- bt_store_a2dp_volume(sys_cb.vol);
- #endif
- bsp_change_volume(sys_cb.vol);
- // gui_ocx_show_vol();
- param_sys_vol_write();
- sys_cb.cm_times = 0;
- sys_cb.cm_vol_change = 1;
- }
- break;
- case EVT_BT_SCAN_START:
- if (bt_get_status() < BT_STA_SCANNING) {
- bt_scan_enable();
- }
- break;
- #if EQ_DBG_IN_UART || EQ_DBG_IN_SPP
- case EVT_ONLINE_SET_EQ:
- eq_parse_cmd();
- break;
- #endif
- #if ANC_EN
- case EVT_ONLINE_SET_ANC:
- bsp_anc_parse_cmd();
- break;
- #endif
- case EVT_ONLINE_SET_AEC:
- bsp_tws_sync_info_eq_aec();
- break;
- #if LANG_SELECT >= LANG_EN_ZH
- case EVT_BT_SET_LANG_ID:
- param_lang_write();
- break;
- #endif
- #if EQ_MODE_EN
- case EVT_BT_SET_EQ:
- music_set_eq_by_num(sys_cb.eq_mode);
- break;
- #endif
- #if SMIC_DBG_EN
- case EVT_ONLINE_SET_SMIC:
- bsp_smic_parse_cmd();
- break;
- #endif
- #if VUSB_TBOX_QTEST_EN
- case EVT_QTEST_PICKUP_PWROFF:
- func_cb.sta = FUNC_PWROFF;
- break;
- #endif
- case EVT_BT_TWS_SWITCH:
- if (CHARGE_DC_IN()) {
- #if BT_TWS_CHARGE_DELAY_EN
- if (!bsp_bt_tws_charge_delay()) {
- sys_cb.dc_rst_flag = 1;
- vusb_delay_rst_dis();
- break;
- }
- #endif
- if ((xcfg_cb.bt_enter_charge_rst_en) || (func_cb.sta != FUNC_BT) || (sys_cb.vbat < 3300)) {
- vusb_delay_rst_dis();
- func_bt_exit();
- sw_reset_kick(SW_RST_DC_IN); //直接复位进入充电
- } else {
- #if BLUETRUM_RECONNECT_RESET_FIX
- vusb_delay_rst_dis();
- #endif // BLUETRUM_RECONNECT_RESET_FIX
- bsp_bt_tws_switch_for_charge();
- }
- } else {
- sys_cb.dc_rst_flag = 1;
- vusb_delay_rst_dis();
- }
- break;
- #if BT_TWS_SLAVE_LOSTCONN_WARNING_EN
- case EVT_TWS_SLAVE_LOSTCONN:
- sys_warning_play(T_WARNING_BT_DISCONNECT, PIANO_BT_DISCONNECT);
- break;
- #endif
- }
- //调节音量,3秒后写入flash
- if ((sys_cb.cm_vol_change) && (sys_cb.cm_times >= 3)) {
- sys_cb.cm_vol_change = 0;
- param_sync();
- }
- }
- AT(.text.func)
- void func_clear(void)
- {
- param_sync();
- reset_sleep_delay();
- dis_auto_pwroff();
- #if FUNC_AUX_EN
- func_cb.set_vol_callback = NULL;
- #endif
- AMPLIFIER_SEL_D();
- WDT_CLR();
- }
- AT(.text.func)
- void func_exit(void)
- {
- u8 func_num;
- u8 funcs_total = get_funcs_total();
- for (func_num = 0; func_num != funcs_total; func_num++) {
- if (func_cb.last == func_sort_table[func_num]) {
- break;
- }
- }
- func_num++; //切换到下一个任务
- if (func_num >= funcs_total) {
- func_num = 0;
- }
- func_cb.sta = func_sort_table[func_num]; //新的任务
- }
- AT(.text.func)
- void func_run(void)
- {
- printf("%s\n", __func__);
- func_bt_chk_off();
- while (1) {
- func_clear();
- switch (func_cb.sta) {
- #if FUNC_BT_EN
- case FUNC_BT:
- func_bt();
- break;
- #endif
- #if BT_DUT_TEST_EN
- case FUNC_BT_DUT:
- func_bt_dut();
- break;
- #endif
- #if FUNC_BTHID_EN
- case FUNC_BTHID:
- func_bthid();
- break;
- #endif // FUNC_BTHID_EN
- #if FUNC_AUX_EN
- case FUNC_AUX:
- func_aux();
- break;
- #endif // FUNC_AUX_EN
- #if FUNC_SPEAKER_EN
- case FUNC_SPEAKER:
- func_speaker();
- break;
- #endif // FUNC_SPEAKER_EN
- case FUNC_PWROFF:
- func_pwroff(sys_cb.pwrdwn_tone_en);
- break;
- #if BT_FCC_TEST_EN
- case FUNC_BT_FCC:
- func_bt_fcc();
- break;
- #endif // BT_FCC_TEST_EN
- default:
- func_exit();
- break;
- }
- }
- }
|