解决app删除,用一个手机连接手表,手表弹解绑弹窗bug 3414/1
authorluozheng <1732036298@qq.com>
Fri, 15 May 2026 09:14:15 +0000 (17:14 +0800)
committerluozheng <1732036298@qq.com>
Fri, 15 May 2026 09:14:15 +0000 (17:14 +0800)
code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c

index b56dcd0..49f8dc6 100644 (file)
@@ -1464,11 +1464,39 @@ void sendBindInfor(uint8_t *data)
         
     }else
     {
-        if(copare_mac[0] == 0 && copare_mac[1] == 0 && copare_mac[2] == 0 && copare_mac[3] == 0 && copare_mac[4] == 0 && copare_mac[5] == 0) 
-        {
-            bond = 0x03;//手表和其他手机绑定过
-           
-        }else{//如果手机有保存mac app下发是空就提示和其他手机绑定过界面不在发起配对
+        if(copare_mac[0] == 0 && copare_mac[1] == 0 && copare_mac[2] == 0 && copare_mac[3] == 0 && copare_mac[4] == 0 && copare_mac[5] == 0)
+        {
+            /* App 未带 MAC:用当前 BLE 连接对端地址与本地已保存 MAC 比对(如重装 App 后系统仍配对) */
+            bd_addr_t peer = {0};
+            get_phone_addr(&peer, g_ble_conn_id);
+            bool peer_addr_valid = (peer.addr[0] | peer.addr[1] | peer.addr[2] | peer.addr[3] | peer.addr[4] |
+                peer.addr[5]) != 0;
+            if (peer_addr_valid && memcmp(peer.addr, save_mac, BD_ADDR_LEN) == 0) {
+                if (get_ble_pair()) {
+                    set_ctkd_flag(true);
+                    errcode_t ret = gap_ble_set_ctkd_enable(true);
+                    (void)ret;
+                } else {
+                    errcode_t ret = gap_ble_set_ctkd_enable(true);
+                    (void)ret;
+                }
+                if (get_ble_pair()) {
+                    bd_addr_t addr = {0};
+                    get_phone_addr(&addr, g_ble_conn_id);
+                    errcode_t code = gap_ble_pair_remote_device(&addr);
+                    if (code != ERRCODE_SUCC) {
+                        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gap_ble_pair_remote_device fail %X\r\n", code);
+                    }
+                }
+                bond = 0x02;
+                value[17] = bond;
+                value[18] = Calculate_CRC(value, 18);
+                sendBleData(value, 19);
+                return;
+            }
+            bond = 0x03;
+        } 
+        else {
             int result = memcmp(copare_mac,save_mac,6);
             if(result == 0)
             {