1、修改连接蓝牙耳机发送消息失败的问题
authordxy <1731678236qq.com>
Mon, 15 Sep 2025 09:59:43 +0000 (17:59 +0800)
committerdxy <1731678236qq.com>
Mon, 15 Sep 2025 09:59:43 +0000 (17:59 +0800)
2、优化串口接收数据问题
3、蓝牙扫描过程中不允许蓝牙连接

2.code/1.sdk/apps/BK_app/BK_drive/bk_uart.c
2.code/1.sdk/apps/BK_app/BK_drive/bk_uart.h
2.code/1.sdk/apps/BK_app/bk_app.c
2.code/1.sdk/apps/BK_app/bk_app.h
2.code/1.sdk/apps/watch/common/task_table.c
2.code/1.sdk/apps/watch/include/task_manager/bt/bt_emitter.h
2.code/1.sdk/apps/watch/task_manager/bt/bt_emitter.c
2.code/1.sdk/apps/watch/task_manager/bt/bt_switch_fun.c

index 5421333..c936891 100644 (file)
@@ -15,7 +15,8 @@
 #include "BK_versions.h"
 #include "btstack/avctp_user.h"
 int ut=0;
-static u8 uart_init_flag = 0;
+static u8 uart_send_flag = 0;
+static u8 uart_recv_flag = 0;
 OS_SEM uart_callback;
 char read_ack_flag= 0;
 char ota_flag = 0;
@@ -204,7 +205,7 @@ static void uart_irq_func(int uart_num, enum uart_event_v1 event)
          //printf("uart[%d] rx fifo ovf", uart_num);
     }
     //int r = os_sem_post(&uart_callback);
-    bk_uart_send_smg(BK_UART_READ_DATA,NULL,0);
+    bk_uart_recv_smg(BK_UART_READ_DATA,NULL,0);
 
 }
 
@@ -220,7 +221,7 @@ extern void led_b_open(void);
 extern void led_g_open(void);
 extern void led_r_open(void);
 extern void led_close(void);
-void bk_uart_task(void *p)
+void bk_uart_recv_task(void *p)
 {
     int res,err;
     int msg[16];
@@ -288,7 +289,52 @@ void bk_uart_task(void *p)
         }
     }
 }
-
+void bk_uart_send_task(void *p)
+{
+    int res,err;
+    int msg[16];
+    log_info("%s:RUN !!!!!!\n",__FUNCTION__);
+    log_info("%s:RUN !!!!!!\n",__FUNCTION__);
+    while (1) {
+        res = os_taskq_pend(NULL, msg, ARRAY_SIZE(msg));
+        char *data = (int)msg[2];
+        int len = msg[3];
+        switch (msg[1]) {
+        case  BK_UART_WRITE_DATA ://读数据
+            wakeup_cat1(); //先唤醒4g,预防4g休眠
+            ///int sleep_count = 0;
+            printf("BK_UART_WRITE_DATA1 data:%s",data);
+            uart_send_blocking(ut, data, len, 3000);
+            os_time_dly(10);
+            printf("BK_UART_WRITE_DATA2");
+            break;
+        case BK_UART_WRITE_DATA_ACK:
+            
+            wakeup_cat1(); //先唤醒4g,预防4g休眠
+            ///int sleep_count = 0;
+            printf("BK_UART_WRITE_DATA_ACK1 data:%s",data);
+            uart_send_blocking(ut, data, len, 3000);
+            int count = 100;
+            while(count--)
+            {
+                if(read_ack_flag == 1)
+                {
+                    break;
+                }
+                os_time_dly(1);
+            }
+            printf("BK_UART_WRITE_DATA_ACK2");
+            break;
+       
+        default:
+            break;
+        }
+        if(data)
+        {
+            free(data);
+        }
+    }
+}
 static void uart_timer_cb(void *p)//有串口数据后10ms一次回调
 {
     
@@ -307,8 +353,8 @@ static void uart_timer_cb(void *p)//有串口数据后10ms一次回调
 }
 void bk_uart_send_smg(bk_uart_msg_event event,char *data,int data_len)
 {
-    if(!uart_init_flag){ //串口没有初始化不能发送串口消息
-        printf("bk_uart_task_init is not init error");
+    if(!uart_send_flag){ //串口没有初始化不能发送串口消息
+        printf("bk_uart_recv_task is not init error");
         return;
     }
     char *data_tmp =NULL;
@@ -327,14 +373,14 @@ void bk_uart_send_smg(bk_uart_msg_event event,char *data,int data_len)
         }
     }
     
