func_bt_dut.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. #include "include.h"
  2. #include "func.h"
  3. #include "api.h"
  4. #if HLW_UI
  5. #include "hlw_func.h"
  6. #endif
  7. void bt_test_mode_init(void);
  8. #define TEST_BT_ADDR_EN 0 //测试是否使用固定地址
  9. #define TEST_MODE_PLL_DISABLE 0 //测试是否关闭PLL
  10. #define TEST_MODE_MSC_EN 0 //测试是否循环播放白噪声
  11. AT(.rodata.bt.dut)
  12. const u8 led_bt_cbt_tbl[] = {
  13. #if HLW_UI
  14. 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  15. #else
  16. 0xff, 0x00, 0x02, 0x00, 0xff, 0x00, 0x02, 0x00, 0xff, 0x00, 0x02, 0x00, 0xff, 0x00, 0x02, 0x00,
  17. #endif
  18. };
  19. #if IODM_TEST_EN
  20. //IODM测试模式
  21. AT(.text.func.bt_iodm)
  22. void func_bt_iodm(void)
  23. {
  24. printf("%s\n", __func__);
  25. if (f_bt.bt_is_inited) {
  26. bt_disconnect(0);
  27. bt_off();
  28. f_bt.bt_is_inited = 0;
  29. }
  30. u32 pwroff_time = sys_cb.pwroff_time;
  31. u32 sleep_time = sys_cb.sleep_time;
  32. sys_cb.pwroff_delay = sys_cb.pwroff_time = -1; //关闭未连接自动关机
  33. sys_cb.sleep_time = -1; //不进siff mode
  34. sys_cb.sleep_en = 0;
  35. memcpy(&xcfg_cb.led_btinit, led_bt_cbt_tbl, sizeof(led_bt_cbt_tbl)); //红灯常亮
  36. #if TEST_BT_ADDR_EN
  37. u8 addr[6];
  38. memcpy(addr,xcfg_cb.bt_addr,6);
  39. memset(xcfg_cb.bt_addr, 0x68, 6); //固定蓝牙地址
  40. #endif
  41. cfg_bt_work_mode = MODE_IODM_TEST;
  42. #if TEST_MODE_BT_INFO
  43. bt_test_mode_init();
  44. #endif
  45. func_bt_enter();
  46. while (func_cb.sta == FUNC_BT_IODM) {
  47. func_bt_process();
  48. func_bt_message(msg_dequeue());
  49. }
  50. func_bt_exit();
  51. #if TEST_BT_ADDR_EN
  52. memcpy(xcfg_cb.bt_addr,addr,6);
  53. #endif
  54. cfg_bt_work_mode = MODE_NORMAL;
  55. sys_cb.pwroff_delay = sys_cb.pwroff_time = pwroff_time;
  56. sys_cb.sleep_time = sleep_time;
  57. }
  58. #endif
  59. #if FUNC_BT_FCC_EN
  60. //FCC 测试模式
  61. AT(.text.func.bt_fcc)
  62. void func_bt_fcc(void)
  63. {
  64. printf("%s\n", __func__);
  65. if (f_bt.bt_is_inited) {
  66. bt_disconnect(0);
  67. bt_off();
  68. f_bt.bt_is_inited = 0;
  69. }
  70. u32 pwroff_time = sys_cb.pwroff_time;
  71. u32 sleep_time = sys_cb.sleep_time;
  72. sys_cb.pwroff_delay = sys_cb.pwroff_time = -1; //关闭未连接自动关机
  73. sys_cb.sleep_time = -1; //不进siff mode
  74. sys_cb.sleep_en = 0;
  75. memcpy(&xcfg_cb.led_btinit, led_bt_cbt_tbl, sizeof(led_bt_cbt_tbl)); //红灯常亮
  76. #if TEST_BT_ADDR_EN
  77. u8 addr[6];
  78. memcpy(addr,xcfg_cb.bt_addr,6);
  79. memset(xcfg_cb.bt_addr, 0x68, 6); //固定蓝牙地址
  80. #endif
  81. cfg_bt_work_mode = MODE_FCC_TEST;
  82. #if TEST_MODE_BT_INFO
  83. bt_test_mode_init();
  84. #endif
  85. func_bt_enter();
  86. while (func_cb.sta == FUNC_BT_FCC) {
  87. func_bt_process();
  88. func_bt_message(msg_dequeue());
  89. }
  90. func_bt_exit();
  91. #if TEST_BT_ADDR_EN
  92. memcpy(xcfg_cb.bt_addr,addr,6);
  93. #endif
  94. cfg_bt_work_mode = MODE_NORMAL;
  95. sys_cb.pwroff_delay = sys_cb.pwroff_time = pwroff_time;
  96. sys_cb.sleep_time = sleep_time;
  97. }
  98. #endif
  99. #if FUNC_BT_DUT_EN
  100. #if TEST_MODE_MSC_EN
  101. static void bt_dut_play_msc(void)
  102. {
  103. u32 tick = tick_get();
  104. while ((AUBUF1CON & BIT(8)) == 0) {
  105. s16 pcm = (s16)(sys_get_rand_key() & 0xffff);
  106. dac1_put_sample_16bit(pcm, pcm);
  107. if (tick_check_expire(tick, 200)) {
  108. break;
  109. }
  110. }
  111. }
  112. #endif
  113. #if HLW_UI
  114. void dut_hook(void)
  115. {
  116. anc_exit();
  117. adpll_init(0);
  118. adpll_spr_set(0);
  119. }
  120. #endif // HLW_UI
  121. //CBT测试模式, 红灯常亮
  122. AT(.text.func.bt_dut)
  123. void func_bt_dut(void)
  124. {
  125. printf("%s\n", __func__);
  126. if (f_bt.bt_is_inited) {
  127. bt_disconnect(0);
  128. bt_off();
  129. f_bt.bt_is_inited = 0;
  130. }
  131. u32 pwroff_time = sys_cb.pwroff_time;
  132. u32 sleep_time = sys_cb.sleep_time;
  133. sys_cb.pwroff_delay = sys_cb.pwroff_time = -1; //关闭未连接自动关机
  134. sys_cb.sleep_time = -1; //不进siff mode
  135. sys_cb.sleep_en = 0;
  136. #if HLW_UI
  137. hlw_cb.poweron_led_control_flag = false;
  138. dut_hook();
  139. #endif
  140. memcpy(&xcfg_cb.led_btinit, led_bt_cbt_tbl, sizeof(led_bt_cbt_tbl)); //红灯常亮
  141. #if TEST_BT_ADDR_EN
  142. u8 addr[6];
  143. memcpy(addr,xcfg_cb.bt_addr,6);
  144. memset(xcfg_cb.bt_addr, 0x68, 6); //固定蓝牙地址
  145. #endif
  146. xcfg_cb.warning_bt_pair = 0; //关闭配对提示音
  147. cfg_bt_work_mode = MODE_BQB_RF_BREDR; //使能DUT模式
  148. uint8_t bt_tws_pair_mode = cfg_bt_tws_pair_mode; //保留 配对模式
  149. cfg_bt_tws_pair_mode = TWS_PAIR_OP_API; //手动配对
  150. u8 bt_tws_en = xcfg_cb.bt_tws_en;
  151. u8 ble_en = xcfg_cb.ble_en;
  152. xcfg_cb.bt_tws_en = 0;
  153. xcfg_cb.ble_en = 0;
  154. #if TEST_MODE_BT_INFO
  155. bt_test_mode_init();
  156. #endif
  157. #if TEST_MODE_PLL_DISABLE
  158. sys_clk_set(SYS_24M);
  159. dac_clk_source_sel(2); //dac clk select xosc26m_clk
  160. clk_pll0_dis(); //disable PLL
  161. #endif
  162. #if TEST_MODE_MSC_EN
  163. dac1_spr_set(SPR_16000);
  164. dac1_aubuf_init();
  165. dac1_vol_set(0x3fff);
  166. dac1_fade_in();
  167. #endif
  168. func_bt_enter();
  169. #if HLW_UI
  170. led_bt_init();
  171. #endif // HLW_UI
  172. while (func_cb.sta == FUNC_BT_DUT) {
  173. func_bt_process();
  174. func_bt_message(msg_dequeue());
  175. #if TEST_MODE_MSC_EN
  176. bt_dut_play_msc();
  177. #endif
  178. }
  179. func_bt_exit();
  180. #if TEST_MODE_PLL_DISABLE
  181. adpll_init(DAC_OUT_SPR);
  182. dac_clk_source_sel(1);
  183. #endif
  184. #if TEST_BT_ADDR_EN
  185. memcpy(xcfg_cb.bt_addr,addr,6);
  186. #endif
  187. cfg_bt_work_mode = MODE_NORMAL;
  188. cfg_bt_tws_pair_mode = bt_tws_pair_mode;
  189. sys_cb.pwroff_delay = sys_cb.pwroff_time = pwroff_time;
  190. sys_cb.sleep_time = sleep_time;
  191. xcfg_cb.bt_tws_en = bt_tws_en;
  192. xcfg_cb.ble_en = ble_en;
  193. cfg_bt_dual_mode = BT_DUAL_MODE_EN * xcfg_cb.ble_en;
  194. }
  195. #endif