void write_addressbook_bin_flle()
{
- #if 0
FILE *fp= fopen(ADDRESS_BOOK_PATH,"wb+");
if(fp==NULL)
return;
}
fwrite((void *)buf,1,offset,fp);
fclose(fp);
- #endif
+
}
void add_addressbook(struct Contact *data)
{
- #if 0
- if(data->name!=NULL)
+ if(strlen(data->name)>0)
{
- addressbook_t.Contact_t[addressbook_t.num].name=(char *)malloc(strlen(data->name));
+ // addressbook_t.Contact_t[addressbook_t.num].name=(char *)malloc(strlen(data->name));
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s %d",data->name,addressbook_t.num);
+ memset(addressbook_t.Contact_t[addressbook_t.num].name,0,NAME_LEN);
strcpy(addressbook_t.Contact_t[addressbook_t.num].name,data->name);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",addressbook_t.Contact_t[addressbook_t.num].name);
}
else
{
- addressbook_t.num-=1;
- return;
- addressbook_t.Contact_t[addressbook_t.num].name=(char *)malloc(strlen("未知"));
+
+ //addressbook_t.Contact_t[addressbook_t.num].name=(char *)malloc(strlen("未知"));
+ memset(addressbook_t.Contact_t[addressbook_t.num].name,0,NAME_LEN);
strcpy(addressbook_t.Contact_t[addressbook_t.num+1].name,"未知");
}
data->phone_num=2;
for(int i=0;i<data->phone_num;i++)
{
- if(data->phone_number_t[i].number)
+ if(strlen( data->phone_number_t[i].number)>0)
{
- addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number
- =(char *)malloc(strlen(data->phone_number_t[i].number));
+ // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number
+ // =(char *)malloc(strlen(data->phone_number_t[i].number));
+ memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number,0,NUMBER_LEN);
strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number,data->phone_number_t[i].number);
}
else
{
- addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number
- =(char *)malloc(strlen("未知"));
+ // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number
+ // =(char *)malloc(strlen("未知"));
+ memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number,0,NUMBER_LEN);
strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].number,"未知");
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneaddressbook::phoneaddressbook1111111111");
- if(data->phone_number_t[i].affiliating_area)
+ if(strlen(data->phone_number_t[i].affiliating_area)>0)
{
- addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area
- =(char *)malloc(strlen(data->phone_number_t[i].affiliating_area));
+ // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area
+ // =(char *)malloc(strlen(data->phone_number_t[i].affiliating_area));
+ memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,0,AREA_LEN);
strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,data->phone_number_t[i].affiliating_area);
}
else
{
- addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area
- =(char *)malloc(strlen("未知"));
+ // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area
+ memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,0,AREA_LEN);
strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,"未知");
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneaddressbook::phoneaddressbook2222222222");
- if(data->phone_number_t[i].operator_t)
+ if(strlen(data->phone_number_t[i].operator_t)>0)
{
- addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t
- =(char *)malloc(strlen(data->phone_number_t[i].operator_t));
+ // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t
+ // =(char *)malloc(strlen(data->phone_number_t[i].operator_t));
+ memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,0,OPERATOR_LEN);
strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t,data->phone_number_t[i].operator_t);
}
else
{
- addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t
- =(char *)malloc(strlen("未知"));
+ // addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t
+ // =(char *)malloc(strlen("未知"));
+ memset(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].affiliating_area,0,OPERATOR_LEN);
strcpy(addressbook_t.Contact_t[addressbook_t.num].phone_number_t[i].operator_t,"未知");
}
}
addressbook_t.num+=1;
- #endif
-
+
}
void add_addressbook_by_AT(char *name,char *phone)
{
- // Contact data;
- // data.sex=0;
- // data.name=name;
- // data.phone_num=1;
+ Contact data;
+ data.sex=0;
+
+ strcpy(data.name,name);
+ data.phone_num=2;
- // data.phone_number_t[0].number=phone;
- // memset(data.phone_number_t[0].affiliating_area,0,AREA_LEN);
- // // data.phone_number_t[0].affiliating_area=NULL;
- // // data.phone_number_t[0].operator_t=NULL;
- // memset(data.phone_number_t[0].affiliating_area,0,OPERATOR_LEN);
+ // =phone;
+ strcpy(data.phone_number_t[0].number,phone);
+ memset(data.phone_number_t[0].affiliating_area,0,AREA_LEN);
+ // data.phone_number_t[0].affiliating_area=NULL;
+ // data.phone_number_t[0].operator_t=NULL;
+ memset(data.phone_number_t[0].affiliating_area,0,OPERATOR_LEN);
// data.phone_number_t[1].number=NULL;
// data.phone_number_t[1].affiliating_area=NULL;
// data.phone_number_t[1].operator_t=NULL;
+
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneaddressbook::phoneaddressbook");
- // add_addressbook(&data);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneaddressbook::phoneaddressbook");
+ add_addressbook(&data);
}
void free_address()
if(Check_CRC(crcnum,len,crcvalue))\r
{\r
uint8_t language = crcnum[0];\r
-\r
+ set_languaage(language);\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
}\r
//APP发送重新启动\r
+static uint8_t power_buf[2]={0};\r
static void GetResetCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
\r
value[17] = 1;// \r
value[18] = Calculate_CRC(value,18);\r
+ power_buf[0]=REBOOT;\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,power_buf,2);\r
sendBleData(value,19);\r
+\r
}else\r
{\r
value[17] = 0;\r
\r
value[17] = 1;// \r
value[18] = Calculate_CRC(value,18);\r
+ power_buf[0]=SHUTDOWN;\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,power_buf,2);\r
sendBleData(value,19);\r
}else\r
{\r
GetSynDataEndCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
case SYN_HEART_HISTORY_DATA_CMD://同步心率历史数据\r
- heartDataCmd(cmd,data,datalen,totaldata,crcvalue);\r
- break;\r
+ //heartDataCmd(cmd,data,datalen,totaldata,crcvalue);\r
case SYN_SPO2_HISTORY_DATA_CMD://同步血氧历史数据\r
case SYN_STEP_HISTORY_DATA_CMD: //同步步数历史数据\r
case SYN_FAT_BURN_HISTORY_DATA_CMD://同步燃脂时间数据\r
case SYN_DIS_HISTORY_DATA_CMD://同步距离历史数据\r
case SYN_BASIC_TRANIN_HISTORY_DATA_CMD://同步基础训练历史数据\r
case SYN_SLEEP_HISTORY_DATA_CMD://睡眠历史数据\r
- // readDevDataBle(totaldata,datalen+18,crcvalue);\r
+ readDevDataBle(totaldata,datalen+18,crcvalue);\r
break;\r
\r
default:\r
//发送读出来的设备数据to APP\r
uint16_t max_mtu_szie_data_len = 200;\r
uint32_t EACH_DATA_LEN=0;//每种数据类型的的长度\r
-void sendReadData(void)\r
+\r
+void send_big_data(uint8_t flag,char *data,int datalen,int total,uint32_t Packet_id,uint32_t packet_total,uint8_t type_id)\r
+{\r
+ uint8_t buf[512]={0};\r
+ buf[0]=0x72;\r
+ buf[1]=0x01;\r
+ buf[2]=type_id;\r
+ memcpy(buf+3,&packet_total,4);\r
+ memcpy(buf+7,&total,4);\r
+ memcpy(buf+11,&Packet_id,4);\r
+ memcpy(buf+15,&datalen,2);\r
+ if(flag)\r
+ {\r
+ uint16_t t=0x00;\r
+ memcpy(buf+17,&t,2);\r
+ memcpy(buf+19,data,datalen);\r
+ buf[19+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen);\r
+ sendDataNow(buf,19+datalen+1);\r
+\r
+ }\r
+ else\r
+ {\r
+ \r
+ memcpy(buf+17,data,datalen);\r
+ buf[17+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen);\r
+ printf("xxxxxxxxxxxxx\r\n");\r
+ sendDataNow(buf,17+datalen+1);\r
+\r
+ }\r
+ \r
+}\r
+\r
+void Read_spo2_file_buf_Data(uint8_t id)\r
{\r
sendbigDataBufState = true;//分包同步数据不允许打断\r
- static uint32_t packCount = 0;\r
- uint8_t buf[517];\r
- memset(buf,0,517);\r
- uint32_t dataLen = 0;\r
- uint32_t sendDataLen = 0;\r
- uint32_t totalLen = 0;\r
- dataLen = 640; \r
- uint32_t dataPack = 1;\r
- uint16_t dataPackLen = 640;//减掉前面17+2个字节的包头总共就是19个数据(多包) 一包就减去17个字节\r
- uint32_t time = 0;\r
- uint32_t step = 0;\r
- packCount = 1;\r
- \r
- uint16_t startDataLen = 17;\r
- uint8_t crc = 0x00;\r
- uint8_t crcvalue = 0x00;\r
- uint16_t totalEnd = 0;\r
- buf[0] = 0x72;\r
- buf[1] = 0x01;\r
- buf[2] = bleSendTypeID;\r
- memcpy(buf+3,&dataPack,4);\r
- memcpy(buf+7,&dataLen,4);\r
- memcpy(buf+11,&dataPack,4);\r
- memcpy(buf+15,&dataPackLen,2);\r
- if(dataLen > ble_nus_max_data_len)//300-192=108 \r
- {\r
- startDataLen = 19;\r
- }\r
- while (1)\r
- {\r
-\r
-\r
- //json id=0 \r
- time = 1711348052+3600*packCount;\r
- memcpy(buf+startDataLen,&time,4);//21 \r
- startDataLen=startDataLen+4;\r
- step = 1000+packCount*1000;\r
- memcpy(buf+startDataLen,&step,4);//25 \r
- startDataLen=startDataLen+4;//时间 步数 时间 步数 时间 步数 每八个字节一个数据\r
+ char *buf=(char *)malloc(sizeof(char)*512);\r
+\r
+ const char *path=get_health_data_path();\r
+ FILE *fp= fopen(path,"r+");\r
+ if(fp==NULL)\r
+ {\r
+ printf("打开文件失败%s\r\n",path);\r
+ return;\r
+ }\r
+ int ret=fread(buf,1,512,fp);\r
+ uint8_t count=1;\r
+ while (ret==512)\r
+ { \r
+ buf=realloc(buf,512*count+512);\r
+ ret=fread(buf+512*count,1,512,fp);\r
+ count++;\r
+ }\r
+ cJSON *heart_data=cJSON_Parse(buf);\r
+ free(buf);\r
+ printf("读文件\r\n");\r
+ if(heart_data==NULL)\r
+ {\r
+ printf("解析失败\r\n");\r
+ }\r
+ cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,"spo2_data_list");\r
+ int item_num=cJSON_GetArraySize(heart_data_list);\r
+ char *send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+ int send_len=0;\r
+ uint32_t Packet_id=1;\r
+ uint16_t packet_total;\r
+ if(item_num%96==0)\r
+ {\r
+ packet_total=item_num/96;\r
+ }\r
+ else\r
+ {\r
+ packet_total=item_num/96+1;\r
+ }\r
+ for(int i=0;i<item_num;i++)\r
+ {\r
+ cJSON * heart_data_item=cJSON_GetArrayItem(heart_data_list,i);\r
+ uint32 timestamp=cJSON_GetObjectItem(heart_data_item,"timestamp")->valueint;\r
+ uint8_t vale=cJSON_GetObjectItem(heart_data_item,"oxygen_value")->valueint;\r
+ memcpy(send_buf+send_len,×tamp,4);\r
+ send_len+=4;\r
+ memcpy(send_buf+send_len,&vale,1);\r
+ send_len+=1;\r
\r
- //498\r
- // printf("startDataLen:%d totalEnd:%d ble_nus_max_data_len %d\r\n",startDataLen,totalEnd,ble_nus_max_data_len);\r
- if( startDataLen+EACH_DATA_LEN > ble_nus_max_data_len-3){\r
- // printf("startDataLen111111111111:%d totalEnd:%d crcvalue:%d\r\n",startDataLen,totalEnd,crcvalue);\r
- totalEnd = totalEnd+startDataLen;//240 300-240 \r
+ if((i%96==0 && i!=0) || (item_num-1==i))\r
+ {\r
+ //发送数据\r
+ if(item_num-1==i)\r
+ {\r
+ send_big_data(0,send_buf,send_len,item_num*5,Packet_id,packet_total,0x40);\r
+ free(send_buf);\r
+ sendbigDataBufState=false;\r
\r
- \r
- // printf("startDataLen22222222222:%d totalEnd:%d crcvalue:%x\r\n",startDataLen,totalEnd,crcvalue);\r
- if((totalEnd-17) >= dataLen && totalEnd > 17)\r
+ }else\r
{\r
- memcpy(buf+11,&packCount,4);\r
- dataPackLen = startDataLen-17;\r
- memcpy(buf+15,&dataPackLen,2);\r
- crcvalue = Calculate_CRC_Big(buf+17,dataPackLen);\r
- printf("end crcvalue1:%x\r\n",crcvalue);\r
- buf[startDataLen] = crcvalue;\r
- sendDataNow(buf,startDataLen+1);\r
-\r
- packCount = 1;\r
- sendbigDataBufState = false;\r
- break;\r
- }else{\r
- memcpy(buf+11,&packCount,4);\r
- dataPackLen = startDataLen-19;//减掉前面17+2个字节的包头总共就是19个数据\r
- memcpy(buf+15,&dataPackLen,2);\r
- crcvalue = Calculate_CRC_Big(buf+19,dataPackLen);\r
- uint16_t pack_size = ble_nus_max_data_len-17-crcvalue;\r
- memcpy(buf+17,&pack_size,2);\r
- printf("end crcvalue3:%x %d %d %d\r\n",crcvalue,ble_nus_max_data_len,pack_size,crcvalue);\r
- buf[startDataLen] = crcvalue;//\r
- sendDataNow(buf,startDataLen+1);\r
- packCount+=1;\r
- if(dataLen - totalEnd > ble_nus_max_data_len)//总的减去已发送的数据,如果还是大于最大mtu的大小还是还是按照分包来计算\r
- {\r
- startDataLen = 19;\r
- }\r
- else{\r
- startDataLen = 17;\r
- }\r
+ send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,0x40);\r
+ free(send_buf);\r
+ send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+ send_len=0;\r
}\r
- // printf("startDataLen2222222222:%d totalEnd:%d\r\n",startDataLen,totalEnd);\r
}\r
- else{\r
- if(packCount > 0)\r
+ send_buf=realloc(send_buf,i*5+5);\r
+ }\r
+ cJSON_free(heart_data);\r
+ \r
+}\r
+\r
+void Read_heart_file_buf_Data(uint8_t num)\r
+{\r
+ sendbigDataBufState = true;//分包同步数据不允许打断\r
+ char *buf=(char *)malloc(sizeof(char)*512);\r
+\r
+ const char *path=get_health_data_path();\r
+ FILE *fp= fopen(path,"r+");\r
+ if(fp==NULL)\r
+ {\r
+ return;\r
+ }\r
+ int ret=fread(buf,1,512,fp);\r
+ uint8_t count=1;\r
+ while (ret==512)\r
+ { \r
+ buf=realloc(buf,512*count+512);\r
+ ret=fread(buf+512*count,1,512,fp);\r
+ count++;\r
+ }\r
+ printf("读文件\r\n");\r
+ cJSON *heart_data=cJSON_Parse(buf);\r
+ free(buf);\r
+ if(heart_data==NULL)\r
+ {\r
+ printf("解析失败\r\n");\r
+ }\r
+ cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,"heart_data_list");\r
+ int item_num=cJSON_GetArraySize(heart_data_list);\r
+ char *send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+ int send_len=0;\r
+ uint32_t Packet_id=1;\r
+ uint16_t packet_total;\r
+ if(item_num%num==0)\r
+ {\r
+ packet_total=item_num/num;\r
+ }\r
+ else\r
+ {\r
+ packet_total=item_num/num+1;\r
+ }\r
+ for(int i=0;i<item_num;i++)\r
+ {\r
+ cJSON * heart_data_item=cJSON_GetArrayItem(heart_data_list,i);\r
+ uint32 timestamp=cJSON_GetObjectItem(heart_data_item,"timestamp")->valueint;\r
+ uint8_t vale=cJSON_GetObjectItem(heart_data_item,"heart_value")->valueint;\r
+ printf("heart_value :%d\r\n",vale);\r
+ printf("timestamp :%d\r\n",timestamp);\r
+ memcpy(send_buf+send_len,×tamp,4);\r
+ send_len+=4;\r
+ memcpy(send_buf+send_len,&vale,1);\r
+ send_len+=1;\r
+ \r
+ if(((i+1)%num==0 && i!=0) || (item_num-1==i))\r
+ {\r
+ //发送数据\r
+ if(item_num-1==i)\r
{\r
- totalEnd = totalEnd+EACH_DATA_LEN;//第二包开始只加每个数据类型的总的字节数据大小 比如步数 数据类型 时间 步数 总共是8个就加8\r
- // printf("pack1 startDataLen22222222222:%d totalEnd:%d crcvalue:%x\r\n",startDataLen,totalEnd,crcvalue);\r
- if((totalEnd-17) >= dataLen && totalEnd > 17)\r
- {\r
- memcpy(buf+11,&packCount,4);\r
- dataPackLen = startDataLen-17;\r
- memcpy(buf+15,&dataPackLen,2);\r
- crcvalue = Calculate_CRC_Big(buf+17,dataPackLen);\r
- buf[startDataLen] = crcvalue;\r
- sendDataNow(buf,startDataLen+1);\r
- sendbigDataBufState = false;\r
- break;\r
- }\r
- }else{\r
- if(dataPackLen < ble_nus_max_data_len) //只有总的包数小于最大的mtu的大小\r
- {\r
- totalEnd = startDataLen-17;//不包含前17个字节的数据,前17个不是数据类型\r
- // printf("pack0 startDataLen22222222222:%d totalEnd:%d crcvalue:%x\r\n",startDataLen,totalEnd,crcvalue);\r
- if(totalEnd >= dataLen && totalEnd > 0)\r
- {\r
- memcpy(buf+11,&packCount,4);\r
- dataPackLen = startDataLen-17;\r
- memcpy(buf+15,&dataPackLen,2);\r
- crcvalue = Calculate_CRC_Big(buf+17,dataPackLen);\r
- printf("total end crcvalue2:%x\r\n",crcvalue);\r
- buf[startDataLen] = crcvalue;//校验和的值 最后一个校验和也要发给app\r
- sendDataNow(buf,startDataLen+1);\r
- sendbigDataBufState = false;\r
- break;\r
- }\r
- }\r
+ printf("sendbuf :%s sendbuf_len%d\r\n",send_buf,send_len);\r
+ send_big_data(0,send_buf,send_len,item_num*5,Packet_id,packet_total,0x40);\r
+ free(send_buf);\r
+ sendbigDataBufState=false;\r
+\r
+ }else\r
+ {\r
+ send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,0x40);\r
+ free(send_buf);\r
+ send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
+ send_len=0;\r
}\r
}\r
+ send_buf=realloc(send_buf,i*5+10);\r
}\r
+ cJSON_free(heart_data);\r
+ \r
}\r
+\r
+\r
//手机app下发读设备数据指令\r
void readDevDataBle(uint8_t *crcnum,uint16_t len,uint8_t crcvalue)\r
{\r
{\r
case 0x40://同步心率历史数据\r
EACH_DATA_LEN = HEART_DATA_LEN;\r
+ Read_heart_file_buf_Data(3);\r
break;\r
case 0x41://同步血氧历史数据\r
+ printf("同步血氧数据\r\n");\r
EACH_DATA_LEN = SPO2_DATA_LEN;\r
+ Read_spo2_file_buf_Data(0x41);\r
break;\r
case 0x43: //同步步数历史数据\r
EACH_DATA_LEN = STEP_DATA_LEN;\r