func_bt_dut.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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. extern void dut_hook(void);
  115. /*
  116. void dut_hook(void)
  117. {
  118. anc_exit();
  119. adpll_init(0);
  120. adpll_spr_set(0);
  121. }
  122. */
  123. #endif // HLW_UI
  124. //CBT测试模式, 红灯常亮
  125. AT(.text.func.bt_dut)
  126. void func_bt_dut(void)
  127. {
  128. printf("%s\n", __func__);
  129. if (f_bt.bt_is_inited) {
  130. bt_disconnect(0);
  131. bt_off();
  132. f_bt.bt_is_inited = 0;
  133. }
  134. u32 pwroff_time = sys_cb.pwroff_time;
  135. u32 sleep_time = sys_cb.sleep_time;
  136. sys_cb.pwroff_delay = sys_cb.pwroff_time = -1; //关闭未连接自动关机
  137. sys_cb.sleep_time = -1; //不进siff mode
  138. sys_cb.sleep_en = 0;
  139. #if HLW_UI
  140. hlw_cb.poweron_led_control_flag = false;
  141. dut_hook();
  142. #endif
  143. memcpy(&xcfg_cb.led_btinit, led_bt_cbt_tbl, sizeof(led_bt_cbt_tbl)); //红灯常亮
  144. #if TEST_BT_ADDR_EN
  145. u8 addr[6];
  146. memcpy(addr,xcfg_cb.bt_addr,6);
  147. memset(xcfg_cb.bt_addr, 0x68, 6); //固定蓝牙地址
  148. #endif
  149. xcfg_cb.warning_bt_pair = 0; //关闭配对提示音
  150. cfg_bt_work_mode = MODE_BQB_RF_BREDR; //使能DUT模式
  151. uint8_t bt_tws_pair_mode = cfg_bt_tws_pair_mode; //保留 配对模式
  152. cfg_bt_tws_pair_mode = TWS_PAIR_OP_API; //手动配对
  153. u8 bt_tws_en = xcfg_cb.bt_tws_en;
  154. u8 ble_en = xcfg_cb.ble_en;
  155. xcfg_cb.bt_tws_en = 0;
  156. xcfg_cb.ble_en = 0;
  157. #if TEST_MODE_BT_INFO
  158. bt_test_mode_init();
  159. #endif
  160. #if TEST_MODE_PLL_DISABLE
  161. sys_clk_set(SYS_24M);
  162. dac_clk_source_sel(2); //dac clk select xosc26m_clk
  163. clk_pll0_dis(); //disable PLL
  164. #endif
  165. #if TEST_MODE_MSC_EN
  166. dac1_spr_set(SPR_16000);
  167. dac1_aubuf_init();
  168. dac1_vol_set(0x3fff);
  169. dac1_fade_in();
  170. #endif
  171. func_bt_enter();
  172. #if HLW_UI
  173. led_bt_init();
  174. #endif // HLW_UI
  175. while (func_cb.sta == FUNC_BT_DUT) {
  176. func_bt_process();
  177. func_bt_message(msg_dequeue());
  178. #if TEST_MODE_MSC_EN
  179. bt_dut_play_msc();
  180. #endif
  181. }
  182. func_bt_exit();
  183. #if TEST_MODE_PLL_DISABLE
  184. adpll_init(DAC_OUT_SPR);
  185. dac_clk_source_sel(1);
  186. #endif
  187. #if TEST_BT_ADDR_EN
  188. memcpy(xcfg_cb.bt_addr,addr,6);
  189. #endif
  190. cfg_bt_work_mode = MODE_NORMAL;
  191. cfg_bt_tws_pair_mode = bt_tws_pair_mode;
  192. sys_cb.pwroff_delay = sys_cb.pwroff_time = pwroff_time;
  193. sys_cb.sleep_time = sleep_time;
  194. xcfg_cb.bt_tws_en = bt_tws_en;
  195. xcfg_cb.ble_en = ble_en;
  196. cfg_bt_dual_mode = BT_DUAL_MODE_EN * xcfg_cb.ble_en;
  197. }
  198. #endif