-    int ret = os_taskq_post_msg("bk_uart_task", 3, event,(int)data_tmp, data_len);
+    int ret = os_taskq_post_msg("bk_uart_send_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);
+    //         ret = os_taskq_post_msg("bk_uart_recv_task", 3, event,(int)data_tmp, data_len);
     //         if(!ret){
     //             printf("bk_uart_send_smg event:%d ret:%d--------------------2",event,ret);
     //             break;
@@ -348,6 +394,36 @@ void bk_uart_send_smg(bk_uart_msg_event event,char *data,int data_len)
         free(data_tmp);
     }
 
+}
+void bk_uart_recv_smg(bk_uart_msg_event event,char *data,int data_len)
+{
+    if(!uart_recv_flag){ //串口没有初始化不能发送串口消息
+        printf("bk_uart_recv_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)
+        {
+            memcpy(data_tmp,data ,data_len);
+            
+        }else
+        {
+            
+            log_info("%s:zalloc error",__FUNCTION__);
+            return;
+        }
+    }
+    
+    int ret = os_taskq_post_msg("bk_uart_recv_task", 3, event,(int)data_tmp, data_len);
+    printf("bk_uart_recv_smg event:%d ret:%d--------------------1",event,ret);
+    if(ret != 0 && data_tmp)
+    {
+        free(data_tmp);
+    }
+
 }
 void bk_uart_init()
 {
@@ -395,16 +471,22 @@ void bk_uart_init()
     }
 
     uart_dump();
-    uart_init_flag=0;
+    uart_send_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");
+    int err =task_create(bk_uart_send_task, NULL, "bk_uart_send_task");
     if (err != OS_ERR_NONE) {
         r_printf("creat fail %x\n", err);
     }else{
-        uart_init_flag=1;
+        uart_send_flag=1;
+    }
+    uart_recv_flag=0;
+    //int err = os_task_create(bk_uart_task, NULL, 31, 512, 256, "bk_uart_task");
+    int recverr =task_create(bk_uart_recv_task, NULL, "bk_uart_recv_task");
+    if (recverr != OS_ERR_NONE) {
+        r_printf("creat fail bk_uart_recv_task %x\n", recverr);
+    }else{
+        uart_recv_flag=1;
     }
-    //uart_timer_init();
-  
 }
 
 
@@ -438,7 +520,34 @@ int uart_send_AI_key_even(void)
     return 0;
     
 }
-
+int uart_send_BT_AI_key_even(void)
+{
+    //{"event":"BT_AI_KEY_PRESS"}
+    cJSON *root = cJSON_CreateObject();
+    if (root == NULL) {
+       
+        printf( "Failed to create JSON object\n");
+        return -1;
+    }
+    // 添加字符串字段 "event"
+    cJSON_AddStringToObject(root, "event", "BT_AI_KEY_PRESS");
+    // 将JSON对象转换为字符串
+    char *json_string = cJSON_Print(root);
+    if (json_string == NULL) {
+        printf( "Failed to print JSON\n");
+        cJSON_Delete(root);
+        return -1;
+    }
+    // 打印JSON字符串
+    
+    bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+    //bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));(ut, json_string, strlen(json_string), 20);
+    // 释放内存
+    cJSON_free(json_string);
+    cJSON_Delete(root); 
+    return 0;
+    
+}
 int uart_send_PWR_key_even(void)
 {
     //{"event":"AI_PWR_PRESS"}
@@ -510,20 +619,12 @@ int uart_send_single_bt_mac(u8 *name,u8 *mac,u8 connect)
     }
     printf("JSON数据: %s\n", json_string);
     read_ack_flag = 0;
-    bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+    bk_uart_send_smg(BK_UART_WRITE_DATA_ACK,json_string,strlen(json_string));
     // (ut, json_string, strlen(json_string), 20);
     // 释放内存
     cJSON_free(json_string);
     cJSON_Delete(root);
-    int count = 50;
-    while(count--)
-    {
-        if(read_ack_flag == 1)
-        {
-            break;
-        }
-        os_time_dly(1);
-    }
+    
     return 0;
 }
 extern char userremote_name[32]; //当前连接或者断开的蓝牙名称
@@ -570,7 +671,7 @@ void send_bt_connect_state(void){
         }
         printf("JSON数据1: %s\n", json_string);
         read_ack_flag=0;
-        bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+        bk_uart_send_smg(BK_UART_WRITE_DATA_ACK,json_string,strlen(json_string));
         //(ut, json_string, strlen(json_string), 20);
         // 释放内存
         cJSON_free(json_string);
@@ -589,20 +690,20 @@ void send_bt_connect_state(void){
         printf("JSON数据2: %s\n", json_string);
         // uart_send_blocking(ut, json_string, strlen(json_string), 20);
         read_ack_flag=0;
-        bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+        bk_uart_send_smg(BK_UART_WRITE_DATA_ACK,json_string,strlen(json_string));
         // 释放内存
         cJSON_free(json_string);
         cJSON_Delete(root);
     }
