#define PHONE_WATCH_CONFIG_PATH "/user/userdata/phone_watch.json"\r
#define ALARM_DATA_CONFIG_PATH "/user/userdata/alarm_test.json"\r
#include "bletest.h"\r
--\r
++#define DEBUG_TEST (0)\r
\r
uint8_t *bigDataBuf = NULL;//大数据buf\r
uint8_t bigDataBufLen=0;\r
return len;\r
\r
}\r
--errcode_t bondSucessCmd(void)//发送解绑指令,解绑界面调用这个函数 如果点了✓调用这个函数 返回成功后延迟10s再重启设备 \r
++errcode_t UnbindSucessCmd(void)//发送解绑指令,解绑界面调用这个函数 如果点了✓调用这个函数 返回成功后延迟10s再重启设备 \r
{\r
errcode_t sendok = ERRCODE_FAIL;\r
uint32_t tmp = 1;\r
value[18] = Calculate_CRC(value,18);\r
sendok = sendBleData(value,19);\r
bool ret = bt_is_acl_connected(&phone_addr);\r
++ if(0!=remove(PHONE_WATCH_CONFIG_PATH))\r
++ {\r
++ printf("json remove fail\r\n");\r
++ }\r
gap_ble_remove_all_pairs(); \r
gap_remove_all_pairs();\r
-- closeBle();\r
++ // uapi_reboot_device();\r
++\r
return sendok;\r
}\r
void getDeviceState(void)\r
clearPaireFlag(0);\r
}\r
}\r
--char *savephonename;\r
++uint8_t *savephonename;\r
//确认配对指令\r
uint8_t first_bond = 0;//是否第一次绑定 第一次绑定保存配对mac地址\r
void comfirmPaire(uint8_t flag)\r
first_bond = 0;\r
printf("gap_ble_pair_remote_device 444444444\r\n");\r
gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
-- gap_ble_remove_pair(&disconect_addr);//清除配对信息\r
++ gap_ble_remove_all_pairs(); \r
++ gap_remove_all_pairs();\r
if(savephonename != NULL)\r
{\r
free(savephonename);\r
}\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
++static uint8_t *getPhoneName(uint8_t *crcnum)//获取手机设备名称\r
{\r
uint8_t *json = crcnum;\r
-- char *str = NULL; \r
++ uint8_t *str = NULL; \r
cJSON* root = cJSON_Parse((const char *)json);\r
if(root != NULL)\r
{\r
pn->valuestring[datalen-1]='\0';\r
str = malloc(sizeof(char)*datalen);\r
savephonename = malloc(sizeof(char)*datalen);\r
-- strcpy(str,pn->valuestring);\r
-- strcpy(savephonename,pn->valuestring);\r
- free(str);\r
++ memcpy(str,(uint8_t *)pn->valuestring,datalen);\r
++ // strcpy(str,pn->valuestring);\r
++ memcpy(savephonename,(uint8_t *)pn->valuestring,datalen);\r
++ // strcpy(savephonename,pn->valuestring);\r
printf("str:%s savephonename:%s\n",str,savephonename);\r
}\r
printf("设备名称: %s\n", pn->valuestring);\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
++static uint8_t *GetwatchSaveName(void)//获取手表本地保存的手机设备名称\r
{\r
uint8_t count = 0;\r
-- char *str = NULL;\r
++ uint8_t *str = NULL;\r
FILE *jsfile = fopen(PHONE_WATCH_CONFIG_PATH, "r");\r
if (jsfile != NULL) {\r
printf("succes opening file\n");\r
if(showname_len-1 > 0){\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
++ str[showname_len]=0;\r
++ memcpy(str,(uint8_t *)pn->valuestring,showname_len);\r
++ // strcpy(str,pn->valuestring);\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
++void cleanUnbindInfor(uint8_t flag)//和旧手机解绑清除配对信息\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
- // printf("inforaddr:%x",ret1);\r
+ errcode_t ret1 = gap_disconnect_remote_device(&disconect_addr);\r
gap_ble_disconnect_remote_device(&disconect_addr);//与固定的mac设置地址进行断开连接\r
-- bd_addr_t inforaddr;\r
-- inforaddr.addr[0] = mac_data[0];\r
-- inforaddr.addr[1] = mac_data[1];\r
-- inforaddr.addr[2] = mac_data[2];\r
-- inforaddr.addr[3] = mac_data[3];\r
-- inforaddr.addr[4] = mac_data[4];\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(&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
- 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
-- //清除保存的文件信息\r
-- if(0!=remove(PHONE_WATCH_CONFIG_PATH))\r
-- {\r
-- printf("json remove fail\r\n");\r
++ if (flag == 1){\r
++ errcode_t ret= gap_ble_remove_pair(&disconect_addr);//清除配对信息\r
++ gap_ble_remove_all_pairs(); \r
++ bool ret_flag = gap_remove_all_pairs();\r
++ printf("ret_flag:%d ret:%x\r\n",ret_flag,ret);\r
++ if(0!=remove(PHONE_WATCH_CONFIG_PATH))\r
++ {\r
++ printf("json remove fail\r\n");\r
++ }\r
++ set_ble_falg(0);\r
++ uapi_reboot_device();\r
}\r
-- set_ble_falg(0);\r
- uapi_reboot_device();\r
--\r
}\r
void sendBindInfor(uint8_t *crcnum)\r
{\r
uint8_t copare_mac[6];\r
memset(copare_mac,0,6);\r
uint8_t datalen=0;\r
- char *devname = NULL;\r
- char *devname;\r
++ uint8_t *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 = NULL;\r
- char *showname;\r
-- uint8_t showname_len = 0;\r
uint8_t MacType = 0;\r
--\r
++ \r
GetwatchSaveMac(&save_mac,&MacType);//获取手表设备本地保存的mac地址和mac地址类型 \r
getPhoneMac(crcnum,&copare_mac);\r
- // save_mac[0] = 90;\r
- // memset(copare_mac,0,6);\r
- \r
++ save_mac[0] = 0;\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
- comfirmPaire(1);\r
- return;\r
+ bond = 0x01;//手表未和任何手机绑定过\r
+ value[17] = bond;//\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
#ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION\r
devnamelen = 0;\r
getPhoneNameLen(crcnum,&devnamelen);//获取手机下发的手机设备名称长度\r
++ devnamelen = 0;\r
if(devnamelen > 0 )\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
++ uint8_t buf[devnamelen+2]; \r
++ buf[0] = DEVICEBIND;\r
++ buf[1] = devnamelen;//设备名称长度 0不显示\r
++ memcpy(buf+2,devname,devnamelen);\r
++ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)buf,devnamelen+2);\r
++ if(devname)\r
++ { \r
++ free(devname);\r
++ }\r
+ }else{\r
+ printf("phone devname is no name11111!!!!!!!!!:");\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
++ uint8_t buf[2]; \r
++ buf[0] = DEVICEBIND;\r
++ buf[1] = 0;\r
++ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,buf,2);\r
++ \r
+ }\r
}else{\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
++ uint8_t buf[2]; \r
++ buf[0] = DEVICEBIND;\r
++ buf[1] = 0;\r
+ printf("phone devname is no name!!!!!!!!!:");\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
++ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,buf,2);\r
}\r
#endif\r
- bond = 0x01;//手表未和任何手机绑定过\r
++ return;\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
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
- // cleanUnbindInfor();\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,(uint8_t *)devname,devnamelen);\r
- printf("cleanUnbindInfor!!!!!!!");\r
+ if (devname != NULL){\r
++ uint8_t buf[devnamelen+1]; \r
++ buf[0] = devnamelen;\r
++ buf[1] = DEVICEUNBIND;\r
++ memcpy(buf+2,devname,devnamelen);\r
++ CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,(uint8_t *)buf,devnamelen+2);\r
+ printf("devname:is no null!!!!!");\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,(uint8_t *)devname,devnamelen);\r
+ }else{\r
++ uint8_t buf[2]; \r
++ buf[0] = DEVICEUNBIND;\r
++ buf[1] = 0;\r
+ printf("devname:is null!!!!!");\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,NULL,0);\r
++ CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,buf,2);\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
++ uint8_t buf[2]; \r
++ buf[0] = DEVICEUNBIND;\r
++ buf[1] = 0;\r
++ CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,buf,2);\r
}\r
-- //加解绑提示界面是否和旧的手机解绑app 弹窗提示\r
}\r
}\r
void getPhoneInfo(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取手机信息\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
}\r
if(savephonename != NULL)\r
{\r
-- cJSON_AddStringToObject(dataJSON,"pn",savephonename);\r
++ cJSON_AddStringToObject(dataJSON,"pn",(char *)savephonename);\r
free(savephonename);\r
}\r
cJSON_AddNumberToObject(dataJSON,"phoneType",phoneType);\r
// memcpy(value+15,&tmp_data,2);\r
// memcpy(&value[17],buf,strlen(buf));\r
\r
-- comfirmPaire(0);\r
++ // comfirmPaire(0);\r
\r
}\r
\r
{\r
uint8_t type=buf_cmd[1];\r
printf("type:%d %d data_size:%d data:%d crcvalue:%x",buf_cmd[0],type,data_size,data[0],crcvalue);\r
-- FILE *fp= fopen("user/ble_test.json","w+");\r
-- fwrite((void *)data,1,data_size,fp);\r
-- fclose(fp);\r
++ // FILE *fp= fopen("user/ble_test.json","w+");\r
++ // fwrite((void *)data,1,data_size,fp);\r
++ // fclose(fp);\r
switch (type)\r
{\r
case 0x02://获取手机信息\r
}\r
}\r
\r
--uint8_t *recvData;\r
++\r
uint32_t packdataLen = 0;\r
uint32_t totalDataLen = 0;\r
uint8_t totalpack = 0;\r
uint8_t cmd_data[17];\r
++uint8_t *recvData;\r
void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)\r
{\r
++ \r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xhandle %d,%d %d",data2ae3Cmd,data2ae4Cmd,handle);\r
if(sendbigDataBufState == true)//正在发送大数据不接收任何app指令下发的数据\r
{\r
uint16_t cmd = totalData[1]*256+totalData[2];\r
crcvalue = totalData[event_size-1];\r
\r
-- memcpy(&packdataLen,&totalData[3],4);\r
++ memcpy(&packdataLen,totalData+3,4);\r
recvData = malloc(packdataLen);\r
memcpy(recvData,totalData+17,packdataLen);\r
printf("recv crcvalue:%x packdataLen-1:%d\r\n",crcvalue,packdataLen);\r
free(recvData);\r
}\r
}\r
-- }else if(handle)\r
++ }else if(data2ae4Cmd == handle)\r
{\r
while (1)\r
{\r
packdataLen = event_size-17;\r
memset(cmd_data,0,17);\r
memcpy(cmd_data,totalData,17);\r
-- \r
++\r
++ // 73 2 10 1 0 0 0 16 0 0 0 1 0 0 0 16 0\r
recvData = malloc(packdataLen-1);\r
if(recvData == NULL)return;\r
memcpy(recvData,totalData+17,packdataLen-1);\r
}else{\r
crcvalue = totalData[event_size-1];\r
}\r
-- bleLongRecvData(recvData,packdataLen-1,&cmd_data,totalData,crcvalue);\r
++ \r
++ bleLongRecvData(recvData,packdataLen-1,cmd_data,totalData,crcvalue);\r
if(recvData != NULL){\r
free(recvData);\r
}\r
bigDataBuf = malloc(totalDataLen);\r
crcvalue = totalData[event_size-1];\r
memcpy(bigDataBuf,recvData+17,totalDataLen);\r
-- bleLongRecvData(bigDataBuf,totalDataLen,&cmd_data,recvData,crcvalue);\r
++ bleLongRecvData(bigDataBuf,totalDataLen,cmd_data,recvData,crcvalue);\r
totalDataLen = 0;\r
packdataLen = 0;\r
muiltFlag = 0;\r
if(bigDataBuf != NULL){\r
free(bigDataBuf);\r
}\r
-- if(recvData != NULL){\r
-- free(recvData);\r
-- }\r
++ // if(recvData != NULL){\r
++ // // free(recvData);\r
++ // }\r
break;\r
}\r
}\r
void revBleOldData(uint8_t *buf, uint16_t event_size,uint16_t handle)//每包的数据大小\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xxxxxxxxxxxxxxxx");\r
-- printf("handle :%d data2ae3Cmd:%d data2ae4Cmd:%d buf:%d event_size %d\r\n",handle,data2ae3Cmd,data2ae4Cmd,buf,event_size);\r
++ printf("handle :%d data2ae3Cmd:%d data2ae4Cmd:%d event_size %d\r\n",handle,data2ae3Cmd,data2ae4Cmd,event_size);\r
bleDataRecv(buf,event_size,handle);\r
}\r
#endif\r