401 lines
10 KiB
C
401 lines
10 KiB
C
#include "file.h"
|
|
#include "filedata.h"
|
|
|
|
static uint32_t get_meter_data(uint32_t pluseCounter,uint32_t reversepluseCounter)
|
|
{
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void get_one_reportdata(uint8_t * val,struct waterdata_struct * waterdata)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
static void curtime_printf(struct waterdata_struct * waterdata,uint8_t day,uint8_t i)
|
|
{
|
|
#ifdef DEBUG_FILEI2C
|
|
HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d ",
|
|
waterdata->year,waterdata->mon,waterdata->day,waterdata->hour,waterdata->min,
|
|
i,day);
|
|
waterdata_printf(waterdata);
|
|
#endif
|
|
}
|
|
|
|
static bool is_waterdata_cmp(struct waterdata_struct * waterdata,uint8_t year,uint8_t mon,uint8_t day,uint8_t valid)
|
|
{
|
|
uint8_t ck = get_ck((uint8_t*)&waterdata->invalid,WATERDATA_LEN);
|
|
if(waterdata->invalid == valid && waterdata->crc == ck && waterdata->year == year && waterdata->mon == mon && waterdata->day == day)
|
|
{
|
|
if(waterdata->year>=CUR_YEAR && waterdata->year!=0xFF)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void get_waterdata(struct waterdata_struct * waterdata,uint8_t year,uint8_t mon,uint8_t day,uint8_t valid,uint8_t * value)
|
|
{
|
|
if(is_waterdata_cmp(waterdata,year,mon,day,valid))
|
|
{
|
|
get_one_reportdata(value,waterdata);
|
|
}
|
|
else
|
|
{
|
|
memset(value,0xEE,4);
|
|
}
|
|
#ifdef DEBUG_FILEI2C
|
|
HT_PRINT("[data=%02x%02x%02x%02x]\r\n",value[0],value[1],value[2],value[3]);
|
|
#endif
|
|
}
|
|
|
|
void get_waterdata_spacetime(struct waterdata_struct * waterdata,uint8_t year,uint8_t mon,uint8_t day,uint8_t valid,uint8_t * value)
|
|
{
|
|
|
|
uint32_t tmpyear = 0;
|
|
uint8_t tmpmon = 0;
|
|
uint8_t tmpday = 0;
|
|
uint8_t tmphour = 0;
|
|
uint8_t tmpmin = 0;
|
|
uint8_t spaceday = DATA_DAY_MAX;
|
|
uint32_t newtime = 0;
|
|
uint32_t oldtime = 0;
|
|
|
|
get_complete_curtime(&tmpyear,&tmpmon,&tmpday,&tmphour,&tmpmin);
|
|
|
|
newtime = mktime(tmpyear,tmpmon,tmpday,0,0,0);
|
|
|
|
oldtime = mktime(year,mon,day,0,0,0);
|
|
|
|
if(newtime>=oldtime)
|
|
{
|
|
spaceday = get_space_day(oldtime,newtime);
|
|
}
|
|
|
|
if(is_waterdata_cmp(waterdata,year,mon,day,valid)&& spaceday<=1)
|
|
{
|
|
get_one_reportdata(value,waterdata);
|
|
}
|
|
else
|
|
{
|
|
memset(value,0xEE,4);
|
|
}
|
|
#ifdef DEBUG_FILEI2C
|
|
HT_PRINT("[spaceday=%d] oldtime=%d newtime=%d [data=%02x%02x%02x%02x] \r\n",spaceday,oldtime,newtime,value[0],value[1],value[2],value[3]);
|
|
#endif
|
|
}
|
|
|
|
void get_reportdata_mask(uint8_t year,uint8_t mon,uint8_t day,uint8_t density,uint8_t * num,uint8_t *value)
|
|
{
|
|
uint8_t realday = 0;
|
|
uint8_t valid = 0;
|
|
uint32_t tmpyear = 0;
|
|
uint8_t tmpmon = 0;
|
|
uint8_t tmpday = 0;
|
|
bool find = false;
|
|
struct waterdata_struct waterdata;
|
|
year = year + DEC_YEAR;
|
|
for(uint8_t i=0; i<DATA_DAY_MAX; i++)
|
|
{
|
|
validflag_read(i);
|
|
valid = get_validflag();
|
|
tmpyear = get_validyear();
|
|
tmpmon = get_validmon();
|
|
tmpday = get_validday();
|
|
if(tmpyear == year && tmpmon == mon && tmpday == day)
|
|
{
|
|
realday = i;
|
|
find = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!find)
|
|
{
|
|
* num = 0;
|
|
return;
|
|
}
|
|
if(density > COLLECT_DENSITY_60)
|
|
{
|
|
density = COLLECT_DENSITY_30;
|
|
}
|
|
|
|
if(COLLECT_DENSITY_15 == density)
|
|
{
|
|
for(uint8_t i=0; i<24; i++)
|
|
{
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,15,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,30,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,45,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
}
|
|
* num = 96;
|
|
}
|
|
else if(COLLECT_DENSITY_30 == density)
|
|
{
|
|
for(uint8_t i=0; i<24; i++)
|
|
{
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,30,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
}
|
|
* num = 48;
|
|
}
|
|
else
|
|
{
|
|
for(uint8_t i=0; i<24; i++)
|
|
{
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
}
|
|
* num = 24;
|
|
}
|
|
}
|
|
|
|
//得到当前时间之前24小时数据
|
|
static void get_reportdata_curtime1(uint8_t density,uint8_t * num,uint8_t *value,uint8_t begin,uint8_t end,uint8_t realday)
|
|
{
|
|
struct waterdata_struct waterdata;
|
|
uint8_t valid = 0;
|
|
uint32_t year = 0;
|
|
uint8_t mon = 0;
|
|
uint8_t day = 0;
|
|
|
|
validflag_read(realday);
|
|
|
|
valid = get_validflag();
|
|
year = get_validyear();
|
|
mon = get_validmon();
|
|
day = get_validday();
|
|
|
|
if(COLLECT_DENSITY_15 == density)
|
|
{
|
|
for(uint8_t i=begin; i<end; i++)
|
|
{
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata_spacetime(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,15,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata_spacetime(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,30,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata_spacetime(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,45,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata_spacetime(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
}
|
|
* num = 96;
|
|
}
|
|
else if(COLLECT_DENSITY_30 == density)
|
|
{
|
|
for(uint8_t i=begin; i<end; i++)
|
|
{
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata_spacetime(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,30,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata_spacetime(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
}
|
|
* num = 48;
|
|
}
|
|
else
|
|
{
|
|
for(uint8_t i=begin; i<end; i++)
|
|
{
|
|
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
|
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
|
curtime_printf(&waterdata,day,i);
|
|
get_waterdata_spacetime(&waterdata,year,mon,day,valid,value);
|
|
value = value + 4;
|
|
}
|
|
* num = 24;
|
|
}
|
|
}
|
|
|
|
|
|
void get_reportdata_curtime2(uint8_t realday,uint8_t hour,uint8_t density,uint8_t * num,uint8_t *value)
|
|
{
|
|
uint8_t begin = 0;
|
|
uint8_t end = 0;
|
|
if(realday==0)
|
|
{
|
|
if(COLLECT_DENSITY_15 == density)
|
|
{
|
|
begin=hour;
|
|
get_reportdata_curtime1(density,num,value,begin,24,DATA_DAY_MAX-1);
|
|
end = hour;
|
|
get_reportdata_curtime1(density,num,&value[4*(24-end)*4],0,end,realday);
|
|
}
|
|
else if(COLLECT_DENSITY_30 == density)
|
|
{
|
|
begin=hour;
|
|
get_reportdata_curtime1(density,num,value,begin,24,DATA_DAY_MAX-1);
|
|
end = hour;
|
|
get_reportdata_curtime1(density,num,&value[2*(24-end)*4],0,end,realday);
|
|
}
|
|
else
|
|
{
|
|
begin=hour;
|
|
get_reportdata_curtime1(density,num,value,begin,24,DATA_DAY_MAX-1);
|
|
end = hour;
|
|
get_reportdata_curtime1(density,num,&value[(24-end)*4],0,end,realday);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if(hour == 0)
|
|
{
|
|
//0点
|
|
realday = realday - 1;
|
|
get_reportdata_curtime1(density,num,value,0,24,realday);
|
|
}
|
|
else
|
|
{
|
|
if(COLLECT_DENSITY_15 == density)
|
|
{
|
|
begin=hour;
|
|
get_reportdata_curtime1(density,num,value,begin,24,realday-1);
|
|
end = hour;
|
|
get_reportdata_curtime1(density,num,&value[4*(24-end)*4],0,end,realday);
|
|
}
|
|
else if(COLLECT_DENSITY_30 == density)
|
|
{
|
|
begin=hour;
|
|
get_reportdata_curtime1(density,num,value,begin,24,realday-1);
|
|
end = hour;
|
|
get_reportdata_curtime1(density,num,&value[2*(24-end)*4],0,end,realday);
|
|
}
|
|
else
|
|
{
|
|
begin=hour;
|
|
get_reportdata_curtime1(density,num,value,begin,24,realday-1);
|
|
end = hour;
|
|
get_reportdata_curtime1(density,num,&value[(24-end)*4],0,end,realday);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void get_reportdata_maskhour(uint8_t year,uint8_t mon,uint8_t day,uint8_t hour,uint8_t density,uint8_t * num,uint8_t *value)
|
|
{
|
|
uint8_t realday = 0;
|
|
uint32_t tmpyear = 0;
|
|
uint8_t tmpmon = 0;
|
|
uint8_t tmpday = 0;
|
|
bool find = false;
|
|
year = year + DEC_YEAR;
|
|
for(uint8_t i=0; i<DATA_DAY_MAX; i++)
|
|
{
|
|
validflag_read(i);
|
|
tmpyear = get_validyear();
|
|
tmpmon = get_validmon();
|
|
tmpday = get_validday();
|
|
if(tmpyear == year && tmpmon == mon && tmpday == day)
|
|
{
|
|
realday = i;
|
|
find = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!find)
|
|
{
|
|
* num = 0;
|
|
return;
|
|
}
|
|
if(density > COLLECT_DENSITY_60)
|
|
{
|
|
density = COLLECT_DENSITY_30;
|
|
}
|
|
get_reportdata_curtime2(realday,hour,density,num,value);
|
|
}
|
|
|
|
void get_reportdata_curtime(uint8_t density,uint8_t * num,uint8_t *value)
|
|
{
|
|
uint32_t year = 0;
|
|
uint8_t mon = 0;
|
|
uint8_t day = 0;
|
|
uint8_t hour = 0;
|
|
uint8_t min = 0;
|
|
uint8_t realday = 0;
|
|
uint32_t tmpyear = 0;
|
|
uint8_t tmpmon = 0;
|
|
uint8_t tmpday = 0;
|
|
bool find = false;
|
|
get_complete_curtime(&year,&mon,&day,&hour,&min);
|
|
for(uint8_t i=0; i<DATA_DAY_MAX; i++)
|
|
{
|
|
validflag_read(i);
|
|
tmpyear = get_validyear();
|
|
tmpmon = get_validmon();
|
|
tmpday = get_validday();
|
|
if(tmpyear == year && tmpmon == mon && tmpday == day)
|
|
{
|
|
realday = i;
|
|
find = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!find)
|
|
{
|
|
* num = 0;
|
|
return;
|
|
}
|
|
if(density > COLLECT_DENSITY_60)
|
|
{
|
|
density = COLLECT_DENSITY_30;
|
|
}
|
|
get_reportdata_curtime2(realday,hour,density,num,value);
|
|
}
|
|
|
|
|