func.c 20 KB

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