蓝牙绑定函数优化 3414/4 3414/head
authorluozheng <1732036298@qq.com>
Tue, 19 May 2026 06:58:35 +0000 (14:58 +0800)
committerluozheng <1732036298@qq.com>
Tue, 19 May 2026 06:58:35 +0000 (14:58 +0800)
code/sdk/build/config/target_config/brandy/config.py
code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c

index f9a23f1..c1ceb6e 100644 (file)
@@ -965,7 +965,7 @@ target = {
             'SUPPORT_CAT1_SERVICE',
             
             'CONFIG_EFUSE_READ_TO_RAM',
-             'CUSTOM_UTILS',
+            'CUSTOM_UTILS',
             # 'CUSTOM_HID_SERVICE',
             # 'WEARABLE_LOG_DEBUG',
             'SUPPORT_RC_CALIBRATION',
index 49f8dc6..a830ea7 100644 (file)
@@ -184,6 +184,7 @@ static void *ym_malloc(unsigned int size)
 static void  ym_free(void * p)
 {
     free(p);
+    p = NULL;
 }
 void malloc_test(void)
 {
@@ -994,82 +995,160 @@ void getPhoneNameLen(uint8_t *data,uint8_t *datalen,uint8_t *type)//获取手机
         *datalen = len;
     }
 }
-#define PHONE_NAME_MAX_LEN 50
+// 定义手机名称最大长度(建议外部宏定义,比如 64)
+#define PHONE_NAME_MAX_LEN 64
 static uint8_t *getPhoneName(uint8_t *data)//获取手机设备名称
 {
-    uint8_t *json = data;
+    // 1. 入参校验:防止空指针
+    if (data == NULL) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PhoneName] 入参data为空");
+        return NULL;
+    }
+
     uint8_t *str = NULL; 
-    cJSON* root = cJSON_Parse((const char *)json);
-    if(root != NULL)
-    {
-        cJSON* pn = cJSON_GetObjectItem(root, "pn");
-        if (pn && cJSON_IsString(pn)) {
-            uint8_t datalen = strlen(pn->valuestring)+1;  
-            if(datalen > PHONE_NAME_MAX_LEN) //
-            {
-                datalen = PHONE_NAME_MAX_LEN;
+    cJSON* root = cJSON_Parse((const char *)data);
+    if (root == NULL) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PhoneName] JSON解析失败");
+        return NULL;
+    }
+
+    cJSON* pn = cJSON_GetObjectItem(root, "pn");
+    // 2. 严格校验:pn存在 + 是字符串类型 + valuestring非空
+    if (pn != NULL && cJSON_IsString(pn) && pn->valuestring != NULL) {
+        // 3. 计算原始长度,避免空指针
+        size_t origin_len = strlen(pn->valuestring);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PhoneName] 原始设备名称: %s, 长度: %zu", pn->valuestring, origin_len);
+
+        // 4. 限制长度(不含\0),避免越界
+        size_t target_len = (origin_len > PHONE_NAME_MAX_LEN - 1) ? (PHONE_NAME_MAX_LEN - 1) : origin_len;
+        
+        // 5. 空名称校验:长度为0则跳过
+        if (target_len > 0) {
+            // 6. 分配内存(包含\0),用size_t避免溢出
+            str = ym_malloc(target_len + 1);
+            if (str != NULL) {
+                // 7. 安全拷贝:先清空,再拷贝有效字符,最后手动加\0
+                memset(str, 0, target_len + 1);
+                memcpy(str, pn->valuestring, target_len);
+                str[target_len] = '\0'; // 确保字符串结束符
+            } else {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PhoneName] 分配str内存失败");
             }
-            if(datalen - 1 > 0){
-                pn->valuestring[datalen]='\0';
-                str = ym_malloc(sizeof(char)*datalen);
-                if(str != NULL)
-                {
-                    memcpy(str,(uint8_t *)pn->valuestring,datalen+1);
-                }
-                if(savephonename)
-                {
-                    ym_free(savephonename);
-                    savephonename=NULL;
-                }
-                savephonename =  ym_malloc(sizeof(char)*datalen);
-                if(savephonename != NULL){
-                    memcpy(savephonename,(uint8_t *)pn->valuestring,datalen+1);
+
+            // 8. 处理全局变量savephonename,避免内存泄漏
+            if (savephonename != NULL) {
+                ym_free(savephonename);
+                savephonename = NULL;
+            }
+            savephonename = ym_malloc(target_len + 1);
+            if (savephonename != NULL) {
+                memset(savephonename, 0, target_len + 1);
+                memcpy(savephonename, pn->valuestring, target_len);
+                savephonename[target_len] = '\0';
+            } else {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PhoneName] 分配savephonename内存失败");
+                // 内存分配失败时,释放已分配的str,避免泄漏
+                if (str != NULL) {
+                    ym_free(str);
+                    str = NULL;
                 }
             }
-              WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"设备名称: %s\n", pn->valuestring);
+        } else {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PhoneName] 设备名称为空字符串");
         }
