bsp_bt.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602
  1. #include "include.h"
  2. #include "api.h"
  3. #if HLW_UI
  4. #include "hlw_bt_handle.h"
  5. #include "hlw_func.h"
  6. #endif
  7. void bt_new_name_init(void);
  8. void ring_tws_disconnect_cb(void);
  9. /********************************************************/
  10. extern void bt_tws_set_operation(uint8_t *cmd);
  11. void dev_vol_set_cb(uint8_t dev_vol, uint8_t media_index, uint8_t setting_type);
  12. void bt_power_balance_reconnect(u8 start);
  13. //蓝牙连接过程调整主频,加快连接速度
  14. AT(.text.bts.clk) WEAK
  15. void bt_set_sys_clk(uint8_t level)
  16. {
  17. if (cfg_bt_work_mode == MODE_BQB_RF_BREDR) {
  18. sys_clk_free(INDEX_STACK);
  19. return;
  20. }
  21. if(level) {
  22. sys_clk_req(INDEX_STACK, SYS_160M);
  23. } else {
  24. sys_clk_free(INDEX_STACK);
  25. }
  26. }
  27. void bsp_bt_init(void)
  28. {
  29. //更新配置工具的设置
  30. cfg_bt_rf_def_txpwr = xcfg_cb.bt_rf_pwrdec;
  31. cfg_bt_page_txpwr = xcfg_cb.bt_rf_page_pwrdec;
  32. cfg_ble_page_txpwr = xcfg_cb.ble_rf_page_pwrdec;
  33. cfg_ble_page_rssi_thr = xcfg_cb.ble_page_rssi_thr;
  34. cfg_bt_support_profile = (PROF_A2DP*BT_A2DP_EN*xcfg_cb.bt_a2dp_en) |
  35. (PROF_HFP*BT_HFP_EN*xcfg_cb.bt_sco_en) |
  36. (PROF_SPP*BT_SPP_EN*(xcfg_cb.bt_spp_en||xcfg_cb.eq_dgb_spp_en)) |
  37. (PROF_HID*BT_HID_EN*xcfg_cb.bt_hid_en) |
  38. (PROF_PBAP*BT_PBAP_EN) |
  39. (PROF_HSP*BT_HSP_EN*xcfg_cb.bt_sco_en) |
  40. (PROF_GATT * BT_ATT_EN) |
  41. (PROF_MAP * BT_MAP_EN);
  42. #if BT_A2DP_VOL_CTRL_EN
  43. if(!xcfg_cb.bt_a2dp_vol_ctrl_en) {
  44. cfg_bt_a2dp_feature &= ~A2DP_AVRCP_VOL_CTRL;
  45. cfg_bt_a2dp_feature1 &= ~A2DP_AVRCP_RECORD_DEVICE_VOL;
  46. } else {
  47. cfg_bt_a2dp_feature |= A2DP_AVRCP_VOL_CTRL;
  48. }
  49. #endif
  50. //#if BT_A2DP_LHDC_AUDIO_EN
  51. // cfg_bt_support_codec &= ~CODEC_LHDCV4;
  52. //#endif
  53. #if BT_A2DP_AVRCP_PLAY_STATUS_EN
  54. cfg_bt_a2dp_feature |= A2DP_AVRCP_PLAY_STATUS;
  55. #endif
  56. cfg_bt_dual_mode = BT_DUAL_MODE_EN * xcfg_cb.ble_en;
  57. cfg_bt_max_acl_link = BT_2ACL_EN * xcfg_cb.bt_2acl_en + 1;
  58. #if BT_TWS_EN
  59. cfg_bt_tws_mode = BT_TWS_EN * xcfg_cb.bt_tws_en;
  60. if(xcfg_cb.bt_tws_en == 0) {
  61. cfg_bt_tws_feat = 0;
  62. cfg_bt_tws_pair_mode = 0;
  63. } else {
  64. cfg_bt_tws_pair_mode &= ~TWS_PAIR_OP_MASK;
  65. cfg_bt_tws_pair_mode |= xcfg_cb.bt_tws_pair_mode & TWS_PAIR_OP_MASK;
  66. #if BT_TWS_PAIR_BONDING_EN
  67. if(xcfg_cb.bt_tws_pair_bonding_en) {
  68. cfg_bt_tws_pair_mode |= TWS_PAIR_MS_BONDING;
  69. cfg_bt_tws_feat |= TWS_FEAT_MS_BONDING;
  70. } else {
  71. cfg_bt_tws_pair_mode &= ~TWS_PAIR_MS_BONDING;
  72. }
  73. #endif
  74. #if BT_TWS_MS_SWITCH_EN
  75. if(xcfg_cb.bt_tswi_en) {
  76. cfg_bt_tws_feat |= TWS_FEAT_MS_SWITCH;
  77. } else {
  78. cfg_bt_tws_feat &= ~TWS_FEAT_MS_SWITCH;
  79. }
  80. #endif
  81. #if BT_TWS_PUBLIC_ADDR_EN
  82. cfg_bt_tws_feat |= TWS_FEAT_PUBLIC_ADDR;
  83. #endif
  84. #if BT_SNATCH_EN
  85. cfg_bt_tws_feat |= TWS_FEAT_SNATCH;
  86. #endif
  87. if(xcfg_cb.bt_tws_lr_mode > 8) {//开机时PWRKEY可能按住,先不检测
  88. tws_lr_xcfg_sel();
  89. }
  90. }
  91. #endif // BT_TWS_EN
  92. #if BT_HFP_EN
  93. if(!xcfg_cb.bt_hfp_ring_number_en) {
  94. cfg_bt_hfp_feature &= ~HFP_RING_NUMBER_EN;
  95. }
  96. #endif
  97. #if USER_INEAR_DETECT_EN
  98. sys_cb.loc_ear_sta = 0x1; //有入耳检测时,改为实际状态(0=戴入,1=取下)
  99. sys_cb.rem_ear_sta = 0x1; //有入耳检测时,改为实际状态(0=戴入,1=取下)
  100. #endif // USER_INEAR_DETECT_EN
  101. sys_cb.discon_reason = 0xff;
  102. #if BT_FCC_TEST_EN
  103. bt_fcc_init();
  104. #endif
  105. #if FUNC_BTHID_EN
  106. if (is_bthid_mode()) {
  107. cfg_bt_support_profile = PROF_HID;
  108. cfg_bt_max_acl_link = 1;
  109. cfg_bt_dual_mode = 0;
  110. cfg_bt_tws_mode = 0;
  111. }
  112. #endif // FUNC_BTHID_EN
  113. memset(&f_bt, 0, sizeof(func_bt_t));
  114. f_bt.disp_status = 0xfe;
  115. f_bt.need_pairing = 1; //开机若回连不成功,需要播报pairing
  116. if (!is_bthid_mode()) {
  117. f_bt.hid_menu_flag = 1;
  118. }
  119. le_popup_init();
  120. app_var_init();
  121. bt_setup();
  122. }
  123. void bsp_bt_close(void)
  124. {
  125. }
  126. #if BT_PWRKEY_5S_DISCOVER_EN
  127. bool bsp_bt_w4_connect(void)
  128. {
  129. if (xcfg_cb.bt_pwrkey_nsec_discover) {
  130. while (sys_cb.pwrkey_5s_check) { //等待检测结束
  131. WDT_CLR();
  132. delay_5ms(2);
  133. bt_thread_check_trigger();
  134. bsp_res_process();
  135. }
  136. //已检测到长按5S,需要直接进入配对状态。播放PAIRING提示音。
  137. if (sys_cb.pwrkey_5s_flag) {
  138. return false;
  139. }
  140. }
  141. return true;
  142. }
  143. bool bsp_bt_pwrkey5s_check(void)
  144. {
  145. bool res = !bsp_bt_w4_connect();
  146. delay_5ms(2);
  147. return res;
  148. }
  149. void bsp_bt_pwrkey5s_clr(void)
  150. {
  151. if (!xcfg_cb.bt_pwrkey_nsec_discover) {
  152. return;
  153. }
  154. sys_cb.pwrkey_5s_flag = 0;
  155. }
  156. #endif // BT_PWRKEY_5S_DISCOVER_EN
  157. void bsp_bt_vol_set(uint8_t vol)
  158. {
  159. if (sys_cb.incall_flag) {
  160. sys_cb.hfp_vol = vol;
  161. bt_ctrl_msg(BT_CTL_VOL_CHANGE);
  162. } else {
  163. sys_cb.vol = vol; //这里不直接设置DAC音量,通过bt_music_vol_change通知系统调节音量
  164. bt_music_vol_change(); //之后通过回调函数a2dp_vol_set_cb设置DAC音量
  165. }
  166. }
  167. void bsp_bt_vol_change(void)
  168. {
  169. #if BT_A2DP_VOL_CTRL_EN || BT_TWS_EN
  170. if((xcfg_cb.bt_a2dp_vol_ctrl_en && (bt_get_status() >= BT_STA_CONNECTED)) || bt_tws_is_connected()) {
  171. #if SDK_VERSION > 0x0100
  172. bt_tws_vol_change(); //通知TWS音量已调整
  173. #endif
  174. #if !BT_A2DP_VOL_CTRL_WITHOUT_KEY
  175. bt_music_vol_change(); //通知手机音量已调整
  176. #endif
  177. }
  178. #endif
  179. }
  180. uint bsp_bt_get_hfp_vol(uint hfp_vol)
  181. {
  182. uint vol;
  183. vol = (hfp_vol + 1) * sys_cb.hfp2sys_mul;
  184. if (vol > VOL_MAX) {
  185. vol = VOL_MAX;
  186. }
  187. return vol;
  188. }
  189. void bsp_bt_call_volume_msg(u16 msg)
  190. {
  191. if ((msg == KU_VOL_UP) && (sys_cb.hfp_vol < 15)) {
  192. bt_ctrl_msg(BT_CTL_VOL_UP);
  193. } else if ((msg == KU_VOL_DOWN) && (sys_cb.hfp_vol > 0)) {
  194. bt_ctrl_msg(BT_CTL_VOL_DOWN);
  195. } else {
  196. #if !HLW_UI
  197. return;
  198. #endif // HLW_UI
  199. }
  200. printf("call vol: %d\n", sys_cb.hfp_vol);
  201. #if HLW_UI
  202. if(sys_cb.hfp_vol == 15)
  203. {
  204. bsp_res_play(TWS_RES_VOL_MAX);
  205. }
  206. #endif // HLW_UI
  207. }
  208. void bt_emit_notice(uint evt, void *params)
  209. {
  210. u8 *packet = params;
  211. u8 opcode = 0;
  212. u8 scan_status = 0x03;
  213. switch(evt) {
  214. case BT_NOTICE_INIT_FINISH:
  215. #if HLW_UI
  216. if((hlw_cb.charging_flag)||(hlw_cb.charge_poweron_flag))
  217. {
  218. break;
  219. }
  220. #endif
  221. #if BT_TWS_EN
  222. if(xcfg_cb.bt_tws_pair_mode > 1) {
  223. bt_tws_set_scan(0x03);
  224. }
  225. #endif
  226. if(cfg_bt_work_mode == MODE_BQB_RF_BREDR) {
  227. opcode = 1; //测试模式,不回连,打开可被发现可被连接
  228. #if BT_PWRKEY_5S_DISCOVER_EN
  229. } else if(!bsp_bt_w4_connect()) {
  230. opcode = 1; //长按5S开机,不回连,打开可被发现可被连接
  231. #endif
  232. } else {
  233. if(bt_nor_get_link_info(NULL)) {
  234. scan_status = 0x02; //有回连信息,不开可被发现
  235. }
  236. }
  237. #if QTEST_EN
  238. qtest_create_env();
  239. #endif
  240. bt_start_work(opcode, scan_status);
  241. #if LE_WIN10_POPUP
  242. ble_adv0_set_ctrl(1); //打开LE广播,可被win10发现
  243. #endif
  244. #if HLW_UI
  245. if(opcode != 1)
  246. {
  247. hlw_cb.poweron_need_connect_flag = true;
  248. }
  249. if(bt_nor_get_link_info(NULL))
  250. {
  251. hlw_cb.poweron_reconfail_cent = 1;
  252. if(cfg_bt_max_acl_link == 2)
  253. {
  254. if(bt_nor_get_link_info_num() > 1)
  255. {
  256. hlw_cb.poweron_reconfail_cent = 2;
  257. }
  258. }
  259. }
  260. #endif // HLW_UI
  261. break;
  262. case BT_NOTICE_DISCONNECT:
  263. #if QTEST_EN
  264. if(qtest_get_mode()) {
  265. qtest_exit();
  266. //断开蓝牙连接,默认复位
  267. if(!qtest_get_pickup_sta()) {
  268. sw_reset_kick(SW_RST_FLAG);
  269. } else if(qtest_get_pickup_sta()==3) {
  270. msg_enqueue(EVT_QTEST_PICKUP_PWROFF);
  271. }
  272. }
  273. #endif
  274. #if HLW_UI
  275. hlw_bt_disconnected_handle(packet);
  276. #else
  277. f_bt.warning_status |= BT_WARN_DISCON;
  278. #endif
  279. #if LE_WIN10_POPUP
  280. ble_adv0_set_ctrl(1); //打开LE广播,可被win10发现
  281. #endif
  282. printf("BT_NOTICE_DISCONNECT:%x, %x\n", packet[1], packet[0]); //打印断连reason和feature
  283. print_r(&packet[2], 6); //打印远端蓝牙地址
  284. msg_enqueue(EVT_AUTO_PWFOFF_EN);
  285. delay_5ms(5);
  286. break;
  287. case BT_NOTICE_CONNECTED:
  288. #if HLW_UI
  289. hlw_bt_connected_handle(packet);
  290. #else
  291. f_bt.warning_status |= BT_WARN_CON;
  292. #endif
  293. bt_reset_redial_number(packet[0] & 0x01);
  294. #if LE_WIN10_POPUP
  295. ble_adv0_set_ctrl(0); //关闭LE广播
  296. #endif
  297. #if BT_PWRKEY_5S_DISCOVER_EN
  298. bsp_bt_pwrkey5s_clr();
  299. #endif // BT_PWRKEY_5S_DISCOVER_EN
  300. printf("BT_NOTICE_CONNECTED:%x\n", (packet[0]&0x08)); //打印是否是被连接
  301. print_r(&packet[2], 6); //打印远端蓝牙地址
  302. delay_5ms(5);
  303. msg_enqueue(EVT_AUTO_PWFOFF_DIS);
  304. #if BT_RF_POWER_BALANCE_EN
  305. bt_power_balance_reconnect(0);
  306. #endif
  307. break;
  308. case BT_NOTICE_CONNECT_START:
  309. #if HLW_UI
  310. hlw_bt_reconnect_start_handle(packet);
  311. #endif
  312. #if BT_RF_POWER_BALANCE_EN
  313. bt_power_balance_reconnect(1);
  314. #endif
  315. break;
  316. case BT_NOTICE_CONNECT_FAIL:
  317. #if HLW_UI
  318. hlw_bt_reconnect_fail_handle(packet);
  319. #endif
  320. #if BT_RF_POWER_BALANCE_EN
  321. bt_power_balance_reconnect(0);
  322. #endif
  323. // if(bt_is_scan_ctrl()) {
  324. // bt_set_scan(0x03); //回连失败,打开可被发现可被连接
  325. // }
  326. break;
  327. #if HLW_UI
  328. case BT_NOTICE_LOSTCONNECT:
  329. hlw_bt_disconnect_linkloss_handle(packet);
  330. break;
  331. case BT_NOTICE_SCO_KILL:
  332. hlw_bt_sco_kill_handle(packet);
  333. break;
  334. #endif
  335. // case BT_NOTICE_LOSTCONNECT:
  336. // break;
  337. // case BT_NOTICE_INCOMING:
  338. // case BT_NOTICE_RING:
  339. // case BT_NOTICE_OUTGOING:
  340. // case BT_NOTICE_CALL:
  341. // break;
  342. case BT_NOTICE_SET_SPK_GAIN:
  343. dev_vol_set_cb(packet[0], packet[1], 1 | BIT(3));
  344. break;
  345. case BT_NOTICE_MUSIC_PLAY:
  346. msg_enqueue(EVT_A2DP_MUSIC_PLAY);
  347. #if BT_HID_DOUYIN_EN
  348. if(bt_is_ios_device()) {
  349. bt_hid_finger_select_ios();
  350. } else {
  351. bt_hid_finger_select_andriod();
  352. }
  353. #endif
  354. break;
  355. case BT_NOTICE_MUSIC_STOP:
  356. if (bt_get_disp_status() > BT_STA_PLAYING) {
  357. break;
  358. }
  359. msg_enqueue(EVT_A2DP_MUSIC_STOP);
  360. break;
  361. case BT_NOTICE_MUSIC_CHANGE_VOL:
  362. if(packet[0] == 0) {
  363. msg_enqueue(KU_VOL_DOWN);
  364. } else {
  365. msg_enqueue(KU_VOL_UP);
  366. }
  367. break;
  368. case BT_NOTICE_MUSIC_SET_VOL:
  369. if((sys_cb.incall_flag & INCALL_FLAG_SCO) == 0) {
  370. dev_vol_set_cb(packet[0], packet[1], 1);
  371. }
  372. break;
  373. case BT_NOTICE_MUSIC_CHANGE_DEV:
  374. dev_vol_set_cb(packet[0], packet[1], 0);
  375. break;
  376. case BT_NOTICE_CALL_CHANGE_DEV:
  377. dev_vol_set_cb(packet[0], packet[1], 0 | BIT(3));
  378. break;
  379. case BT_NOTICE_HID_CONN_EVT:
  380. #if BT_HID_MANU_EN
  381. if (xcfg_cb.bt_hid_manu_en) {
  382. if (f_bt.hid_menu_flag == 2) {
  383. //按键连接/断开HID Profile完成
  384. if (packet[0]) {
  385. f_bt.warning_status |= BT_WARN_HID_CON;
  386. } else {
  387. f_bt.warning_status |= BT_WARN_HID_DISCON;
  388. }
  389. f_bt.hid_menu_flag = 1;
  390. }
  391. #if BT_HID_DISCON_DEFAULT_EN
  392. else if (f_bt.hid_menu_flag == 1) {
  393. if ((packet[0]) & (xcfg_cb.bt_hid_discon_default_en)) {
  394. f_bt.hid_discon_flag = 1;
  395. }
  396. }
  397. #endif // BT_HID_DISCON_DEFAULT_EN
  398. }
  399. #endif // BT_HID_MANU_EN
  400. break;
  401. #if BT_TWS_EN
  402. // case BT_NOTICE_TWS_SEARCH_FAIL:
  403. // break;
  404. // case BT_NOTICE_TWS_CONNECT_START:
  405. // break;
  406. case BT_NOTICE_TWS_DISCONNECT:
  407. bsp_res_set_break(false);
  408. f_bt.tws_status = 0;
  409. f_bt.warning_status |= BT_WARN_TWS_DISCON; //TWS断线不播报提示音,仅更改声道配置
  410. msg_enqueue(EVT_BLE_ADV0_BAT);
  411. app_tws_disconnect_callback();
  412. ring_tws_disconnect_cb();
  413. msg_enqueue(EVT_BT_UPDATE_STA); //刷新显示
  414. if(!bt_is_connected()){
  415. msg_enqueue(EVT_AUTO_PWFOFF_EN);
  416. }
  417. break;
  418. case BT_NOTICE_TWS_CONNECTED:
  419. if(bt_tws_is_slave()){
  420. ble_adv_dis(); //副机关闭BLE广播
  421. tws_res_cleanup(); //播tws提示音前先清一下单耳的提示音。不清会导致rpos慢主耳一步,导致一直w4
  422. tws_res_reset_lable(); //避免lable不对导致副耳丢失提示音
  423. }
  424. #if (CHARGE_BOX_TYPE == CBOX_SSW)
  425. charge_box_update_sta();
  426. #endif
  427. f_bt.tws_status = packet[0];
  428. if(f_bt.tws_status & FEAT_TWS_MUTE_FLAG) {
  429. f_bt.warning_status |= BT_WARN_TWS_CON; //无连接提示音,仅更改声道配置
  430. } else if(f_bt.tws_status & FEAT_TWS_ROLE) {
  431. f_bt.warning_status |= BT_WARN_TWS_SCON; //TWS连接提示音
  432. } else {
  433. f_bt.warning_status |= BT_WARN_TWS_MCON; //TWS连接提示音
  434. }
  435. app_tws_connect_callback();
  436. msg_enqueue(EVT_BT_UPDATE_STA); //刷新显示
  437. bsp_res_set_break(true); //打断开机提示音
  438. if(bt_tws_is_slave()){
  439. msg_enqueue(EVT_AUTO_PWFOFF_DIS);
  440. }else{
  441. if(!bt_is_connected()){
  442. msg_enqueue(EVT_AUTO_PWFOFF_EN);
  443. }
  444. }
  445. break;
  446. // case BT_NOTICE_TWS_CONNECT_FAIL:
  447. // break;
  448. case BT_NOTICE_TWS_LOSTCONNECT:
  449. break;
  450. case BT_NOTICE_TWS_INIT_VOL:
  451. sys_cb.vol = a2dp_vol_conver(packet[0]);
  452. msg_enqueue(EVT_TWS_INIT_VOL);
  453. break;
  454. case BT_NOTICE_TWS_USER_KEY:
  455. tws_user_key_process(params);
  456. break;
  457. case BT_NOTICE_TWS_STATUS_CHANGE:
  458. msg_enqueue(EVT_BT_UPDATE_STA); //刷新显示
  459. break;
  460. case BT_NOTICE_TWS_ROLE_CHANGE:
  461. if(packet[0] == 0) {
  462. bsp_res_set_break(false);
  463. }
  464. break;
  465. #endif
  466. // case BT_NOTICE_RECON_FINISH:
  467. // printf("RECON_FAIL, reason=%d\n", packet[1]);
  468. // break;
  469. // case BT_NOTICE_ABORT_STATUS:
  470. // if(packet[0] != 0) {
  471. // printf("ABORT_START\n");
  472. // } else {
  473. // if(packet[1] == 0 || packet[1] == 0x13) {
  474. // printf("ABORT_OK, reason=%d, %d\n", packet[1], bt_nor_is_connected());
  475. // } else {
  476. // printf("ABORT_FAIL, reason=%d, %d\n", packet[1], bt_nor_is_connected());
  477. // }
  478. // }
  479. // break;
  480. #if BT_PBAP_EN
  481. case BT_NOTICE_PBAP_CONNECTED:
  482. printf("===>>> PBAP: Connected\n");
  483. break;
  484. case BT_NOTICE_PBAP_GET_PHONEBOOK_SIZE_COMPLETE:
  485. printf("===>>> PBAP: Phonebook size: %u\n", *(u32 *)params);
  486. break;
  487. case BT_NOTICE_PBAP_PULL_PHONEBOOK_COMPLETE:
  488. printf("===>>> PBAP: Pull phonebook complete\n");
  489. break;
  490. #endif
  491. default:
  492. break;
  493. }
  494. le_popup_evt_notice(evt, params);
  495. app_bt_evt_notice(evt, params);
  496. #if ASR_EN
  497. asr_bt_evt_notice(evt, params);
  498. #endif
  499. }
  500. #if BT_TWS_MS_SWITCH_EN
  501. #if (CHARGE_BOX_TYPE == CBOX_SSW) && CHARGE_BOX_DELAY_DISC > 0
  502. bool bt_tws_wait_house_open(void)
  503. {
  504. u32 tout = tick_get();
  505. u8 charge_sta = 0;
  506. u16 msg;
  507. bool fade_sta = dac_is_fade_in();
  508. dac_fade_out();
  509. while(!tick_check_expire(tout, CHARGE_BOX_DELAY_DISC)) { //超时后才断开
  510. WDT_CLR();
  511. msg = msg_dequeue();
  512. switch(msg) {
  513. case EVT_A2DP_MUSIC_PLAY:
  514. fade_sta = true;
  515. break;
  516. case EVT_A2DP_MUSIC_STOP:
  517. fade_sta = false;
  518. break;
  519. case EVT_A2DP_SET_VOL:
  520. case EVT_ONLINE_SET_EQ:
  521. case EVT_ONLINE_SET_ANC:
  522. case EVT_TWS_SET_VOL:
  523. case EVT_BT_SET_LANG_ID:
  524. case EVT_BT_SET_EQ:
  525. case EVT_NR_STA_CHANGE:
  526. case EVT_QTEST_PICKUP_PWROFF:
  527. func_message(msg);
  528. break;
  529. case KU_PLAY_USER_DEF:
  530. break;
  531. }
  532. charge_sta = charge_box_ssw_process(0);
  533. if(charge_sta == 1) {
  534. if(fade_sta) {
  535. dac_fade_in();
  536. }
  537. return true;
  538. }
  539. }
  540. return false;
  541. }
  542. #endif
  543. #endif