From: dxy <1731678236qq.com> Date: Thu, 11 Sep 2025 02:58:11 +0000 (+0800) Subject: 优化蓝牙通话的问题 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=b04f29087b6534aef0e68fa6296477b1d260fe1f;p=mirrors%2F7PIN_V1_5_Jl_SDK.git 优化蓝牙通话的问题 --- diff --git a/2.code/1.sdk/apps/BK_app/BK_drive/bk_audio.c b/2.code/1.sdk/apps/BK_app/BK_drive/bk_audio.c index 0d8ea0b..cb2be86 100644 --- a/2.code/1.sdk/apps/BK_app/BK_drive/bk_audio.c +++ b/2.code/1.sdk/apps/BK_app/BK_drive/bk_audio.c @@ -430,11 +430,12 @@ int audio_link_demo_RX_data(char *data, int len) if(iis_rx_exc_data_len)//不要多余数据 { printf("前面数据可能是上一个音频残留,丢掉:len:%d,iis_rx_exc_data_len:%d",len,iis_rx_exc_data_len); - if(iis_rx_exc_data_len>len) + if(iis_rx_exc_data_len>len){ iis_rx_exc_data_len-=len; - else + } + else{ iis_rx_exc_data_len = 0; - + } return len; } if(!dac_cbuffer) @@ -508,18 +509,20 @@ void open_bt_audio(void)//打开蓝牙通话 { check_bt_active=0; BT_state = 1; - __set_bt_esco_by_watch(1); - user_emitter_cmd_prepare(USER_CTRL_CONN_SCO,0,NULL); - user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_LAST_NO,0,NULL); + printf("open_bt_audio get_call_status:%d",get_call_status()); + if(get_call_status() != BT_CALL_ACTIVE){ //不在通话的时候才需要重新建立 + __set_bt_esco_by_watch(1); + user_emitter_cmd_prepare(USER_CTRL_CONN_SCO,0,NULL); + user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_LAST_NO,0,NULL); + } gpio_direction_output(TCFG_AUDIO_DAC_PA_PORT, 0); // } void close_bt_audio(void) { printf("close_bt_audio get_call_status:%d",get_call_status()); - if(get_call_status() != BT_CALL_HANGUP){ //如果是主动挂断的不需要再重复挂断 + if(get_call_status() != BT_CALL_HANGUP){ //没挂断需要挂断 已经挂断了不需要再挂断 user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); } - } #if EN_AEC //extern void uart_demo(); diff --git a/2.code/1.sdk/apps/BK_app/BK_drive/bk_uart.c b/2.code/1.sdk/apps/BK_app/BK_drive/bk_uart.c index 70d934b..5421333 100644 --- a/2.code/1.sdk/apps/BK_app/BK_drive/bk_uart.c +++ b/2.code/1.sdk/apps/BK_app/BK_drive/bk_uart.c @@ -15,6 +15,7 @@ #include "BK_versions.h" #include "btstack/avctp_user.h" int ut=0; +static u8 uart_init_flag = 0; OS_SEM uart_callback; char read_ack_flag= 0; char ota_flag = 0; @@ -306,42 +307,46 @@ static void uart_timer_cb(void *p)//有串口数据后10ms一次回调 } void bk_uart_send_smg(bk_uart_msg_event event,char *data,int data_len) { - char *data_tmp =NULL; - if(data !=NULL && data_len>0) + if(!uart_init_flag){ //串口没有初始化不能发送串口消息 + printf("bk_uart_task_init is not init error"); + return; + } + char *data_tmp =NULL; + if(data !=NULL && data_len>0) + { + data_tmp= zalloc(data_len); + if(data_tmp) { - data_tmp= zalloc(data_len); - if(data_tmp) - { - memcpy(data_tmp,data ,data_len); - - }else - { - - log_info("%s:zalloc error",__FUNCTION__); - return; - } - } - - int ret = os_taskq_post_msg("bk_uart_task", 3, event,(int)data_tmp, data_len); - printf("bk_uart_send_smg event:%d ret:%d--------------------1",event,ret); - // if(ret) - // { - // u8 count=20; - // while (count--) - // { - // ret = os_taskq_post_msg("bk_uart_task", 3, event,(int)data_tmp, data_len); - // if(!ret){ - // printf("bk_uart_send_smg event:%d ret:%d--------------------2",event,ret); - // break; - // } - // printf("bk_uart_send_smg event:%d ret:%d--------------------3",event,ret); - // os_time_dly(1); - // } - // } - if(ret != 0 && data_tmp) + memcpy(data_tmp,data ,data_len); + + }else { - free(data_tmp); + + log_info("%s:zalloc error",__FUNCTION__); + return; } + } + + int ret = os_taskq_post_msg("bk_uart_task", 3, event,(int)data_tmp, data_len); + printf("bk_uart_send_smg event:%d ret:%d--------------------1",event,ret); + // if(ret) + // { + // u8 count=20; + // while (count--) + // { + // ret = os_taskq_post_msg("bk_uart_task", 3, event,(int)data_tmp, data_len); + // if(!ret){ + // printf("bk_uart_send_smg event:%d ret:%d--------------------2",event,ret); + // break; + // } + // printf("bk_uart_send_smg event:%d ret:%d--------------------3",event,ret); + // os_time_dly(1); + // } + // } + if(ret != 0 && data_tmp) + { + free(data_tmp); + } } void bk_uart_init() @@ -390,10 +395,13 @@ void bk_uart_init() } uart_dump(); + uart_init_flag=0; //int err = os_task_create(bk_uart_task, NULL, 31, 512, 256, "bk_uart_task"); int err =task_create(bk_uart_task, NULL, "bk_uart_task"); if (err != OS_ERR_NONE) { r_printf("creat fail %x\n", err); + }else{ + uart_init_flag=1; } //uart_timer_init(); diff --git a/2.code/1.sdk/apps/BK_app/bk_app.c b/2.code/1.sdk/apps/BK_app/bk_app.c index 7dfd438..81dcb4e 100644 --- a/2.code/1.sdk/apps/BK_app/bk_app.c +++ b/2.code/1.sdk/apps/BK_app/bk_app.c @@ -26,6 +26,7 @@ static char AI_start_flag = 0; #include "aec_user.h" #include "bk_alg.h" //获取运行状态,返回0代表在休眠,返回1代表在运行 +static u8 bk_app_task_init = 0; char get_ai_state(void) { return AI_start_flag; @@ -184,42 +185,47 @@ int get_ai_start(void) } void bk_app_send_smg(bk_app_msg_event event,char *data,int data_len) { - char *data_tmp =NULL; - if(data !=NULL && data_len>0) + if(!bk_app_task_init) + { + printf("bk_app_task_init is not init error"); + return; + } + char *data_tmp =NULL; + if(data !=NULL && data_len>0) + { + data_tmp= zalloc(data_len); + if(data_tmp) { - data_tmp= zalloc(data_len); - if(data_tmp) - { - memcpy(data_tmp,data ,data_len); - - }else - { - - log_info("%s:zalloc error",__FUNCTION__); - return; - } - } - - int ret = os_taskq_post_msg("bk_app_task", 3, event,(int)data_tmp, data_len); - printf("event:%d ret:%d--------------------1",event,ret); - if(ret) + memcpy(data_tmp,data ,data_len); + + }else { - u8 count=20; - while (count--) - { - ret = os_taskq_post_msg("bk_app_task", 3, event,(int)data_tmp, data_len); - if(!ret){ - printf("event:%d ret:%d--------------------2",event,ret); - break; - } - printf("event:%d ret:%d--------------------3",event,ret); - os_time_dly(1); - } + + log_info("%s:zalloc error",__FUNCTION__); + return; } - if(ret != 0 && data_tmp) + } + + int ret = os_taskq_post_msg("bk_app_task", 3, event,(int)data_tmp, data_len); + printf("event:%d ret:%d--------------------1",event,ret); + if(ret) + { + u8 count=20; + while (count--) { - free(data_tmp); + ret = os_taskq_post_msg("bk_app_task", 3, event,(int)data_tmp, data_len); + if(!ret){ + printf("event:%d ret:%d--------------------2",event,ret); + break; + } + printf("event:%d ret:%d--------------------3",event,ret); + os_time_dly(1); } + } + if(ret != 0 && data_tmp) + { + free(data_tmp); + } } void bk_app_task(void *p) @@ -401,11 +407,13 @@ void bk_app_init(void) gpio_write(IO_PORTA_06,1); // while(1) // ; - + bk_app_task_init=0; err = os_task_create(bk_app_task, NULL, 3, 512, 512, "bk_app_task"); //int err = task_create(bk_app_task, NULL, "bk_app_task"); if (err != OS_ERR_NONE) { r_printf("creat fail %x\n", err); + }else{ + bk_app_task_init=1; } //AI_VC_1S_id = sys_timer_add(NULL, AI_VC_1S_cb, 1000); alg_init();//算法初始化 diff --git a/2.code/1.sdk/apps/common/third_party_profile/jieli/trans_data_demo/le_trans_data.c b/2.code/1.sdk/apps/common/third_party_profile/jieli/trans_data_demo/le_trans_data.c index 75159e3..b500b9a 100644 --- a/2.code/1.sdk/apps/common/third_party_profile/jieli/trans_data_demo/le_trans_data.c +++ b/2.code/1.sdk/apps/common/third_party_profile/jieli/trans_data_demo/le_trans_data.c @@ -220,7 +220,10 @@ extern u8 bt_connect; //关闭经典蓝牙先断开已连接的设备 void disconected_device(void){ if (bt_connect) { //搜索前断开已连接得蓝牙耳机 - user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); + if(get_call_status() != BT_CALL_HANGUP){ //如果是主动挂断的不需要再重复挂断 + user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); + } + // user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); } } @@ -235,7 +238,9 @@ void start_scan_bt(void){ return; } if(bt_connect){ - user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); + if(get_call_status() != BT_CALL_HANGUP){ //如果是主动挂断的不需要再重复挂断 + user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); + } user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); } scan_state = 1; @@ -402,7 +407,9 @@ void connect_bt(char *json_data,u8 conect){ // } if(conect){ //断开连接 if (bt_connect) { //搜索前断开已连接得蓝牙耳机 - user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); + if(get_call_status() != BT_CALL_HANGUP){ //如果是主动挂断的不需要再重复挂断 + user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); + } user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); } return; @@ -442,7 +449,9 @@ void connect_bt(char *json_data,u8 conect){ if(bt_connect == 2) //已经连上了看看连接的地址是否一致 { if (memcmp(bt_conn_addr, reversed_mac, 6) != 0){//如果连上了并且和小程序下发得mac地址是一致不需要重新连接 - user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); + if(get_call_status() != BT_CALL_HANGUP){ //如果是主动挂断的不需要再重复挂断 + user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP,0,NULL); + } user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); // emitter_bt_connect(reversed_mac);//连接地址 }