-    int count = 50;
-    while(count--)
-    {
-        if(read_ack_flag == 1)
-        {
-            break;
-        }
-        os_time_dly(1);
-    }
+    int count = 100;
+    // while(count--)
+    // {
+    //     if(read_ack_flag == 1)
+    //     {
+    //         break;
+    //     }
+    //     os_time_dly(1);
+    // }
 }
 int uart_send_bt_list(u8 *data)
 {
@@ -640,17 +741,17 @@ int uart_send_bt_list(u8 *data)
         return 0;
     }
     read_ack_flag=0;
-    bk_uart_send_smg(BK_UART_WRITE_DATA, data,strlen(data));
+    bk_uart_send_smg(BK_UART_WRITE_DATA_ACK, data,strlen(data));
     // uart_send_blocking(ut, data, strlen(data), 20);
-    int count = 50;
-    while(count--)
-    {
-        if(read_ack_flag == 1)
-        {
-            break;
-        }
-        os_time_dly(1);
-    }
+    // int count = 100;
+    // while(count--)
+    // {
+    //     if(read_ack_flag == 1)
+    //     {
+    //         break;
+    //     }
+    //     os_time_dly(1);
+    // }
     return 0;
 }
 int uart_send_versions(void)
@@ -700,20 +801,20 @@ int uart_send_kws(void)
     }
     
     printf("JSON数据: %s\n", json_string);
-    bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+    bk_uart_send_smg(BK_UART_WRITE_DATA_ACK,json_string,strlen(json_string));
     // (ut, json_string, strlen(json_string), 20);
     // 释放内存
     cJSON_free(json_string);
     cJSON_Delete(root);
-    int count = 50;
-    while(count--)
-    {
-        if(read_ack_flag == 1)
-        {
-            break;
-        }
-        os_time_dly(1);
-    }
+    // int count = 50;
+    // while(count--)
+    // {
+    //     if(read_ack_flag == 1)
+    //     {
+    //         break;
+    //     }
+    //     os_time_dly(1);
+    // }
     return 0;
 }
 int uart_send_ack(void)
@@ -760,20 +861,20 @@ int uart_send_get_ble_switch(void) //蓝牙开机主动向4g请求获取蓝牙
     }
     // 打印JSON字符串
     printf("uart_send_get_ble_switch JSON数据: %s\n", json_string);
-    bk_uart_send_smg(BK_UART_WRITE_DATA, json_string,strlen(json_string));
+    bk_uart_send_smg(BK_UART_WRITE_DATA_ACK, json_string,strlen(json_string));
     // uart_send_blocking(ut, json_string, strlen(json_string), 20);
     // 释放内存
     cJSON_free(json_string);
     cJSON_Delete(root);
-    int count = 100;
-    while(count--)
-    {
-        if(read_ack_flag == 1)
-        {
-            break;
-        }
-        os_time_dly(1);
-    }
+    // int count = 100;
+    // while(count--)
+    // {
+    //     if(read_ack_flag == 1)
+    //     {
+    //         break;
+    //     }
+    //     os_time_dly(1);
+    // }
     return 0;
 }
 int uart_send_get_bt_switch(void) //蓝牙开机主动向4g请求获取经典蓝牙
@@ -795,20 +896,21 @@ int uart_send_get_bt_switch(void) //蓝牙开机主动向4g请求获取经典蓝
     }
     // 打印JSON字符串
     printf("uart_send_get_ble_switch JSON数据: %s\n", json_string);
-    bk_uart_send_smg(BK_UART_WRITE_DATA, json_string,strlen(json_string));
+
+    bk_uart_send_smg(BK_UART_WRITE_DATA_ACK, json_string,strlen(json_string));
     // uart_send_blocking(ut, json_string, strlen(json_string), 20);
     // 释放内存
     cJSON_free(json_string);
     cJSON_Delete(root);
     int count = 100;
-    while(count--)
-    {
-        if(read_ack_flag == 1)
-        {
-            break;
-        }
-        os_time_dly(1);
-    }
+    // while(count--)
+    // {
+    //     if(read_ack_flag == 1)
+    //     {
+    //         break;
+    //     }
+    //     os_time_dly(1);
+    // }
     return 0;
 }
 int uart_send_get_cat1_imei(void) //蓝牙开机主动向4g请求获取imei号
@@ -830,20 +932,20 @@ int uart_send_get_cat1_imei(void) //蓝牙开机主动向4g请求获取imei号
     // 打印JSON字符串
     printf("uart_send_get_cat1_imei JSON数据: %s\n", json_string);
     read_ack_flag = 0;
-    bk_uart_send_smg(BK_UART_WRITE_DATA, json_string,strlen(json_string));
+    bk_uart_send_smg(BK_UART_WRITE_DATA_ACK, json_string,strlen(json_string));
     // uart_send_blocking(ut, json_string, strlen(json_string), 20);
     // 释放内存
     cJSON_free(json_string);
     cJSON_Delete(root);
