Files
HBshuiwuConcentrator/filedata/filereportdata.c
2025-12-15 16:07:49 +08:00

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);
}