增加蓝牙耳机连接状态上报到CAT1
authordxy <1731678236qq.com>
Tue, 19 Aug 2025 08:15:24 +0000 (16:15 +0800)
committerdxy <1731678236qq.com>
Tue, 19 Aug 2025 08:15:24 +0000 (16:15 +0800)
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/common/third_party_profile/jieli/trans_data_demo/le_trans_data.c
2.code/1.sdk/apps/watch/task_manager/bt/bt.c
2.code/1.sdk/apps/watch/task_manager/bt/bt_event_fun.c

index c635780..16db19f 100644 (file)
@@ -20,6 +20,7 @@ static char *uart_data  =NULL;
 static char *uart_dma_buf =NULL;
 static int uart_timer_id = 0;
 static int uart_timer_count = 0;
+u8 is_need_send_bt_state = 0;
 static void uart_timer_cb(void *p);
 #define uart_read_buf_len 1024*4
 
@@ -383,6 +384,7 @@ int uart_send_AI_key_even(void)
     //{"event":"AI_KEY_PRESS"}
     cJSON *root = cJSON_CreateObject();
     if (root == NULL) {
+       
         printf( "Failed to create JSON object\n");
         return -1;
     }
@@ -453,6 +455,7 @@ int uart_send_single_bt_mac(u8 *name,u8 *mac,u8 connect)
     if (data == NULL) {
         printf( "Failed to create JSON object\n");
         cJSON_Delete(data);
+        cJSON_Delete(root);
         return -1;
         
     }
@@ -499,6 +502,7 @@ void send_bt_connect_state(void){
     if (data == NULL) {
         printf( "Failed to create JSON object\n");
         cJSON_Delete(data);
+        cJSON_Delete(root);
         return;
     }
     char mac_tmp[18]={0};
@@ -704,6 +708,78 @@ void get_ble_switch_imei_timer_init(void)
     }
         
 }
+extern u8 maddr[6];
+int uart_send_bt_state(u8 bt_state) //蓝牙向4G发送蓝牙耳机的状态
+{
+    printf("uart_send_bt_state:%d %d\n",bt_state,is_need_send_bt_state);
+    if(!is_need_send_bt_state)
+    {
+        return 0;
+    }
+    is_need_send_bt_state=0;
+    cJSON *root = cJSON_CreateObject();
+    if (root == NULL) {
+        printf( " uart_send_get_ble_switch Failed to create JSON object\n");
+        return -1;
+    }
+    // 添加字符串字段 "event"
+    cJSON_AddStringToObject(root, "event", "post_bt_connect_rest");
+    cJSON *data = cJSON_CreateObject();
+    if (data == NULL) {
+        printf( "Failed to create JSON object\n");
+        cJSON_Delete(data);
+        cJSON_Delete(root);
+        return -1;
+    }
+    // {
+    //     "cmd":"post_bt_connect_rest",
+    //     "ts":1738283829,
+    //     "msg":"上报蓝牙连接结果",
+    //     "data":{
+    //         "mac":"mac地址",
+    //         "state":"connected/disconnected/connecting/failed"
+    //     }
+    // // }
+    // BT_CONN_STATE_INIT=0,
+    // BT_CONN_STATE_CONNECTING = 1,
+    // BT_CONN_STATE_CONNECTED = 2,
+    // BT_CONN_STATE_ERROR = 3,
+    // BT_CONN_STATE_NOT_FOUND = 4
+    char s_mac[18];
+    memset(s_mac,0,18);
+    sprintf(s_mac,"%02x:%02x:%02x:%02x:%02x:%02x",maddr[0],maddr[1],maddr[2],maddr[3],maddr[4],maddr[5]);
+    // cJSON_AddStringToObject(data, "name", (char *)userremote_name);
+    cJSON_AddStringToObject(data, "mac", (char *)s_mac);
+    if(bt_state == 1){
+        cJSON_AddStringToObject(data, "state", "connecting");
+    }
+    else if (bt_state == 2)
+    {
+        cJSON_AddStringToObject(data, "state", "connected");
+    }else if(bt_state == 3){
+        cJSON_AddStringToObject(data, "state", "failed");
+    }else if (bt_state == 0)
+    {
+        cJSON_AddStringToObject(data, "state", "disconnected");
+    }
+    
+    cJSON_AddItemToObject(root, "data", data);
+    // 将JSON对象转换为字符串
+    char *json_string = cJSON_Print(root);
+    if (json_string == NULL) {
+        printf( "uart_send_get_ble_switch Failed to print JSON\n");
+        cJSON_Delete(root);
+        return -1;
+    }
+    // 打印JSON字符串
+    printf("uart_send_bt_state JSON数据: %s\n", json_string);
+    bk_uart_send_smg(BK_UART_WRITE_DATA, json_string,strlen(json_string));
+    // uart_send_blocking(ut, json_string, strlen(json_string), 20);
+    // 释放内存
+    cJSON_free(json_string);
+    cJSON_Delete(root);
+    return 0;
+}
 int uart_send_error(void)
 {
     cJSON *root = cJSON_CreateObject();
@@ -945,7 +1021,11 @@ 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,0);//开始扫描
+                // is_need_send_bt_state = 1;
+                // if(bt_connect==2){ //已连接
+                //     bt_connect
+                // }
+                connect_bt(json_string,0);//开始连接蓝牙耳机设备
                 
             }
         }
@@ -959,7 +1039,7 @@ 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);//开始扫描
+                set_adv_imei(data->valuestring);//设置广播imei号
                 
             }
         }
index aba5770..99b8ed5 100644 (file)
@@ -20,4 +20,5 @@ int uart_send_bt_list(u8 *data);
 int uart_send_single_bt_mac(u8 *name,u8 *mac,u8 connect);
 void get_ble_switch_imei_timer_init(void);
 void UART_event(void);