-    int count = 100;
-    while(count--)
-    {
-        if(read_ack_flag == 1)
-        {
-            break;
-        }
-        os_time_dly(1);
-    }
+    // int count = 100;
+    // while(count--)
+    // {
+    //     if(read_ack_flag == 1)
+    //     {
+    //         break;
+    //     }
+    //     os_time_dly(1);
+    // }
     return 0;
 }
 static  u8 get_ble_switch = 0;
@@ -866,7 +968,6 @@ void UART_event(void){
         sys_timer_del(get_ble_switch_timerid);
         get_ble_switch_timerid=0;
     }
-    
 }
 static void get_ble_switch_imei_timer_cb(void *priv)
 {
@@ -957,20 +1058,20 @@ int uart_send_bt_state(u8 bt_state) //蓝牙向4G发送蓝牙耳机的状态
     // 打印JSON字符串
     printf("uart_send_bt_state JSON数据: %s\n", json_string);
     read_ack_flag=0;
-    bk_uart_send_smg(BK_UART_WRITE_DATA, json_string,strlen(json_string));
+    bk_uart_send_smg(BK_UART_WRITE_DATA_ACK, json_string,strlen(json_string));
     // uart_send_blocking(ut, json_string, strlen(json_string), 20);
     // 释放内存
     cJSON_free(json_string);
     cJSON_Delete(root);
-    int count = 50;
-    while(count--)
-    {
-        if(read_ack_flag == 1)
-        {
-            break;
-        }
-        os_time_dly(1);
-    }
+    // int count = 50;
+    // while(count--)
+    // {
+    //     if(read_ack_flag == 1)
+    //     {
+    //         break;
+    //     }
+    //     os_time_dly(1);
+    // }
     return 0;
 }
 int uart_send_error(void)
@@ -1025,8 +1126,10 @@ void clear_earphone_record(void){
     if(bt_connect){
         user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
     }
-    delete_last_device_from_vm();
+    // delete_last_device_from_vm();
     uart_send_clear_earphoneok();
+    printf("删除连接密钥!!!!!!!");
+    delete_link_key((bd_addr_t *)bt_conn_addr,1);
 }
 int uart_send_clear_earphoneok(void)
 {
@@ -1047,18 +1150,18 @@ int uart_send_clear_earphoneok(void)
     }
     read_ack_flag=0;
     printf("JSON数据: %s\n", json_string);
-    bk_uart_send_smg(BK_UART_WRITE_DATA,json_string,strlen(json_string));
+    bk_uart_send_smg(BK_UART_WRITE_DATA_ACK,json_string,strlen(json_string));
     cJSON_free(json_string);
     cJSON_Delete(root);
-    int count = 50;
-    while(count--)
-    {
-        if(read_ack_flag == 1)
-        {
-            break;
-        }
-        os_time_dly(1);
-    }
+    // int count = 50;
+    // while(count--)
+    // {
+    //     if(read_ack_flag == 1)
+    //     {
+    //         break;
+    //     }
+    //     os_time_dly(1);
+    // }
     return 0;
 }
 ////*************解析****************//////
@@ -1079,11 +1182,11 @@ int parse_uart_data(char *json_string)
         // }
         return 1;
     }
-    
+    printf("接收原始json数据: data = %s\n", json_string);
     cJSON *event = cJSON_GetObjectItemCaseSensitive(root, "event");
     if (cJSON_IsString(event) && (event->valuestring != NULL)) {
         printf("解析结果: event = %s\n", event->valuestring);
-        // if(strcmp(event->valuestring,"AI_start"))//ai开始
+        // if(strcmp(event->valuestring,"AI_start"))//ai开始S
         // {
 
         // }
@@ -1092,7 +1195,6 @@ int parse_uart_data(char *json_string)
             read_ack_flag =1;
         }
         
