func.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866
  1. #include "include.h"
  2. #if HLW_UI
  3. #include "hlw_func.h"
  4. #endif // HLW_UI
  5. func_cb_t func_cb AT(.buf.func_cb);
  6. #if VBAT_DETECT_EN
  7. void lowpower_warning_do(void)
  8. {
  9. printf("%s lpwr_warning_times %d\n", __func__, sys_cb.lpwr_warning_times);
  10. if (sys_cb.lpwr_warning_times) { //低电语音提示次数
  11. if (RLED_LOWBAT_FOLLOW_EN) {
  12. #if HLW_UI
  13. if(bt_get_connected_num() > 0)
  14. {
  15. //连接状态才允许有低电灯
  16. led_lowbat_follow_warning();
  17. }
  18. #else
  19. led_lowbat_follow_warning();
  20. #endif // HLW_UI
  21. }
  22. sys_cb.lowbat_flag = 1;
  23. #if HLW_UI
  24. if(!hlw_cb.poweron_lowbat_flag)
  25. {
  26. //f_bt.warning_status |= BT_WARN_BAT_VOICE;
  27. bsp_res_play(TWS_RES_BATTERY_LOW);
  28. }
  29. #else
  30. // bsp_res_play(TWS_RES_LOW_BATTERY);
  31. bsp_piano_warning_play(WARNING_TONE, TONE_LOW_BATTERY);
  32. #endif // HLW_UI
  33. plugin_lowbat_vol_reduce(); //低电降低音乐音量
  34. #if 0
  35. if (RLED_LOWBAT_FOLLOW_EN) {
  36. while (get_led_sta(1)) { //等待红灯闪完
  37. delay_5ms(2);
  38. }
  39. led_lowbat_recover();
  40. }
  41. #endif
  42. if (sys_cb.lpwr_warning_times != 0xff) {
  43. sys_cb.lpwr_warning_times--;
  44. }
  45. }
  46. }
  47. void lowpower_switch_to_normal_do(void)
  48. {
  49. sys_cb.vbat_nor_cnt++;
  50. if (sys_cb.vbat_nor_cnt > 40) {
  51. sys_cb.lowbat_flag = 0;
  52. sys_cb.lpwr_warning_times = LPWR_WARING_TIMES;
  53. plugin_lowbat_vol_recover(); //离开低电, 恢复音乐音量
  54. }
  55. }
  56. void lowpower_poweroff_do(void)
  57. {
  58. #if !HLW_UI
  59. bsp_piano_warning_play(WARNING_TONE, TONE_LOW_BATTERY);
  60. #endif // HLW_UI
  61. sys_cb.pwrdwn_tone_en = 1;
  62. func_cb.sta = FUNC_PWROFF; //低电,进入关机或省电模式
  63. }
  64. AT(.text.func.msg)
  65. void lowpower_vbat_process(void)
  66. {
  67. #if HLW_UI
  68. if((func_cb.sta == FUNC_CHARGE)
  69. #if FUNC_USBDEV_EN
  70. ||(func_cb.sta == FUNC_USBDEV)
  71. #endif // FUNC_USBDEV_EN
  72. )
  73. {
  74. return;
  75. }
  76. #endif // HLW_UI
  77. int lpwr_vbat_sta = is_lowpower_vbat_warning();
  78. if (lpwr_vbat_sta == 1) {
  79. // bsp_res_play(TWS_RES_LOW_BATTERY);
  80. lowpower_poweroff_do();
  81. return;
  82. }
  83. if ((func_cb.mp3_res_play == NULL) || (lpwr_vbat_sta != 2)) {
  84. if ((sys_cb.lowbat_flag) && (sys_cb.vbat > 3800)) {
  85. #if !HLW_UI
  86. //低电后不需要恢复
  87. lowpower_switch_to_normal_do();
  88. #endif // HLW_UI
  89. }
  90. return;
  91. }
  92. //低电提示音播放
  93. sys_cb.vbat_nor_cnt = 0;
  94. #if HLW_UI
  95. hlw_func_low_bat_voice_handle();
  96. #else
  97. if (sys_cb.lpwr_warning_cnt > xcfg_cb.lpwr_warning_period) {
  98. sys_cb.lpwr_warning_cnt = 0;
  99. lowpower_warning_do();
  100. }
  101. #endif // HLW_UI
  102. }
  103. #endif // VBAT_DETECT_EN
  104. void func_volume_up(void)
  105. {
  106. if (func_cb.sta == FUNC_BT) {
  107. if (sys_cb.incall_flag) {
  108. bsp_bt_call_volume_msg(KU_VOL_UP);
  109. } else {
  110. #if BT_HID_VOL_CTRL_EN
  111. if(bsp_bt_hid_vol_change(HID_KEY_VOL_UP)) {
  112. return;
  113. }
  114. #endif
  115. bt_music_vol_up();
  116. #if WARNING_MAX_VOLUME
  117. if (sys_cb.vol == VOL_MAX) {
  118. #if HLW_UI
  119. bsp_res_play(TWS_RES_VOL_MAX);
  120. #else
  121. maxvol_tone_play();
  122. #endif // HLW_UI
  123. }
  124. #endif
  125. }
  126. } else {
  127. bsp_set_volume(bsp_volume_inc(sys_cb.vol));
  128. }
  129. if (func_cb.set_vol_callback) {
  130. func_cb.set_vol_callback(1);
  131. }
  132. }
  133. void func_volume_down(void)
  134. {
  135. if (func_cb.sta == FUNC_BT) {
  136. if (sys_cb.incall_flag) {
  137. bsp_bt_call_volume_msg(KU_VOL_DOWN);
  138. } else {
  139. #if BT_HID_VOL_CTRL_EN
  140. if(bsp_bt_hid_vol_change(HID_KEY_VOL_DOWN)) {
  141. return;
  142. }
  143. #endif
  144. bt_music_vol_down();
  145. #if WARNING_MIN_VOLUME
  146. if (sys_cb.vol == 0) {
  147. minvol_tone_play();
  148. }
  149. #endif
  150. }
  151. } else {
  152. bsp_set_volume(bsp_volume_dec(sys_cb.vol));
  153. }
  154. if (func_cb.set_vol_callback) {
  155. func_cb.set_vol_callback(0);
  156. }
  157. }
  158. AT(.text.func.process)
  159. void func_process(void)
  160. {
  161. WDT_CLR();
  162. vusb_reset_clr();
  163. #if HLW_UI
  164. if(func_cb.sta == FUNC_USBDEV)
  165. {
  166. vusb4s_reset_clr_cnt();
  167. }
  168. #endif // HLW_UI
  169. #if VBAT_DETECT_EN
  170. lowpower_vbat_process();
  171. #endif // VBAT_DETECT_EN
  172. #if QTEST_EN
  173. if(QTEST_IS_ENABLE()) {
  174. qtest_process();
  175. }
  176. #endif
  177. #if BT_BACKSTAGE_EN
  178. if (func_cb.sta != FUNC_BT) {
  179. func_bt_warning();
  180. uint status = bt_get_status();
  181. #if BT_BACKSTAGE_PLAY_DETECT_EN
  182. if (status >= BT_STA_PLAYING) {
  183. #else
  184. if (status > BT_STA_PLAYING) {
  185. #endif
  186. func_cb.sta_break = func_cb.sta;
  187. func_cb.sta = FUNC_BT;
  188. }
  189. }
  190. #endif
  191. #if PWRKEY_2_HW_PWRON
  192. //PWRKEY模拟硬开关关机处理
  193. if (sys_cb.pwrdwn_hw_flag) {
  194. sys_cb.pwrdwn_tone_en = 1;
  195. func_cb.sta = FUNC_PWROFF;
  196. sys_cb.pwrdwn_hw_flag = 0;
  197. }
  198. #endif
  199. #if USER_NTC
  200. if (sys_cb.ntc_2_pwrdwn_flag) {
  201. sys_cb.pwrdwn_tone_en = 1;
  202. func_cb.sta = FUNC_PWROFF;
  203. sys_cb.ntc_2_pwrdwn_flag = 0;
  204. }
  205. #endif
  206. #if CHARGE_EN
  207. if (xcfg_cb.charge_en) {
  208. charge_process();
  209. }
  210. #endif // CHARGE_EN
  211. #if SYS_KARAOK_EN
  212. karaok_process();
  213. #endif
  214. #if ANC_ALG_EN
  215. anc_alg_process();
  216. #endif // ANC_ALG_EN
  217. #if ANC_TOOL_EN
  218. anc_tool_process();
  219. #endif // ANC_TOOL_EN
  220. #if BT_MUSIC_EFFECT_EN
  221. music_effect_func_process();
  222. #endif // BT_MUSIC_EFFECT_EN
  223. #if ANC_MAX_VOL_DIS_FB_EN
  224. bsp_anc_max_vol_dis_fb_process();
  225. #endif // ANC_MAX_VOL_DIS_FB_EN
  226. if(f_bt.bt_is_inited) {
  227. bt_thread_check_trigger();
  228. bsp_res_process();
  229. app_process();
  230. le_popup_process();
  231. }
  232. gsensor_process();
  233. sys_run_loop();
  234. }
  235. //func common message process
  236. AT(.text.func.msg)
  237. void func_message(u16 msg)
  238. {
  239. //printf("[%s] msg %x\n", __func__, msg);
  240. switch (msg) {
  241. #if BT_TWS_EN
  242. case EVT_BT_UPDATE_STA:
  243. f_bt.disp_update = 1; //刷新显示
  244. break;
  245. #endif
  246. case KL_NEXT_VOL_UP:
  247. case KH_NEXT_VOL_UP:
  248. case KL_PREV_VOL_UP:
  249. case KH_PREV_VOL_UP:
  250. case KL_VOL_UP:
  251. case KH_VOL_UP:
  252. case KU_VOL_UP_NEXT:
  253. case KU_VOL_UP_PREV:
  254. case KU_VOL_UP:
  255. case KU_VOL_UP_DOWN:
  256. #if ONEMORE_SPP_TEST_EN
  257. if(onemore_hq51_key_chance_test(1))
  258. {
  259. break;
  260. }
  261. #endif // ONEMORE_SPP_TEST_EN
  262. if((bt_get_disp_status() >= BT_STA_PLAYING)&&(bt_get_disp_status() <= BT_STA_INCALL))
  263. {
  264. func_volume_up();
  265. }
  266. break;
  267. case KLU_VOL_UP:
  268. case KLU_NEXT_VOL_UP:
  269. case KL_PREV_VOL_DOWN:
  270. case KH_PREV_VOL_DOWN:
  271. case KL_NEXT_VOL_DOWN:
  272. case KH_NEXT_VOL_DOWN:
  273. case KU_VOL_DOWN_PREV:
  274. case KU_VOL_DOWN_NEXT:
  275. case KU_VOL_DOWN:
  276. case KL_VOL_DOWN:
  277. case KH_VOL_DOWN:
  278. case KL_VOL_UP_DOWN:
  279. case KH_VOL_UP_DOWN:
  280. #if ONEMORE_SPP_TEST_EN
  281. if(onemore_hq51_key_chance_test(2))
  282. {
  283. break;
  284. }
  285. #endif // ONEMORE_SPP_TEST_EN
  286. if((bt_get_disp_status() >= BT_STA_PLAYING)&&(bt_get_disp_status() <= BT_STA_INCALL))
  287. {
  288. func_volume_down();
  289. }
  290. break;
  291. //长按PP/POWER软关机(通过PWROFF_PRESS_TIME控制长按时间)
  292. case KLH_POWER:
  293. case KLH_MODE_PWR:
  294. case KLH_PLAY_PWR_USER_DEF:
  295. if(xcfg_cb.bt_tswi_kpwr_en) { //按键关机是否主从切换
  296. if(sys_cb.discon_reason == 0xff) {
  297. sys_cb.discon_reason = 0; //不同步关机
  298. }
  299. }
  300. sys_cb.pwrdwn_tone_en = 1;
  301. func_cb.sta = FUNC_PWROFF;
  302. break;
  303. case KU_MODE:
  304. case KU_MODE_PWR:
  305. func_cb.sta = FUNC_NULL;
  306. break;
  307. #if EQ_MODE_EN
  308. case KU_EQ:
  309. sys_set_eq();
  310. break;
  311. #endif // EQ_MODE_EN
  312. case KU_MUTE:
  313. if (sys_cb.mute) {
  314. bsp_sys_unmute();
  315. } else {
  316. bsp_sys_mute();
  317. }
  318. break;
  319. #if SYS_KARAOK_EN
  320. case KU_VOICE_RM:
  321. karaok_voice_rm_switch();
  322. break;
  323. #if SYS_MAGIC_VOICE_EN || HIFI4_PITCH_SHIFT_EN
  324. case KL_VOICE_RM:
  325. magic_voice_switch();
  326. break;
  327. #endif
  328. #endif
  329. #if ANC_EN
  330. #if !HLW_UI
  331. case KU_ANC:
  332. case KD_ANC:
  333. case KL_ANC:
  334. sys_cb.anc_user_mode++;
  335. if (sys_cb.anc_user_mode > 2) {
  336. sys_cb.anc_user_mode = 0;
  337. }
  338. bsp_anc_set_mode(sys_cb.anc_user_mode);
  339. break;
  340. #endif // HLW_UI
  341. #endif
  342. case MSG_SYS_500MS:
  343. break;
  344. #if MUSIC_UDISK_EN
  345. case EVT_UDISK_INSERT:
  346. if (dev_is_online(DEV_UDISK)) {
  347. if (dev_udisk_activation_try(0)) {
  348. sys_cb.cur_dev = DEV_UDISK;
  349. func_cb.sta = FUNC_MUSIC;
  350. }
  351. }
  352. break;
  353. #endif // MUSIC_UDISK_EN
  354. #if MUSIC_SDCARD_EN
  355. case EVT_SD_INSERT:
  356. if (dev_is_online(DEV_SDCARD)) {
  357. sys_cb.cur_dev = DEV_SDCARD;
  358. func_cb.sta = FUNC_MUSIC;
  359. }
  360. break;
  361. #endif // MUSIC_SDCARD_EN
  362. #if FUNC_USBDEV_EN
  363. case EVT_PC_INSERT:
  364. //printf("EVT_PC_INSERT %d\n",dev_is_online(DEV_USBPC));
  365. if (dev_is_online(DEV_USBPC)) {
  366. func_cb.sta = FUNC_USBDEV;
  367. }
  368. break;
  369. case EVT_UDE_SET_VOL:
  370. printf("ude set db: %d\n", sys_cb.db_level);
  371. bsp_change_volume_db(sys_cb.db_level);
  372. break;
  373. #endif // FUNC_USBDEV_EN
  374. #if LINEIN_DETECT_EN
  375. case EVT_LINEIN_INSERT:
  376. if (dev_is_online(DEV_LINEIN)) {
  377. #if LINEIN_2_PWRDOWN_EN
  378. sys_cb.pwrdwn_tone_en = LINEIN_2_PWRDOWN_TONE_EN;
  379. func_cb.sta = FUNC_PWROFF;
  380. #else
  381. func_cb.sta = FUNC_AUX;
  382. #endif // LINEIN_2_PWRDOWN_EN
  383. }
  384. break;
  385. #endif // LINEIN_DETECT_EN
  386. case EVT_A2DP_SET_VOL:
  387. case EVT_TWS_INIT_VOL:
  388. if((sys_cb.incall_flag & INCALL_FLAG_SCO) == 0) {
  389. if(!bsp_res_is_vol_busy()) {
  390. bsp_change_volume(sys_cb.vol);
  391. }
  392. }
  393. //no break
  394. case EVT_TWS_SET_VOL:
  395. if (sys_cb.incall_flag == 0) {
  396. printf("VOL: %d\n", sys_cb.vol);
  397. if(msg != EVT_TWS_INIT_VOL) { //TWS同步音量,不需要显示
  398. gui_box_show_vol();
  399. }
  400. }
  401. //no break
  402. case EVT_DEV_SAVE_VOL:
  403. sys_cb.cm_times = 0;
  404. sys_cb.cm_vol_change = 1;
  405. break;
  406. #if BT_MUSIC_EFFECT_SOFT_VOL_EN
  407. case EVT_SOFT_VOL_SET:
  408. bsp_change_volume(sys_cb.vol);
  409. break;
  410. #endif // BT_MUSIC_EFFECT_SOFT_VOL_EN
  411. #if ABP_EN
  412. case EVT_ABP_SET:
  413. if (sys_cb.abp_mode == 0) {
  414. abp_stop();
  415. } else {
  416. abp_start(sys_cb.abp_mode - 1);
  417. }
  418. break;
  419. #endif // ABP_EN
  420. case EVT_BT_SCAN_START:
  421. if (bt_get_status() < BT_STA_SCANNING) {
  422. bt_scan_enable();
  423. }
  424. break;
  425. #if EQ_DBG_IN_UART || EQ_DBG_IN_SPP
  426. case EVT_ONLINE_SET_EQ:
  427. bsp_eq_parse_cmd();
  428. break;
  429. #endif
  430. #if ANC_EN
  431. case EVT_ONLINE_SET_ANC:
  432. bsp_anc_parse_cmd();
  433. break;
  434. #endif
  435. #if ENC_DBG_EN
  436. case EVT_ONLINE_SET_ENC:
  437. bsp_enc_parse_cmd();
  438. break;
  439. #endif
  440. #if BT_MUSIC_EFFECT_DBG_EN
  441. case EVT_ONLINE_SET_EFFECT:
  442. bsp_effect_parse_cmd();
  443. break;
  444. #endif
  445. #if ANC_ALG_DBG_EN
  446. case EVT_ONLINE_SET_ANC_ALG:
  447. bsp_anc_alg_parse_cmd();
  448. break;
  449. #endif // ANC_ALG_DBG_EN
  450. #if ANC_TOOL_EN
  451. case EVT_ONLINE_SET_ANC_TOOL:
  452. bsp_anc_tool_parse_cmd();
  453. break;
  454. #endif // ANC_TOOL_EN
  455. #if SYS_KARAOK_EN
  456. case EVT_ECHO_LEVEL:
  457. // printf("echo level:%x\n", sys_cb.echo_level);
  458. #if SYS_ECHO_EN
  459. bsp_echo_set_level();
  460. #endif
  461. break;
  462. case EVT_MIC_VOL:
  463. // printf("mic vol:%x\n", sys_cb.mic_vol);
  464. bsp_karaok_set_mic_volume();
  465. break;
  466. case EVT_MUSIC_VOL:
  467. // printf("music vol:%x\n", sys_cb.music_vol);
  468. bsp_karaok_set_music_volume();
  469. break;
  470. #endif
  471. #if LANG_SELECT == LANG_EN_ZH
  472. case EVT_BT_SET_LANG_ID:
  473. param_lang_id_write();
  474. param_sync();
  475. break;
  476. #endif
  477. #if EQ_MODE_EN
  478. case EVT_BT_SET_EQ:
  479. music_set_eq_by_num(sys_cb.eq_mode);
  480. break;
  481. #endif
  482. #if CHARGE_BOX_EN && (UART0_PRINTF_SEL != PRINTF_VUSB)
  483. //耳机入仓关机
  484. case EVT_CHARGE_INBOX:
  485. if(sys_cb.discon_reason == 0xff) {
  486. sys_cb.discon_reason = 0; //不同步关机
  487. }
  488. sys_cb.pwrdwn_tone_en = 0;
  489. charge_box_inbox_wakeup_enable();
  490. func_cb.sta = FUNC_PWROFF;
  491. break;
  492. #endif
  493. #if QTEST_EN
  494. case EVT_QTEST_PICKUP_PWROFF:
  495. func_cb.sta = FUNC_PWROFF;
  496. break;
  497. #endif
  498. case EVT_HFP_SET_VOL:
  499. if(sys_cb.incall_flag & INCALL_FLAG_SCO){
  500. bsp_change_volume(bsp_bt_get_hfp_vol(sys_cb.hfp_vol));
  501. sys_cb.cm_times = 0;
  502. sys_cb.cm_vol_change = 1;
  503. }
  504. break;
  505. #if DAC_DNC_EN
  506. case EVT_DNC_START:
  507. if (bsp_res_is_playing()) {
  508. msg_enqueue(EVT_DNC_START);
  509. } else {
  510. #if ANC_EN
  511. if (sys_cb.anc_user_mode == 0)
  512. #endif
  513. {
  514. dac_dnc_start();
  515. }
  516. }
  517. break;
  518. case EVT_DNC_STOP:
  519. if (bsp_res_is_playing()) {
  520. msg_enqueue(EVT_DNC_STOP);
  521. } else {
  522. dac_dnc_stop();
  523. }
  524. break;
  525. #endif
  526. #if IODM_TEST_EN
  527. case EVT_IODM_TEST:
  528. iodm_reveice_data_deal();
  529. break;
  530. #endif
  531. #if ASR_EN
  532. case EVT_ASR_START:
  533. if (sys_cb.asr_enable) {
  534. bsp_asr_start();
  535. }
  536. break;
  537. case EVT_ASR_STOP:
  538. bsp_asr_stop();
  539. break;
  540. #endif
  541. #if OPUS_ENC_EN
  542. case EVT_ENCODE_STOP:
  543. bsp_opus_encode_stop();
  544. break;
  545. #endif
  546. #if BT_HID_DOUYIN_EN
  547. case EVT_HID_SLIDE_UP:
  548. printf("user_finger_up\n");
  549. user_finger_up();
  550. break;
  551. case EVT_HID_SLIDE_DOWN:
  552. printf("user_finger_down\n");
  553. user_finger_down();
  554. break;
  555. case EVT_HID_P:
  556. printf("user_finger_p\n");
  557. user_finger_p();
  558. break;
  559. case EVT_HID_PP:
  560. printf("user_finger_pp\n");
  561. user_finger_pp();
  562. break;
  563. case EVT_HID_TAKE_PIC:
  564. printf("bsp_bt_hid_photo\n");
  565. bsp_bt_hid_photo(HID_KEY_VOL_UP);
  566. break;
  567. #endif
  568. #if (BT_MAP_EN || BT_HFP_TIME_EN)
  569. case EVT_BT_MAP_DONE:
  570. case EVT_HFP_TIME_DONE:
  571. ab_mate_time_info_notify(CMD_TIME_LOCALTIME);
  572. break;
  573. #endif
  574. #if HLW_UI
  575. case KL_PWR_NEXT:
  576. case KLU_PWR_NEXT:
  577. hlw_cb.dut_key_count = 0;
  578. break;
  579. case KH_PWR_NEXT:
  580. hlw_func_enter_dutmode_handle();
  581. break;
  582. case EVT_NTC_CONTROL:
  583. hlw_func_ntc_control_handle();
  584. break;
  585. case KU_ANC:
  586. if(onemore_hq51_key_chance_test(3))
  587. {
  588. break;
  589. }
  590. #if ONEMORE_APP_EN
  591. onemore_anc_switch_handle(1);
  592. #endif // ONEMORE_APP_EN
  593. break;
  594. case EVT_ANC_LED_RECOVER:
  595. hlw_func_anc_led_recover_handle();
  596. break;
  597. #if ONEMORE_SPP_TEST_EN
  598. case EVT_ANCMIC_CHANNEL_CONTROL:
  599. onemore_test_mic_channel_control();
  600. break;
  601. case EVT_SINGLE_MIC_ENC_ENABLE:
  602. onemore_test_talk_enc_enable();
  603. break;
  604. case EVT_ANCMODE_SWITCH:
  605. onemore_test_anc_mode_switch();
  606. break;
  607. case EVT_EQMODE_SWITCH:
  608. onemore_test_eq_mode_switch();
  609. break;
  610. case EVT_MICTEST_SWITCH:
  611. onemore_test_mic_test_switch();
  612. break;
  613. case EVT_DUAL_MIC_ENC_ENABLE:
  614. onemore_test_talk_enc_enable();
  615. break;
  616. case EVT_CLEAR_PAIRLIST:
  617. onemore_test_clear_pairlist_handle();
  618. break;
  619. case EVT_POWEROFF_CMD:
  620. onemore_test_poweroff_control();
  621. break;
  622. case EVT_LED_OPEN:
  623. onemore_test_led_open_handle();
  624. break;
  625. case EVT_LED_CLOSE:
  626. onemore_test_led_close_handle();
  627. break;
  628. case EVT_PAKET_CMD:
  629. onemore_test_packet_cmd_handle();
  630. break;
  631. case EVT_ONEMORE_BAT_UPDATE:
  632. onemore_app_report_headinformation_handle();
  633. break;
  634. #endif // ONEMORE_SPP_TEST_EN
  635. #endif
  636. }
  637. //调节音量,3秒后写入flash
  638. if ((sys_cb.cm_vol_change) && (sys_cb.cm_times >= 6)) {
  639. sys_cb.cm_vol_change = 0;
  640. param_hfp_vol_write();
  641. param_sys_vol_write();
  642. cm_sync();
  643. }
  644. #if SD_SOFT_DETECT_EN
  645. sd_soft_cmd_detect(120);
  646. #endif
  647. }
  648. ///进入一个功能的总入口
  649. AT(.text.func)
  650. void func_enter(void)
  651. {
  652. if (sys_cb.cm_vol_change) {
  653. sys_cb.cm_vol_change = 0;
  654. param_sys_vol_write();
  655. }
  656. param_sync();
  657. gui_box_clear();
  658. reset_sleep_delay();
  659. reset_pwroff_delay();
  660. func_cb.mp3_res_play = NULL;
  661. func_cb.set_vol_callback = NULL;
  662. bsp_clr_mute_sta();
  663. sys_cb.voice_evt_brk_en = 1; //播放提示音时,快速响应事件。
  664. #if SYS_KARAOK_EN
  665. karaok_voice_rm_disable();
  666. bsp_karaok_echo_reset_buf(func_cb.sta);
  667. #endif
  668. }
  669. AT(.text.func)
  670. void func_exit(void)
  671. {
  672. u8 func_num;
  673. u8 funcs_total = get_funcs_total();
  674. for (func_num = 0; func_num != funcs_total; func_num++) {
  675. if (func_cb.last == func_sort_table[func_num]) {
  676. break;
  677. }
  678. }
  679. func_num++; //切换到下一个任务
  680. if (func_num >= funcs_total) {
  681. func_num = 0;
  682. }
  683. func_cb.sta = func_sort_table[func_num]; //新的任务
  684. #if SYS_MODE_BREAKPOINT_EN
  685. param_sys_mode_write(func_cb.sta);
  686. #endif // SYS_MODE_BREAKPOINT_EN
  687. }
  688. AT(.text.func)
  689. void func_run(void)
  690. {
  691. printf("%s\n", __func__);
  692. func_bt_chk_off();
  693. while (1) {
  694. func_enter();
  695. switch (func_cb.sta) {
  696. #if FUNC_MUSIC_EN
  697. case FUNC_MUSIC:
  698. func_music();
  699. break;
  700. #endif // FUNC_MUSIC_EN
  701. #if FUNC_CLOCK_EN
  702. case FUNC_CLOCK:
  703. func_clock();
  704. break;
  705. #endif // FUNC_CLOCK_EN
  706. #if FUNC_BT_EN
  707. case FUNC_BT:
  708. func_bt();
  709. break;
  710. #endif
  711. #if FUNC_BTHID_EN
  712. case FUNC_BTHID:
  713. func_bthid();
  714. break;
  715. #endif // FUNC_BTHID_EN
  716. #if FUNC_AUX_EN
  717. case FUNC_AUX:
  718. func_aux();
  719. break;
  720. #endif // FUNC_AUX_EN
  721. #if FUNC_USBDEV_EN
  722. case FUNC_USBDEV:
  723. func_usbdev();
  724. break;
  725. #endif
  726. #if FUNC_SPEAKER_EN
  727. case FUNC_SPEAKER:
  728. func_speaker();
  729. break;
  730. #endif // FUNC_SPEAKER_EN
  731. #if FUNC_IDLE_EN
  732. case FUNC_IDLE:
  733. func_idle();
  734. break;
  735. #endif // FUNC_IDLE_EN
  736. #if FUNC_BT_DUT_EN
  737. case FUNC_BT_DUT:
  738. func_bt_dut();
  739. break;
  740. #endif
  741. #if FUNC_BT_FCC_EN
  742. case FUNC_BT_FCC:
  743. func_bt_fcc();
  744. break;
  745. #endif
  746. #if IODM_TEST_EN
  747. case FUNC_BT_IODM:
  748. func_bt_iodm();
  749. break;
  750. #endif
  751. case FUNC_CHARGE:
  752. func_charge();
  753. break;
  754. case FUNC_PWROFF:
  755. func_pwroff(sys_cb.pwrdwn_tone_en);
  756. break;
  757. default:
  758. func_exit();
  759. break;
  760. }
  761. }
  762. }