namespace OHOS
{
struct addressbook addressbook_t;
- static char *buf = NULL;
- void read_addressbook_bin_file()
+ //static char *buf = NULL;
+ void read_addressbook_to_struct(char *buf)
{
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "read_addressbook_bin_file");
- FILE *fp= fopen(ADDRESS_BOOK_PATH,"rb+");
- if(fp==NULL)
- {
- fp= fopen(ADDRESS_BOOK_PATH,"wb+");
- fclose(fp);
- return;
- }
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "read_addressbook_bin_file!!!!!!");
- buf = (char *)malloc(512);
+ // FILE *fp= fopen(ADDRESS_BOOK_PATH,"rb+");
+ // if(fp==NULL)
+ // {
+ // fp= fopen(ADDRESS_BOOK_PATH,"wb+");
+ // fclose(fp);
+ // return;
+ // }
+ // // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "read_addressbook_bin_file!!!!!!");
+ // buf = (char *)malloc(512);
- int ret=fread(buf,1,512,fp);
- int offset_f=512;
- while (ret==512)
- {
- buf = (char *)realloc(buf,offset_f+512);
- ret=fread(&buf[offset_f],1,512,fp);
- offset_f+=512;
- }
+ // int ret=fread(buf,1,512,fp);
+ // int offset_f=512;
+ // while (ret==512)
+ // {
+ // buf = (char *)realloc(buf,offset_f+512);
+ // ret=fread(&buf[offset_f],1,512,fp);
+ // offset_f+=512;
+ // }
int num=buf[0];//人数
+ if(num>20)
+ {
+ num=0;
+ printf("异常全部清除\r\n");
+ return;
+ }
printf("人数: %d\r\n",num);
addressbook_t.num=num;
int offset=1;
offset=offset+yun+1;
}
}
- fclose(fp);
- if(buf)
- {
- free(buf);
- }
+ //fclose(fp);
+ // if(buf)
+ // {
+ // free(buf);
+ // }
}
void get_phone_addrss_name(char *name,const char *phone)
return;
}
+ void read_addressbook_bin_file()
+ {
+ FILE *fp= fopen(ADDRESS_BOOK_PATH,"rb+");
+ if(fp==NULL)
+ {
+ return;
+ }
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "read_addressbook_bin_file!!!!!!");
+ char* buf = (char *)malloc(512);
+
+ int ret=fread(buf,1,512,fp);
+ int offset_f=512;
+ while (ret==512)
+ {
+ buf = (char *)realloc(buf,offset_f+512);
+ ret=fread(&buf[offset_f],1,512,fp);
+ offset_f+=512;
+ }
+
+ int num=buf[0];//人数
+ if(num>20 && num<0)
+ {
+ num=0;
+ printf("异常全部清除\r\n");
+ return;
+ }
+ printf("人数: %d\r\n",num);
+ addressbook_t.num=num;
+ int offset=1;
+ for (int j=0;j<num;j++)
+ {
+ uint8_t sex = buf[offset];
+ printf("性别: %d\r\n",sex);
+ addressbook_t.Contact_t[j].sex=sex;
+ offset=offset+1;
+
+ //uint8_t name_len=buf[offset];
+ //("name_len %d\r\n",name_len);
+ // char *name=(char *)malloc(sizeof(char)*name_len+1);
+ memset(addressbook_t.Contact_t[j].name,0,NAME_LEN);
+ {
+
+ memcpy(addressbook_t.Contact_t[j].name,&buf[offset],NAME_LEN);
+ printf("姓名: %s\r\n",addressbook_t.Contact_t[j].name);
+ // addressbook_t.Contact_t[j].name=name;
+ }
+ offset=offset+NAME_LEN+1;
+ uint8_t phone_num=buf[offset];
+ offset=offset+1;
+ addressbook_t.Contact_t[j].phone_num=phone_num;
+ for(int i=0;i<2;i++)
+ {
+
+
+ memset(addressbook_t.Contact_t[j].phone_number_t[i].number,0,NUMBER_LEN);
+
+ memcpy(addressbook_t.Contact_t[j].phone_number_t[i].number,&buf[offset],NUMBER_LEN);
+
+ printf("号码: %s\r\n",addressbook_t.Contact_t[j].phone_number_t[i].number);
+ // addressbook_t.Contact_t[j].phone_number_t[i].number=phonen_name;
+ offset=offset+NUMBER_LEN+1;
+ }
+ for(int i=0;i<2;i++)
+ {
+
+ memset(addressbook_t.Contact_t[j].phone_number_t[i].affiliating_area,0,AREA_LEN);
+
+ memcpy(addressbook_t.Contact_t[j].phone_number_t[i].affiliating_area,&buf[offset],AREA_LEN);
+
+ printf("归属地: %s\r\n",addressbook_t.Contact_t[j].phone_number_t[i].affiliating_area);
+ // addressbook_t.Contact_t[j].phone_number_t[i].affiliating_area=add_buf;
+ offset=offset+AREA_LEN+1;
+
+ memset(addressbook_t.Contact_t[j].phone_number_t[i].operator_t,0,OPERATOR_LEN);
+
+ memcpy(addressbook_t.Contact_t[j].phone_number_t[i].operator_t,&buf[offset+1],OPERATOR_LEN);
+
+ printf("运营商: %s\r\n",addressbook_t.Contact_t[j].phone_number_t[i].operator_t);
+ // addressbook_t.Contact_t[j].phone_number_t[i].operator_t=yun_buf;
+
+ offset=offset+OPERATOR_LEN+1;
+ }
+ }
+ fclose(fp);
+ if(buf)
+ {
+ free(buf);
+ }
+
+ }
+
void write_addressbook_bin_flle()
{
FILE *fp= fopen(ADDRESS_BOOK_PATH,"wb+");
// }
buf[0] =addressbook_t.num;
+ if(buf[0]>20 && buf[0]<0)
+ {
+ buf[0]=0;
+ }
printf("人数: %d\r\n",buf[0]);
int offset=1;
for(int i=0;i<addressbook_t.num;i++)
{
buf[offset]= addressbook_t.Contact_t[i].sex;
- offset=offset+1;
printf("性别 %d\r\n",buf[offset]);
- buf[offset]=strlen(addressbook_t.Contact_t[i].name)+1;
- printf("写入名字长度: %d\r\n",buf[offset]);
- memcpy(&buf[offset+1],addressbook_t.Contact_t[i].name,buf[offset]);
- printf("写入名字: %s\r\n",&buf[offset+1]);
- offset=offset+1+strlen(addressbook_t.Contact_t[i].name)+1;
+ offset=offset+1;
+ //buf[offset]=NAME_LEN;//strlen(addressbook_t.Contact_t[i].name)+1;
+ //printf("写入名字长度: %d\r\n",buf[offset]);
+ memcpy(&buf[offset],addressbook_t.Contact_t[i].name,NAME_LEN);
+ printf("写入名字: %s\r\n",&buf[offset]);
+ offset=offset+NAME_LEN+1;
buf[offset]=addressbook_t.Contact_t[i].phone_num;
+ if(buf[offset]>2)
+ {
+ buf[offset]=2;
+ }
printf("写入号码个数: %d\r\n",buf[offset]);
offset=offset+1;
- for(int j=0;j<addressbook_t.Contact_t[i].phone_num;j++)
+ for(int j=0;j<2;j++)
{
- buf[offset]=strlen(addressbook_t.Contact_t[i].phone_number_t[j].number)+1;
- memcpy(&buf[offset+1],addressbook_t.Contact_t[i].phone_number_t[j].number,buf[offset]);
- printf("写入号码: %s\r\n",&buf[offset+1]);
- offset=offset+1+strlen(addressbook_t.Contact_t[i].phone_number_t[j].number)+1;
+ memcpy(&buf[offset],addressbook_t.Contact_t[i].phone_number_t[j].number,NUMBER_LEN);
+ printf("写入号码: %s\r\n",&buf[offset]);
+ offset=offset+NUMBER_LEN+1;
}
- for(int j=0;j<addressbook_t.Contact_t[i].phone_num;j++)
+ for(int j=0;j<2;j++)
{
- buf[offset]=strlen(addressbook_t.Contact_t[i].phone_number_t[j].affiliating_area)+1;
- memcpy(&buf[offset+1],addressbook_t.Contact_t[i].phone_number_t[j].affiliating_area,buf[offset]);
- printf("写入运营商: %s\r\n",&buf[offset+1]);
- offset=offset+1+strlen(addressbook_t.Contact_t[i].phone_number_t[j].affiliating_area)+1;
-
- buf[offset]=strlen(addressbook_t.Contact_t[i].phone_number_t[j].operator_t)+1;
- memcpy(&buf[offset+1],addressbook_t.Contact_t[i].phone_number_t[j].operator_t,buf[offset]);
- printf("写入所属地: %s\r\n",&buf[offset+1]);
- offset=offset+1+strlen(addressbook_t.Contact_t[i].phone_number_t[j].operator_t)+1;
+ //buf[offset]=strlen(addressbook_t.Contact_t[i].phone_number_t[j].affiliating_area)+1;
+ memcpy(&buf[offset],addressbook_t.Contact_t[i].phone_number_t[j].affiliating_area,AREA_LEN);
+ printf("写入运营商: %s\r\n",&buf[offset]);
+ offset=offset+AREA_LEN+1;
+
+ //buf[offset]=strlen(addressbook_t.Contact_t[i].phone_number_t[j].operator_t)+1;
+ memcpy(&buf[offset],addressbook_t.Contact_t[i].phone_number_t[j].operator_t,OPERATOR_LEN);
+ printf("写入所属地: %s\r\n",&buf[offset]);
+ offset=offset+OPERATOR_LEN+1;
}
}
fwrite((void *)buf,1,offset,fp);
if(Check_CRC(crcnum,len,crcvalue))\r
{\r
//解析,传来的二进制数据\r
- char *address_path = addressbook();\r
- FILE *file = fopen(address_path, "wb+");\r
- if (file)\r
- {\r
- size_t len_t = fwrite((void *)crcnum,1,len,file);\r
- fclose(file); \r
- if(len_t == len){\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fwrite:%d",len_t);\r
- addressbookToRead();\r
- }\r
- }\r
+ // char *address_path = addressbook();\r
+ // FILE *file = fopen(address_path, "wb+");\r
+ // if (file)\r
+ // {\r
+ // size_t len_t = fwrite((void *)crcnum,1,len,file);\r
+ // fclose(file); \r
+ // if(len_t == len){\r
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fwrite:%d",len_t);\r
+ \r
+ // }\r
+ // }\r
+ addressbookToRead((char*)crcnum);\r
value[17] = 0x01;\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
}\r
//开启指定运动模式\r
+static training_ble training_ble_data;\r
static void OpenSportModeCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memcpy(value+15,&tmp_data,2);\r
if(Check_CRC(crcnum,len,crcvalue))\r
{\r
- uint8_t sportMode = crcnum[0];//运动类型 0 健走 1跑步 2骑行 3\r
-\r
+ training_ble_data.sportType= crcnum[0];//运动类型 0 健走 1跑步 2骑行 3\r
+ training_ble_data.controlmd= START;\r
+ printf("开启指定运动%d\r\n",crcnum[0]);\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,2);\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
memcpy(value+15,&tmp_data,2);\r
if(Check_CRC(crcnum,len,crcvalue))\r
{\r
+ \r
+ training_ble_data.sportType= 4;//运动类型 0 健走 1跑步 2骑行 3\r
+ training_ble_data.controlmd= END;\r
+ printf("结束运动\r\n");\r
+\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,2);\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
if(Check_CRC(crcnum,len,crcvalue))//\r
{\r
uint8_t PauseStop = crcnum[0];//0 暂停 1恢复\r
+ if(PauseStop==0)\r
+ {\r
+ training_ble_data.sportType= 4;//运动类型 0 健走 1跑步 2骑行 3\r
+ training_ble_data.controlmd= STOP;\r
+ printf("运动暂停\r\n");\r
+\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,2);\r
+ }\r
+ else\r
+ {\r
+ training_ble_data.sportType= 4;//运动类型 0 健走 1跑步 2骑行 3\r
+ training_ble_data.controlmd= RECOVER;\r
+ printf("运动恢复\r\n");\r
+\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,2);\r
+\r
+ }\r
value[17] = 1;\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
\r
\r
\r
-void Read_spo2_file_buf_Data(uint8_t num)\r
+void Read_file_buf_send_bin_Data(uint8_t num,uint16_t id,uint8_t single_data_len,char *data_item)\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
+ const char *path=NULL;\r
+ switch (id)\r
{\r
- send_big_data(1,NULL,0,0,1,1,0x41);\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
+ case 0x40://同步心率历史数据\r
+ path=get_health_data_path();\r
+ break;\r
+ case 0x41://同步血氧历史数据\r
+ path=NULL;\r
+ break;\r
+ case 0x43: //同步步数历史数据\r
+ path=NULL;\r
+ break;\r
+ case 0x44://同步燃脂时间数据\r
+ path=NULL;\r
+ break;\r
+ case 0x45://同步站立历史数据\r
+ path=NULL;\r
+ break;\r
+ case 0x46://同步卡路里历史数据\r
+ path=NULL; \r
+ break;\r
+ case 0x47://同步距离历史数据\r
+ path=NULL; \r
+ break;\r
+ case 0x49://同步基础训练历史数据\r
+ path=NULL; \r
+ break;\r
+ case 0x4b://睡眠历史数据\r
+ path=NULL;\r
+ break;\r
}\r
- for(int i=0;i<item_num;i++)\r
+ if(path==NULL)\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
- printf("sendbuf :%s sendbuf_len%d\r\n",send_buf,send_len);\r
- send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,0x41);\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,0x41);\r
- free(send_buf);\r
- send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
- send_len=0;\r
- Packet_id++;\r
- }\r
- }\r
- send_buf=realloc(send_buf,i*5+10);\r
+ send_big_data(1,NULL,0,0,1,1,id);\r
+ sendbigDataBufState = false;//分包同步数据不允许打断\r
+ return;\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
- send_big_data(1,NULL,0,0,1,1,0x40);\r
+ send_big_data(1,NULL,0,0,1,1,id);\r
+ printf("打开文件失败%s\r\n",path);\r
+ sendbigDataBufState = false;//分包同步数据不允许打断\r
return;\r
}\r
int ret=fread(buf,1,512,fp);\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
+ printf("读文件\r\n");\r
if(heart_data==NULL)\r
{\r
printf("解析失败\r\n");\r
}\r
- cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,"heart_data_list");\r
+ cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,data_item);\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
{\r
packet_total=item_num/num+1;\r
}\r
- for(int i=0;i<item_num;i++)\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
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
+ memcpy(send_buf+send_len,&vale,single_data_len);\r
+ send_len+=single_data_len;\r
\r
if(((i+1)%num==0 && i!=0) || (item_num-1==i))\r
{\r
if(item_num-1==i)\r
{\r
printf("sendbuf :%s sendbuf_len%d\r\n",send_buf,send_len);\r
- send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,0x40);\r
+ send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,id);\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
+ send_big_data(1,send_buf,send_len,item_num*5,Packet_id,packet_total,id);\r
free(send_buf);\r
send_buf=(char *)malloc(sizeof(char)*HEART_DATA_LEN);\r
send_len=0;\r
if(Check_CRC(crcnum+17,len-18,crcvalue))\r
{\r
bleSendTypeID=crcnum[2];\r
+ int num;\r
switch (crcnum[2])\r
{\r
case 0x40://同步心率历史数据\r
EACH_DATA_LEN = HEART_DATA_LEN;\r
- int num=(ble_nus_max_data_len-18)/HEART_DATA_LEN;\r
+ num=(ble_nus_max_data_len-18)/HEART_DATA_LEN;\r
printf("同步心率数据,每包最多:%d 条数据\r\n",num);\r
- Read_heart_file_buf_Data(num);\r
+ Read_file_buf_send_bin_Data(num,0x40,EACH_DATA_LEN,"heart_data_list");\r
break;\r
case 0x41://同步血氧历史数据\r
printf("同步血氧数据\r\n");\r
EACH_DATA_LEN = SPO2_DATA_LEN;\r
- Read_spo2_file_buf_Data(num);\r
+ num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
+ Read_file_buf_send_bin_Data(num,0x41,EACH_DATA_LEN,"heart_data_list");\r
break;\r
case 0x43: //同步步数历史数据\r
EACH_DATA_LEN = STEP_DATA_LEN;\r
+ num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
+ Read_file_buf_send_bin_Data(num,0x43,EACH_DATA_LEN,"heart_data_list");\r
+\r
break;\r
case 0x44://同步燃脂时间数据\r
EACH_DATA_LEN = FATTIME_DATA_LEN;\r
+ num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
+ Read_file_buf_send_bin_Data(num,0x44,EACH_DATA_LEN,"heart_data_list");\r
break;\r
case 0x45://同步站立历史数据\r
EACH_DATA_LEN = STAND_DATA_LEN;\r
+ num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
+ Read_file_buf_send_bin_Data(num,0x45,EACH_DATA_LEN,"heart_data_list");\r
break;\r
case 0x46://同步卡路里历史数据\r
EACH_DATA_LEN = KCAL_DATA_LEN;\r
+ num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
+ Read_file_buf_send_bin_Data(num,0x46,EACH_DATA_LEN,"heart_data_list");\r
break;\r
case 0x47://同步距离历史数据\r
EACH_DATA_LEN = DIS_DATA_LEN;\r
+ num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
+ Read_file_buf_send_bin_Data(num,0x47,EACH_DATA_LEN,"heart_data_list");\r
break;\r
case 0x49://同步基础训练历史数据\r
EACH_DATA_LEN = DIS_DATA_LEN;\r
+ num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
+ Read_file_buf_send_bin_Data(num,0x49,EACH_DATA_LEN,"heart_data_list");\r
break;\r
case 0x4b://睡眠历史数据\r
+ EACH_DATA_LEN = DIS_DATA_LEN;\r
+ num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
+ Read_file_buf_send_bin_Data(num,0x4b,EACH_DATA_LEN,"heart_data_list");\r
+\r
break;\r
default:\r
break;\r