-        
         if(!strcmp(event->valuestring,"ota_start"))//ota开始
         {
             updata_fd_open("UPDATE");
@@ -1187,15 +1289,8 @@ int parse_uart_data(char *json_string)
 
         if(!strcmp(event->valuestring,"switch_bt_state")) //收到4g传过来的ble开关状态 0 打开蓝牙扫描 1关闭蓝牙扫描
         {
-            read_ack_flag =1; 
-            // {
-            //     "event":"switch_bt_state",
-            //     "data":{
-            //         "switch_bt_state":"0"
-            //     }
-            // }
             printf(": json_string = %s\n", json_string);
-
+            u8 switch_bt_state=0;
             // 获取"data"对象
             cJSON *data = cJSON_GetObjectItemCaseSensitive(root, "data");
             if (cJSON_IsObject(data)) {
@@ -1204,33 +1299,33 @@ int parse_uart_data(char *json_string)
                 if (cJSON_IsString(switch_bt_state) && (switch_bt_state->valuestring != NULL)) {
                     if (strcmp(switch_bt_state->valuestring, "1") == 0) {
                         get_bt_switch=1;
-                        if (is_bredr_close() == 1) {
-                            printf("3 is_bredr_close: %d\n", is_bredr_close());
-                            bt_init_bredr();
-                        }
+                        // if (is_bredr_close() == 1) {
+                        //     printf("3 is_bredr_close: %d\n", is_bredr_close());
+                        //     bt_init_bredr();
+                        // }
+                        switch_bt_state=1;
+
+                        bk_app_send_smg(OPEN_BR,(char *)&switch_bt_state,1);
                     }else if (strcmp(switch_bt_state->valuestring, "0") == 0)
                     {
-                        disconected_device();
                         get_bt_switch=1;
-                        if (!is_bredr_close()) {
-                            printf("4 is_bredr_close: %d\n", is_bredr_close());
-                            bt_close_bredr();
-                        }
+
+                        // disconected_device();
+                        
+                        // if (!is_bredr_close()) {
+                        //     printf("4 is_bredr_close: %d\n", is_bredr_close());
+                        //     bt_close_bredr();
+                        // }
+                        switch_bt_state=0;
+                        bk_app_send_smg(OPEN_BR,(char *)&switch_bt_state,1);
                     }
                 }
             }
         }
         if(!strcmp(event->valuestring,"switch_ble_state")) //收到4g传过来的ble开关状态 0 打开蓝牙扫描 1关闭蓝牙扫描
         {
-            read_ack_flag =1; 
-            // {
-            //     "event":"switch_bt_state",
-            //     "data":{
-            //         "switch_bt_state":"0"
-            //     }
-            // }
             printf("switch_ble_state : json_string = %s\n", json_string);
-
+            u8 switch_ble_state=0;
             // 获取"data"对象
             cJSON *data = cJSON_GetObjectItemCaseSensitive(root, "data");
             if (cJSON_IsObject(data)) {
@@ -1240,30 +1335,42 @@ int parse_uart_data(char *json_string)
                     printf("蓝牙广播状态: %s\n", switch_bt_state->valuestring);
                     if (strcmp(switch_bt_state->valuestring, "1") == 0) {
                         get_ble_switch=1;
-                        set_adv_flag_fun(1) ;//开始蓝牙广播
+                        switch_ble_state=1;
+                        bk_app_send_smg(SWITCH_BLE_STATE,(char *)&switch_ble_state,1);
+                        // set_adv_flag_fun(1) ;//开始蓝牙广播
+                        
                     }else if (strcmp(switch_bt_state->valuestring, "0") == 0)
                     {
                         get_ble_switch = 1;
-                        set_adv_flag_fun(0); //关闭蓝牙广播
+                        switch_ble_state=0;
+                        bk_app_send_smg(SWITCH_BLE_STATE,(char *)&switch_ble_state,1);
+                        // set_adv_flag_fun(0); //关闭蓝牙广播
+                        
                     }
                 }
             }
-            
         }
         if(!strcmp(event->valuestring,"bt_scan")) 
         {
             // "event":"bt_scan",
             // "data":"0/1" 0开始扫描 1停止扫描
+            u8 bt_scan_value = 0;
             cJSON *data = cJSON_GetObjectItemCaseSensitive(root, "data");
             if (cJSON_IsString(data) && (data->valuestring != NULL)) {
                 printf("蓝牙扫描: %s\n", data->valuestring);
                 if (strcmp(data->valuestring, "1") == 0) {
                     // set_scan_bt(0);
-                    start_scan_bt();//开始扫描
+                    // start_scan_bt();//开始扫描
+                    bt_scan_value=1;
+                    bk_app_send_smg(BT_SCAN_SWITCH,(char *)&bt_scan_value,1);
+                    ack_flag=1;
                 }else if (strcmp(data->valuestring, "0") == 0)
                 {
                     // set_scan_bt(1);
-                    stop_scan_bt(); //关闭扫描
+                    // stop_scan_bt(); //关闭扫描
+                    bt_scan_value=0;
+                    bk_app_send_smg(BT_SCAN_SWITCH,(char*)&bt_scan_value,1);
+                    ack_flag=1;
                 }
             }
         }
@@ -1280,8 +1387,9 @@ int parse_uart_data(char *json_string)
                 // if(bt_connect==2){ //已连接
                 //     bt_connect
                 // }