-        cJSON_Delete(root);
-    } 
-    if (str == NULL){
-        return NULL;
-    } 
-    else{
-        return str;
+    } else {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PhoneName] JSON中无pn字段/非字符串类型/值为NULL");
     }
-    
+
+    // 9. 释放cJSON资源,避免内存泄漏
+    cJSON_Delete(root);
+
+    // 10. 返回结果(冗余逻辑简化)
+    return str;
 }
-void getPhoneMac(uint8_t *data,uint8_t *phoneMac)//获取手机设备mac这个是手表上传给手机的mac地址
+
+/**
+ * @brief 获取手机设备MAC地址(手表上传给手机的MAC)
+ * @param data 输入:JSON格式的原始数据
+ * @param phoneMac 输出:解析后的6字节MAC地址(需提前分配6字节空间)
+ */
+void getPhoneMac(uint8_t *data, uint8_t *phoneMac)
 {
-    uint8_t *json = data;
-    uint8_t phone_tmp[6];
-    memset(phone_tmp,0,6);
-    cJSON* root = cJSON_Parse((const char *)json);
-    uint8_t datalen = 0;
-    uint8_t count = 5;
-    if(root != NULL)
-    {
-        cJSON* mac = cJSON_GetObjectItem(root, "mac");
-        if (mac && cJSON_IsArray(mac)) {
-              WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"MAC地址: ");
-            cJSON* macElement = NULL;
-            cJSON_ArrayForEach(macElement, mac) {
-                if (cJSON_IsNumber(macElement)) {
-                      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"%d", macElement->valueint);
-                    if (macElement->prev != NULL) {
-                        phone_tmp[count] = macElement->valueint;
-                        count--;
-                          WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,", ");
-                    }
+    // 1. 入参校验(新增:防止空指针)
+    if (data == NULL || phoneMac == NULL) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] 入参为空,data=%p, phoneMac=%p", data, phoneMac);
+        if (phoneMac != NULL) {
+            memset(phoneMac, 0, 6);
+        }
+        return;
+    }
+
+    uint8_t phone_tmp[6] = {0}; // 初始化清零,替代memset更简洁
+    cJSON* root = cJSON_Parse((const char *)data);
+    uint8_t count = 5; // 从数组最后一位(第6位)开始赋值
+    int mac_array_len = 0; // 新增:记录MAC数组长度
+
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] 原始JSON数据:%s", (const char *)data);
+
+    if (root != NULL) {
+        // 2. 获取MAC数组节点
+        cJSON* mac_node = cJSON_GetObjectItem(root, "mac");
+        if (mac_node == NULL) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] JSON中未找到\"mac\"字段");
+            memset(phoneMac, 0, 6);
+            cJSON_Delete(root);
+            return;
+        }
+
+        // 3. 校验是否为数组 + 数组长度是否为6
+        if (!cJSON_IsArray(mac_node)) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] \"mac\"字段不是数组类型");
+            memset(phoneMac, 0, 6);
+            cJSON_Delete(root);
+            return;
+        }
+
+        mac_array_len = cJSON_GetArraySize(mac_node);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] MAC数组长度:%d(期望6)", mac_array_len);
+        if (mac_array_len != 6) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] MAC数组长度异常,非6字节");
+            memset(phoneMac, 0, 6);
+            cJSON_Delete(root);
+            return;
+        }
+
+        // 4. 遍历数组解析MAC(修复:去掉prev判断,遍历所有6个元素)
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] 开始遍历MAC数组:");
+        cJSON* macElement = NULL;
+        cJSON_ArrayForEach(macElement, mac_node) {
+            if (cJSON_IsNumber(macElement)) {
+                // 边界校验:防止count越界
+                if (count >= 0 && count < 6) {
+                    phone_tmp[count] = (uint8_t)macElement->valueint;
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "  第%d位:%d (0x%02X)", 6-count, macElement->valueint, phone_tmp[count]);
+                    count--;
+                } else {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] count越界:%d,跳过当前元素", count);
                 }