+int uart_send_bt_state(u8 bt_state);
 #endif
index a1f76f5..13701ce 100644 (file)
@@ -227,9 +227,7 @@ void start_scan_bt(void){
     if (scan_state){
         return;
     }
-    if (bt_connect) { //搜索前断开已连接得蓝牙耳机
-        user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
-    }
+    user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); //
     scan_state = 1;
     bt_emitter_start_search_device(); //开始扫描
 }
@@ -382,6 +380,8 @@ static int str_to_u8_buf(const char *str, u8 *buf) {
 }
 extern u8 bt_connect;
 extern u8 bt_conn_addr[6];//蓝牙连接成功的地址
+u8 maddr[6]={0}; // 目标数组
+extern u8 is_need_send_bt_state;
 void connect_bt(char *json_data,u8 conect){
     //  json_data = \
     //     {
@@ -406,7 +406,7 @@ void connect_bt(char *json_data,u8 conect){
         if(root == NULL){
             return;
         }   
-        u8 maddr[6]; // 目标数组
+        
         u8 reversed_mac[6]; // 反序数组
         memset(reversed_mac,0,6);
         memset(maddr,0,6);
@@ -418,18 +418,25 @@ void connect_bt(char *json_data,u8 conect){
             printf("转换失败,错误码:%d\n", ret);
             return;
         }
+
         for(u8 i=0;i<6;i++)//需要反序
         {
             reversed_mac[i]=maddr[5-i];
         }
         printf("bt_connect:%d bt_conn_addr %x %x %x %x %x %x\r\n",bt_connect,bt_conn_addr[0],bt_conn_addr[1],bt_conn_addr[2],bt_conn_addr[3],bt_conn_addr[4],bt_conn_addr[5]);
         printf("maddr %x %x %x %x %x %x\r\n",maddr[0],maddr[1],maddr[2],maddr[3],maddr[4],maddr[5]);
-        if(bt_connect == 1) //已经连上了看看连接的地址是否一致
+        is_need_send_bt_state=1;
+        if(bt_connect == 2) //已经连上了看看连接的地址是否一致
         {
             if (memcmp(bt_conn_addr, reversed_mac, 6) != 0){//如果连上了并且和小程序下发得mac地址是一致不需要重新连接
                 user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); //
                 emitter_bt_connect(reversed_mac);//连接地址
             }
+            else{
+                
+                uart_send_bt_state(bt_connect);
+                is_need_send_bt_state=0;
+            }
         }else{
             emitter_bt_connect(reversed_mac);//连接地址
         }  
@@ -1291,7 +1298,7 @@ static int make_set_rsp_data(void)
         printf("***rsp_data overflow!!!!!!\n");
         return -1;
     }
-    
+
     printf("rsp_data(%d):", offset);
     log_info_hexdump(buf, offset);
     scan_rsp_data_len = offset;
index 0263e06..89718c0 100644 (file)
@@ -828,8 +828,10 @@ int bt_update_event_handler(struct sys_event *event)
     return ret;
 }
 
-
+#include "ble_protocol.h"
 extern u8 bt_connect;
+extern char userremote_name[32]; //当前连接或者断开的蓝牙名称
+extern u8 bt_conn_addr[6];//蓝牙连接成功的地址
 /*----------------------------------------------------------------------------*/
 /**@brief    蓝牙模式协议栈事件
    @param    bt:事件
@@ -883,7 +885,9 @@ static int bt_hci_event_handler(struct bt_event *bt)
         if (bt->value == ERROR_CODE_PAIRING_NOT_ALLOWED) { //用于判断华为手表的断开情况
             UI_MSG_POST("bt_status:hci_value=%4", bt->value);
         }
+        uart_send_single_bt_mac(userremote_name,bt_conn_addr,0);
         bt_hci_event_disconnect(bt) ;
+        
         clock_remove_set(BT_CONN_CLK);
         break;
     case BTSTACK_EVENT_HCI_CONNECTIONS_DELETE:
@@ -912,6 +916,8 @@ static int bt_hci_event_handler(struct bt_event *bt)
             break;
         case ERROR_CODE_PAGE_TIMEOUT:
             log_info(" ERROR_CODE_PAGE_TIMEOUT \n");
+            bt_connect=BT_CONN_STATE_ERROR;//连接超时没有连上设备
+            uart_send_bt_state(bt_connect);
             bt_connect=0;
             bt_hci_event_page_timeout(bt);
             break;
index cfa0b89..ad856ff 100644 (file)
@@ -40,7 +40,7 @@
 #include "ui/ui_api.h"
 #include "ui_manage.h"
 #include "ui/ui_style.h"
-
+#include "bk_drive/bk_uart.h"
 #include "key_event_deal.h"
 #include "clock_cfg.h"
 #include "gSensor/gSensor_manage.h"
@@ -1258,6 +1258,7 @@ static u8 mac_addr[6]={0};
 void bt_status_connect(struct bt_event *bt)
 {
     bt_connect = BT_CONN_STATE_CONNECTED;
+    uart_send_bt_state(bt_connect);
     // connect_bt_cb(bt_connect);
     sys_auto_sniff_controle(1, NULL);
     sys_auto_shut_down_disable();
@@ -1450,7 +1451,8 @@ void bt_status_connect_background(struct bt_event *bt)
 void bt_status_disconnect(struct bt_event *bt)
 {
     bt_connect = BT_CONN_STATE_INIT; 
-    uart_send_single_bt_mac(userremote_name,bt_conn_addr,0);
+    uart_send_bt_state(bt_connect);
+    
     sys_auto_sniff_controle(0, NULL);
     __this->call_flag = 0;
     /* log_info("BT_STATUS_DISCONNECT\n"); */