-                connect_bt(json_string,0);//开始连接蓝牙耳机设备
-                
+                // connect_bt(json_string,0);//开始连接蓝牙耳机设备
+                bk_app_send_smg(RECV_CONNECT_BT,json_string,strlen(json_string));
+                ack_flag=1;
             }
         }
         if(!strcmp(event->valuestring,"imei")) {
@@ -1294,7 +1402,8 @@ int parse_uart_data(char *json_string)
             if (cJSON_IsString(data) && (data->valuestring != NULL)) {
                 printf("imei: %s\n", data->valuestring);
                 get_cat1_imei_state=1;
-                set_adv_imei(data->valuestring);//设置广播imei号
+                bk_app_send_smg(BT_GET_IMEI,data->valuestring,strlen(data->valuestring));
+                // set_adv_imei(data->valuestring);//设置广播imei号
                 
             }
         }
@@ -1307,9 +1416,12 @@ int parse_uart_data(char *json_string)
             cJSON *data = cJSON_GetObjectItemCaseSensitive(root, "data");
             if (cJSON_IsString(data) && (data->valuestring != NULL)) {
                 printf("断开连接: %s\n", data->valuestring);
-                connect_bt(json_string,1);//断开连接
+                // connect_bt(json_string,1);//断开连接
+                ack_flag=1;
+                bk_app_send_smg(RECV_DISCONNECT_BT,json_string,strlen(json_string));
                 
             }
+            
         }
 
         if(!strcmp(event->valuestring,"get_connect_bt_state")) {
@@ -1330,13 +1442,16 @@ int parse_uart_data(char *json_string)
             cJSON *data = cJSON_GetObjectItemCaseSensitive(root, "data");
             if (cJSON_IsString(data) && (data->valuestring != NULL)) {
                 // printf("volume: %s\n", data->valuestring);
-                int volume = atoi(data->valuestring);
-                int volume_tmp = (volume*31)/100;
+                u8 volume = atoi(data->valuestring);
+                u8 volume_tmp = (volume*31)/100;
                 printf("volume:%d %d",volume,volume_tmp);
                 if(volume_tmp <= 0){
                     volume_tmp=1;
                 }
-                app_audio_volume_set(volume_tmp);
+                ack_flag=1;
+                bk_app_send_smg(BT_ADJUST_VOLUME,(char*)&volume_tmp,1);//
+                // app_audio_volume_set(volume_tmp);
+                
             }
         }
         
index 10a7c4d..45ca19c 100644 (file)
@@ -7,6 +7,7 @@ typedef enum
 {
     BK_UART_READ_DATA = 0,
     BK_UART_WRITE_DATA,
+    BK_UART_WRITE_DATA_ACK,
     BK_UART_CLOSE_TIMER,
 
 }bk_uart_msg_event;
@@ -26,4 +27,6 @@ void auto_switch_local_mic(void);
 void clear_earphone_record(void);
 int uart_send_clear_earphoneok(void);
 void print_hex(char *data ,int len);
+int uart_send_BT_AI_key_even(void);
+void bk_uart_recv_smg(bk_uart_msg_event event,char *data,int data_len);
 #endif
index 81dcb4e..a5a9d39 100644 (file)
@@ -228,6 +228,9 @@ void bk_app_send_smg(bk_app_msg_event event,char *data,int data_len)
     }
             
 }
+extern void app_audio_volume_set(u8 value);
+extern u8 is_bredr_close(void);
+extern void bt_init_bredr();
 void bk_app_task(void *p)
 {
     int res,err;
@@ -255,6 +258,15 @@ void bk_app_task(void *p)
             AI_VC_start();
             log_info("%s:AI_KEY_PRESS !!!!!!",__FUNCTION__);
             
+            break;
+        case  BT_AI_KEY_PRESS ://蓝牙按键模式
+            if(wakeup_cat1() >0)
+            {
+                uart_send_BT_AI_key_even();
+            }
+            AI_VC_start();
+            log_info("%s:BT_AI_KEY_PRESS !!!!!!",__FUNCTION__);
+            
             break;
         case AI_KEY_RELEASE://按键释放
             log_info("%s:AI_KEY_RELEASE !!!!!!",__FUNCTION__);
@@ -302,6 +314,57 @@ void bk_app_task(void *p)
         case BT_DISCONNEECT_EVENT:
             key_bt_hangup_CB();
             break;
+        case BT_ADJUST_VOLUME:
+            u8 volume_value = data[0];
+            printf("ADJUST:%d",volume_value);
+            app_audio_volume_set(volume_value);
+            break;
+        case OPEN_BR:
+            u8 switch_br_value= data[0];
+            printf("switch_br_value:%d",switch_br_value);
+            if (switch_br_value == 1){
+                if (is_bredr_close() == 1) {
+                    printf("3 is_bredr_close: %d\n", is_bredr_close());
+                    bt_init_bredr();
+                }
+            }else{
+                disconected_device();
+                            
+                if (!is_bredr_close()) {
+                    printf("4 is_bredr_close: %d\n", is_bredr_close());
+                    bt_close_bredr();
+                }
+            }
+            
+            break;
+        case SWITCH_BLE_STATE:
+            u8 switch_ble_value= data[0];
+            printf("switch_ble_value:%d",switch_ble_value);
+            if(switch_ble_value == 1){
+                set_adv_flag_fun(1) ;//开始蓝牙广播
+            }else{
+                set_adv_flag_fun(0) ;//关闭蓝牙广播
+            }
+            break;
+        case BT_SCAN_SWITCH:
+            u8 bt_scan_switch= data[0];
+            printf("bt_scan_switch:%d",bt_scan_switch);
+            if(bt_scan_switch == 1){
+                start_scan_bt();//开始扫描
+            }else{
+                stop_scan_bt();//停止扫描
+            }
+            break;
+        case BT_GET_IMEI:
+            printf("set_adv_imei:%s",data);
+            set_adv_imei(data);//设置广播imei号
+            break;
+        case RECV_DISCONNECT_BT:
+            connect_bt(data,1);//断开蓝牙耳机设备
+            break;
+        case RECV_CONNECT_BT:
+            connect_bt(data,0);//开始连接蓝牙耳机设备
+            break;    
         default:
             break;
         }
