func.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  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. uint status = bt_get_disp_status();
  241. switch (msg) {
  242. #if BT_TWS_EN
  243. case EVT_BT_UPDATE_STA:
  244. f_bt.disp_update = 1; //刷新显示
  245. break;
  246. #endif
  247. case KL_NEXT_VOL_UP:
  248. case KH_NEXT_VOL_UP:
  249. case KL_PREV_VOL_UP:
  250. case KH_PREV_VOL_UP:
  251. case KL_VOL_UP:
  252. case KH_VOL_UP:
  253. case KU_VOL_UP_NEXT:
  254. case KU_VOL_UP_PREV:
  255. case KU_VOL_UP:
  256. case KU_VOL_UP_DOWN:
  257. #if ONEMORE_SPP_TEST_EN
  258. if(onemore_hq51_key_chance_test(1))
  259. {
  260. break;
  261. }
  262. #endif // ONEMORE_SPP_TEST_EN
  263. if((status >= BT_STA_PLAYING)&&(status <= BT_STA_INCALL))
  264. {
  265. func_volume_up();
  266. }
  267. break;
  268. case KLU_VOL_UP:
  269. case KLU_NEXT_VOL_UP:
  270. case KL_PREV_VOL_DOWN:
  271. case KH_PREV_VOL_DOWN:
  272. case KL_NEXT_VOL_DOWN:
  273. case KH_NEXT_VOL_DOWN:
  274. case KU_VOL_DOWN_PREV:
  275. case KU_VOL_DOWN_NEXT:
  276. case KU_VOL_DOWN:
  277. case KL_VOL_DOWN:
  278. case KH_VOL_DOWN:
  279. case KL_VOL_UP_DOWN:
  280. case KH_VOL_UP_DOWN:
  281. #if ONEMORE_SPP_TEST_EN
  282. if(onemore_hq51_key_chance_test(2))
  283. {
  284. break;
  285. }
  286. #endif // ONEMORE_SPP_TEST_EN
  287. if((status >= BT_STA_PLAYING)&&(status <= BT_STA_INCALL))
  288. {
  289. func_volume_down();
  290. }
  291. break;
  292. //长按PP/POWER软关机(通过PWROFF_PRESS_TIME控制长按时间)
  293. case KLH_POWER:
  294. case KLH_MODE_PWR:
  295. case KLH_PLAY_PWR_USER_DEF:
  296. if(xcfg_cb.bt_tswi_kpwr_en) { //按键关机是否主从切换
  297. if(sys_cb.discon_reason == 0xff) {
  298. sys_cb.discon_reason = 0; //不同步关机
  299. }
  300. }
  301. sys_cb.pwrdwn_tone_en = 1;
  302. func_cb.sta = FUNC_PWROFF;
  303. break;
  304. case KU_MODE:
  305. case KU_MODE_PWR:
  306. func_cb.sta = FUNC_NULL;
  307. break;
  308. #if EQ_MODE_EN
  309. case KU_EQ:
  310. sys_set_eq();
  311. break;
  312. #endif // EQ_MODE_EN
  313. case KU_MUTE:
  314. if (sys_cb.mute) {
  315. bsp_sys_unmute();
  316. } else {
  317. bsp_sys_mute();
  318. }
  319. break;
  320. #if SYS_KARAOK_EN
  321. case KU_VOICE_RM:
  322. karaok_voice_rm_switch();
  323. break;
  324. #if SYS_MAGIC_VOICE_EN || HIFI4_PITCH_SHIFT_EN
  325. case KL_VOICE_RM:
  326. magic_voice_switch();
  327. break;
  328. #endif
  329. #endif
  330. #if ANC_EN
  331. #if !HLW_UI
  332. case KU_ANC:
  333. case KD_ANC:
  334. case KL_ANC:
  335. sys_cb.anc_user_mode++;
  336. if (sys_cb.anc_user_mode > 2) {
  337. sys_cb.anc_user_mode = 0;
  338. }
  339. bsp_anc_set_mode(sys_cb.anc_user_mode);
  340. break;
  341. #endif // HLW_UI
  342. #endif
  343. case MSG_SYS_500MS:
  344. break;
  345. #if MUSIC_UDISK_EN
  346. case EVT_UDISK_INSERT:
  347. if (dev_is_online(DEV_UDISK)) {
  348. if (dev_udisk_activation_try(0)) {
  349. sys_cb.cur_dev = DEV_UDISK;
  350. func_cb.sta = FUNC_MUSIC;
  351. }
  352. }
  353. break;
  354. #endif // MUSIC_UDISK_EN
  355. #if MUSIC_SDCARD_EN
  356. case EVT_SD_INSERT:
  357. if (dev_is_online(DEV_SDCARD)) {
  358. sys_cb.cur_dev = DEV_SDCARD;
  359. func_cb.sta = FUNC_MUSIC;
  360. }
  361. break;
  362. #endif // MUSIC_SDCARD_EN
  363. #if FUNC_USBDEV_EN
  364. case EVT_PC_INSERT:
  365. //printf("EVT_PC_INSERT %d\n",dev_is_online(DEV_USBPC));
  366. if (dev_is_online(DEV_USBPC)) {
  367. func_cb.sta = FUNC_USBDEV;
  368. }
  369. break;
  370. case EVT_UDE_SET_VOL:
  371. printf("ude set db: %d\n", sys_cb.db_level);
  372. bsp_change_volume_db(sys_cb.db_level);
  373. break;
  374. #endif // FUNC_USBDEV_EN
  375. #if LINEIN_DETECT_EN
  376. case EVT_LINEIN_INSERT:
  377. if (dev_is_online(DEV_LINEIN)) {
  378. #if LINEIN_2_PWRDOWN_EN
  379. sys_cb.pwrdwn_tone_en = LINEIN_2_PWRDOWN_TONE_EN;
  380. func_cb.sta = FUNC_PWROFF;
  381. #else
  382. func_cb.sta = FUNC_AUX;
  383. #endif // LINEIN_2_PWRDOWN_EN
  384. }
  385. break;
  386. #endif // LINEIN_DETECT_EN
  387. case EVT_A2DP_SET_VOL:
  388. case EVT_TWS_INIT_VOL:
  389. if((sys_cb.incall_flag & INCALL_FLAG_SCO) == 0) {
  390. if(!bsp_res_is_vol_busy()) {
  391. bsp_change_volume(sys_cb.vol);
  392. }
  393. }
  394. //no break
  395. case EVT_TWS_SET_VOL:
  396. if (sys_cb.incall_flag == 0) {
  397. printf("VOL: %d\n", sys_cb.vol);
  398. if(msg != EVT_TWS_INIT_VOL) { //TWS同步音量,不需要显示
  399. gui_box_show_vol();
  400. }
  401. }
  402. //no break
  403. case EVT_DEV_SAVE_VOL:
  404. sys_cb.cm_times = 0;
  405. sys_cb.cm_vol_change = 1;
  406. break;
  407. #if BT_MUSIC_EFFECT_SOFT_VOL_EN
  408. case EVT_SOFT_VOL_SET:
  409. bsp_change_volume(sys_cb.vol);
  410. break;
  411. #endif // BT_MUSIC_EFFECT_SOFT_VOL_EN
  412. #if ABP_EN
  413. case EVT_ABP_SET:
  414. if (sys_cb.abp_mode == 0) {
  415. abp_stop();
  416. } else {
  417. abp_start(sys_cb.abp_mode - 1);
  418. }
  419. break;
  420. #endif // ABP_EN
  421. case EVT_BT_SCAN_START:
  422. if (bt_get_status() < BT_STA_SCANNING) {
  423. bt_scan_enable();
  424. }
  425. break;
  426. #if EQ_DBG_IN_UART || EQ_DBG_IN_SPP
  427. case EVT_ONLINE_SET_EQ:
  428. bsp_eq_parse_cmd();
  429. break;
  430. #endif
  431. #if ANC_EN
  432. case EVT_ONLINE_SET_ANC:
  433. bsp_anc_parse_cmd();
  434. break;
  435. #endif
  436. #if ENC_DBG_EN
  437. case EVT_ONLINE_SET_ENC:
  438. bsp_enc_parse_cmd();
  439. break;
  440. #endif
  441. #if BT_MUSIC_EFFECT_DBG_EN
  442. case EVT_ONLINE_SET_EFFECT:
  443. bsp_effect_parse_cmd();
  444. break;
  445. #endif
  446. #if ANC_ALG_DBG_EN
  447. case EVT_ONLINE_SET_ANC_ALG:
  448. bsp_anc_alg_parse_cmd();
  449. break;
  450. #endif // ANC_ALG_DBG_EN
  451. #if ANC_TOOL_EN
  452. case EVT_ONLINE_SET_ANC_TOOL:
  453. bsp_anc_tool_parse_cmd();
  454. break;
  455. #endif // ANC_TOOL_EN
  456. #if SYS_KARAOK_EN
  457. case EVT_ECHO_LEVEL:
  458. // printf("echo level:%x\n", sys_cb.echo_level);
  459. #if SYS_ECHO_EN
  460. bsp_echo_set_level();
  461. #endif
  462. break;
  463. case EVT_MIC_VOL:
  464. // printf("mic vol:%x\n", sys_cb.mic_vol);
  465. bsp_karaok_set_mic_volume();
  466. break;
  467. case EVT_MUSIC_VOL:
  468. // printf("music vol:%x\n", sys_cb.music_vol);
  469. bsp_karaok_set_music_volume();
  470. break;
  471. #endif
  472. #if LANG_SELECT == LANG_EN_ZH
  473. case EVT_BT_SET_LANG_ID:
  474. param_lang_id_write();
  475. param_sync();
  476. break;
  477. #endif
  478. #if EQ_MODE_EN
  479. case EVT_BT_SET_EQ:
  480. music_set_eq_by_num(sys_cb.eq_mode);
  481. break;
  482. #endif
  483. #if CHARGE_BOX_EN && (UART0_PRINTF_SEL != PRINTF_VUSB)
  484. //耳机入仓关机
  485. case EVT_CHARGE_INBOX:
  486. if(sys_cb.discon_reason == 0xff) {
  487. sys_cb.discon_reason = 0; //不同步关机
  488. }
  489. sys_cb.pwrdwn_tone_en = 0;
  490. charge_box_inbox_wakeup_enable();
  491. func_cb.sta = FUNC_PWROFF;
  492. break;
  493. #endif
  494. #if QTEST_EN
  495. case EVT_QTEST_PICKUP_PWROFF:
  496. func_cb.sta = FUNC_PWROFF;
  497. break;
  498. #endif
  499. case EVT_HFP_SET_VOL:
  500. if(sys_cb.incall_flag & INCALL_FLAG_SCO){
  501. bsp_change_volume(bsp_bt_get_hfp_vol(sys_cb.hfp_vol));
  502. sys_cb.cm_times = 0;
  503. sys_cb.cm_vol_change = 1;
  504. }
  505. break;
  506. #if DAC_DNC_EN
  507. case EVT_DNC_START:
  508. if (bsp_res_is_playing()) {
  509. msg_enqueue(EVT_DNC_START);
  510. } else {
  511. #if ANC_EN
  512. if (sys_cb.anc_user_mode == 0)
  513. #endif
  514. {
  515. dac_dnc_start();
  516. }
  517. }
  518. break;
  519. case EVT_DNC_STOP:
  520. if (bsp_res_is_playing()) {
  521. msg_enqueue(EVT_DNC_STOP);
  522. } else {
  523. dac_dnc_stop();
  524. }
  525. break;
  526. #endif
  527. #if IODM_TEST_EN
  528. case EVT_IODM_TEST:
  529. iodm_reveice_data_deal();
  530. break;
  531. #endif
  532. #if ASR_EN
  533. case EVT_ASR_START:
  534. if (sys_cb.asr_enable) {
  535. bsp_asr_start();
  536. }
  537. break;
  538. case EVT_ASR_STOP:
  539. bsp_asr_stop();
  540. break;
  541. #endif
  542. #if OPUS_ENC_EN
  543. case EVT_ENCODE_STOP:
  544. bsp_opus_encode_stop();
  545. break;
  546. #endif
  547. #if BT_HID_DOUYIN_EN
  548. case EVT_HID_SLIDE_UP:
  549. printf("user_finger_up\n");
  550. user_finger_up();
  551. break;
  552. case EVT_HID_SLIDE_DOWN:
  553. printf("user_finger_down\n");
  554. user_finger_down();
  555. break;
  556. case EVT_HID_P:
  557. printf("user_finger_p\n");
  558. user_finger_p();
  559. break;
  560. case EVT_HID_PP:
  561. printf("user_finger_pp\n");
  562. user_finger_pp();
  563. break;
  564. case EVT_HID_TAKE_PIC:
  565. printf("bsp_bt_hid_photo\n");
  566. bsp_bt_hid_photo(HID_KEY_VOL_UP);
  567. break;
  568. #endif
  569. #if (BT_MAP_EN || BT_HFP_TIME_EN)
  570. case EVT_BT_MAP_DONE:
  571. case EVT_HFP_TIME_DONE:
  572. ab_mate_time_info_notify(CMD_TIME_LOCALTIME);
  573. break;
  574. #endif
  575. #if HLW_UI
  576. case KL_PWR_NEXT:
  577. case KLU_PWR_NEXT:
  578. hlw_cb.dut_key_count = 0;
  579. break;
  580. case KH_PWR_NEXT:
  581. hlw_func_enter_dutmode_handle();
  582. break;
  583. case EVT_NTC_CONTROL:
  584. hlw_func_ntc_control_handle();
  585. break;
  586. case KU_ANC:
  587. if(onemore_hq51_key_chance_test(3))
  588. {
  589. break;
  590. }
  591. #if ONEMORE_APP_EN
  592. onemore_anc_switch_handle(1);
  593. #endif // ONEMORE_APP_EN
  594. break;
  595. case EVT_ANC_LED_RECOVER:
  596. hlw_func_anc_led_recover_handle();
  597. break;
  598. case EVT_ENTER_PAIR:
  599. hlw_bt_enter_pairmode_handle();
  600. break;
  601. #if ONEMORE_SPP_TEST_EN
  602. case EVT_ANCMIC_CHANNEL_CONTROL:
  603. onemore_test_mic_channel_control();
  604. break;
  605. case EVT_SINGLE_MIC_ENC_ENABLE:
  606. onemore_test_talk_enc_enable();
  607. break;
  608. case EVT_ANCMODE_SWITCH:
  609. onemore_test_anc_mode_switch();
  610. break;
  611. case EVT_EQMODE_SWITCH:
  612. onemore_test_eq_mode_switch();
  613. break;
  614. case EVT_MICTEST_SWITCH:
  615. onemore_test_mic_test_switch();
  616. break;
  617. case EVT_DUAL_MIC_ENC_ENABLE:
  618. onemore_test_talk_enc_enable();
  619. break;
  620. case EVT_CLEAR_PAIRLIST:
  621. onemore_test_clear_pairlist_handle();
  622. break;
  623. case EVT_POWEROFF_CMD:
  624. onemore_test_poweroff_control();
  625. break;
  626. case EVT_LED_OPEN:
  627. onemore_test_led_open_handle();
  628. break;
  629. case EVT_LED_CLOSE:
  630. onemore_test_led_close_handle();
  631. break;
  632. case EVT_PAKET_CMD:
  633. onemore_test_packet_cmd_handle();
  634. break;
  635. case EVT_ONEMORE_BAT_UPDATE:
  636. onemore_app_report_headinformation_handle();
  637. break;
  638. #endif // ONEMORE_SPP_TEST_EN
  639. #endif
  640. }
  641. //调节音量,3秒后写入flash
  642. if ((sys_cb.cm_vol_change) && (sys_cb.cm_times >= 6)) {
  643. sys_cb.cm_vol_change = 0;
  644. param_hfp_vol_write();
  645. param_sys_vol_write();
  646. cm_sync();
  647. }
  648. #if SD_SOFT_DETECT_EN
  649. sd_soft_cmd_detect(120);
  650. #endif
  651. }
  652. ///进入一个功能的总入口
  653. AT(.text.func)
  654. void func_enter(void)
  655. {
  656. if (sys_cb.cm_vol_change) {
  657. sys_cb.cm_vol_change = 0;
  658. param_sys_vol_write();
  659. }
  660. param_sync();
  661. gui_box_clear();
  662. reset_sleep_delay();
  663. reset_pwroff_delay();
  664. func_cb.mp3_res_play = NULL;
  665. func_cb.set_vol_callback = NULL;
  666. bsp_clr_mute_sta();
  667. sys_cb.voice_evt_brk_en = 1; //播放提示音时,快速响应事件。
  668. #if SYS_KARAOK_EN
  669. karaok_voice_rm_disable();
  670. bsp_karaok_echo_reset_buf(func_cb.sta);
  671. #endif
  672. }
  673. AT(.text.func)
  674. void func_exit(void)
  675. {
  676. u8 func_num;
  677. u8 funcs_total = get_funcs_total();
  678. for (func_num = 0; func_num != funcs_total; func_num++) {
  679. if (func_cb.last == func_sort_table[func_num]) {
  680. break;
  681. }
  682. }
  683. func_num++; //切换到下一个任务
  684. if (func_num >= funcs_total) {
  685. func_num = 0;
  686. }
  687. func_cb.sta = func_sort_table[func_num]; //新的任务
  688. #if SYS_MODE_BREAKPOINT_EN
  689. param_sys_mode_write(func_cb.sta);
  690. #endif // SYS_MODE_BREAKPOINT_EN
  691. }
  692. AT(.text.func)
  693. void func_run(void)
  694. {
  695. printf("%s\n", __func__);
  696. func_bt_chk_off();
  697. while (1) {
  698. func_enter();
  699. switch (func_cb.sta) {
  700. #if FUNC_MUSIC_EN
  701. case FUNC_MUSIC:
  702. func_music();
  703. break;
  704. #endif // FUNC_MUSIC_EN
  705. #if FUNC_CLOCK_EN
  706. case FUNC_CLOCK:
  707. func_clock();
  708. break;
  709. #endif // FUNC_CLOCK_EN
  710. #if FUNC_BT_EN
  711. case FUNC_BT:
  712. func_bt();
  713. break;
  714. #endif
  715. #if FUNC_BTHID_EN
  716. case FUNC_BTHID:
  717. func_bthid();
  718. break;
  719. #endif // FUNC_BTHID_EN
  720. #if FUNC_AUX_EN
  721. case FUNC_AUX:
  722. func_aux();
  723. break;
  724. #endif // FUNC_AUX_EN
  725. #if FUNC_USBDEV_EN
  726. case FUNC_USBDEV:
  727. func_usbdev();
  728. break;
  729. #endif
  730. #if FUNC_SPEAKER_EN
  731. case FUNC_SPEAKER:
  732. func_speaker();
  733. break;
  734. #endif // FUNC_SPEAKER_EN
  735. #if FUNC_IDLE_EN
  736. case FUNC_IDLE:
  737. func_idle();
  738. break;
  739. #endif // FUNC_IDLE_EN
  740. #if FUNC_BT_DUT_EN
  741. case FUNC_BT_DUT:
  742. func_bt_dut();
  743. break;
  744. #endif
  745. #if FUNC_BT_FCC_EN
  746. case FUNC_BT_FCC:
  747. func_bt_fcc();
  748. break;
  749. #endif
  750. #if IODM_TEST_EN
  751. case FUNC_BT_IODM:
  752. func_bt_iodm();
  753. break;
  754. #endif
  755. case FUNC_CHARGE:
  756. func_charge();
  757. break;
  758. case FUNC_PWROFF:
  759. func_pwroff(sys_cb.pwrdwn_tone_en);
  760. break;
  761. default:
  762. func_exit();
  763. break;
  764. }
  765. }
  766. }