多蓝牙连接适配问题修改 1053/4
authorhcj <1224667075@qq.com>
Sun, 29 Sep 2024 09:11:19 +0000 (17:11 +0800)
committerhcj <1224667075@qq.com>
Sun, 29 Sep 2024 09:11:19 +0000 (17:11 +0800)
code/sdk/application/wearable/service/ble_service/bleservice/bleANCS.c
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.h

index 763a23a..7e7209f 100644 (file)
@@ -289,7 +289,7 @@ static void ble_ancs_client_notify_source_cbk(uint8_t client_id, uint16_t conn_i
         uint32_t creationTime=0;
         int ret = uapi_get_timestampe_ss(&creationTime);
         //当前时间戳减去订阅通知时间戳3s以上的通知,才要求数据(过滤ios将所有未查看消息发过来)
-        if(creationTime-subscribe_notify_creationTime>5)
+        //if(creationTime-subscribe_notify_creationTime>5)
         ble_ancs_client_at_cmd_get_notify_att(conn_id, notify_src->notification_uid);
        // 
 
index 71abb2a..4667996 100644 (file)
@@ -588,7 +588,10 @@ errcode_t UnbindSucessCmd(uint8_t flag)//发送解绑指令,解绑界面调用
     sendok =  sendBleData(value,19);\r
     msleep(50);//增加延时,确保可以成功发送解除绑定\r
 \r
-    bool ret = bt_is_acl_connected(&phone_addr);\r
+    bd_addr_t addr={0};\r
+    get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+    bool ret = bt_is_acl_connected(&addr);\r
     if(flag == 1)\r
     {   \r
         if(0!=remove(PHONE_WATCH_CONFIG_PATH))\r
@@ -605,7 +608,10 @@ errcode_t UnbindSucessCmd(uint8_t flag)//发送解绑指令,解绑界面调用
 }\r
 void getDeviceState(void)//获取设备状态\r
 {\r
-    bool ret = bt_is_acl_connected(&phone_addr);\r
+     bd_addr_t addr={0};\r
+    get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+    bool ret = bt_is_acl_connected(&addr);\r
     printf("getDeviceState ret:%d\r\n",ret);\r
 }\r
 \r
@@ -663,12 +669,13 @@ void comfirmPaire(uint8_t flag)
     if(flag == 1)\r
     {\r
         first_bond = 1;\r
-        // printf("gap_ble_pair_remote_device 333333333 %x-%x-%x-%x-%x-%x\r\n",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]);\r
-        // 一键双连使能(依赖安全连接参数配置)\r
-        \r
+\r
         if(get_ble_pair())\r
         {\r
-            errcode_t code = gap_ble_pair_remote_device(&phone_addr);\r
+            bd_addr_t addr={0};\r
+            get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+            errcode_t code = gap_ble_pair_remote_device(&addr);\r
             if(code!=ERRCODE_SUCC)\r
             {\r
                 printf("gap_ble_pair_remote_device fail %X\r\n",code);\r
@@ -678,7 +685,10 @@ void comfirmPaire(uint8_t flag)
     }else{\r
         first_bond = 0;\r
         errcode_t ret = 0;\r
-        ret = gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
+         bd_addr_t addr={0};\r
+            get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+        ret = gap_ble_disconnect_remote_device(&addr);//与固定的mac设置地址进行断开连接\r
         // printf("gap_ble_disconnect_remote_device %x\r\n",ret);\r
         ret = gap_ble_remove_all_pairs(); \r
         bool ret_ok = gap_remove_all_pairs();\r
@@ -970,10 +980,15 @@ void cleanUnbindInfor(uint8_t flag)//和旧手机解绑清除配对信息
     uint8_t mac_data[6];\r
     memset(mac_data,0,6);\r
     GetwatchSaveMac(&mac_data,&MacType);\r
-    errcode_t ret1 = gap_disconnect_remote_device(&disconect_addr);\r
-    gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
+    \r
+    bd_addr_t addr={0};\r
+    get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+    errcode_t ret1 = gap_disconnect_remote_device(&addr);\r
+    gap_ble_disconnect_remote_device(&addr);//与固定的mac设置地址进行断开连接\r
+\r
     if (flag == 1){\r
-        errcode_t ret= gap_ble_remove_pair(&disconect_addr);//清除配对信息\r
+        errcode_t ret= gap_ble_remove_pair(&addr);//清除配对信息\r
         \r
         gap_ble_remove_all_pairs(); \r
         bool ret_flag = gap_remove_all_pairs();\r
@@ -1133,19 +1148,19 @@ void sendBindInfor(uint8_t *data)
                     errcode_t ret = gap_ble_set_ctkd_enable(true);\r
                 }\r
 \r
-                printf("phone_addr:%02x-%02x-%02x-%02x-%02x-%02x type:%d ",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],\r
-                phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5],phone_addr.type);\r
-\r
+    \r
                 if(get_ble_pair())\r
                 {\r
-                    errcode_t code = gap_ble_pair_remote_device(&phone_addr);\r
+                    bd_addr_t addr={0};\r
+                    get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+                    errcode_t code = gap_ble_pair_remote_device(&addr);\r
                     if(code!=ERRCODE_SUCC)\r
                     {\r
                         printf("gap_ble_pair_remote_device fail %X\r\n",code);\r
                     }\r
                 }\r
-                // ret = gap_ble_pair_remote_device(&phone_addr);\r
-                // printf("gap_ble_pair_remote_device ret:%x \r\n",ret);\r
+     \r
                 bond = 0x02;//手表与该手机绑定过\r
                 value[17] = bond;//\r
                 value[18] = Calculate_CRC(value,18);\r
@@ -1160,7 +1175,6 @@ void sendBindInfor(uint8_t *data)
    \r
     if(bond == 0x03)\r
     {\r
-        // gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
         devnamelen = 0;\r
         GetwatchSaveNameLen(&devnamelen);//获取手表设备保存手机的设备名称长度\r
         if(devnamelen > 0)\r
index c274c01..496a8a8 100644 (file)
@@ -106,8 +106,14 @@ static bool AdverFlag = false;
 static uint8_t scan_data[BLE_SCAN_DATA_LENTH] = {0};\r
 \r
 uint8_t phone_mac_data[6]={0};\r
-bd_addr_t phone_addr;//发起配对地址反序\r
+\r
+#define ble_add_max_num 10\r
+static bd_addr_t phone_addr[ble_add_max_num];\r
+static uint16_t ble_conn_id[ble_add_max_num];\r
+\r
+\r
 bd_addr_t disconect_addr;//断开连接地址不需要反序\r
+\r
 uint8_t Bleconnect = 0;//蓝牙默认是断开 0 1 为连接\r
 uint8_t devpair_state = 0;//设备配对状态 0 未配对 1已配对成功\r
 uint8_t bond_flag = 0;//绑定标识\r
@@ -128,16 +134,50 @@ static uint16_t Is_value_handle[handle_max_len]={0};
 static uint32_t handle_num=0;\r
 \r
 \r
-void get_phone_addr(bd_addr_t *addr)\r
+void get_phone_addr(bd_addr_t *addr,uint16_t conn_id)\r
 {\r
-    if (addr!=NULL)    memcpy(addr,&phone_addr,sizeof(bd_addr_t));\r
+    if (addr==NULL)\r
+    return;\r
+\r
+    for(int i=0;i<ble_add_max_num;i++)\r
+    {\r
+        if(conn_id==ble_conn_id[i])\r
+        {\r
+            memcpy(addr,&phone_addr[i],sizeof(bd_addr_t));\r
+        }\r
+    }\r
+    \r
 }\r
-static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址\r
+static uint16_t add_num=0;\r
+\r
+static void set_phone_info(bd_addr_t *addr,uint16_t conn_id)//保存手机信息 包含手机mac地址\r
 {\r
-    memcpy(&phone_addr,addr,sizeof(bd_addr_t));\r
-    memcpy(&disconect_addr,addr,sizeof(bd_addr_t));\r
+    memcpy(&phone_addr[add_num],addr,sizeof(bd_addr_t));\r
+    ble_conn_id[add_num]=conn_id;\r
+\r
+    add_num++;\r
+    if(add_num==ble_add_max_num)\r
+    {\r
+        add_num=0;\r
+    }\r
+}\r
+\r
+\r
+static void clean_phone_info(uint16_t conn_id)//保存手机信息 包含手机mac地址\r
+{\r
+   for(int i=0;i<ble_add_max_num;i++)\r
+   {\r
+        if(conn_id==ble_conn_id[i])\r
+        {\r
+            bd_addr_t addr={0};\r
+            memcpy(&phone_addr[i],&addr,sizeof(bd_addr_t));\r
+            ble_conn_id[i]=0;\r
+            return;\r
+        }\r
+   }\r
 }\r
 \r
+\r
 enum{\r
     BLE_CHARACTERISTIC_RECV_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_NOTIFY|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP|GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_READ,\r
     BLE_CHARACTERISTIC_SNED_SHORT_ID_PROPERTIES =  GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
@@ -343,6 +383,7 @@ void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_bl
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "其他连接断开,不做多余处理 \r\n");\r
         }\r
+        clean_phone_info(conn_id);\r
      \r
     }   \r
     else \r
@@ -359,9 +400,10 @@ void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_bl
         {\r
             int ret =svr_ble_adv_stop();\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"%x",ret);\r
-            set_phone_info(addr);\r
+            //第一个连接\r
+            \r
         }\r