@@ -316,8 +379,6 @@ void bk_app_task(void *p)
 //蓝牙耳机切换事件回调
 void BT_State_Change_cb(void)
 {
-
-    os_time_dly(100);
     printf("BT_State_Change_cb:%d",get_call_status());
     if(get_call_status() == BT_CALL_ACTIVE)
     {   
@@ -325,7 +386,6 @@ void BT_State_Change_cb(void)
     }
     bk_app_send_smg(AI_CLOSE,NULL,0);
     bk_app_send_smg(AI_OPEN,NULL,0);
-    // bk_app_send_smg(AI_KEY_PRESS,NULL,0);
 }
 extern u8 bt_connect;
 //蓝牙耳机主动断开当前通话
@@ -333,28 +393,23 @@ void key_bt_hangup(void){
     bk_app_send_smg(BT_DISCONNEECT_EVENT,NULL,0); 
 }
 void key_bt_hangup_CB(void){
-    os_time_dly(30);   
-    printf("esco_flag end:%d %d get_call_status:%d",esco_flag,bt_connect,get_call_status());
-    if(bt_connect ==0) //蓝牙耳机已断开
+    printf("esco_flag end:%d %d get_call_status:%d",get_total_connect_dev(),bt_connect,get_call_status());
+    if(get_total_connect_dev() ==0) //没有设备连接
         return; 
     bk_app_send_smg(AI_CLOSE,NULL,0);
     bk_app_send_smg(AI_OPEN,NULL,0);
-    bk_app_send_smg(AI_KEY_PRESS,NULL,0);
+    bk_app_send_smg(BT_AI_KEY_PRESS,NULL,0);
 }
 //蓝牙耳机所有按键触发AI对话
 void all_key_bt_ai(void) //蓝牙耳机已连接不在通话中
 {
     printf("all_key_bt_ai end:%d %d get_call_status:%d",esco_flag,AI_start_flag,get_call_status());
-    // if(esco_flag){
-    //     return;
-    // }
     if(get_call_status() != BT_CALL_ACTIVE)
     {
         bk_app_send_smg(AI_CLOSE,NULL,0);
     }
-    
     bk_app_send_smg(AI_OPEN,NULL,0);
-    bk_app_send_smg(AI_KEY_PRESS,NULL,0);
+    bk_app_send_smg(BT_AI_KEY_PRESS,NULL,0);
 }
 void bk_app_init(void)
 {
@@ -408,8 +463,8 @@ void bk_app_init(void)
     // 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");
+    //err = os_task_create(bk_app_task, NULL, 3, 512, 512, "bk_app_task");
+    err = task_create(bk_app_task, NULL, "bk_app_task");
     if (err != OS_ERR_NONE) {
         r_printf("creat fail %x\n", err);
     }else{
index 20ad82d..56c36a4 100644 (file)
@@ -21,6 +21,15 @@ typedef enum
     BT_State_Change_CB,//蓝牙连接状态切换
     OPEN_CALL,
     BT_DISCONNEECT_EVENT,
+    BT_AI_KEY_PRESS,
+    BT_ADJUST_VOLUME,
+    CLOSE_BR,
+    OPEN_BR,
+    SWITCH_BLE_STATE,
+    BT_SCAN_SWITCH,
+    BT_GET_IMEI,
+    RECV_DISCONNECT_BT,
+    RECV_CONNECT_BT
 
 }bk_app_msg_event;
 
@@ -35,4 +44,5 @@ int get_ai_start(void);
 void key_bt_hangup(void);
 void key_bt_hangup_CB(void);
 void all_key_bt_ai(void);
+void AI_VC_close(void);
 #endif
\ No newline at end of file
index 857ad6e..192543a 100644 (file)
@@ -123,9 +123,10 @@ const struct task_info task_info_table[] = {
     // {"user_mic_record",             3,     0,   256  ,128 },
     // {"user_mic_record_play",             2,     0,   512,256 },
     // {"user_ble_protocol",             3,     0,   1024, 256 },
-    //{"bk_app_task",             3,     0,   1024*2, 256 },
+    {"bk_app_task",             3,     1,   1024*2, 256 },
     {"ALG_task",             3,     0,   1*1024, 512 },
-    {"bk_uart_task",             3,     0,   1*1024, 256 },
+    {"bk_uart_recv_task",             3,     0,   1*1024, 256 },
+    {"bk_uart_send_task",             3,     0,   1*1024, 256 },
     
     {0, 0},
 };
index 9adde15..f335694 100644 (file)
@@ -32,7 +32,7 @@ extern void emitter_open(u8 source);
 extern void emitter_close(u8 source);
 extern void bt_emitter_rx_bulk_change(u8 mode);
 extern void bt_emitter_audio_set_mute(u8 mute);
-
+extern void emitter_read_bt_connect_info(void);
 extern void emitter_save_remote_name(u8 *addr, u8 *name);
 extern u8 *emitter_get_remote_name(u8 *addr);
 extern void emitter_search_remote(void *cb_priv, int (*cb)(void *priv, u8 *mac, u8 *name, u8 *out_del, u8 *out_exit));
index 6d8b9a0..65a3105 100644 (file)
@@ -316,7 +316,8 @@ void bt_emitter_start_search_device()
         /* user_send_cmd_prepare(USER_CTRL_PAGE_CANCEL, 0, NULL); */
         /* ////关闭可发现可链接 */
         user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL);
