msg_bt.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810
  1. #include "include.h"
  2. #include "func.h"
  3. #include "func_bt.h"
  4. bool bt_tws_pair_mode(u8 method);
  5. u16 get_user_def_lr_msg(u16 msg_l, u16 msg_r);
  6. u16 get_user_def_vol_msg(u8 func_sel);
  7. void user_def_track_msg(u16 msg);
  8. bool user_def_play_pause_msg(void);
  9. bool user_def_func_is_ready(u8 func_sel);
  10. bool user_def_key_msg(u8 func_sel);
  11. void bt_hid_vol_msg(u8 sel);
  12. u8 bt_low_latency_is_busy(void);
  13. void bt_low_latency_set_busy(void);
  14. extern u8 bt_alg_dbb_on;
  15. ///检查USER_DEF按键消息处理
  16. bool user_def_key_msg(u8 func_sel)
  17. {
  18. if (func_sel == UDK_SIRI_REDIALING) {
  19. func_sel = get_user_def_lr_msg(UDK_SIRI, UDK_REDIALING);
  20. }
  21. if (!user_def_func_is_ready(func_sel)) {
  22. return false;
  23. }
  24. if (func_sel == UDK_REDIALING) {
  25. bt_call_redial_last_number(); //回拨电话
  26. sys_warning_play(T_WARNING_REDIALING, PIANO_REDIALING);
  27. } else if (func_sel == UDK_SIRI) { //SIRI
  28. bt_siri_switch();
  29. } else if (func_sel == UDK_NR) { //NR
  30. bt_ctl_nr_sta_change(); //发消息通知手机
  31. sys_cb.anc_user_mode++;
  32. if (sys_cb.anc_user_mode > 2) {
  33. sys_cb.anc_user_mode = 0;
  34. }
  35. #if ANC_EN
  36. bsp_anc_set_mode(sys_cb.anc_user_mode);
  37. #endif
  38. } else if (func_sel == UDK_PREV) { //PREV
  39. user_def_track_msg(get_user_def_lr_msg(KU_PREV, KU_NEXT));
  40. } else if (func_sel == UDK_NEXT) { //NEXT
  41. user_def_track_msg(get_user_def_lr_msg(KU_NEXT, KU_PREV));
  42. } else if (func_sel == UDK_PHOTO) {
  43. return bsp_bt_hid_photo(HID_KEY_VOL_UP); //拍照
  44. } else if (func_sel == UDK_HOME) {
  45. return bt_hid_consumer(HID_KEY_IOS_HOME); //IOS Home按键功能
  46. } else if (func_sel == UDK_LANG) {
  47. bt_switch_voice_lang(); //中英文切换
  48. } else if (func_sel == UDK_ATMOS_LED) { //氛围灯开/关
  49. if (atmos_gpio.sfr) {
  50. if (atmosphere_led_is_on()) {
  51. tws_res_play(TWS_ATMOS_LED_OFF);
  52. } else {
  53. tws_res_play(TWS_ATMOS_LED_ON);
  54. }
  55. return true;
  56. }
  57. return false;
  58. } else if (func_sel == UDK_PLAY_PAUSE) {
  59. return user_def_play_pause_msg();
  60. } else if (func_sel == UDK_GAME_SWITCH) {
  61. #if BT_LOW_LATENCY_QUICK_FIX
  62. if (bt_low_latency_is_busy()) {
  63. return true;
  64. }
  65. bt_low_latency_set_busy();
  66. #endif
  67. if (bt_is_low_latency()) {
  68. tws_res_play(TWS_RES_MUSIC_MODE); //提示音播放的地方更新sys_cb.game_mode变量
  69. } else {
  70. tws_res_play(TWS_RES_GAME_MODE);
  71. }
  72. } else if (func_sel == UDK_MODE) { //MODE
  73. func_message(KU_MODE);
  74. } else { //VOL+, VOL-
  75. func_message(get_user_def_vol_msg(func_sel));
  76. }
  77. return true;
  78. }
  79. static bool user_def_lkey_tone_is_enable(u8 func_sel)
  80. {
  81. if (!xcfg_cb.user_def_kl_tone_en) {
  82. return false;
  83. }
  84. return user_def_func_is_ready(func_sel);
  85. }
  86. bool bt_tws_pair_mode(u8 method)
  87. {
  88. if ((xcfg_cb.bt_tws_en) && (xcfg_cb.bt_tws_pair_mode == method) && (!bt_nor_is_connected())) {
  89. if(bt_tws_is_connected()) {
  90. bt_tws_disconnect();
  91. } else {
  92. // bt_tws_set_scan(0x3);
  93. bt_tws_search_slave();
  94. }
  95. return true;
  96. }
  97. return false;
  98. }
  99. //来电响铃时拒接操作(长按/双击)
  100. void bt_ring_reject(void)
  101. {
  102. bt_ring_stop();
  103. bt_call_terminate(); //拒接
  104. #if !TRY_WARNING_SWITCH
  105. sys_warning_play(T_WARNING_REJECT, PIANO_REJECT);
  106. #endif // TRY_WARNING_SWITCH
  107. }
  108. void func_bt_message_do(u16 msg)
  109. {
  110. int klu_flag = 0;
  111. u8 ku_sel = xcfg_cb.user_def_ks_sel;
  112. switch (msg) {
  113. #if TRY_KEY_SWITCH
  114. case K_PLAY_USER_DEF:
  115. case K_PLAY_PWR_USER_DEF:
  116. printf("K_PLAY_USER_DEF\n");
  117. #if TRY_WARNING_SWITCH
  118. #if TRY_TOUCH_WARNING_DELAY_FIX
  119. if(sys_cb1.pairing_warning_flag || sys_cb1.mode_warning_flag)
  120. {
  121. break;
  122. }
  123. #endif // TRY_TOUCH_WARNING_DELAY_FIX
  124. sys_warning_play(T_WARNING_TOUCH,2);
  125. #endif // TRY_WARNING_SWITCH
  126. break;
  127. #endif // TRY_KEY_SWITCH
  128. case KU_PLAY:
  129. ku_sel = UDK_PLAY_PAUSE;
  130. case KU_PLAY_USER_DEF:
  131. case KU_PLAY_PWR_USER_DEF:
  132. printf("KU_PLAY_USER_DEF\n");
  133. #if TRY_KEY_SWITCH
  134. if(bt_nor_is_connected())
  135. {
  136. if(bt_get_siri_status())
  137. {
  138. bt_siri_switch();
  139. }
  140. else
  141. {
  142. sys_cb1.change_vol_flag = true;
  143. }
  144. }
  145. #else
  146. // key_voice_play(501, 100, 3); //按键音
  147. if (!bt_nor_is_connected()) {
  148. bt_tws_pair_mode(3); //单击PLAY按键手动配对
  149. break;
  150. }
  151. user_def_key_msg(ku_sel);
  152. #endif // TRY_KEY_SWITCH
  153. break;
  154. case KL_PLAY_PWR_USER_DEF:
  155. #if !TRY_KEY_SWITCH
  156. if (!xcfg_cb.kl_pwrdwn_dis) {
  157. klu_flag = 1; //长按抬键的时候呼SIRI
  158. }
  159. #endif // TRY_KEY_SWITCH
  160. case KL_PLAY_USER_DEF:
  161. printf("KL_PLAY_USER_DEF\n");
  162. #if TRY_KEY_SWITCH
  163. #if TRY_SYNC_KL_4S_FACTORY_SWITCH
  164. if(bt_tws_is_connected())
  165. {
  166. sys_cb1.sync_kl_flag = true;
  167. if(sys_cb.tws_force_channel == 2)
  168. {
  169. bt_tws_user_key(TWS_USER_KEY_SYNC_KL_L);
  170. sys_cb1.sync_kl_l_flag = true;
  171. }
  172. else if(sys_cb.tws_force_channel == 1)
  173. {
  174. bt_tws_user_key(TWS_USER_KEY_SYNC_KL_R);
  175. sys_cb1.sync_kl_r_flag = true;
  176. }
  177. }
  178. delay_5ms(100);
  179. if(sys_cb.tws_force_channel == 2 && sys_cb1.sync_kl_r_flag)
  180. {
  181. break;
  182. }
  183. else if(sys_cb.tws_force_channel == 1 && sys_cb1.sync_kl_l_flag)
  184. {
  185. break;
  186. }
  187. #endif // TRY_SYNC_KL_4S_FACTORY_SWITCH
  188. if(bt_nor_is_connected())
  189. {
  190. if(!sys_cb1.change_vol_flag)
  191. {
  192. #if TRY_WARNING_SWITCH
  193. tws_res_play(TWS_RES_SIRI);
  194. delay_5ms(20);
  195. #endif // TRY_WARNING_SWITCH
  196. bt_siri_switch();
  197. }
  198. }
  199. #else
  200. f_bt.user_kl_flag = 0;
  201. if (xcfg_cb.user_def_kl_sel == UDK_GAME_SWITCH) {
  202. klu_flag = 0;
  203. }
  204. if (!bt_tws_pair_mode(4)) { //是否长按配对功能
  205. if (user_def_lkey_tone_is_enable(xcfg_cb.user_def_kl_sel)) {
  206. sys_warning_play(T_WARNING_NEXT_TRACK, 1); //长按“滴”一声
  207. // tws_res_play(TWS_RES_TONE); //tws同步播放
  208. }
  209. if (klu_flag) {
  210. f_bt.user_kl_flag = user_def_func_is_ready(xcfg_cb.user_def_kl_sel); //长按抬键的时候再处理
  211. } else {
  212. user_def_key_msg(xcfg_cb.user_def_kl_sel);
  213. }
  214. }
  215. #endif // TRY_KEY_SWITCH
  216. break;
  217. //SIRI, NEXT, PREV在长按抬键的时候响应,避免关机前切歌或呼SIRI了
  218. case KLU_PLAY_PWR_USER_DEF:
  219. if (f_bt.user_kl_flag) {
  220. user_def_key_msg(xcfg_cb.user_def_kl_sel);
  221. f_bt.user_kl_flag = 0;
  222. }
  223. break;
  224. //长按调音量
  225. case KH_PLAY_PWR_USER_DEF:
  226. if (!xcfg_cb.kl_pwrdwn_dis) {
  227. break;
  228. }
  229. case KH_PLAY_USER_DEF:
  230. printf("KH_PLAY_USER_DEF\n");
  231. #if TRY_KEY_SWITCH
  232. if(sys_cb1.change_vol_flag)
  233. {
  234. if(sys_cb.tws_force_channel == 2)
  235. {
  236. user_def_key_msg(UDK_VOL_DOWN);
  237. }
  238. else if(sys_cb.tws_force_channel == 1)
  239. {
  240. user_def_key_msg(UDK_VOL_UP);
  241. }
  242. }
  243. #else
  244. func_message(get_user_def_vol_msg(xcfg_cb.user_def_kl_sel));
  245. #endif // TRY_KEY_SWITCH
  246. break;
  247. ///双击按键处理
  248. case KD_PLAY_USER_DEF:
  249. case KD_PLAY_PWR_USER_DEF:
  250. printf("KD_PLAY_USER_DEF\n");
  251. #if TRY_KEY_SWITCH
  252. if(bt_nor_is_connected())
  253. {
  254. user_def_key_msg(UDK_PLAY_PAUSE);
  255. }
  256. #else
  257. if (xcfg_cb.user_def_kd_tone_en) {
  258. sys_warning_play(T_WARNING_NEXT_TRACK, 1); //2击“滴”一声
  259. }
  260. if ((xcfg_cb.user_def_kd_lang_en) && (!bt_nor_is_connected())) {
  261. bt_switch_voice_lang();
  262. } else if (user_def_key_msg(xcfg_cb.user_def_kd_sel)) {
  263. #if BT_TWS_EN
  264. } else if(bt_tws_pair_mode(2)) {
  265. #endif
  266. }
  267. #endif // TRY_KEY_SWITCH
  268. break;
  269. ///三击按键处理
  270. case KTH_PLAY_USER_DEF:
  271. case KTH_PLAY_PWR_USER_DEF:
  272. printf("KTH_PLAY_USER_DEF\n");
  273. #if TRY_KEY_SWITCH
  274. if(bt_nor_is_connected() && f_bt.disp_status == BT_STA_PLAYING)
  275. {
  276. if(sys_cb.tws_force_channel == 2)
  277. {
  278. user_def_key_msg(UDK_PREV);
  279. }
  280. else if(sys_cb.tws_force_channel == 1)
  281. {
  282. user_def_key_msg(UDK_NEXT);
  283. }
  284. }
  285. #else
  286. #if BT_ALG_DBB_KEY_EN
  287. if(bt_alg_dbb_on) {
  288. bt_alg_dbb_on = 0;
  289. }else {
  290. bt_alg_dbb_on = 1;
  291. }
  292. #else
  293. if (xcfg_cb.user_def_kt_tone_en) {
  294. sys_warning_play(T_WARNING_NEXT_TRACK, 1); //3击“滴”一声
  295. }
  296. user_def_key_msg(xcfg_cb.user_def_kt_sel);
  297. #endif
  298. #endif // TRY_KEY_SWITCH
  299. break;
  300. ///四击按键处理
  301. case KFO_PLAY_USER_DEF:
  302. case KFO_PLAY_PWR_USER_DEF:
  303. printf("KFO_PLAY_USER_DEF\n");
  304. #if TRY_KEY_SWITCH
  305. if(bt_nor_is_connected())
  306. {
  307. user_def_key_msg(UDK_GAME_SWITCH);
  308. }
  309. #else
  310. if (xcfg_cb.user_def_kfour_tone_en) {
  311. sys_warning_play(T_WARNING_NEXT_TRACK, 1); //4击“滴”一声
  312. }
  313. user_def_key_msg(xcfg_cb.user_def_kfour_sel);
  314. if (xcfg_cb.user_def_kfour_clr_pair_en) { //四击清配对信息
  315. if (!bt_nor_is_connected() && !bt_tws_is_connected()) {
  316. bt_clr_all_link_info('k');
  317. }
  318. }
  319. #endif // TRY_KEY_SWITCH
  320. break;
  321. ///五击按键处理
  322. case KFI_PLAY_USER_DEF:
  323. case KFI_PLAY_PWR_USER_DEF:
  324. if (xcfg_cb.bb_dut_test_k5s_en && !bt_nor_is_connected()) {
  325. func_cb.sta = FUNC_BT_DUT; //五击进DUT测试模式
  326. } else if (xcfg_cb.user_def_kfive_sel) {
  327. user_def_key_msg(xcfg_cb.user_def_kfive_sel);
  328. }
  329. break;
  330. #if TRY_KEY_SWITCH && TRY_KSE_SYNC_DUT_SWITCH
  331. ///七击处理
  332. case KSE_PLAY_USER_DEF:
  333. case KSE_PLAY_PWR_USER_DEF:
  334. printf("KSE_PLAY_USER_DEF\n");
  335. if(bt_tws_is_connected() && !bt_nor_is_connected())
  336. {
  337. tws_res_play(TWS_SYNC_DUT);
  338. }
  339. #endif // TRY_KSE_SYNC_DUT_SWITCH
  340. #if BT_LIGHTNINIG_EN
  341. case KU_SIRI:
  342. case KL_SIRI:
  343. case KL_HOME:
  344. if (bt_nor_is_connected()) {
  345. bt_siri_switch();
  346. }
  347. break;
  348. #endif
  349. // case KL_PLAY:
  350. // if (xcfg_cb.bt_key_discon_en) {
  351. // bt_disconnect();
  352. // break;
  353. // }
  354. case KU_PREV_VOL_DOWN:
  355. case KU_PREV_VOL_UP:
  356. case KL_VOL_DOWN_PREV:
  357. case KL_VOL_UP_PREV:
  358. case KU_PREV:
  359. bt_music_prev();
  360. break;
  361. case KU_NEXT:
  362. case KU_NEXT_VOL_UP:
  363. case KU_NEXT_VOL_DOWN:
  364. case KL_VOL_UP_NEXT:
  365. case KL_VOL_DOWN_NEXT:
  366. bt_music_next();
  367. break;
  368. #if USER_ADKEY
  369. case KL_PREV:
  370. bt_music_rewind();
  371. break;
  372. case KLU_PREV:
  373. bt_music_rewind_end();
  374. break;
  375. case KL_NEXT:
  376. bt_music_fast_forward();
  377. break;
  378. case KLU_NEXT:
  379. bt_music_fast_forward_end();
  380. break;
  381. #if FUNC_AUX_EN
  382. case KD_MODE:
  383. case KD_MODE_PWR:
  384. bt_tws_pair_mode(5);
  385. break;
  386. #endif
  387. case KD_HSF:
  388. if (bt_nor_is_connected()) {
  389. bt_call_redial_last_number(); //回拨电话
  390. sys_warning_play(T_WARNING_REDIALING, PIANO_REDIALING);
  391. }
  392. break;
  393. #endif // USER_ADKEY
  394. #if BT_HID_EN
  395. case KU_HOME:
  396. bt_hid_consumer(HID_KEY_IOS_HOME);
  397. break;
  398. case KD_NEXT_VOL_UP:
  399. case KD_PREV_VOL_UP:
  400. case KD_VOL_UP_NEXT:
  401. case KD_VOL_UP_PREV:
  402. case KD_VOL_UP:
  403. bt_hid_vol_msg(xcfg_cb.bt_hid_volup_sel);
  404. break;
  405. case KD_PREV_VOL_DOWN:
  406. case KD_NEXT_VOL_DOWN:
  407. case KD_VOL_DOWN_PREV:
  408. case KD_VOL_DOWN_NEXT:
  409. case KD_VOL_DOWN:
  410. bt_hid_vol_msg(xcfg_cb.bt_hid_voldown_sel);
  411. break;
  412. #endif // BT_HID_EN
  413. case MSG_SYS_1S:
  414. bt_send_msg(BT_MSG_HFP_REPORT_BAT);
  415. //蓝牙连接后延时2秒发送PLAY命令实现自动播放
  416. if (f_bt.autoplay > 0) {
  417. f_bt.autoplay++;
  418. if (f_bt.autoplay >= 3) {
  419. f_bt.autoplay = 0;
  420. if ((xcfg_cb.bt_autoplay_en) && (bt_get_status() == BT_STA_CONNECTED)) {
  421. bt_music_play();
  422. // printf("AutoPlay\n");
  423. }
  424. }
  425. }
  426. #if BT_TWS_DBG_EN
  427. //BT-Assistant工具分析信号质量
  428. if (xcfg_cb.bt_tws_dbg_en) {
  429. bt_tws_report_dgb();
  430. }
  431. #endif
  432. break;
  433. case EVT_A2DP_MUSIC_PLAY:
  434. func_bt_set_dac(1);
  435. dac_fade_in();
  436. break;
  437. case EVT_A2DP_MUSIC_STOP:
  438. dac_fade_out();
  439. break;
  440. #if BT_A2DP_DEFAULT_VOLUME_EN
  441. case EVT_A2DP_DEFAULT_VOLUME:
  442. if (bt_is_ios_device()) {
  443. bsp_set_volume(BT_A2DP_IOS_DEFAULT_VOLUME);
  444. } else {
  445. bsp_set_volume(BT_A2DP_DEFAULT_VOLUME);
  446. }
  447. bsp_bt_vol_change();
  448. break;
  449. #endif
  450. #if IODM_TEST_MODE
  451. case EVT_BT_SPP_IODM:
  452. bt_spp_iodm_event();
  453. break;
  454. #endif
  455. default:
  456. func_message(msg);
  457. break;
  458. }
  459. }
  460. AT(.text.bfunc.bt)
  461. void func_bt_message(u16 msg)
  462. {
  463. if (msg == NO_MSG || msg == MSG_SYS_1S) { //减少flash缺页
  464. func_bt_message_m(msg);
  465. if (msg == MSG_SYS_1S) {
  466. if(bt_nor_is_connected())
  467. {
  468. if(sys_cb.tws_force_channel == 2)
  469. {
  470. printf("L:phone is connected\n");
  471. }
  472. else if(sys_cb.tws_force_channel == 1)
  473. {
  474. printf("R:phone is connected\n");
  475. }
  476. }
  477. else
  478. {
  479. if(sys_cb.tws_force_channel == 2)
  480. {
  481. printf("L:phone not connected\n");
  482. }
  483. else if(sys_cb.tws_force_channel == 1)
  484. {
  485. printf("R:phone not connected\n");
  486. }
  487. }
  488. #if TRY_KEY_SWITCH && TRY_SYNC_KL_4S_FACTORY_SWITCH
  489. sync_kl_4s_factory_process();
  490. #endif // TRY_SYNC_KL_4S_FACTORY_SWITCH
  491. #if TRY_LOWBAT_WARNING_SWITCH
  492. lowbat_warning_process();
  493. #endif // TRY_LOWBAT_WARNING_SWITCH
  494. }
  495. } else {
  496. func_bt_message_do(msg);
  497. }
  498. }
  499. void sfunc_bt_ring_message_do(u16 msg)
  500. {
  501. u8 ku_sel = xcfg_cb.user_def_ks_sel;
  502. switch (msg) {
  503. #if TRY_KEY_SWITCH
  504. case K_PLAY_USER_DEF:
  505. case K_PLAY_PWR_USER_DEF:
  506. #if TRY_WARNING_SWITCH
  507. sys_warning_play(T_WARNING_TOUCH,2);
  508. #endif // TRY_WARNING_SWITCH
  509. break;
  510. #endif // TRY_KEY_SWITCH
  511. case KU_HSF: //接听
  512. ku_sel = UDK_PLAY_PAUSE;
  513. case KU_PLAY_USER_DEF:
  514. case KU_PLAY_PWR_USER_DEF:
  515. #if TRY_KEY_SWITCH
  516. bt_call_answer_incoming();
  517. #else
  518. user_def_key_msg(ku_sel);
  519. #endif // TRY_KEY_SWITCH
  520. break;
  521. case KL_PLAY_PWR_USER_DEF:
  522. //PWRKEY松开前不产生KLH_PLAY_PWR_USER_DEF消息。按键松开自动清此标志。
  523. if (!xcfg_cb.user_def_kl_call_pwrdwn_en) {
  524. sys_cb.poweron_flag = 1;
  525. }
  526. case KL_PLAY_USER_DEF:
  527. case KL_HSF:
  528. if (xcfg_cb.user_def_kl_reject_en || msg == KL_HSF) {
  529. bt_ring_reject();
  530. } else {
  531. user_def_key_msg(xcfg_cb.user_def_kl_sel);
  532. }
  533. break;
  534. case KD_PLAY_USER_DEF:
  535. case KD_PLAY_PWR_USER_DEF:
  536. #if TRY_KEY_SWITCH
  537. bt_ring_reject();
  538. #else
  539. if (xcfg_cb.user_def_kd_reject_en) {
  540. bt_ring_reject();
  541. } else {
  542. user_def_key_msg(xcfg_cb.user_def_kd_sel);
  543. }
  544. #endif // TRY_KEY_SWITCH
  545. break;
  546. ///三击按键处理
  547. case KTH_PLAY_USER_DEF:
  548. case KTH_PLAY_PWR_USER_DEF:
  549. user_def_key_msg(xcfg_cb.user_def_kt_sel);
  550. break;
  551. ///四击按键处理
  552. case KFO_PLAY_USER_DEF:
  553. case KFO_PLAY_PWR_USER_DEF:
  554. user_def_key_msg(xcfg_cb.user_def_kfour_sel);
  555. break;
  556. ///五击按键处理
  557. case KFI_PLAY_USER_DEF:
  558. case KFI_PLAY_PWR_USER_DEF:
  559. user_def_key_msg(xcfg_cb.user_def_kfive_sel);
  560. break;
  561. case MSG_SYS_1S:
  562. bt_send_msg(BT_MSG_HFP_REPORT_BAT);
  563. break;
  564. case KLH_PLAY_PWR_USER_DEF:
  565. //ring不响应关机消息,解决关机时间1.5时长按拒接偶尔触发关机的问题。
  566. if (!xcfg_cb.user_def_kl_call_pwrdwn_en) {
  567. break;
  568. }
  569. default:
  570. func_message(msg);
  571. break;
  572. }
  573. }
  574. AT(.text.bfunc.bt)
  575. void sfunc_bt_ring_message(u16 msg)
  576. {
  577. if (msg == NO_MSG || msg == MSG_SYS_1S) { //减少flash缺页
  578. sfunc_bt_ring_message_m(msg);
  579. if (msg == MSG_SYS_1S) {
  580. #if TRY_LOWBAT_WARNING_SWITCH
  581. lowbat_warning_process();
  582. #endif // TRY_LOWBAT_WARNING_SWITCH
  583. }
  584. } else {
  585. sfunc_bt_ring_message_do(msg);
  586. }
  587. }
  588. void sfunc_bt_call_message_do(u16 msg)
  589. {
  590. u8 call_status;
  591. u8 ku_sel = xcfg_cb.user_def_ks_sel;
  592. switch (msg) {
  593. #if TRY_KEY_SWITCH
  594. case K_PLAY_USER_DEF:
  595. case K_PLAY_PWR_USER_DEF:
  596. #if TRY_WARNING_SWITCH
  597. sys_warning_play(T_WARNING_TOUCH,2);
  598. #endif // TRY_WARNING_SWITCH
  599. break;
  600. #endif // TRY_KEY_SWITCH
  601. #if BT_LIGHTNINIG_EN
  602. case KU_HOME:
  603. case KL_HOME:
  604. if (bt_get_siri_status()) {
  605. bt_call_terminate(); //结束SIRI
  606. }
  607. break;
  608. #endif
  609. ///挂断当前通话,或者结束当前通话并接听第2路通
  610. case KU_HSF:
  611. ku_sel = UDK_PLAY_PAUSE;
  612. case KU_PLAY_USER_DEF:
  613. case KU_PLAY_PWR_USER_DEF:
  614. #if TRY_KEY_SWITCH
  615. sys_cb1.change_vol_flag = true;
  616. #else
  617. user_def_key_msg(ku_sel);
  618. #endif // TRY_KEY_SWITCH
  619. break;
  620. ///拒接第2路通话, 或私密接听切换
  621. case KL_PLAY_PWR_USER_DEF:
  622. #if !TRY_KEY_SWITCH
  623. if (!xcfg_cb.user_def_kl_call_pwrdwn_en) {
  624. sys_cb.poweron_flag = 1; //PWRKEY松开前不产生KLH_PLAY_PWR_USER_DEF消息。按键松开自动清此标志。
  625. }
  626. #endif // TRY_KEY_SWITCH
  627. case KL_PLAY_USER_DEF:
  628. if (user_def_key_msg(xcfg_cb.user_def_kl_sel)) {
  629. break;
  630. }
  631. case KL_HSF:
  632. call_status = bt_get_call_indicate();
  633. if(call_status == BT_CALL_INCOMING) {
  634. bt_call_terminate(); //拒接第2路通话
  635. sys_warning_play(T_WARNING_REJECT, PIANO_REJECT);
  636. } else if (xcfg_cb.bt_hfp_private_switch_en) {
  637. bt_call_private_switch(); //私密接听切换
  638. }
  639. break;
  640. ///保持当前通话并接通第2路通话,或者2路通话切换
  641. case KD_PLAY_PWR_USER_DEF:
  642. case KD_PLAY_USER_DEF:
  643. if (user_def_key_msg(xcfg_cb.user_def_kd_sel)) {
  644. break;
  645. }
  646. case KD_HSF:
  647. #if TRY_KEY_SWITCH
  648. bt_call_terminate();
  649. #else
  650. call_status = bt_get_call_indicate();
  651. if (call_status == BT_CALL_INCOMING) {
  652. set_mic_mute(0);
  653. bt_call_answer_incoming(); //接听第2路通话
  654. } else if(call_status == BT_CALL_3WAY_CALL) {
  655. set_mic_mute(0);
  656. bt_call_swap(); //切换两路通话
  657. } else if (xcfg_cb.bt_hfp_mute_switch_en) {
  658. set_mic_mute(2); //MIC left channel mute toggle
  659. }
  660. #endif // TRY_KEY_SWITCH
  661. break;
  662. ///长按调音量
  663. case KH_PLAY_PWR_USER_DEF:
  664. case KH_PLAY_USER_DEF:
  665. #if TRY_KEY_SWITCH
  666. if(sys_cb1.change_vol_flag)
  667. {
  668. if(sys_cb.tws_force_channel == 2)
  669. {
  670. user_def_key_msg(UDK_VOL_DOWN);
  671. }
  672. else if(sys_cb.tws_force_channel == 1)
  673. {
  674. user_def_key_msg(UDK_VOL_UP);
  675. }
  676. }
  677. #else
  678. func_message(get_user_def_vol_msg(xcfg_cb.user_def_kl_sel));
  679. #endif // TRY_KEY_SWITCH
  680. break;
  681. ///三击按键处理
  682. case KTH_PLAY_USER_DEF:
  683. case KTH_PLAY_PWR_USER_DEF:
  684. user_def_key_msg(xcfg_cb.user_def_kt_sel);
  685. break;
  686. ///四击按键处理
  687. case KFO_PLAY_USER_DEF:
  688. case KFO_PLAY_PWR_USER_DEF:
  689. user_def_key_msg(xcfg_cb.user_def_kfour_sel);
  690. break;
  691. ///五击按键处理
  692. case KFI_PLAY_USER_DEF:
  693. case KFI_PLAY_PWR_USER_DEF:
  694. user_def_key_msg(xcfg_cb.user_def_kfive_sel);
  695. break;
  696. case EVT_A2DP_MUSIC_PLAY:
  697. dac_fade_in();
  698. break;
  699. case MSG_SYS_1S:
  700. bt_send_msg(BT_MSG_HFP_REPORT_BAT);
  701. break;
  702. default:
  703. func_message(msg);
  704. break;
  705. }
  706. }
  707. AT(.text.bfunc.bt)
  708. void sfunc_bt_call_message(u16 msg)
  709. {
  710. if (msg == NO_MSG || msg == MSG_SYS_1S) { //减少flash缺页
  711. sfunc_bt_call_message_m(msg);
  712. if (msg == MSG_SYS_1S) {
  713. #if TRY_LOWBAT_WARNING_SWITCH
  714. lowbat_warning_process();
  715. #endif // TRY_LOWBAT_WARNING_SWITCH
  716. }
  717. } else {
  718. sfunc_bt_call_message_do(msg);
  719. }
  720. }
  721. //void func_bthid_message(u16 msg)
  722. //{
  723. // if (sys_hook.bthid_message) {
  724. // msg = sys_hook.bthid_message(msg);
  725. // if (msg == NO_MSG) {
  726. // return;
  727. // }
  728. // }
  729. //
  730. // switch (msg) {
  731. // case KU_PLAY:
  732. // case KU_PLAY_USER_DEF:
  733. // case KU_PLAY_PWR_USER_DEF:
  734. // if (bt_get_status() < BT_STA_DISCONNECTING) {
  735. // bt_connect();
  736. // } else {
  737. // bsp_bt_hid_photo(HID_KEY_VOL_UP);
  738. // }
  739. // break;
  740. //
  741. // case KL_PLAY:
  742. // //bt_disconnect();
  743. // break;
  744. //
  745. // default:
  746. // func_message(msg);
  747. // break;
  748. // }
  749. //}