+            } else {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] 数组元素非数字类型,值:%s", cJSON_Print(macElement));
             }
-              WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"\n");
         }
 
-        memcpy(phoneMac,phone_tmp,6);
+        // 5. 拷贝解析结果到输出参数
+        memcpy(phoneMac, phone_tmp, 6);
+
+        // 6. 打印完整MAC地址(关键:格式化输出,便于调试)
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] 完整MAC地址:%02X:%02X:%02X:%02X:%02X:%02X",
+                      phoneMac[0], phoneMac[1], phoneMac[2],
+                      phoneMac[3], phoneMac[4], phoneMac[5]);
+
+        // 7. 释放cJSON内存
         cJSON_Delete(root);
-    } 
-    else{
-        memset(phoneMac,0,6);
+    } else {
+        // JSON解析失败
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MAC解析] JSON解析失败,原始数据:%s", (const char *)data);
+        memset(phoneMac, 0, 6);
     }
 }
 
@@ -1336,10 +1415,18 @@ bool get_ctkd_flag(void)
 {
     return true;//ctkd_flag_ble;
 }
+
 void sendBindInfor(uint8_t *data)
 {
-    uint8_t value[19];
-    memset(value,0,19);
+    // 1. 入参校验(新增:防止空指针)
+    if (data == NULL) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 入参data为空,直接返回");
+        return;
+    }
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 开始处理绑定信息,入参data有效");
+
+    // 初始化基础指令缓冲区(保持原有)
+    uint8_t value[19] = {0};
     uint32_t tmp = 1;
     uint16_t tmp_fen= 1;
     value[0] =0x72;
@@ -1359,111 +1446,131 @@ void sendBindInfor(uint8_t *data)
     memset(mac_tmp,0,6);
     uint8_t phone_type;
     uint8_t bond = 1;//未与任何手机绑定过
-    errcode_t ret = 0;
+    errcode_t ret = 0;  // 统一定义,避免重复定义
     first_bond = 0;
     uint8_t save_mac[6];
     memset(save_mac,0,6);
     uint8_t MacType = 0;
     
-    GetwatchSaveMac(&save_mac,&MacType);//获取手表设备本地保存的mac地址和mac地址类型 
+    // 获取手表本地MAC - 添加错误日志
+    GetwatchSaveMac(&save_mac,&MacType);
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 手表本地保存MAC: %02X:%02X:%02X:%02X:%02X:%02X, MAC类型: %d",
+                   save_mac[0], save_mac[1], save_mac[2], save_mac[3], save_mac[4], save_mac[5], MacType);
+    
+    // 获取手机MAC - 添加错误日志
     getPhoneMac(data,&copare_mac);
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 手机下发MAC: %02X:%02X:%02X:%02X:%02X:%02X",
+                   copare_mac[0], copare_mac[1], copare_mac[2], copare_mac[3], copare_mac[4], copare_mac[5]);
 
-    if(save_mac[0] == 0 && save_mac[1] == 0 && save_mac[2] == 0 && save_mac[3] == 0 && save_mac[4] == 0 && save_mac[5] == 0)//只要手表本地存储没有mac地址就走连接流程重新绑定
+    // 场景1:手表本地无保存的MAC(首次绑定)
+    if(save_mac[0] == 0 && save_mac[1] == 0 && save_mac[2] == 0 && save_mac[3] == 0 && save_mac[4] == 0 && save_mac[5] == 0)
     {
         bond = 0x01;//手表未和任何手机绑定过
-        //未配过使能一键双联
-
-        //清除一次配对
-        //if(get_ble_pair())
-       
-        //
-        value[17] = bond;//
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 手表本地无绑定MAC,进入首次绑定流程,bond标识: %d", bond);
+        
+        // 构造绑定指令并发送
+        value[17] = bond;
         value[18] = Calculate_CRC(value,18);
         sendBleData(value,19);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 发送首次绑定指令,CRC: 0x%02X", value[18]);
 
         #ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION
         #ifdef SUPPORT_A5133_SERVICE_BLE_PAIR
         comfirmPaire(1);
         #else
+        // 获取手机名称长度和类型 - 添加错误日志
         devnamelen = 0;
-        getPhoneNameLen(data,&devnamelen,&phone_type);//获取手机下发的手机设备名称长度
+        getPhoneNameLen(data,&devnamelen,&phone_type);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 手机类型: %d(0=安卓,1=IOS),设备名称长度: %d", phone_type, devnamelen);
 
-        if(phone_type==0)
+        if(phone_type==0) // 安卓手机
         {
             unsigned int paired_devices_num=0;
-            bool  gap_get_paired =gap_get_paired_devices_num(&paired_devices_num);
-            if(gap_get_paired!=true ||paired_devices_num!=0 )
+            bool gap_get_paired_result = gap_get_paired_devices_num(&paired_devices_num); // 重命名避免混淆
+            if(!gap_get_paired_result || paired_devices_num!=0 )
             {
-                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"sendBindInfor!!!!!!!!!:gap_remove_all_pairs \r\n");
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"[Bind] 安卓手机:清除所有已配对设备,当前配对数: %d,获取状态: %d", paired_devices_num, gap_get_paired_result);
                 gap_remove_all_pairs();
             }
         }