-        /* user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL); */
+        user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL);
+        // /* user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL); */
         ////切换样机状态
         bt_search_device();
     }
@@ -585,6 +586,10 @@ void emitter_search_stop(u8 result)
     set_start_search_spp_device(0);
     #if BK_USER_CUSTOM_FUN
     bt_scan_list();
+    if (!result) {
+        printf("emitter_search_stop USER_CTRL_WRITE_CONN_ENABLE:%d",result);
+        user_send_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL);
+    }
     printf("emitter_search_stop:%d",result);
     return;
     #endif
@@ -1571,7 +1576,29 @@ void emitter_save_remote_name(u8 *addr, u8 *name)
 
     syscfg_write(id, &remote_n, sizeof(struct remote_name));
 }
+void emitter_read_bt_connect_info(void)
+{
+    u8 bt_mac[6]={0};
+    u16 id = VM_BLE_REMOTE_DB_00;
 
+    while (1) {
+        memset(bt_mac,0,6);
+        syscfg_read(id, bt_mac, 6);
+        // if (remote_n.crc == CRC16((u8 *)&remote_n.addr, sizeof(struct remote_name) - 2)) {
+        //     if (!memcmp(addr, remote_n.addr, 6)) {
+        //         return;
+        //     }
+        // } else {
+        //     break;
+        // }
+        printf("bt_connect_mac:%02x:%02x:%02x:%02x:%02x:%02x",bt_mac[0],bt_mac[1],bt_mac[2],bt_mac[3],bt_mac[4],bt_mac[5]);
+        id++;
+        if (id > (VM_BLE_REMOTE_DB_00 + 19)) {
+            id = (VM_BLE_REMOTE_DB_00 + 19);
+            break;
+        }
+    }
+}
 
 /*----------------------------------------------------------------------------*/
 /**@brief    蓝牙发射通过地址来获取设备名字
@@ -1608,6 +1635,7 @@ u8 *emitter_get_remote_name(u8 *addr)
 /*----------------------------------------------------------------------------*/
 void emitter_search_remote(void *cb_priv, int (*cb)(void *priv, u8 *mac, u8 *name, u8 *out_del, u8 *out_exit))
 {
+    printf("emitter_search_remote!!!!!!!!!!!!!!");
     struct remote_name remote_n;
     u16 id = CFG_REMOTE_DN_00;
     u8 del, exit;
index 8c965bc..d4aac83 100644 (file)
@@ -1191,7 +1191,7 @@ static int bredr_search_device_do(int priv)
     /* user_send_cmd_prepare(USER_CTRL_PAGE_CANCEL, 0, NULL); */
     /* ////关闭可发现可链接 */
     user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL);
-    /* user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL); */
+    user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL);
     bt_search_device();
 #endif /* #if TCFG_USER_EMITTER_ENABLE */
     return 0;