-\r
+        set_phone_info(addr,conn_id);\r
        \r
         ble_connect_ok();\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x \n",\r
@@ -1255,14 +1297,8 @@ static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t m
 /*******************  gap_ble  ************************************/\r
 void svr_gap_ble_auth_complete_callback(uint16_t conn_id, const bd_addr_t *addr, errcode_t status,ble_auth_info_evt_t* evt)\r
 {\r
-    //sendParieSuccess(1,&phone_addr); //????\r
     sendParieSuccess(1,addr);\r
     uapi_set_br_address(addr);\r
-\r
-     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_gap_ble_auth_complete_callback %x %x %x %x %x %x\r\n",\r
-     phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_gap_ble_auth_complete_callback %x %x %x %x %x %x\r\n",\r
-    addr->addr[0],addr->addr[1],addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5]);\r
 }\r
 \r
 \r
@@ -1394,7 +1430,7 @@ void ble_unregist_server(void)
 \r
 void svr_ble_bluetooth_init(void)\r
 {\r
-    memset(&phone_addr,0,sizeof(bd_addr_t));\r
+    // memset(&phone_addr,0,sizeof(bd_addr_t));\r
     \r
     srv_ble_server_register_gap_ble_callbacks();\r
     srv_ble_server_register_gatt_callbacks();\r
@@ -1424,8 +1460,11 @@ void custom_ble_service_stop(void)
 {\r
     AdverFlag = false;\r
     errcode_t ret = 0;\r
+    bd_addr_t addr={0};\r
+    get_phone_addr(&addr,g_ble_conn_id);\r
+\r
     if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开\r
-        ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接\r
+        ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&addr);//与固定的mac设置地址进行断开连接\r
     }\r
 \r
     // 一键双连去使能\r