-       
 
         if(devnamelen > 0 )
         {
-        
             devname = getPhoneName(data);
-              WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"devname!!!!!!!!!:%s devnamelen:%d",devname,devnamelen);
-            if (devname != NULL){
-                  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"phone devname is name!!!!!!!!!\r\n");
+            if (devname != NULL)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"[Bind] 手机名称: %s, 长度: %d", devname, devnamelen);
                 uint8_t buf[devnamelen+2]; 
                 memset(buf,0,devnamelen+2);
                 buf[0] = DEVICEBIND ;
-                buf[1] = devnamelen;//设备名称长度 0不显示
+                buf[1] = devnamelen;
                 memcpy(buf+2,devname,devnamelen);
 
-                if(phone_type==1)
+                if(phone_type==1) // IOS手机
                 {
-                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"IOS\r\n");
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] 检测到IOS手机,开启配对模式");
                     ble_set_pair(1);
                     
-                    errcode_t ret = gap_ble_set_ctkd_enable(true);
-                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "iPhone gap_ble_set_ctkd_enable ret = %x", ret);
+                    ret = gap_ble_set_ctkd_enable(true);
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] IOS - gap_ble_set_ctkd_enable返回值: 0x%X", ret);
+                    if(ret != ERRCODE_SUCC) {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] IOS - CTKD使能失败!");
+                    }
                     set_ctkd_flag(true);
                 }
-                else
+                else // 安卓手机
                 {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] 检测到安卓手机,关闭配对模式");
                     ble_set_pair(0);
-               
-                    errcode_t ret = gap_ble_set_ctkd_enable(true);
-                    
+                    ret = gap_ble_set_ctkd_enable(true);
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] 安卓 - gap_ble_set_ctkd_enable返回值: 0x%X", ret);
+                    if(ret != ERRCODE_SUCC) {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 安卓 - CTKD使能失败!");
+                    }
                 }
                 
+                // 发布绑定事件 - 添加错误日志
                 CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)buf,devnamelen+2);
-                //  comfirmPaire(1);
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] 发布设备绑定事件,数据长度: %d", devnamelen+2);
+                
+                // 释放内存 - 增加空指针校验
                 if(devname)
                 {   
                     ym_free(devname);
                     devname = NULL;
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[Bind] 已释放手机名称内存");
                 }
-            }else{
-                  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"phone devname is no name11111!!!!!!!!!:");
+            }
+            else
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 获取手机名称失败!devname为空");
                 uint8_t buf[2]; 
                 memset(buf,0,2);
                 buf[0] = DEVICEBIND;
                 buf[1] = 0;
                 CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,buf,2);
-                //  comfirmPaire(1);
-                
             }
         }
-        else{
+        else
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 手机名称长度为0,无法获取设备名称");
             uint8_t buf[2]; 
             memset(buf,0,2);
             buf[0] = DEVICEBIND;
             buf[1] = 0 ;
-              WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"phone devname is no name!!!!!!!!!:");
             CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,buf,2);
-            //  comfirmPaire(1);
         }
          #endif
         #endif
 
         return;
         
-    }else
+    }
+    else // 场景2:手表本地有保存的MAC
     {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 手表本地有绑定MAC,进入MAC比对流程");
+        
+        // 子场景2.1:手机下发MAC为空
         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 后系统仍配对) */
@@ -1496,76 +1603,105 @@ void sendBindInfor(uint8_t *data)
             }
             bond = 0x03;
         } 
