{\r
errcode_t ret = ERRCODE_FAIL;\r
if(bigDataBufState == true || sendbigDataBufState == true)return ERRCODE_FAIL; //在手表发送分包数据时 手表不允许发指令给app\r
- // for(uint16_t i = 0;i<len;i++)\r
- // { \r
- // printf("%02x ",buf[i]);\r
- // }\r
+ for(uint16_t i = 0;i<len;i++)\r
+ { \r
+ printf("%02x ",buf[i]);\r
+ }\r
if(Bleconnect == true )\r
{\r
ret = svr_ble_bt_gatts_noyify(buf,len);\r
sendBleData(value,19);\r
}\r
\r
+uint8_t phoneType = 0;\r
static uint8_t jsonCheck_phoneinfor(uint8_t *buf,uint8_t *mac_data,char *devname)//解析手机信息json\r
{\r
uint8_t len = 0;\r
\r
cJSON* pn = cJSON_GetObjectItem(root, "pn");\r
if (cJSON_IsString(pn)) {\r
- \r
len = strlen(pn->valuestring)+1; \r
- pn->valuestring[len-1]='\0';\r
- memcpy((uint8_t *)devname,(uint8_t *)pn->valuestring,strlen(pn->valuestring));\r
+ if(len -1 > 0){\r
+ pn->valuestring[len-1]='\0';\r
+ memcpy((uint8_t *)devname,(uint8_t *)pn->valuestring,strlen(pn->valuestring));\r
+ }\r
+ \r
printf("设备名称: %s\n", pn->valuestring);\r
}\r
\r
if (cJSON_IsNumber(tp)) {\r
printf("类型: %d\n", tp->valueint);\r
type = tp->valueint;\r
+ phoneType = type;\r
}\r
\r
cJSON* mac = cJSON_GetObjectItem(root, "mac");\r
clearPaireFlag(0);\r
}\r
}\r
+char *savephonename;\r
//确认配对指令\r
+uint8_t first_bond = 0;//是否第一次绑定 第一次绑定保存配对mac地址\r
void comfirmPaire(uint8_t flag)\r
{\r
uint8_t value[19];\r
sendBleData(value,19);\r
if(flag == 1)\r
{\r
+ first_bond = 1;\r
+ printf("gap_ble_pair_remote_device 333333333 %x-%x-%x-%x-%x-%x\r\n",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]);\r
+\r
gap_ble_pair_remote_device(&phone_addr);\r
}else{\r
- if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开\r
- gap_ble_disconnect_remote_device(&phone_addr);//与固定的mac设置地址进行断开连接\r
- gap_ble_remove_pair(&phone_addr);\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
+ if(savephonename != NULL)\r
+ {\r
+ free(savephonename);\r
}\r
- svr_ble_adv_start();\r
-\r
}\r
}\r
+\r
// l连接手表之后-app通过特征值2AE4读手表信息->手表会把相应的信息给app->app通过73 02 10下发手机信息给设备(第一次连接mac为空)->设备返回73 02 10状态1才能和手机app第一次连接->设备会回发配对指令72 05 11给app,同时设备会对手机发起配对->手机点了配对后,配对成功手表会发配对成功指令72 05 10,这条指令包含手机的mac地址也会传给app->app校验解析成功之后->app下发时间指令72 02 02给设备->设备回复解析成功->完成连接\r
void alarmData(void)\r
{\r
\r
}\r
-void getPhoneMac(uint8_t *phonemac)\r
+//phonemac 手机app下发手机的mac地址 \r
+//name 手机设备名称\r
+//*len 手机设备名称长度\r
+//*mac_type 手机蓝牙mac地址类型 共有还是私有的\r
+static void getRecvPhoneInfo(uint8_t *phonemac,uint8_t *name,uint8_t *len,uint8_t *mac_type)\r
{\r
+ uint8_t datalen = 0;\r
uint8_t mac[6];\r
memset(mac,0,6);\r
uint8_t count = 0;\r
FILE *jsfile = fopen(PHONE_WATCH_CONFIG_PATH, "r");\r
+ if(jsfile == NULL)\r
+ {\r
+ return;\r
+ }\r
if (jsfile != NULL) {\r
printf("succes opening file\n");\r
fseek(jsfile, 0, SEEK_END);\r
}\r
printf("\n");\r
}\r
+ if(mac[0] !=0 && mac[1] != 0 && mac[2] != 0 && mac[3] != 0 && mac[4] != 0 && mac[5] != 0)\r
+ {\r
+ memcpy(phonemac,mac,6);\r
+ }\r
+ \r
+ cJSON *pn = cJSON_GetObjectItem(root,"pn");\r
+ if(cJSON_IsString(pn))\r
+ {\r
+ datalen = strlen(pn->valuestring)+1;\r
+ if(datalen-1 > 0){\r
+ pn->valuestring[datalen-1]='\0';\r
+ memcpy(name,(uint8_t *)pn->valuestring,strlen(pn->valuestring));\r
+ datalen = strlen(pn->valuestring);\r
+ memcpy(&len,&datalen,1);\r
+ }\r
+ }\r
+ cJSON *mactype = cJSON_GetObjectItem(root,"mac_type");\r
+ if(cJSON_IsNumber(mac_type))\r
+ {\r
+ memcpy(&mac_type,&mactype->valueint,1);\r
+ }\r
}\r
// 释放资源\r
cJSON_Delete(root);\r
}\r
- memcpy(phonemac,mac,6);\r
+ \r
}\r
-uint8_t firts_bond = 0;//是否第一次绑定 第一次绑定保存配对mac地址\r
-void getPhoneInfo(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取手机信息\r
+\r
+void getPhoneNameLen(uint8_t *crcnum,uint8_t *datalen)//获取手机设备名称长度\r
+{\r
+ uint8_t len = 0;\r
+ uint8_t *json = crcnum;\r
+ cJSON* root = cJSON_Parse((const char *)json);\r
+ \r
+ if(root != NULL)\r
+ {\r
+ cJSON* pn = cJSON_GetObjectItem(root, "pn");\r
+ if (cJSON_IsString(pn)) {\r
+ len = strlen(pn->valuestring)+1; \r
+ printf("设备名称: %s len:%d\n", pn->valuestring,len);\r
+ }\r
+ memcpy(datalen,&len,1);\r
+ cJSON_Delete(root);\r
+ } \r
+}\r
+\r
+static char *getPhoneName(uint8_t *crcnum)//获取手机设备名称\r
+{\r
+ uint8_t *json = crcnum;\r
+ char *str = NULL; \r
+ cJSON* root = cJSON_Parse((const char *)json);\r
+ if(root != NULL)\r
+ {\r
+ cJSON* pn = cJSON_GetObjectItem(root, "pn");\r
+ if (cJSON_IsString(pn)) {\r
+ uint8_t datalen = strlen(pn->valuestring)+1; \r
+ if(datalen - 1 > 0){\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
+ 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
+}\r
+void getPhoneMac(uint8_t *crcnum,uint8_t *phoneMac)//获取手机设备mac这个是手表上传给手机的mac地址\r
+{\r
+ uint8_t *json = crcnum;\r
+ uint8_t phone_tmp[6];\r
+ memset(phone_tmp,0,6);\r
+ cJSON* root = cJSON_Parse((const char *)json);\r
+ uint8_t datalen = 0;\r
+ uint8_t count = 0;\r
+ if(root != NULL)\r
+ {\r
+ cJSON* mac = cJSON_GetObjectItem(root, "mac");\r
+ if (cJSON_IsArray(mac)) {\r
+ printf("MAC地址: ");\r
+ cJSON* macElement = NULL;\r
+ cJSON_ArrayForEach(macElement, mac) {\r
+ if (cJSON_IsNumber(macElement)) {\r
+ printf("%d", macElement->valueint);\r
+ if (macElement->prev != NULL) {\r
+ phone_tmp[count++] = macElement->valueint;\r
+ printf(", ");\r
+ }\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,phone_tmp,6);\r
+ }else\r
+ {\r
+ memcpy(phoneMac,0,6);\r
+ }\r
+ cJSON_Delete(root);\r
+ } \r
+}\r
+\r
+void GetwatchSaveMac(uint8_t *mac,uint8_t *mactype)//获取手表本地保存的mac地址和mac地址类型 分共有和私有的\r
+{\r
+ uint8_t mac_tmp[6];\r
+ memset(mac_tmp,0,6);\r
+ uint8_t count = 0;\r
+ uint8_t type= 0;\r
+ FILE *jsfile = fopen(PHONE_WATCH_CONFIG_PATH, "r");\r
+ if (jsfile != NULL) {\r
+ printf("succes opening file\n");\r
+ fseek(jsfile, 0, SEEK_END);\r
+ long fileSize = ftell(jsfile);\r
+ fseek(jsfile, 0, SEEK_SET);\r
+\r
+ char *jsonData = (char *)malloc(fileSize + 1);\r
+ fread(jsonData, 1, fileSize, jsfile);\r
+ jsonData[fileSize] = '\0';\r
+ fclose(jsfile);\r
+ // 解析JSON数据\r
+ cJSON *root = cJSON_Parse(jsonData);\r
+ // 释放资源\r
+ free(jsonData);\r
+ if (root != NULL) {\r
+ cJSON *modifiedJson = cJSON_GetObjectItem(root,"mac");\r
+ if (cJSON_IsArray(modifiedJson)) {\r
+ printf("watch MAC地址: ");\r
+ cJSON* macElement = NULL;\r
+ cJSON_ArrayForEach(macElement, modifiedJson) {\r
+ if (cJSON_IsNumber(macElement)) {\r
+ printf("%d", macElement->valueint);\r
+ if ((macElement->prev != NULL)) {\r
+ mac_tmp[count] = macElement->valueint;\r
+ count++;\r
+ printf(", ");\r
+ }\r
+ }\r
+ }\r
+ printf("\n");\r
+ }\r
+ cJSON *mac_type = cJSON_GetObjectItem(root,"mac_type");\r
+ if(cJSON_IsNumber(mac_type))\r
+ {\r
+ memcpy(&mactype,&mac_type->valueint,1);\r
+ }\r
+ }\r
+ if(mac_tmp[0] == 0 && mac_tmp[1] == 0 && mac_tmp[2] == 0 && mac_tmp[3] == 0 && mac_tmp[4] == 0 && mac_tmp[5] == 0){\r
+ memcpy(mac,0,6);\r
+ }else\r
+ {\r
+ memcpy(mac,mac_tmp,6);\r
+ }\r
+ cJSON_Delete(root);\r
+ }\r
+}\r
+static void GetwatchSaveNameLen(uint8_t *datalen)//获取手表本地保存的手机设备名称长度\r
+{\r
+ uint8_t len = 0;\r
+ FILE *jsfile = fopen(PHONE_WATCH_CONFIG_PATH, "r");\r
+ if (jsfile != NULL) {\r
+ printf("GetwatchSaveNameLen opening file\n");\r
+ fseek(jsfile, 0, SEEK_END);\r
+ long fileSize = ftell(jsfile);\r
+ fseek(jsfile, 0, SEEK_SET);\r
+\r
+ char *jsonData = (char *)malloc(fileSize + 1);\r
+ fread(jsonData, 1, fileSize, jsfile);\r
+ jsonData[fileSize] = '\0';\r
+ fclose(jsfile);\r
+\r
+ // 解析JSON数据\r
+ cJSON *root = cJSON_Parse(jsonData);\r
+ free(jsonData);\r
+\r
+ if (root != NULL) {\r
+ cJSON *pn = cJSON_GetObjectItem(root,"pn");\r
+ if(cJSON_IsString(pn))\r
+ {\r
+ len = strlen(pn->valuestring)+1;//多加一个加上字符串的结束符\0\r
+ printf("GetwatchSaveNameLen;%d",len);\r
+ }\r
+ };\r
+ memcpy(datalen,&len,1);\r
+ // 释放资源\r
+ cJSON_Delete(root);\r
+ }\r
+}\r
+static char *GetwatchSaveName(void)//获取手表本地保存的手机设备名称\r
+{\r
+ uint8_t count = 0;\r
+ char *str = NULL;\r
+ FILE *jsfile = fopen(PHONE_WATCH_CONFIG_PATH, "r");\r
+ if (jsfile != NULL) {\r
+ printf("succes opening file\n");\r
+ fseek(jsfile, 0, SEEK_END);\r
+ long fileSize = ftell(jsfile);\r
+ fseek(jsfile, 0, SEEK_SET);\r
+\r
+ char *jsonData = (char *)malloc(fileSize + 1);\r
+ fread(jsonData, 1, fileSize, jsfile);\r
+ jsonData[fileSize] = '\0';\r
+ fclose(jsfile);\r
+\r
+ // 解析JSON数据\r
+ cJSON *root = cJSON_Parse(jsonData);\r
+ free(jsonData);\r
+\r
+ if (root != NULL) {\r
+ cJSON *pn = cJSON_GetObjectItem(root,"pn");\r
+ if(cJSON_IsString(pn))\r
+ {\r
+ uint8_t showname_len = strlen(pn->valuestring)+1;\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
+ printf("GetwatchSaveName:%s",pn->valuestring);\r
+ }\r
+ }\r
+ }\r
+ // 释放资源\r
+ cJSON_Delete(root);\r
+ }\r
+ return str;\r
+}\r
+void cleanUnbindInfor(void)//和旧手机解绑清除配对信息\r
+{\r
+ uint8_t MacType = 0;\r
+ uint8_t mac_data[6];\r
+ memset(mac_data,0,6);\r
+ GetwatchSaveMac(&mac_data,&MacType);\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
+ gap_ble_remove_pair(&inforaddr);//清除配对信息\r
+ //清除保存的文件信息\r
+}\r
+void sendBindInfor(uint8_t *crcnum)\r
{\r
uint8_t value[20];\r
memset(value,0,20);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_fen,2);\r
- phoneDataFlag = 1;\r
- \r
- if(Check_CRC(crcnum,len,crcvalue))\r
- {\r
- uint8_t *tmp_data;\r
- tmp_data = crcnum;\r
- uint8_t copare_mac[6];\r
- memset(copare_mac,0,6);\r
- uint8_t datalen=0;\r
- char devname[256];\r
- memset(devname,0,256);\r
- datalen = jsonCheck_phoneinfor(tmp_data,&copare_mac,&devname);\r
- uint8_t bond = 1;//未与任何手机绑定过\r
- errcode_t ret = 0;\r
- firts_bond = 0;\r
-\r
- uint8_t save_mac[6];\r
- getPhoneMac(&save_mac);\r
- memset(save_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
+ uint8_t copare_mac[6];\r
+ memset(copare_mac,0,6);\r
+ uint8_t datalen=0;\r
+ char *devname;\r
+ uint8_t devnamelen = 0;\r
+ uint8_t mac_tmp[6];\r
+ memset(mac_tmp,0,6);\r
+\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
+ uint8_t showname_len = 0;\r
+ uint8_t MacType = 0;\r
+\r
+ GetwatchSaveMac(&save_mac,&MacType);//获取手表设备本地保存的mac地址和mac地址类型 \r
+ getPhoneMac(crcnum,&copare_mac);\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
+ #ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION\r
+ devnamelen = 0;\r
+ getPhoneNameLen(crcnum,&devnamelen);//获取手机下发的手机设备名称长度\r
+ if(devnamelen > 0 )\r
{\r
- bond = 0x01;//手表未和任何手机绑定过\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)//只要app没有下发mac就开启弹窗\r
- {\r
- #ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION\r
- if(datalen == 0){\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
- }else{\r
- CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)devname,datalen);\r
- }\r
- #endif\r
- }else{\r
- ret = gap_ble_pair_remote_device(&phone_addr);\r
+ devname = getPhoneName(crcnum);\r
+ printf("devname:%s devnamelen:%d",devname,devnamelen);\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)devname,devnamelen);\r
+ if(devname){\r
+ free(devname);\r
}\r
- printf("gap_ble_pair_remote_device ret: %d phone_mac_data 0x%x-0x%x-0x%x-0x%x-0x%x-0x%x phone_addr->TYPE:%d\n",ret,phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],\r
- phone_addr.addr[5],phone_addr.type);\r
-\r
- }else\r
+ }else{\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
+ }\r
+ #endif\r
+ bond = 0x01;//手表未和任何手机绑定过\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
- 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
+ bond = 0x03;//手表和其他手机绑定过\r
+ \r
+ }else{//如果手机有保存mac app下发是空就提示和其他手机绑定过界面不在发起配对\r
+ int result = memcmp(copare_mac,save_mac,6);\r
+ if(result == 0)\r
{\r
- printf("success parsing JSON :save_mac :%d %d %d %d %d %d copare_mac %d %d %d %d %d %d;\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
- int result = memcmp(copare_mac,save_mac,6);\r
- if(result == 0)\r
- {\r
- firts_bond = 1;\r
- bond = 0x02;//手表与该手机绑定过\r
- }else{\r
- bond = 0x03;//手表与其他手机绑定过\r
- }\r
- }else{//如果手机有保存mac app下发是空就提示和其他手机绑定过界面不在发起配对\r
- bond = 0x03;//手表和其他手机绑定过\r
-\r
+ ret = gap_ble_pair_remote_device(&phone_addr);\r
+ bond = 0x02;//手表与该手机绑定过\r
+ }else{\r
+ bond = 0x03;//手表与其他手机绑定过\r
}\r
}\r
- printf("bond flag:%d firts_bond:%d\r\n",bond,firts_bond);\r
- value[17] = bond;//\r
- value[18] = Calculate_CRC(value,18);\r
- sendBleData(value,19);\r
- if(bond == 0x03)\r
- {\r
- //加解绑提示界面是否和旧的手机解绑app 弹窗提示\r
- return;\r
+ }\r
+ printf("bond flag:%d first_bond:%d\r\n",bond,first_bond);\r
+ value[17] = bond;//\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ if(bond == 0x03)\r
+ {\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
+ if(devname){\r
+ free(devname);\r
+ }\r
+ }else{\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_UNBIND,NULL,0);\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
+ uint32_t tmp = 1;\r
+ uint16_t tmp_fen= 1;\r
+ value[0] =0x72;\r
+ value[1] =0x02;\r
+ value[2] =0x10;\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
+ phoneDataFlag = 1;\r
+ \r
+ if(Check_CRC(crcnum,len,crcvalue))\r
+ {\r
+ sendBindInfor(crcnum);\r
}else{\r
value[17] = 0x00;\r
value[18] = Calculate_CRC(value,18);\r
}\r
\r
\r
-void sendParieSuccess(uint8_t flag,uint8_t *mac)//发送配对成功指令to app\r
+void sendParieSuccess(uint8_t flag,bd_addr_t *addr)//发送配对成功指令to app\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sendParieSuccess:0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\r\n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);\r
- if(firts_bond != 1 && phoneDataFlag == 1){//和该手机绑定过并且是连接app之后下发的数据 正常系统配对是不需要保存的\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sendParieSuccess:0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\r\n",addr->addr[0],addr->addr[1],addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5]);\r
+ if(first_bond == 1 && phoneDataFlag == 1)//第一次连接绑定\r
+ // if(1)\r
+ {\r
uint8_t value[25];\r
uint8_t length = 0;\r
memset(value,0,25);\r
cJSON* arrayJSON = cJSON_CreateArray();\r
for(uint8_t id = 0;id<6;id++)\r
{\r
- cJSON_AddNumberToObject(arrayJSON,"id",mac[id]);\r
+ cJSON_AddNumberToObject(arrayJSON,"id",addr->addr[id]);\r
}\r
- \r
- // cJSON_AddNumberToObject(dataJSON,"id",i);\r
+ if(savephonename != NULL)\r
+ {\r
+ cJSON_AddStringToObject(dataJSON,"pn",savephonename);\r
+ free(savephonename);\r
+ }\r
+ cJSON_AddNumberToObject(dataJSON,"phoneType",phoneType);\r
+ cJSON_AddNumberToObject(dataJSON,"mac_type",addr->type);\r
cJSON_AddItemToObject(dataJSON,"mac",arrayJSON);\r
+\r
char *jsonString = cJSON_PrintUnformatted(dataJSON);\r
printf("phone %s",jsonString);\r
FILE *file = fopen(PHONE_WATCH_CONFIG_PATH, "wb");\r
fclose(file);\r
}\r
free(jsonString);\r
-\r
-\r
\r
// 读取JSON文件\r
\r
- memcpy(value+18,mac,6);\r
- memcpy(parie_mac,mac,6);\r
+ memcpy(value+18,addr->addr,6);\r
+ memcpy(parie_mac,addr->addr,6);\r
length = 18+6;\r
uint8_t crcvalue = Calculate_CRC(value,length);\r
value[length] = crcvalue;\r
// memcpy(value+15,&tmp_data,2);\r
// memcpy(&value[17],buf,strlen(buf));\r
\r
- uint8_t buf[40] = {0x7b,0x22 ,0x70 ,0x6e ,0x22 ,0x3a ,0x22 ,0x46 ,0x72 ,0x61 ,0x6e ,0x6b ,0xe7 ,0x9a ,0x84 ,0x69 ,0x50 ,0x68 ,0x6f ,0x6e ,0x65 ,0x22 ,0x2c ,0x22 ,0x74 ,0x70 ,0x22 ,0x3a ,0x31 ,0x2c ,0x22 ,0x6d ,0x61 ,0x63 ,0x22 ,0x3a ,0x20 ,0x5b ,0x5d ,0x7d};\r
- uint8_t lrc = Calculate_CRC(buf,40);\r
- printf("lrc 0x%x",lrc);\r
- // value[strlen(buf)+17] = Calculate_CRC(value,17+strlen(buf));\r
- sendBleData(buf,40);\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
- switch(buf_cmd[0])\r
+ switch (type)\r
{\r
- case 0x73://传输方向 0x73是app下发的 \r
- switch (type)\r
- {\r
- case 0x02://获取手机信息\r
- type2AE4Data(buf_cmd,data,data_size,totalData,crcvalue);\r
- break;\r
- default:\r
- break;\r
- }\r
+ case 0x02://获取手机信息\r
+ type2AE4Data(buf_cmd,data,data_size,totalData,crcvalue);\r
+ break;\r
+ default:\r
break;\r
}\r
}\r
return;\r
}\r
\r
- \r
uint8_t crcvalue= 0x00;\r
\r
if(data2ae3Cmd == handle)//短指令\r