static void ym_free(void * p)
{
free(p);
+ p = NULL;
}
void malloc_test(void)
{
*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);
}
}
{
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;
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 后系统仍配对) */
}
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;
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];