#include "typedef.h" #include "app_config.h" #include "task.h" #include "btctrler_task.h" #include "btcontroller_config.h" #include "system/includes.h" #define LOG_TAG "[BT_DUT]" #define LOG_ERROR_ENABLE #define LOG_DEBUG_ENABLE #define LOG_INFO_ENABLE /* #define LOG_DUMP_ENABLE */ #define LOG_CLI_ENABLE #include "debug.h" //bredr test api extern void ble_enter_dut_tx_mode(void *param); extern void bt_ble_adv_enable(u8 enable); extern void bredr_fcc_init(u8 mode, u8 fre); #if 0 static void bt_dut_api(void) { log_info("bt in dut \n"); #if TCFG_AUTO_SHUT_DOWN_TIME extern void sys_auto_shut_down_disable(void); sys_auto_shut_down_disable(); #endif #if TCFG_USER_TWS_ENABLE extern void tws_cancle_all_noconn(); tws_cancle_all_noconn() ; #else //sys_timer_del(app_var.auto_stop_page_scan_timer); extern void bredr_close_all_scan(); bredr_close_all_scan(); #endif #if TCFG_USER_BLE_ENABLE #if (CONFIG_BT_MODE == BT_NORMAL) bt_ble_adv_enable(0); #endif #endif } void bit_clr_ie(unsigned char index); /* !!!Notice:when this api is called and sleep mode should be sure to exit; */ void bt_fix_fre_api(u8 fre) { bt_dut_api(); bit_clr_ie(IRQ_BREDR_IDX); bit_clr_ie(IRQ_BT_CLKN_IDX); bredr_fcc_init(BT_FRE, fre); } #endif //ble test api enum BLE_DUT_PAYLOAD_TYPE { PAYLOAD_TYPE_PRBS9 = 0, PAYLOAD_TYPE_11110000, PAYLOAD_TYPE_10101010, PAYLOAD_TYPE_PRBS15, PAYLOAD_TYPE_11111111, PAYLOAD_TYPE_00000000, PAYLOAD_TYPE_00001111, PAYLOAD_TYPE_01010101, PAYLOAD_TYPE_SINGLE_CARRIER = 0xf0, }; enum BLE_DUT_PHY_TYPE { BLE_1M_UNCODED_PHY = 1, BLE_2M_UNCODED_PHY, BLE_1M_CODED_PHY_S8, BLE_1M_CODED_PHY_S2, }; struct ble_dut_param_set { u8 ch_index; //tx ch index;(0~39 -> 2402~2480) u8 payload_type; //tx payload type u8 payload_len; //payload_len(0~0xff) when continuous_tx = 0; u8 continuous_tx; //enable or disable continuous transmission mode(0/1) }; /* !!!Notice:when this api is called and sleep mode should be sure to exit; */ void ble_fix_fre_api() { #if TCFG_USER_BLE_ENABLE #if (CONFIG_BT_MODE == BT_NORMAL) bt_ble_adv_enable(0); #endif os_time_dly(10); struct ble_dut_param_set dut_param = { .ch_index = 0, .payload_type = PAYLOAD_TYPE_10101010, .payload_len = 0x20, .continuous_tx = 1, }; ble_enter_dut_tx_mode(&dut_param); #endif } static void *ble_dut_hdl = NULL; extern void ll_hci_destory(void); void ble_dut_mode_init(void) { if (!ble_dut_hdl) { ll_hci_destory(); ble_dut_hdl = __ble_dut_ops->init(); } } void ble_dut_mode_exit(void) { if (ble_dut_hdl) { __ble_dut_ops->exit(ble_dut_hdl); ble_dut_hdl = NULL; } } void ble_dut_tx_fre_api(u8 ch) { ble_dut_mode_init(); struct ble_dut_tx_param_t tx_param = { .ch_index = ch, .payload_len = 0x20, .payload_type = PAYLOAD_TYPE_PRBS9, .phy_type = BLE_1M_UNCODED_PHY, }; log_info("BLE_DUT_TX-ch:%x\n", ch); __ble_dut_ops->ioctrl(BLE_DUT_SET_TX_MODE, &tx_param); } void ble_dut_rx_fre_api(u8 ch) { ble_dut_mode_init(); struct ble_dut_rx_param_t rx_param = { .ch_index = ch, .phy_type = BLE_1M_UNCODED_PHY, }; log_info("BLE_DUT_RX-ch:%x \n", ch); __ble_dut_ops->ioctrl(BLE_DUT_SET_RX_MODE, &rx_param); } int ble_dut_test_end(void) { int pkt_valid_cnt = 0; int pkt_err_cnt = 0; if (ble_dut_hdl) { __ble_dut_ops->ioctrl(BLE_DUT_SET_TEST_END, &pkt_valid_cnt, NULL); log_info("pkt_rx_cnt:%d pkt_err_cnt:%d\n", pkt_valid_cnt, pkt_err_cnt); } else { log_error("ble dut hdl not inited\n"); } return pkt_valid_cnt; } static volatile u8 bt_test_status = 0; void ble_bqb_test_thread_init(void); static hci_transport_config_uart_t config = { HCI_TRANSPORT_CONFIG_UART, 115200, 0, // main baudrate 0, // flow control NULL, }; extern void dut_hci_controller_init(const hci_transport_t *transport, const void *config); void ble_standard_dut_test_init(void) { log_info("%s\n", __FUNCTION__); bt_test_status = 1; ble_dut_mode_init(); //ble_bqb_test_thread_init(); dut_hci_controller_init((void *)hci_transport_uart_instance(), &config); } void ble_standard_dut_test_close(void) { log_info("%s\n", __FUNCTION__); ble_dut_test_end(); ble_dut_mode_exit(); hci_transport_t *p_uart_trans = hci_transport_uart_instance(); p_uart_trans->close(); bt_test_status = 0; } void ble_dut_mode_key_handle(u8 type, u8 key_val) { static u8 rx_ch = 0; static u8 tx_ch = 0; switch (key_val) { case 3: ble_dut_tx_fre_api(tx_ch++); if (tx_ch > 39) { tx_ch = 0; } break; case 1: ble_dut_rx_fre_api(rx_ch++); if (rx_ch > 39) { rx_ch = 0; } break; case 2: ble_dut_test_end(); break; case 0: ble_standard_dut_test_init(); break; case 4: ble_standard_dut_test_close(); break; defualt: break; } } static u8 bt_test_idle_query(void) { return !bt_test_status; } REGISTER_LP_TARGET(bt_test_lp_target) = { .name = "bt_test", .is_idle = bt_test_idle_query, };