-        else {
+        else 
+        {
             int result = memcmp(copare_mac,save_mac,6);
-            if(result == 0)
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] MAC比对结果: %d(0=一致,非0=不一致)", result);
+            
+            if(result == 0) // MAC一致(同一手机)
             {
-               
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 手机MAC与手表保存MAC一致,判定为同一手机绑定");
+                
                 if(get_ble_pair())
                 {
                     set_ctkd_flag(true);
-                    errcode_t ret = gap_ble_set_ctkd_enable(true);
-
+                    ret = gap_ble_set_ctkd_enable(true);
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] 同一手机-开启CTKD返回值: 0x%X", ret);
+                    if(ret != ERRCODE_SUCC) {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 同一手机-CTKD使能失败!");
+                    }
                 }
                 else
                 {
-                    errcode_t ret = gap_ble_set_ctkd_enable(true);
+                    ret = gap_ble_set_ctkd_enable(true);
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] 同一手机-关闭配对模式-CTKD返回值: 0x%X", ret);
+                    if(ret != ERRCODE_SUCC) {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 同一手机-CTKD使能失败!");
+                    }
                 }
 
-    
                 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);
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[Bind] 尝试配对远程设备,地址: %02X:%02X:%02X:%02X:%02X:%02X",
+                                   addr.addr[0], addr.addr[1], addr.addr[2], addr.addr[3], addr.addr[4], addr.addr[5]);
+                    
+                    ret = gap_ble_pair_remote_device(&addr);
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] 配对远程设备返回值: 0x%X", ret);
+                    if(ret != ERRCODE_SUCC) {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 配对远程设备失败!错误码: 0x%X", ret);
                     }
                 }
-     
+        
                 bond = 0x02;//手表与该手机绑定过
-                value[17] = bond;//
+                value[17] = bond;
                 value[18] = Calculate_CRC(value,18);
                 sendBleData(value,19);
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[Bind] 发送同一手机绑定指令,CRC: 0x%02X", value[18]);
                 return;
-            }else{
+            }
+            else // MAC不一致(其他手机)
+            {
                 bond = 0x03;//手表与其他手机绑定过
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 手机MAC与手表保存MAC不一致,判定为其他手机绑定过,bond标识: %d", bond);
             }
         }
     }
-      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"bond flag:%d first_bond:%d\r\n",bond,first_bond);
+  
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"[Bind] 最终bond标识: %d,first_bond: %d", bond, first_bond);
    
+    // 场景3:bond=0x03(其他手机绑定)- 发布解绑事件
     if(bond == 0x03)
     {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 进入其他手机绑定流程,发布解绑事件");
         devnamelen = 0;
-        GetwatchSaveNameLen(&devnamelen);//获取手表设备保存手机的设备名称长度
+        GetwatchSaveNameLen(&devnamelen);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 手表保存的手机名称长度: %d", devnamelen);
+        
         if(devnamelen > 0)
         {   
             devname = GetwatchSaveName();
-            if (devname != NULL){
+            if (devname != NULL)
+            {
                 uint8_t buf[devnamelen+2]; 
                 memset(buf,0,devnamelen+2);
                 buf[0] = DEVICEUNBIND ;
                 buf[1] = devnamelen;
                 memcpy(buf+2,devname,devnamelen);
-                  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"devname:is no null!!!!!%s\r\n",devname);
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] 发布设备解绑事件,解绑设备名称: %s,长度: %d", devname, devnamelen+2);
                 CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)buf,devnamelen+2);
+                
                 if(devname)
                 {
                     ym_free(devname);
                     devname = NULL;
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[Bind] 已释放解绑设备名称内存");
                 }
-            }else{
+            }
+            else
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 获取手表保存的手机名称失败!devname为空");
                 uint8_t buf[2]; 
                 memset(buf,0,2);
                 buf[0] = DEVICEUNBIND;
                 buf[1] = 0;
-                  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"devname:is  null!!!!!");
                 CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,buf,2);
             }
-        }else{
+        }
+        else
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误] 手表保存的手机名称长度为0,发布空解绑事件");
             uint8_t buf[2]; 
             memset(buf,0,2);
             buf[0] = DEVICEUNBIND;
@@ -1573,10 +1709,14 @@ void sendBindInfor(uint8_t *data)
             CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,buf,2);
         }
     }
-    value[17] = bond;//
+    
+    // 发送最终绑定指令
+    value[17] = bond;
     value[18] = Calculate_CRC(value,18);
     sendBleData(value,19);
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind][错误/关键] 发送最终绑定指令,bond标识: %d,CRC: 0x%02X", bond, value[18]);
 }
+
 void SetPhoneInfo(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取手机信息
 {
     uint8_t value[19];