uint32_t size=0;
uint32_t toal_data=0;
+ time_t currtime;
+ struct tm *timeinfo_now;
+ time(&currtime);
+ timeinfo_now = localtime(&currtime);
+
+ uint8_t mon_now=timeinfo_now->tm_mon;
+ uint8_t day_now=timeinfo_now->tm_mday;
+
if (fp != NULL)
{
fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
memcpy(&sing_date,date+i*8+4,4);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d", timetemp);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "data: %d", sing_date);
- if(sing_date>0)
+
+ struct tm *timeinfo;
+ timeinfo = localtime((time_t *) &timetemp);
+
+
+ if(sing_date>0 && timeinfo->tm_mday==day_now && timeinfo->tm_mon==mon_now)
toal_data+=sing_date;
}
+ free(date);
return toal_data;
}
uint32_t size=0;
float toal_data=0;
+ time_t currtime;
+ struct tm *timeinfo_now;
+ time(&currtime);
+ timeinfo_now = localtime(&currtime);
+
+ uint8_t mon_now=timeinfo_now->tm_mon;
+ uint8_t day_now=timeinfo_now->tm_mday;
+
if (fp != NULL)
{
fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
memcpy(&sing_date,date+i*8+4,4);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d", timetemp);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "data: %d", sing_date);
- if(sing_date>0)
+
+
+ struct tm *timeinfo;
+ timeinfo = localtime((time_t *) &timetemp);
+
+
+ if(sing_date>0 && timeinfo->tm_mday==day_now && timeinfo->tm_mon==mon_now)
toal_data+=sing_date;
}
+ free(date);
return toal_data;
}
uint32_t size=0;
float toal_data=0;
+ time_t currtime;
+ struct tm *timeinfo_now;
+ time(&currtime);
+ timeinfo_now = localtime(&currtime);
+
+ uint8_t mon_now=timeinfo_now->tm_mon;
+ uint8_t day_now=timeinfo_now->tm_mday;
+
if (fp != NULL)
{
fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d", timetemp);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "data: %d", sing_date);
- if(sing_date>0)
+ struct tm *timeinfo;
+ timeinfo = localtime((time_t *) &timetemp);
+
+
+ if(sing_date>0 && timeinfo->tm_mday==day_now && timeinfo->tm_mon==mon_now)
toal_data+=sing_date;
}
+ free(date);
return toal_data;
}
uint32_t size=0;
float toal_data=0;
+ time_t currtime;
+ struct tm *timeinfo_now;
+ time(&currtime);
+ timeinfo_now = localtime(&currtime);
+
+ uint8_t mon_now=timeinfo_now->tm_mon;
+ uint8_t day_now=timeinfo_now->tm_mday;
+
+
if (fp != NULL)
{
fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
memcpy(&sing_date,date+i*6+4,2);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d", timetemp);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "data: %d", sing_date);
- if(sing_date>0)
+
+ struct tm *timeinfo;
+ timeinfo = localtime((time_t *) &timetemp);
+
+
+ if(sing_date>0 && timeinfo->tm_mday==day_now && timeinfo->tm_mon==mon_now)
toal_data+=sing_date;
}
+ free(date);
return toal_data;
}
#include "OsApi.h"
#include "los_printf.h"
#include "cywee_ble_Service.h"
+#include "custom_utils.h"
+
/*********************/
/*** Macro Defines ***/
/*********************/
fclose(fp);
}
+typedef struct time_and_32_date
+{
+ uint32_t time;
+ uint32_t data;
+
+}time_and_32_date_t;
+
+
+typedef struct time_and_float_date
+{
+ uint32_t time;
+ float data;
+
+}time_and_float_date_t;
+
+typedef struct time_and_16_date
+{
+ uint16_t time;
+ float data;
+
+}time_and_16_date_t;
+
+
+uint8_t time_is_repetition(uint32_t time,void *data,char *path,void *data_array,uint8_t type)
+{
+ uint8_t is_repetition=0;
+ if(type==0)
+ {
+ time_and_32_date_t * p= (time_and_32_date_t*)data_array;
+ FILE *fp=fopen(path,"rb+");
+ if (fp == NULL) return 0;
+ fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+ uint32_t size = ftell(fp); // 获取当前文件指针位置,即文件大小
+ fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+
+ for(int i=0;i<size/8;i++)
+ {
+ fread(&p[i].time,sizeof(uint32_t),1,fp);
+ fread(&p[i].data,sizeof(uint32_t),1,fp);
+ if(p[i].time==time)
+ {
+ is_repetition++;
+ uint32_t _32_data=*(uint32_t *)data;
+ p[i].data+=_32_data;
+ }
+ }
+ fclose(fp);
+
+ }
+ else if(type==1)
+ {
+ time_and_float_date_t * p= (time_and_float_date_t*)data_array;
+ FILE *fp=fopen(path,"rb+");
+ if (fp == NULL) return 0;
+ fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+ uint32_t size = ftell(fp); // 获取当前文件指针位置,即文件大小
+ fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+
+ for(int i=0;i<size/8;i++)
+ {
+ fread(&p[i].time,sizeof(uint32_t),1,fp);
+ fread(&p[i].data,sizeof(float),1,fp);
+ if(p[i].time==time)
+ {
+ is_repetition++;
+ float _float_data=*(float *)data;
+ p[i].data+=_float_data;
+ }
+ }
+ fclose(fp);
+ }
+ else if(type==2)
+ {
-void CWM_OS_saveData_history(void* new_data,void *history ,uint32_t len,uint8_t type){
+ time_and_16_date_t * p= (time_and_16_date_t*)data_array;
+ FILE *fp=fopen(path,"rb+");
+ if (fp == NULL) return 0;
+
+ fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+ uint32_t size = ftell(fp); // 获取当前文件指针位置,即文件大小
+ fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+
+ for(int i=0;i<size/6;i++)
+ {
+ fread(&p[i].time,sizeof(uint32_t),1,fp);
+ fread(&p[i].data,sizeof(uint16_t),1,fp);
+ if(p[i].time==time)
+ {
+ is_repetition++;
+ uint16_t _16_data=*(uint16_t *)data;
+ p[i].data+=_16_data;
+ }
+ }
+ fclose(fp);
+ }
+
+ return is_repetition;
+}
+
+
+
+
+void CWM_OS_saveData_history(void* new_data,void *history ,uint32_t len,uint8_t type,uint32_t time){
struct stat info;
char path_[64]={0};
char timeday[12] = {0};
- uapi_get_YYMMDD_Time(timeday, '_');
+ uapi_get_TIME_STR(time,timeday, '_','\0',DATE_Y_M_D);
int i_data=0;
float f_data=0;
CWM_OS_dbgPrintf(" save path %s \n",path_);
-
if(i_data<0 || f_data<0 ||i_data_16<0)
{
i_data=0;
f_data=0;
*(int*)history=0;
-
- }
- if(i_data==0 && f_data==0 && i_data_16==0)
- {
return;
}
-
- FILE * fp = fopen(path_,"ab+");
- if(fp==NULL)
+
+ if(type==CYWEE_DATA_STEP && i_data!=0)
{
- CWM_OS_dbgPrintf("open fail\n");
- return;
- }
- uint32_t creationTime;
- int ret =uapi_get_timestampe_ss(&creationTime);
- uint8_t creationTime_[4]={0};
- memcpy(creationTime_,&creationTime,4);
- CWM_OS_dbgPrintf("uapi_get_timestampe_ss %02X %02X %02X %02X\n",creationTime_[0],creationTime_[1],creationTime_[2],creationTime_[3]);
+ #ifdef GOAL_DATA_AMEND
+ time_and_32_date_t array[25]={0};
+ for(int i=0;i<25;i++)
+ {
+ array[i].data=0;
+ array[i].time=0;
+ }
+
+
+ if(time_is_repetition(time,&i_data,path_,array,0))
+ {
- CWM_OS_dbgPrintf("uapi_get_timestampe_ss %d %d\n",ret,creationTime);
- creationTime=creationTime-60*60;//当前值计入上小时
- ret =fwrite(&creationTime,1,4,fp);
- if(ret==0)
+ FILE * fp = fopen(path_,"wb+");
+ if(fp==NULL)
+ {
+ CWM_OS_dbgPrintf("open fail\n");
+ return;
+ }
+
+ for(int i=0;i<25;i++)
+ {
+ if(array[i].time && array[i].data)
+ {
+ fwrite(&array[i].time,sizeof(array[i].time),1,fp);
+ fwrite(&array[i].data,sizeof(array[i].data),1,fp);
+ }
+
+ }
+ fclose(fp);
+
+ }
+ else
+ #endif
+ {
+
+ FILE * fp = fopen(path_,"ab+");
+ if(fp)
+ {
+ uint32_t creationTime;
+ creationTime=time;//当前值计入上小时
+
+ int ret =fwrite(&creationTime,1,4,fp);
+ if(ret==0)
+ {
+ CWM_OS_dbgPrintf("fwrite failed %d\n",ret);
+ }
+ if(i_data)
+ ret =fwrite(&i_data,1,sizeof(i_data),fp);
+ fclose(fp);
+ }
+
+ }
+
+ }
+ if((type==CYWEE_DATA_CALORIES|| type==CYWEE_DATA_DISTANCE) && f_data!=0)
{
- CWM_OS_dbgPrintf("fwrite failed %d\n",ret);
+
+ #ifdef GOAL_DATA_AMEND
+ time_and_float_date_t array[25]={0};
+
+ for(int i=0;i<25;i++)
+ {
+ array[i].data=0;
+ array[i].time=0;
+ }
+
+ if(time_is_repetition(time,&i_data,path_,array,1))
+ {
+
+ FILE * fp = fopen(path_,"wb+");
+ if(fp==NULL)
+ {
+ CWM_OS_dbgPrintf("open fail\n");
+ return;
+ }
+
+ for(int i=0;i<25;i++)
+ {
+ if(array[i].time && array[i].data)
+ {
+ fwrite(&array[i].time,sizeof(array[i].time),1,fp);
+ fwrite(&array[i].data,sizeof(array[i].data),1,fp);
+ }
+
+ }
+ fclose(fp);
+
+ }
+ else
+ #endif
+ {
+
+ FILE * fp = fopen(path_,"ab+");
+ if(fp)
+ {
+ uint32_t creationTime;
+ creationTime=time;//当前值计入上小时
+
+ int ret =fwrite(&creationTime,1,4,fp);
+ if(ret==0)
+ {
+ CWM_OS_dbgPrintf("fwrite failed %d\n",ret);
+ }
+ if(f_data)
+ ret =fwrite(&f_data,1,sizeof(f_data),fp);
+
+ fclose(fp);
+
+ }
+ }
}
- #ifndef ONE_TIME_CONUT_TOTAL
- if(i_data)
- ret =fwrite(&i_data,1,len,fp);
- else if(i_data_16)
- ret =fwrite(&i_data_16,1,len,fp);
- else if(f_data)
- ret =fwrite(&f_data,1,len,fp);
- #else
- retgit =fwrite(new_data,1,len,fp);
- #endif
- if(ret==0)
+ if((type==CYWEE_DATA_FAT) && i_data_16!=0)
{
- CWM_OS_dbgPrintf("fwrite failed %d\n",ret);
+
+ #ifdef GOAL_DATA_AMEND
+ time_and_16_date_t array[25]={0};
+
+ for(int i=0;i<25;i++)
+ {
+ array[i].data=0;
+ array[i].time=0;
+ }
+
+ if(time_is_repetition(time,&i_data,path_,array,2))
+ {
+
+ FILE * fp = fopen(path_,"wb+");
+ if(fp==NULL)
+ {
+ CWM_OS_dbgPrintf("open fail\n");
+ return;
+ }
+
+ for(int i=0;i<25;i++)
+ {
+ if(array[i].time && array[i].data)
+ {
+ fwrite(&array[i].time,sizeof(array[i].time),1,fp);
+ fwrite(&array[i].data,sizeof(array[i].data),1,fp);
+ }
+
+ }
+ fclose(fp);
+
+ }
+ else
+ #endif
+
+ {
+ FILE * fp = fopen(path_,"ab+");
+ if(fp)
+ {
+ uint32_t creationTime;
+ creationTime=time;//当前值计入上小时
+
+ int ret =fwrite(&creationTime,1,4,fp);
+ if(ret==0)
+ {
+ CWM_OS_dbgPrintf("fwrite failed %d\n",ret);
+ }
+ if(i_data_16)
+ ret =fwrite(&i_data_16,1,sizeof(i_data_16),fp);
+
+ fclose(fp);
+
+ }
+ }
}
+
+
if(i_data)
*(int*)history=*(int*)new_data;
else if(i_data_16)
else if(f_data)
*(float*)history=*(float*)new_data;
- fclose(fp);
+
}
-void CWM_OS_saveData_STAND_history(uint8_t *falg,uint32_t len){
+void CWM_OS_saveData_STAND_history(uint8_t *falg,uint32_t len,uint32_t time){
if(*falg)
{
struct stat info;
char path_[64]={0};
char timeday[12] = {0};
- uapi_get_YYMMDD_Time(timeday, '_');
+ uapi_get_TIME_STR(time,timeday, '_','\0',DATE_Y_M_D);
sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_STAND_DATA_PATH,timeday);
CWM_OS_dbgPrintf("open fail\n");
return;
}
+ uint32_t ret;
+
uint32_t creationTime;
- int ret =uapi_get_timestampe_ss(&creationTime);
+ creationTime=time;//当前值计入上小时
- creationTime=creationTime-60*60;//当前值计入上小时
CWM_OS_dbgPrintf("uapi_get_timestampe_ss %d\n",ret);
ret =fwrite(&creationTime,1,len,fp);
uint8_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
+ uint32_t array[25]={0};
+ uint8_t read_size=0;
+ fread(array,sizeof(uint32_t),size/4,fp);
+ uint8_t is_repetition=0;
+ for(int x=0;x<size/4;x++)
+ {
+ if(array[x])
+ {
+ for(int y=0;y<size/4;y++)
+ {
+ if(array[y]==array[x] && y!=x)
+ {
+ is_repetition++;
+ }
+ }
+ }
+
+ }
+
+
+
fclose(fp);
- return size/4;
+ return size/4-is_repetition;
}
{
if(uapi_dev_runtime_get_goal_storage_status())
{
- return;
+ // return
+ msleep(10);
}
uapi_dev_runtime_set_goal_storage_status(1);
uint8_t get_now_stand_count(void)
{
- return get_stand_count()+stand_falg;
+ return get_stand_count();
}
-void stand_history_save(void) {
+void stand_history_save(uint32_t time) {
// CWM_OS_dbgPrintf("stand_history is saving\n");
- CWM_OS_saveData_STAND_history(&stand_falg,sizeof(int));
+ CWM_OS_saveData_STAND_history(&stand_falg,sizeof(int),time);
}
-void step_history_save(void)
+void step_history_save(uint32_t time)
{
int data = get_step_data();
// CWM_OS_dbgPrintf("step_history is saving\n");
- CWM_OS_saveData_history(&data,&history_step_,sizeof(int),CYWEE_SAVE_DATA_STEP);
+ CWM_OS_saveData_history(&data,&history_step_,sizeof(int),CYWEE_SAVE_DATA_STEP,time);
}
-void calories_history_save(void)
+void calories_history_save(uint32_t time)
{
int data= get_calories_data();
float history_calories = (float)data;
// CWM_OS_dbgPrintf("history_calories is saving\n");
- CWM_OS_saveData_history(&history_calories,&history_calories_,sizeof(float),CYWEE_SAVE_DATA_CALORIES);
+ CWM_OS_saveData_history(&history_calories,&history_calories_,sizeof(float),CYWEE_SAVE_DATA_CALORIES,time);
}
-void distances_history_save(void)
+void distances_history_save(uint32_t time)
{
int data= get_distance_data();
float history_distances_now = (float)data / 1000.0;
// CWM_OS_dbgPrintf("history_distances is saving\n");
- CWM_OS_saveData_history(&history_distances_now,&history_distances_,sizeof(float),CYWEE_SAVE_DATA_DISTANCE);
+ CWM_OS_saveData_history(&history_distances_now,&history_distances_,sizeof(float),CYWEE_SAVE_DATA_DISTANCE,time);
}
-void fat_history_save(void)
+void fat_history_save(uint32_t time)
{
int data= get_fat_time_data();
int16_t temp_data=0;
history_fat_=0;
return;
}
- CWM_OS_saveData_history(&temp_data,&history_fat_,sizeof(uint16_t),CYWEE_SAVE_DATA_FAT);
+ CWM_OS_saveData_history(&temp_data,&history_fat_,sizeof(uint16_t),CYWEE_SAVE_DATA_FAT,time);
}
int32_t get_now_hour_data(void*value, uint8_t type)
void cywee_goal_history_save(void)
{
- stand_history_save();
- calories_history_save();
- fat_history_save();
- distances_history_save();
- step_history_save();
+ // stand_history_save();
+ // calories_history_save();
+ // fat_history_save();
+ // distances_history_save();
+ // step_history_save();
}
history_calories=0; //卡路里数据
history_distances=0; //历史数据
history_fat=0; //历史燃脂数据
-
+
+ history_step_=0;
+ history_calories=0;
+ history_distances=0;
+ history_fat=0;
// new_fat = 0; //当前燃脂数据
}