Files
99_7018_lmx/apps/earphone/bt_auto_test.c

418 lines
9.2 KiB
C
Raw Normal View History

2025-10-29 13:10:02 +08:00
#if 0
#include "system/includes.h"
#include "media/includes.h"
#include "tone_player.h"
#include "app_config.h"
#include "app_action.h"
#include "btstack/avctp_user.h"
#include "btstack/btstack_task.h"
#include "btstack/frame_queque.h"
#include "user_cfg.h"
#include "aec_user.h"
#include "classic/hci_lmp.h"
#include "bt_common.h"
#include "pbg_user.h"
#if TCFG_USER_TWS_ENABLE
#include "bt_tws.h"
#endif
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
#include "include/bt_ble.h"
#endif
#if TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE
#include "app_chargestore.h"
#endif
#include "asm/charge.h"
#include "app_charge.h"
#include "ui_manage.h"
#include "app_chargestore.h"
#include "app_online_cfg.h"
#include "app_main.h"
#include "app_power_manage.h"
#include "gSensor/gSensor_manage.h"
#include "key_event_deal.h"
#include "classic/tws_api.h"
#include "asm/pwm_led.h"
#include "vol_sync.h"
#define CONFIG_SPP_PRINTF_DEBUG 0
#define CONFIG_A2DP_PLAY_PAUSE_TEST 0
#define CONFIG_A2DP_PLAY_NUM 0
#define CONFIG_POWEROFF_TEST 0
#define CONFIG_LOW_LATENCY_TEST 0
#define CONFIG_A2DP_AUTO_PLAY 1
#define CONFIG_IN_OUT_CHARGESTORE_TEST 0
#define CONFIG_TWS_SUPER_TIMEOUT_TEST 0
#define CONFIG_MODE_SWITCH_ENABLE 0
#define CONFIG_ROLE_SWITCH_TEST 0
#define CONFIG_GMA_TEST 0
#if CONFIG_LOW_LATENCY_TEST
static void low_latency_switch_test(void *p)
{
struct sys_event evt;
r_printf("low_latency_test\n");
if (tws_api_get_role() == TWS_ROLE_MASTER) {
evt.arg = (void *)DEVICE_EVENT_FROM_KEY;
evt.type = SYS_KEY_EVENT;
evt.u.key.value = KEY_POWER_START;
evt.u.key.event = KEY_EVENT_TRIPLE_CLICK;
sys_event_notify(&evt);
}
}
#endif
#if CONFIG_GMA_TEST
static void gma_test(void *p)
{
struct sys_event evt;
r_printf("gma_test\n");
if (tws_api_get_role() == TWS_ROLE_MASTER) {
evt.arg = (void *)DEVICE_EVENT_FROM_KEY;
evt.type = SYS_KEY_EVENT;
evt.u.key.value = KEY_POWER_START;
evt.u.key.event = KEY_EVENT_LONG;
sys_event_notify(&evt);
int ms = 10000 + rand32() % 10 * 5000;
sys_timeout_add(NULL, gma_test, ms);
}
}
#endif
#if CONFIG_SPP_PRINTF_DEBUG
static u32 spp_buf[1024 / 4];
static cbuffer_t spp_buf_hdl;
static u32 send_len = 0;
static int spp_timer = 0;
static char out[256];
int log_print_time_to_buf(char *time);
void spp_printf(const char *format, ...)
{
va_list args;
char *p = out;
if (spp_timer == 0) {
return;
}
va_start(args, format);
int len = log_print_time_to_buf(p);
p += len;
len += print(&p, 0, format, args);
if (cbuf_is_write_able(&spp_buf_hdl, len)) {
cbuf_write(&spp_buf_hdl, out, len);
} else {
putchar('N');
}
}
void spp_send_data_timer(void *p)
{
u8 *ptr;
__send:
if (send_len == 0) {
ptr = cbuf_read_alloc(&spp_buf_hdl, &send_len);
if (send_len) {
if (send_len > 250) {
send_len = 250;
}
user_send_cmd_prepare(USER_CTRL_SPP_SEND_DATA, send_len, ptr);
}
} else {
if (0 == user_send_cmd_prepare(USER_CTRL_SPP_SEND_DATA, 0, NULL)) {
cbuf_read_updata(&spp_buf_hdl, send_len);
send_len = 0;
goto __send;
}
}
}
static void spp_data_handler(u8 packet_type, u16 ch, u8 *packet, u16 size)
{
switch (packet_type) {
case 1:
cbuf_init(&spp_buf_hdl, spp_buf, sizeof(spp_buf));
spp_timer = sys_timer_add(NULL, spp_send_data_timer, 50);
spp_printf("spp connect\n");
break;
case 2:
printf("spp disconnect\n");
if (spp_timer) {
sys_timer_del(spp_timer);
spp_timer = 0;
}
break;
case 7:
//log_info("spp_rx:");
//put_buf(packet,size);
break;
}
}
#endif
static int a2dp_open_cnt = 0;
u8 bt_audio_is_running(void);
static void a2dp_play_pause_test(void *p)
{
struct sys_event evt;
if (bt_audio_is_running()) {
if (p) {
return;
}
} else {
if (!p) {
return;
}
}
r_printf("a2dp_play_pause_test\n");
if (tws_api_get_role() == TWS_ROLE_MASTER) {
evt.arg = (void *)DEVICE_EVENT_FROM_KEY;
evt.type = SYS_KEY_EVENT;
evt.u.key.value = KEY_POWER_START;
evt.u.key.event = KEY_EVENT_CLICK;
/*evt.u.key.event = KEY_EVENT_DOUBLE_CLICK;*/
sys_event_notify(&evt);
}
}
static void disconnect_test(void *p)
{
r_printf("disconnect_test: %x\n", p);
if (!p) {
if (tws_api_get_role() == TWS_ROLE_MASTER) {
user_send_cmd_prepare(USER_CTRL_POWER_OFF, 0, NULL);
}
} else {
bt_user_priv_var.auto_connection_counter = 60 * 1000;
bt_tws_phone_connect_timeout();
}
}
#if CONFIG_TWS_SUPER_TIMEOUT_TEST
extern void tws_timeout_test();
static void tws_super_timeout_test(void *p)
{
tws_timeout_test();
}
#endif
#if CONFIG_ROLE_SWITCH_TEST
static void tws_role_switch_test(void *p)
{
tws_conn_switch_role();
/*void bt_tws_role_switch();
bt_tws_role_switch();*/
}
#endif
#if CONFIG_MODE_SWITCH_ENABLE
static void mode_switch_test()
{
struct sys_event evt;
if (tws_api_get_role() == 0) {
evt.arg = (void *)DEVICE_EVENT_FROM_KEY;
evt.type = SYS_KEY_EVENT;
evt.u.key.value = KEY_POWER_START;
evt.u.key.event = KEY_EVENT_TRIPLE_CLICK;
sys_event_notify(&evt);
}
}
#endif
static int bt_connction_status_event_handler(struct bt_event *bt)
{
switch (bt->event) {
case BT_STATUS_FIRST_CONNECTED:
#if CONFIG_SPP_PRINTF_DEBUG
spp_data_deal_handle_register(spp_data_handler);
#endif
#if CONFIG_A2DP_AUTO_PLAY
if (tws_api_get_role() == 0) {
sys_timeout_add((void *)1, a2dp_play_pause_test, 8000);
}
#endif
#if CONFIG_LOW_LATENCY_TEST
if (tws_api_get_role() == 0) {
sys_timer_add(NULL, low_latency_switch_test, 15000);
}
#endif
#if CONFIG_GMA_TEST
if (tws_api_get_role() == 0) {
sys_timeout_add(NULL, gma_test, 15000);
}
#endif
#if CONFIG_POWEROFF_TEST
{
int msec = 10000 ;//+ rand32() % 5 * 5000;
sys_timeout_add(NULL, disconnect_test, msec);
}
#endif
#if CONFIG_MODE_SWITCH_ENABLE
sys_timer_add(NULL, mode_switch_test, 20000);
#endif
break;
case BT_STATUS_FIRST_DISCONNECT:
#if CONFIG_POWEROFF_TEST
a2dp_open_cnt = 0;
sys_timeout_add((void *)1, disconnect_test, 2000);
#endif
break;
case BT_STATUS_A2DP_MEDIA_START:
#if CONFIG_A2DP_PLAY_PAUSE_TEST
if (CONFIG_A2DP_PLAY_NUM && ++a2dp_open_cnt >= CONFIG_A2DP_PLAY_NUM) {
#if CONFIG_POWEROFF_TEST
sys_timeout_add(NULL, disconnect_test, 5000);
#endif
} else {
sys_timeout_add(NULL, a2dp_play_pause_test, 10000);
}
#endif
#if CONFIG_ROLE_SWITCH_TEST
sys_timeout_add(NULL, tws_role_switch_test, 5000);
#endif
break;
case BT_STATUS_A2DP_MEDIA_STOP:
#if CONFIG_A2DP_PLAY_PAUSE_TEST
if (CONFIG_A2DP_PLAY_NUM == 0 || a2dp_open_cnt < CONFIG_A2DP_PLAY_NUM) {
sys_timeout_add((void *)1, a2dp_play_pause_test, 15000);
}
#endif
break;
}
return 0;
}
static int bt_tws_event_handler(struct bt_event *evt)
{
int role = evt->args[0];
int phone_link_connection = evt->args[1];
int reason = evt->args[2];
switch (evt->event) {
case TWS_EVENT_CONNECTED:
#if CONFIG_IN_OUT_CHARGESTORE_TEST
if (tws_api_get_role() == TWS_ROLE_SLAVE) {
void sys_enter_soft_poweroff(void *priv);
sys_timeout_add((void *)1, sys_enter_soft_poweroff, 5000);
}
#endif
#if CONFIG_TWS_SUPER_TIMEOUT_TEST
sys_timeout_add(NULL, tws_super_timeout_test, 10000);
#endif
#if CONFIG_ROLE_SWITCH_TEST
sys_timeout_add(NULL, tws_role_switch_test, 15000);
#endif
break;
case TWS_EVENT_ROLE_SWITCH:
#if CONFIG_ROLE_SWITCH_TEST
sys_timeout_add(NULL, tws_role_switch_test, 5000);
#endif
break;
}
return 0;
}
static void auto_test_event_handler(struct sys_event *event, void *priv)
{
/*
*
*/
switch ((u32)event->arg) {
case SYS_BT_EVENT_TYPE_CON_STATUS:
bt_connction_status_event_handler(&event->u.bt);
break;
case SYS_BT_EVENT_TYPE_HCI_STATUS:
break;
#if TCFG_USER_TWS_ENABLE
case SYS_BT_EVENT_FROM_TWS:
bt_tws_event_handler(&event->u.bt);
break;
#endif
}
}
static void bt_auto_test_task(void *p)
{
int res;
int msg[32];
register_sys_event_handler(SYS_BT_EVENT, 0, 0, auto_test_event_handler);
os_time_dly(2);
#if CONFIG_IN_OUT_CHARGESTORE_TEST
void sys_enter_soft_poweroff(void *priv);
int msec = 500 + rand32() % 10 * 200;
sys_timeout_add((void *)1, sys_enter_soft_poweroff, msec);
#endif
while (1) {
res = os_taskq_pend("taskq", msg, ARRAY_SIZE(msg));
if (res != OS_TASKQ) {
continue;
}
}
}
int bt_auto_test_init()
{
os_task_create(bt_auto_test_task, NULL, 1, 256, 256, "auto_test");
return 0;
}
late_initcall(bt_auto_test_init);
#endif