@@ -1439,7 +1478,10 @@ void custom_ble_service_stop(void)
 void uapi_ble_disconnect_device()\r
 {\r
     errcode_t ret = 0;\r
-    ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接\r
+    bd_addr_t addr={0};\r
+    get_phone_addr(&addr,g_ble_conn_id);\r
+\r
+    ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&addr);//与固定的mac设置地址进行断开连接\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_disconnect_remote_device ret = %X", ret);\r
 \r
 }\r
index ff5cb03..0f16548 100644 (file)
@@ -11,7 +11,6 @@ extern "C" {
 #include "errcode.h"
 extern uint16_t g_ble_conn_id;
 extern uint16_t g_ble_server_id;
-extern bd_addr_t phone_addr;
 extern bd_addr_t disconect_addr;//断开连接地址不需要反序
 extern uint8_t bond_flag;
 extern uint8_t phone_mac_data[6];
@@ -36,7 +35,7 @@ extern uint16_t g_ble_server_handle;
 void svr_ble_bluetooth_init(void);//蓝牙服务初始化
 void custom_ble_service_stop(void);//主动关闭蓝牙
 void custom_ble_service_start(void);//主动开启蓝牙
-void get_phone_addr(bd_addr_t *addr);
+void get_phone_addr(bd_addr_t *addr,uint16_t conn_id);
 
 void svr_ble_adv_start_param(void);//开始蓝牙广播