#include "bletest.h"
-char * struct_to_json_buf_malloc_()
+char * struct_to_json_buf_malloc_(void)
{
- cJSON *data;
+
+ cJSON *dataJSON = cJSON_CreateObject();
+ cJSON* data_arryJSON = cJSON_CreateArray();
+ struct Trainingdata * data=NULL;
+ int i=0;
+ //char file_path[128] = {0};
+ char timeday[12] = {0};
+ uapi_get_YYMMDD_Time(timeday, '_');
+ printf("%s\r\n",timeday);
+ //sprintf(file_path, "%s%s.bin", TRAINING_PATH_BLE, timeday);
+
+ while(data=read_Trainingdata_data(timeday, i))
+ {
+ cJSON* itemJSON = cJSON_CreateObject();
+ if(data!=NULL)
+ {
+ cJSON_AddNumberToObject(itemJSON,"src",data->src);
+ cJSON_AddNumberToObject(itemJSON,"ty",data->ty);
+ cJSON_AddNumberToObject(itemJSON,"st",data->st);
+ cJSON_AddNumberToObject(itemJSON,"sp",data->sp);
+ cJSON_AddNumberToObject(itemJSON,"tgt",data->tgt);
+ cJSON_AddNumberToObject(itemJSON,"tg",data->tg);
+ cJSON_AddNumberToObject(itemJSON,"pg",data->pg);
+ cJSON_AddNumberToObject(itemJSON,"du",data->du);
+ cJSON_AddNumberToObject(itemJSON,"ca",data->ca);
+ cJSON_AddNumberToObject(itemJSON,"di",data->di);
+ cJSON_AddNumberToObject(itemJSON,"hr",data->hr);
+ cJSON_AddNumberToObject(itemJSON,"stp",data->stp);
+ cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON);
+ free(data);
+ }
+ else{
+ break;
+ }
+ i++;
+ }
+ cJSON_AddItemToObject(dataJSON,"recs",data_arryJSON);
+
+ char *json_format = cJSON_PrintUnformatted(dataJSON);
+ cJSON_Delete(dataJSON);
+ int pSize = cJSON_GetArraySize(dataJSON);
+ printf("训练历史数据:%s\r\n",json_format);
+ return json_format;
}
void add_addressbookToRead(char *data)
memcpy(buf + 3, &packet_total, 4); // 总包数\r
memcpy(buf + 7, &total, 4); // 总数据长度\r
memcpy(buf + 11, &Packet_id, 4); // 数据包ID\r
- memcpy(buf + 15, &datalen, 2); // 数据长度\r
+ memcpy(buf + 15, &datalen, 2); // 包数据长度\r
\r
// 处理数据和计算CRC\r
if (data == NULL) {\r
if (flag) {\r
sendDataNow(buf, 17 + datalen + 1); // 直接发送数据\r
} else {\r
- sendBleData(buf, 17 + datalen + 1); // 使用BLE发送数据\r
+ sendBleData(buf, 17 + datalen + 1); // 判断是否在传输或接收多包数据\r
}\r
\r
free(buf); // 释放内存空间\r
}\r
}\r
//同步基础训练历史数据 training history data\r
-static void trainiHistoryDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void trainiHistoryDataCmd(uint16_t pack_size)\r
{\r
- \r
- cJSON *dataJSON = cJSON_CreateObject();\r
- cJSON* data_arryJSON = cJSON_CreateArray();\r
- \r
- for(uint8_t i =0;i<2;i++)\r
- {\r
- cJSON* itemJSON = cJSON_CreateObject();\r
- \r
- cJSON_AddNumberToObject(itemJSON,"src",i);\r
- cJSON_AddNumberToObject(itemJSON,"ty",2+20*i);\r
- cJSON_AddNumberToObject(itemJSON,"st",30+i*0);\r
- cJSON_AddNumberToObject(itemJSON,"sp",1);\r
- cJSON_AddNumberToObject(itemJSON,"tgt",1);\r
- cJSON_AddNumberToObject(itemJSON,"tg",1);\r
- cJSON_AddNumberToObject(itemJSON,"pg",1);\r
- cJSON_AddNumberToObject(itemJSON,"du",1);\r
- cJSON_AddNumberToObject(itemJSON,"ca",1);\r
- cJSON_AddNumberToObject(itemJSON,"di",1);\r
- cJSON_AddNumberToObject(itemJSON,"hr",1);\r
- cJSON_AddNumberToObject(itemJSON,"stp",1);\r
- cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON);\r
- }\r
- cJSON_AddItemToObject(dataJSON,"recs",data_arryJSON);\r
-\r
- char *json_format = cJSON_PrintUnformatted(dataJSON);\r
- int pSize = cJSON_GetArraySize(dataJSON);\r
-\r
- printf("%d pSize:%d\n",strlen(json_format),pSize);\r
- cJSON_Delete(dataJSON);\r
- printf("%s\n",json_format);\r
- uint32_t data_len = strlen(json_format);\r
\r
- uint8_t value[18+data_len];\r
- memset(value,0,18+data_len);\r
- uint32_t tmp = 1;\r
- uint32_t tmpToall = 40;\r
- uint16_t tmp_data = 40;\r
- value[0] = 0x72;\r
- value[1] = 0x01;\r
- value[2] = 0x49;\r
- memcpy(value+3,&tmp,4);\r
- memcpy(value+7,&tmpToall,4);\r
- memcpy(value+11,&tmp,4);\r
- memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
- {\r
- \r
- memcpy(value+17,json_format,data_len);\r
- // value[17] = 1;// \r
- value[17+data_len] = Calculate_CRC(value,data_len+17);\r
- sendBleData(value,data_len+17+1);\r
- }else\r
- {\r
- value[17] = 0;\r
- value[18] = Calculate_CRC(value,18);\r
- sendBleData(value,19);\r
- }\r
+ \r
+ char *json_format = struct_to_json_buf_malloc_();\r
+ uint32_t data_len = strlen(json_format);\r
+ char *data=(char *)malloc(pack_size+17);\r
+ uint32_t surplus_len=data_len;\r
+ uint32_t pack;\r
+ if(data_len%pack_size==0)\r
+ {\r
+ pack=data_len/pack_size;\r
+ }\r
+ else\r
+ { \r
+ pack=data_len/pack_size+1;\r
+ }\r
+ uint32_t pack_id=1;\r
+ uint32_t offset=0;\r
+ while (surplus_len!=0)\r
+ {\r
+ if(surplus_len>=pack_size)\r
+ {\r
+ surplus_len=surplus_len-pack_size;\r
+ send_big_data(1,json_format+offset,pack_size,data_len,pack_id,pack,0x49,1);\r
+ offset+=pack_size;\r
+ }\r
+ else\r
+ {\r
+ \r
+ printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+ send_big_data(1,json_format+offset,surplus_len,data_len,pack_id,pack,0x49,1);\r
+ break;\r
+ }\r
+ pack_id++;\r
+ }\r
+ free(json_format);\r
}\r
//同步睡眠数据\r
static void sleepDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
case 0x40://同步心率历史数据\r
EACH_DATA_LEN = HEART_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/HEART_DATA_LEN;\r
+ if(num>96)\r
+ {\r
+ num=96;\r
+ }\r
printf("同步心率数据,每包最多:%d 条数据\r\n",num);\r
Read_file_buf_send_bin_Data(num,0x40,"heart_data_list");\r
break;\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,"heart_data_list");\r
+ num=(ble_nus_max_data_len-18);\r
+ if(num>482)\r
+ {\r
+ num=482;\r
+ }\r
+ trainiHistoryDataCmd(200);\r
break;\r
case 0x4b://睡眠历史数据\r
EACH_DATA_LEN = DIS_DATA_LEN;\r
//green,red,ir
int green,red,ir;
char* str= (char *)req->data;
+ char *pchStrTmpIn = NULL;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",str);
char *tokbuf=NULL;
- tokbuf=strtok(str,",");
+ tokbuf=strtok_r(str,",",&pchStrTmpIn);
+ if(tokbuf!=NULL)
green=atoi(tokbuf);
- tokbuf=strtok(NULL,",");
- red=atoi(tokbuf);
- tokbuf=strtok(NULL,"\0");
+
+ tokbuf=strtok_r(NULL,",",&pchStrTmpIn);
+ if(tokbuf!=NULL)
+ red=atoi(tokbuf);
+
+ tokbuf=strtok_r(NULL,"\0",&pchStrTmpIn);
+ if(tokbuf!=NULL)
ir=atoi(tokbuf);
+
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d,%d,%d",green,red,ir);
testhrsenson1View * t= testhrsenson1View::GetInstance();
//green,red,ir
int green,red,ir;
char* str= (char *)req->data;
+ char *pchStrTmpIn = NULL;
+
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",str);
+
char *tokbuf=NULL;
- tokbuf=strtok(str,",");
+ tokbuf=strtok_r(str,",",&pchStrTmpIn);
+ if(tokbuf!=NULL)
green=atoi(tokbuf);
- tokbuf=strtok(NULL,",");
- red=atoi(tokbuf);
- tokbuf=strtok(NULL,"\0");
+
+ tokbuf=strtok_r(NULL,",",&pchStrTmpIn);
+ if(tokbuf!=NULL)
+ red=atoi(tokbuf);
+
+ tokbuf=strtok_r(NULL,"\0",&pchStrTmpIn);
+ if(tokbuf!=NULL)
ir=atoi(tokbuf);
+
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d,%d,%d",green,red,ir);
testhrsenson1View * t= testhrsenson1View::GetInstance();