From 18d77e2aeec54f6e0943c87e744dbb0a94bea1b9 Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Tue, 19 May 2026 14:58:35 +0800 Subject: [PATCH] =?utf8?q?=E8=93=9D=E7=89=99=E7=BB=91=E5=AE=9A=E5=87=BD?= =?utf8?q?=E6=95=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../config/target_config/brandy/config.py | 2 +- .../ble_service/bleservice/bleEvent.c | 388 ++++++++++++------ 2 files changed, 265 insertions(+), 125 deletions(-) diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index f9a23f152..c1ceb6e3b 100644 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -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', diff --git a/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c b/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c index 49f8dc6c0..a830ea7e5 100644 --- a/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c +++ b/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c @@ -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]; -- 2.17.1