}\r
memcpy(datalen,&len,1);\r
cJSON_Delete(root);\r
- } \r
+ } else{\r
+ len = 0;\r
+\r
+ memcpy(datalen,&len,1);\r
+ }\r
}\r
\r
static char *getPhoneName(uint8_t *crcnum)//获取手机设备名称\r
savephonename = malloc(sizeof(char)*datalen);\r
strcpy(str,pn->valuestring);\r
strcpy(savephonename,pn->valuestring);\r
- free(str);\r
printf("str:%s savephonename:%s\n",str,savephonename);\r
}\r
printf("设备名称: %s\n", pn->valuestring);\r
}\r
cJSON_Delete(root);\r
} \r
- return str;\r
+ if (str == NULL){\r
+ return NULL;\r
+ } \r
+ else{\r
+ return str;\r
+ }\r
+ \r
}\r
void getPhoneMac(uint8_t *crcnum,uint8_t *phoneMac)//获取手机设备mac这个是手表上传给手机的mac地址\r
{\r
}\r
printf("\n");\r
}\r
- if(phone_tmp[0] == 0 && phone_tmp[1] == 0 && phone_tmp[2] == 0 && phone_tmp[3] == 0 && phone_tmp[4] == 0 && phone_tmp[5] == 0){\r
- memcpy(phoneMac,0,6);\r
- }else\r
- {\r
- memcpy(phoneMac,phone_tmp,6);\r
- \r
- }\r
+\r
+ memcpy(phoneMac,phone_tmp,6);\r
cJSON_Delete(root);\r
} \r
+ else{\r
+ memcpy(phoneMac,phone_tmp,6);\r
+ }\r
}\r
\r
void GetwatchSaveMac(uint8_t *mac,uint8_t *mactype)//获取手表本地保存的mac地址和mac地址类型 分共有和私有的\r
memcpy(mac,mac_tmp,6);\r
}\r
cJSON_Delete(root);\r
+ }else\r
+ {\r
+ memset(mac_tmp,0,6);\r
+ memcpy(mac,mac_tmp,6);\r
+ uint8_t type = 0;\r
+ memcpy(&mactype,&type,1);\r
}\r
}\r
static void GetwatchSaveNameLen(uint8_t *datalen)//获取手表本地保存的手机设备名称长度\r
memcpy(datalen,&len,1);\r
// 释放资源\r
cJSON_Delete(root);\r
+ }else{\r
+ len = 0;\r
+ memcpy(datalen,&len,1); \r
}\r
}\r
static char *GetwatchSaveName(void)//获取手表本地保存的手机设备名称\r
str = malloc(sizeof(char)*showname_len);\r
pn->valuestring[showname_len-1]='\0';\r
strcpy(str,pn->valuestring);\r
- if(str)\r
- {\r
- free(str);\r
- }\r
printf("GetwatchSaveName:%s",pn->valuestring);\r
}\r
}\r
// 释放资源\r
cJSON_Delete(root);\r
}\r
- return str;\r
+ if (str == NULL)\r
+ {\r
+ return NULL;\r
+ }else{\r
+ return str;\r
+ }\r
+ \r
}\r
void cleanUnbindInfor(void)//和旧手机解绑清除配对信息\r
{\r
+ uint8_t value[19];\r
+ memset(value,0,19);\r
+ uint32_t tmp = 1;\r
+ uint16_t tmp_fen= 1;\r
+ value[0] =0x72;\r
+ value[1] =0x05;\r
+ value[2] =0x11;\r
+ memcpy(value+3,&tmp,4);\r
+ memcpy(value+7,&tmp,4);\r
+ memcpy(value+11,&tmp,4);\r
+ memcpy(value+15,&tmp_fen,2);\r
+ value[17] = 0x03;//\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+\r
uint8_t MacType = 0;\r
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
+ // printf("inforaddr:%x",ret1);\r
gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
bd_addr_t inforaddr;\r
inforaddr.addr[0] = mac_data[0];\r
inforaddr.addr[5] = mac_data[5];\r
inforaddr.type = MacType;\r
// printf("inforaddr:%x-%x-%x-%x-%x-%x",inforaddr.addr[0],inforaddr.addr[1],inforaddr.addr[2],inforaddr.addr[3],inforaddr.addr[4],inforaddr.addr[5]);\r
- errcode_t ret= gap_ble_remove_pair(&inforaddr);//清除配对信息\r
- if(ret!=ERRCODE_SUCC)\r
- {\r
- printf("gap_ble_remove_pair : %X\r\n",ret);\r
- }\r
+ errcode_t ret= gap_ble_remove_pair(&disconect_addr);//清除配对信息\r
+ gap_remove_pair(&disconect_addr);\r
+ // if(ret!=ERRCODE_SUCC)\r
+ // {\r
+ // printf("gap_ble_remove_pair : %X\r\n",ret);\r
+ // }\r
//清除保存的文件信息\r
if(0!=remove(PHONE_WATCH_CONFIG_PATH))\r
{\r
printf("json remove fail\r\n");\r
} \r
+ uapi_reboot_device();\r
+\r
\r
}\r
void sendBindInfor(uint8_t *crcnum)\r
{\r
- uint8_t value[20];\r
- memset(value,0,20);\r
+ uint8_t value[19];\r
+ memset(value,0,19);\r
uint32_t tmp = 1;\r
uint16_t tmp_fen= 1;\r
value[0] =0x72;\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_fen,2);\r
-\r
+ \r
uint8_t copare_mac[6];\r
memset(copare_mac,0,6);\r
uint8_t datalen=0;\r
- char *devname;\r
+ char *devname = NULL;\r
uint8_t devnamelen = 0;\r
uint8_t mac_tmp[6];\r
memset(mac_tmp,0,6);\r
uint8_t bond = 1;//未与任何手机绑定过\r
errcode_t ret = 0;\r
first_bond = 0;\r
- \r
-\r
uint8_t save_mac[6];\r
memset(save_mac,0,6);\r
- char *showname;\r
+ char *showname = NULL;\r
uint8_t showname_len = 0;\r
uint8_t MacType = 0;\r
\r
GetwatchSaveMac(&save_mac,&MacType);//获取手表设备本地保存的mac地址和mac地址类型 \r
getPhoneMac(crcnum,&copare_mac);\r
- \r
+ // save_mac[0] = 90;\r
+ // memset(copare_mac,0,6);\r
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地址就走连接流程重新绑定\r
{\r
+ bond = 0x01;//手表未和任何手机绑定过\r
+ value[17] = bond;//\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ comfirmPaire(1);\r
+ return;\r
#ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION\r
devnamelen = 0;\r
getPhoneNameLen(crcnum,&devnamelen);//获取手机下发的手机设备名称长度\r
{\r
devname = getPhoneName(crcnum);\r
printf("devname!!!!!!!!!:%s devnamelen:%d",devname,devnamelen);\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
- printf("bond flag:!!!!!!!!!\r\n");\r
+ if (devname != NULL){\r
+ printf("phone devname is name!!!!!!!!!:");\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
+ }else{\r
+ printf("phone devname is no name11111!!!!!!!!!:");\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
+ }\r
}else{\r
+ printf("phone devname is no name!!!!!!!!!:");\r
CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
}\r
#endif\r
- bond = 0x01;//手表未和任何手机绑定过\r
+ \r
}else\r
{\r
- // printf("success parsing JSON :save_mac :%x %x %x %x %x %x copare_mac %x %x %x %x %x %x;\n",save_mac[0],save_mac[1],save_mac[2],save_mac[3],save_mac[4],save_mac[5],\r
- // copare_mac[0],copare_mac[1],copare_mac[2],copare_mac[3],copare_mac[4],copare_mac[5]);\r
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) \r
{\r
bond = 0x03;//手表和其他手机绑定过\r
ret = gap_ble_pair_remote_device(&phone_addr);\r
printf("ret:%d",ret);\r
bond = 0x02;//手表与该手机绑定过\r
+ value[17] = bond;//\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ return;\r
}else{\r
bond = 0x03;//手表与其他手机绑定过\r
}\r
sendBleData(value,19);\r
if(bond == 0x03)\r
{\r
+ cleanUnbindInfor();\r
+ return;\r
+ errcode_t ret1 = gap_disconnect_remote_device(&disconect_addr);\r
+ gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
devnamelen = 0;\r
GetwatchSaveNameLen(&devnamelen);//获取手表设备保存手机的设备名称长度\r
if(devnamelen > 0)\r
{ \r
devname = GetwatchSaveName();\r
printf("devname:%s showname_len:%d",devname,devnamelen);\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,(uint8_t *)devname,devnamelen);\r
+ // cleanUnbindInfor();\r
+ if (devname != NULL){\r
+ printf("devname:is no null!!!!!");\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,(uint8_t *)devname,devnamelen);\r
+ }else{\r
+ printf("devname:is null!!!!!");\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,NULL,0);\r
+ }\r
+ \r
printf("cleanUnbindInfor!!!!!!!");\r
}else{\r
+ cleanUnbindInfor();\r
+ return;\r
+ printf("devname:is no name!!!!!");\r
+ // cleanUnbindInfor();\r
CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,NULL,0);\r
}\r
//加解绑提示界面是否和旧的手机解绑app 弹窗提示\r
bd_addr_t phone_addr;//发起配对地址反序\r
bd_addr_t disconect_addr;//断开连接地址不需要反序\r
uint8_t Bleconnect = 0;//蓝牙默认是断开 0 1 为连接\r
-\r
+uint8_t devpair_state = 0;//设备配对状态 0 未配对 1已配对成功\r
uint8_t bond_flag = 0;//绑定标识\r
uint16_t ble_nus_max_data_len = SDK_BLE_MTU_MIN - 3; \r
#define A2DP_STREAM_ACCEPT_TIMER_PERIOD 500\r
gap_ble_config_adv_data_t adv_data_info;\r
memset_s(&adv_data_info, sizeof(gap_ble_config_adv_data_t), 0, sizeof(gap_ble_config_adv_data_t));\r
\r
-#if 1\r
+#if 0\r
unsigned char set_mac[6] = {0x61,0x22,0x33,0x44,0x09,0x26};\r
bluetooth_set_local_addr(set_mac,6);\r
bd_addr_t addr_info;\r
bluetooth_get_local_addr(&addr[0],len);\r
char watchName[32];\r
memset_s(watchName, sizeof(watchName), 0, sizeof(watchName));\r
- (void)sprintf_s(watchName, sizeof(watchName), "%s %x%x",BLE_DEFAULT_NAME,addr[1],addr[0]);\r
+ (void)sprintf_s(watchName, sizeof(watchName), "%s %02x%02x",BLE_DEFAULT_NAME,addr[1],addr[0]);\r
// (void)sprintf_s(watchName, sizeof(watchName), "%s",BLE_DEFAULT_NAME);\r
\r
ret = bluetooth_set_local_name((unsigned char*)watchName, strlen((char*)watchName) + 1);\r
static void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_ble_conn_state_t conn_state,\r
gap_ble_pair_state_t pair_state, gap_ble_disc_reason_t disc_reason)\r
{\r
+ \r
uint16_t number;\r
errcode_t ret = gap_ble_get_paired_devices_num(&number);\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "number :%d addr!!! 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x addr->type:%d\r\n",number,addr->addr[0],addr->addr[1],addr->addr[2],addr->addr[3],\r
svr_ble_adv_start();\r
// } \r
} else {\r
+ devpair_state = 0;//\r
svr_ble_adv_stop();\r
set_phone_info(addr);\r
Bleconnect = GAP_BLE_STATE_CONNECTED;//蓝牙已连接\r
\r
static void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t status)\r
{\r
+ devpair_state = 1;//代表配对成功了\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_pair_result_cbt_cb!!! addr 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x status:0x%x\r\n",addr->addr[0],addr->addr[1],\r
addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5],status);\r
}\r
\r
void svr_bluetooth_init(void)\r
{\r
- // bool ret = enable_bt_stack();\r
- bool ret = enable_ble();\r
+ bool ret = enable_bt_stack();\r
+ // bool ret = enable_ble();\r
if (ret != ERRCODE_SUCC) {\r
// WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_bluetooth_init enable_bt_stack ret:%u.\r\n", ret);\r
}\r