河北水利局项目
This commit is contained in:
280
filedata/filedata.c
Normal file
280
filedata/filedata.c
Normal file
@@ -0,0 +1,280 @@
|
||||
#include "file.h"
|
||||
#include "filedata.h"
|
||||
|
||||
extern u8 GetSum(u8 * buffer, u16 length);
|
||||
|
||||
|
||||
struct waterdata_struct waterdata;
|
||||
struct curtime_struct curtime;
|
||||
struct valid_struct valid;
|
||||
|
||||
uint8_t get_ck(uint8_t *val, uint16_t len)
|
||||
{
|
||||
return GetSum(val, len);
|
||||
}
|
||||
|
||||
|
||||
//得到正向数据
|
||||
static void get_forwarddata()
|
||||
{
|
||||
}
|
||||
|
||||
//得到反向数据
|
||||
static void get_reverseddata()
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
//得到状态
|
||||
static void get_status()
|
||||
{
|
||||
waterdata.status[0] = 0;
|
||||
waterdata.status[1] = 0;
|
||||
}
|
||||
*/
|
||||
//得到状态
|
||||
|
||||
|
||||
static void get_waterdata(int32_t year,uint8_t mon,uint8_t day,uint8_t hour,uint8_t min)
|
||||
{
|
||||
get_forwarddata();
|
||||
get_reverseddata();
|
||||
waterdata.invalid = DATA_VALID_AA;
|
||||
waterdata.year = year;
|
||||
waterdata.mon = mon;
|
||||
waterdata.day = day;
|
||||
waterdata.hour = hour;
|
||||
waterdata.min = min;
|
||||
waterdata.crc = get_ck(&(waterdata.invalid),WATERDATA_LEN);
|
||||
}
|
||||
|
||||
uint32_t get_base_time()
|
||||
{
|
||||
return curtime.time;
|
||||
}
|
||||
|
||||
|
||||
bool curtime_iscmp(struct curtime_struct * time1,struct curtime_struct * time2)
|
||||
{
|
||||
if(time1->time == time2->time && time1->year == time2->year &&
|
||||
time1->mon == time2->mon && time1->day == time2->day &&
|
||||
time1->crc == time2->crc)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void curtime_write()
|
||||
{
|
||||
uint32_t year = 0;
|
||||
uint8_t mon = 0;
|
||||
uint8_t day = 0;
|
||||
struct curtime_struct tmpcurtime;
|
||||
|
||||
curtime.time = get_curtime(&year,&mon,&day);
|
||||
curtime.year = year;
|
||||
curtime.mon = mon;
|
||||
curtime.day = day;
|
||||
curtime.crc = get_ck((uint8_t*)&(curtime),CUR_TIME_LEN);
|
||||
|
||||
file_curtime_read((uint8_t*)&tmpcurtime,sizeof(tmpcurtime));
|
||||
|
||||
if(!curtime_iscmp(&tmpcurtime,&curtime))
|
||||
{
|
||||
file_curtime_write((uint8_t*)&curtime,sizeof(curtime));
|
||||
}
|
||||
}
|
||||
|
||||
void validflag_read(uint8_t day)
|
||||
{
|
||||
file_validflag_read(day,(uint8_t*)&valid,sizeof(valid));
|
||||
|
||||
if(valid.crc != get_ck((uint8_t*)&(valid),VALID_DATA_LEN))
|
||||
{
|
||||
valid.valid = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
void validflag_write(uint32_t year,uint8_t mon,uint8_t date,uint8_t day)
|
||||
{
|
||||
//标志每天只写一直。
|
||||
//如果年月日和保存的年月日不等,认为写入。
|
||||
//数据是否有效
|
||||
validflag_read(day);
|
||||
if(valid.year != year || valid.mon != mon || valid.day != date)
|
||||
{
|
||||
valid.year = year;
|
||||
valid.mon = mon;
|
||||
valid.day = date;
|
||||
valid.valid = DATA_VALID_AA;
|
||||
valid.crc = get_ck((uint8_t*)&(valid),VALID_DATA_LEN);
|
||||
file_validflag_write(day,(uint8_t*)&valid,sizeof(valid));
|
||||
}
|
||||
else
|
||||
{
|
||||
//如果年月日和保存的年月日相等,但是有效标志不等于AA
|
||||
if(valid.valid == DATA_VALID_AA)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
valid.year = year;
|
||||
valid.mon = mon;
|
||||
valid.day = date;
|
||||
valid.valid = DATA_VALID_AA;
|
||||
valid.crc = get_ck((uint8_t*)&(valid),VALID_DATA_LEN);
|
||||
file_validflag_write(day,(uint8_t*)&valid,sizeof(valid));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t get_validflag()
|
||||
{
|
||||
return valid.valid;
|
||||
}
|
||||
|
||||
uint32_t get_validyear()
|
||||
{
|
||||
return valid.year;
|
||||
}
|
||||
|
||||
uint8_t get_validmon()
|
||||
{
|
||||
return valid.mon;
|
||||
}
|
||||
|
||||
uint8_t get_validday()
|
||||
{
|
||||
return valid.day;
|
||||
}
|
||||
|
||||
void adjust_basetime()
|
||||
{
|
||||
uint32_t year = 0;
|
||||
uint8_t mon = 0;
|
||||
uint8_t date = 0;
|
||||
uint8_t day = 0;
|
||||
uint32_t time = 0;
|
||||
|
||||
time = get_curtime(&year,&mon,&date);
|
||||
file_curtime_read((uint8_t*)&curtime,sizeof(curtime));
|
||||
//第一次开机
|
||||
if(curtime.crc != get_ck((uint8_t*)&(curtime),CUR_TIME_LEN))
|
||||
{
|
||||
curtime_write();
|
||||
}
|
||||
//如果基准时间大于当前时间
|
||||
if(curtime.time>time)
|
||||
{
|
||||
curtime_write();
|
||||
}
|
||||
else
|
||||
{
|
||||
day = get_space_day(time,curtime.time);
|
||||
//如果间隔时间大于DATA_DAY_MAX,重新计数
|
||||
if(day>=DATA_DAY_MAX)
|
||||
{
|
||||
curtime_write();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool is_waterdata_save(uint8_t space,uint32_t year,uint8_t mon,uint8_t day,uint8_t hour,uint8_t min)
|
||||
{
|
||||
struct waterdata_struct waterdata;
|
||||
file_waterdata_read(space,hour,min,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
if(waterdata.year == year && waterdata.mon == mon && waterdata.day == day && waterdata.hour == hour && waterdata.min == min)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void waterdata_write(uint32_t year,uint8_t mon,uint8_t day,uint8_t hour,uint8_t min,uint8_t sec)
|
||||
{
|
||||
uint8_t space = 0;
|
||||
uint32_t oldtime = 0;
|
||||
uint32_t newtime = 0;
|
||||
|
||||
//修正基准时间,新时间会大于等于基准时间,并且小于DATA_DAY_MAX
|
||||
//建立在时间准确的条件下
|
||||
adjust_basetime();
|
||||
|
||||
oldtime = get_base_time();
|
||||
newtime = mktime(year,mon,day,0,0,0);
|
||||
|
||||
min = 0;
|
||||
|
||||
if(newtime>=oldtime)
|
||||
{
|
||||
space = get_space_day(oldtime,newtime);
|
||||
|
||||
//如果是当前年月日,不处理。
|
||||
validflag_write(year,mon,day,space);
|
||||
//得到时间和数据,保存。
|
||||
get_waterdata(year,mon,day,hour,min);
|
||||
|
||||
if(is_waterdata_save(space,year,mon,day,hour,min))
|
||||
{
|
||||
file_waterdata_write(space,hour,min,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//当前时间减去基准时间,得到天数
|
||||
static uint8_t get_sub_day()
|
||||
{
|
||||
uint32_t year = 0;
|
||||
uint8_t mon = 0;
|
||||
uint8_t date = 0;
|
||||
uint32_t oldtime = get_base_time();
|
||||
uint32_t newtime = get_curtime(&year,&mon,&date);
|
||||
uint16_t day = 0;
|
||||
if(newtime>oldtime)
|
||||
{
|
||||
day = get_space_day(oldtime,newtime);
|
||||
}
|
||||
return day;
|
||||
}
|
||||
|
||||
//得到在i2c中的位置
|
||||
uint8_t get_realday(uint8_t day)
|
||||
{
|
||||
uint8_t realday = 0;
|
||||
uint8_t subday = 0;
|
||||
//计算需要重新测试
|
||||
subday = get_sub_day();
|
||||
if(subday>day)
|
||||
{
|
||||
realday = subday - day-1;
|
||||
if(realday>DATA_DAY_MAX-1)
|
||||
{
|
||||
realday = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
realday = DATA_DAY_MAX - 1 - (day - subday);
|
||||
}
|
||||
|
||||
#ifdef DEBUG_FILEI2C
|
||||
HT_PRINT("总天数=%02d i2c位置=%02d 前几日=%02d\r\n",DATA_DAY_MAX,realday,day);
|
||||
#endif
|
||||
return realday;
|
||||
}
|
||||
|
||||
|
||||
void hb_waterdata_write(u16 count,struct waterdata_struct * waterdata)
|
||||
{
|
||||
file_waterdata_write(count,0,0,(uint8_t *)waterdata,sizeof(struct waterdata_struct));
|
||||
}
|
||||
|
||||
void hb_waterdata_read(u16 count,struct waterdata_struct * waterdata)
|
||||
{
|
||||
file_waterdata_read(count,0,0,(uint8_t *)waterdata,sizeof(struct waterdata_struct));
|
||||
}
|
||||
|
||||
|
||||
127
filedata/filedata.h
Normal file
127
filedata/filedata.h
Normal file
@@ -0,0 +1,127 @@
|
||||
#ifndef __FILEDATA_H
|
||||
#define __FILEDATA_H
|
||||
|
||||
#define DEBUG_FILEI2C
|
||||
#define IIC_WATEPLUS_ADDR (1)
|
||||
#define IIC_CUR_TIME_ADDR (1024)
|
||||
#define IIC_WATERDATA_ADDR (10) //存放数据是否有效
|
||||
#define IIC_DAYDATA_ADDR (2048) //每日数据存放空间
|
||||
#define IIC_PAGE_NUM (128)
|
||||
|
||||
#define DATA_VALID_AA (0xAA)
|
||||
|
||||
#define DATA_DAY_MAX (30)
|
||||
#define WATERDATA_LEN (31)
|
||||
#define CUR_TIME_LEN (13)
|
||||
#define VALID_DATA_LEN (7)
|
||||
#define DEC_YEAR (2000-1900)
|
||||
#define CUR_YEAR (121)
|
||||
|
||||
#define uint8_t u8
|
||||
#define uint16_t u16
|
||||
#define uint32_t u32
|
||||
#define HT_PRINT printf
|
||||
|
||||
#define COLLECT_DENSITY_15 (1) //15分钟
|
||||
#define COLLECT_DENSITY_30 (2) //30分钟
|
||||
#define COLLECT_DENSITY_60 (3) //一小时
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
struct waterdata_struct
|
||||
{
|
||||
uint8_t invalid; //是否有效, 1
|
||||
uint8_t current[5]; //取水口流量 5
|
||||
uint8_t sum[5]; //取水口累计流量 5
|
||||
uint8_t surplus[6]; //水表1剩余水量 6
|
||||
u8 ala[4]; //遥测状态及报警信息 4
|
||||
u8 vol[2]; //蓄电池电压 2
|
||||
u8 csq; //信号强度CSQ 1
|
||||
uint32_t year; // 4
|
||||
uint8_t mon; // 1
|
||||
uint8_t day; // 1
|
||||
uint8_t hour; // 1
|
||||
uint8_t min; // 1
|
||||
uint8_t crc;
|
||||
};
|
||||
|
||||
struct curtime_struct
|
||||
{
|
||||
uint32_t time; //当天时间 秒数
|
||||
uint32_t year;
|
||||
uint8_t mon;
|
||||
uint8_t day;
|
||||
uint8_t hour;
|
||||
uint8_t min;
|
||||
uint8_t sec;
|
||||
uint8_t crc;
|
||||
};
|
||||
|
||||
struct valid_struct
|
||||
{
|
||||
uint8_t valid; //当天数据是否有效
|
||||
uint32_t year;
|
||||
uint8_t mon;
|
||||
uint8_t day;
|
||||
uint8_t crc;
|
||||
};
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Year; /*!<RTC 年*/
|
||||
uint8_t Month; /*!<RTC 月*/
|
||||
uint8_t Date; /*!<RTC 日*/
|
||||
uint8_t Hour; /*!<RTC 时*/
|
||||
uint8_t Minute; /*!<RTC 分*/
|
||||
uint8_t Second; /*!<RTC 秒*/
|
||||
uint8_t Week; /*!<RTC 周*/
|
||||
|
||||
}RTC_TimeDateTypeDef,RTC_StampTmieTypeDef;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
|
||||
void file_write_delay();
|
||||
void file_i2c_write(uint32_t addr,uint8_t * buf,uint16_t len);
|
||||
void file_i2c_read(uint32_t addr,uint8_t * buf,uint16_t len);
|
||||
|
||||
|
||||
uint8_t get_ck(uint8_t *val, uint16_t len);
|
||||
uint8_t get_period_day();
|
||||
uint32_t get_curtime();
|
||||
void file_curtime_write(uint8_t * buf,uint8_t len);
|
||||
void file_curtime_read(uint8_t * buf,uint8_t len);
|
||||
|
||||
void file_validflag_write(uint8_t day,uint8_t * buf,uint8_t len);
|
||||
void file_validflag_read(uint8_t day,uint8_t * buf,uint8_t len);
|
||||
|
||||
void validflag_read(uint8_t day);
|
||||
void validflag_write(uint32_t year,uint8_t mon,uint8_t date,uint8_t day);
|
||||
uint8_t get_validflag();
|
||||
uint32_t get_validyear();
|
||||
uint8_t get_validmon();
|
||||
uint8_t get_validday();
|
||||
uint8_t get_realday(uint8_t day);
|
||||
|
||||
void file_waterdata_write(uint8_t day,uint8_t hour,uint8_t min,uint8_t * buf,uint16_t len);
|
||||
void file_waterdata_read(uint8_t day,uint8_t hour,uint8_t min,uint8_t * buf,uint16_t len);
|
||||
|
||||
void get_complete_curtime(uint32_t *curyear,uint8_t *curmon,uint8_t *curday,uint8_t *curhour,uint8_t *curmin);
|
||||
uint8_t bcd_to_dec(uint8_t val);
|
||||
uint8_t get_space_day(uint32_t oldtime,uint32_t newtime);
|
||||
unsigned long mktime (unsigned int year, unsigned int mon,
|
||||
unsigned int day, unsigned int hour,
|
||||
unsigned int min, unsigned int sec);
|
||||
void waterdata_write(uint32_t year,uint8_t mon,uint8_t day,uint8_t hour,uint8_t min,uint8_t sec);
|
||||
|
||||
|
||||
|
||||
#define IIC_DATA_ADDR (4096*4)
|
||||
#define WATERDATA_ONE_LEN (sizeof(struct waterdata_struct))
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
846
filedata/filedatadebug.c
Normal file
846
filedata/filedatadebug.c
Normal file
@@ -0,0 +1,846 @@
|
||||
#include "file.h"
|
||||
#include "filedata.h"
|
||||
#include "general.h"
|
||||
//debug
|
||||
//调试用
|
||||
|
||||
#define DEBUG_TEST
|
||||
|
||||
#ifdef DEBUG_FILEI2C
|
||||
|
||||
#ifdef DEBUG_TEST
|
||||
|
||||
extern uint8_t bcd_to_dec(uint8_t val);
|
||||
|
||||
static bool is_first = false;
|
||||
|
||||
#define uint08 uint8_t
|
||||
#define uint16 uint16_t
|
||||
|
||||
|
||||
|
||||
#define MINUTE 60
|
||||
#define HOUR (60*MINUTE)
|
||||
#define DAY (24*HOUR)
|
||||
#define YEAR (365*DAY)
|
||||
|
||||
//判断是不是闰年
|
||||
int isYunNian(int year)
|
||||
{
|
||||
if(((year%4==0) && (year%100!=0))||(year%400==0))
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
//得出从1970 到现在闰年多出来的天数
|
||||
//每4年多一天,每400年少3天,但是少于400年,就要另算
|
||||
int daysInYunNian(int yearsBetween,int ceturyBetween)
|
||||
{
|
||||
return (yearsBetween/4 - ((ceturyBetween)/4*3+(ceturyBetween)%4-1));
|
||||
|
||||
}
|
||||
//long型的数据只能保存六十多年的妙数不够用的,所以使用的是long long
|
||||
/*
|
||||
long long getSecondsFromNowTo1970()
|
||||
{
|
||||
long long llseconds = 0;
|
||||
|
||||
struct tm *local;
|
||||
int year = 0;
|
||||
int mon = 0;
|
||||
int mday = 0;
|
||||
int hour = 0;
|
||||
int min = 0;
|
||||
int sec = 0;
|
||||
int years =0;
|
||||
int yunYueDays = 0;
|
||||
static int month[12] = {
|
||||
0,
|
||||
DAY*(31),
|
||||
DAY*(31+29),
|
||||
DAY*(31+29+31),
|
||||
DAY*(31+29+31+30),
|
||||
DAY*(31+29+31+30+31),
|
||||
DAY*(31+29+31+30+31+30),
|
||||
DAY*(31+29+31+30+31+30+31),
|
||||
DAY*(31+29+31+30+31+30+31+31),
|
||||
DAY*(31+29+31+30+31+30+31+31+30),
|
||||
DAY*(31+29+31+30+31+30+31+31+30+31),
|
||||
DAY*(31+29+31+30+31+30+31+31+30+31+30)
|
||||
};
|
||||
|
||||
time_t t;
|
||||
t=time(NULL);
|
||||
|
||||
local=localtime(&t);
|
||||
year = local->tm_year;
|
||||
mon = local->tm_mon;
|
||||
mday = local->tm_mday;
|
||||
hour = local->tm_hour;
|
||||
min = local->tm_min;
|
||||
sec = local->tm_sec;
|
||||
years = year-70;
|
||||
yunYueDays = daysInYunNian(years+2,((year+1900)/100 - 1970/100));
|
||||
|
||||
|
||||
llseconds = YEAR*(long long)years + DAY*(long long)yunYueDays;
|
||||
|
||||
llseconds += month[mon];
|
||||
llseconds += DAY*(mday-1); // 再加上本月过去的天数的秒数时间。
|
||||
llseconds += HOUR*hour; // 再加上当天过去的小时数的秒数时间。
|
||||
llseconds += MINUTE*min; // 再加上1 小时内过去的分钟数的秒数时间。
|
||||
llseconds += sec;
|
||||
|
||||
if (mon>1 && !isYunNian(year))
|
||||
llseconds -= DAY;
|
||||
//因为时制的问题快了八个小时要减去(北京时区)
|
||||
llseconds -= 8*HOUR;
|
||||
|
||||
|
||||
printf("the year of now is %d/n",local->tm_year);
|
||||
printf("the month of now is %d/n",local->tm_mon);
|
||||
printf("the mday of now is %d/n",local->tm_mday);
|
||||
printf("the hour of now is %d/n",local->tm_hour);
|
||||
printf("the sec of now is %d/n",local->tm_sec);
|
||||
|
||||
printf("~~~~~the secs of now between 70 is %ld/n",t);
|
||||
printf("~~~~~the secs of now between 70 is %lld/n",llseconds);
|
||||
|
||||
|
||||
printf("__LONG_MAX__ is %ld/n",__LONG_MAX__);
|
||||
printf("__INT_MAX__ is %ld/n",__INT_MAX__);
|
||||
printf("__LONG_LONG_MAX__ is %lld/n",__LONG_LONG_MAX__);
|
||||
printf("DBL_MAX is %0.10lf/n",DBL_MAX);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
int main()
|
||||
{
|
||||
getSecondsFromNowTo1970();
|
||||
return 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(uint8_t day,uint8_t density,uint8_t * num,uint8_t *value)
|
||||
{
|
||||
uint8_t realday = 0;
|
||||
uint8_t valid = 0;
|
||||
uint32_t year = 0;
|
||||
uint8_t mon = 0;
|
||||
uint8_t date = 0;
|
||||
struct waterdata_struct waterdata;
|
||||
|
||||
realday = get_realday(day);
|
||||
validflag_read(realday);
|
||||
valid = get_validflag();
|
||||
year = get_validyear();
|
||||
mon = get_validmon();
|
||||
date = get_validday();
|
||||
|
||||
#ifdef DEBUG_FILEI2C
|
||||
HT_PRINT("存储有效时间 %05d:%02d:%02d 上几天=%02d 实际天数空间存储位置=%02d\r\n",year,mon,date,day,realday);
|
||||
//return;
|
||||
#endif
|
||||
|
||||
if(COLLECT_DENSITY_30 == density)
|
||||
{
|
||||
for(uint8_t i=0; i<24; i++)
|
||||
{
|
||||
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
#ifdef DEBUG_FILEI2C
|
||||
uint8_t * buf = (uint8_t*)&waterdata;
|
||||
HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d valid=%02x forwarddata=%02x%02x%02x%02x reversedata=%02x%02x%02x%02x status=%02x%02x\r\n",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour,waterdata.min,i,day,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10]);
|
||||
#endif
|
||||
if(waterdata.invalid == valid && waterdata.crc == get_ck((uint8_t*)&waterdata.invalid,WATERDATA_LEN) && waterdata.year == year && waterdata.mon == mon && waterdata.day == date)
|
||||
{
|
||||
get_one_reportdata(value,&waterdata);
|
||||
value = value + 4;
|
||||
* num = * num + 1;
|
||||
}
|
||||
|
||||
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
||||
file_waterdata_read(realday,i,30,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
#ifdef DEBUG_FILEI2C
|
||||
buf = (uint8_t*)&waterdata;
|
||||
HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d valid=%02x forwarddata=%02x%02x%02x%02x reversedata=%02x%02x%02x%02x status=%02x%02x\r\n",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour,waterdata.min,i,day,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10]);
|
||||
#endif
|
||||
if(waterdata.invalid == valid && waterdata.crc == get_ck((uint8_t*)&waterdata.invalid,WATERDATA_LEN) && waterdata.year == year && waterdata.mon == mon && waterdata.day == date)
|
||||
{
|
||||
get_one_reportdata(value,&waterdata);
|
||||
value = value + 4;
|
||||
* num = * num + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(uint8_t i=0; i<24; i++)
|
||||
{
|
||||
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
#ifdef DEBUG_FILEI2C
|
||||
uint8_t * buf = (uint8_t*)&waterdata;
|
||||
HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d valid=%02x forwarddata=%02x%02x%02x%02x reversedata=%02x%02x%02x%02x status=%02x%02x\r\n",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour,waterdata.min,i,day,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10]);
|
||||
#endif
|
||||
if(waterdata.invalid == valid && waterdata.crc == get_ck((uint8_t*)&waterdata.invalid,WATERDATA_LEN) && waterdata.year == year && waterdata.mon == mon && waterdata.day == date)
|
||||
{
|
||||
get_one_reportdata(value,&waterdata);
|
||||
value = value + 4;
|
||||
* num = * num + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
void get_reportdata(uint8_t day,uint8_t density,uint8_t * num,uint8_t *value)
|
||||
{
|
||||
uint8_t realday = 0;
|
||||
uint8_t valid = 0;
|
||||
uint32_t year = 0;
|
||||
uint8_t mon = 0;
|
||||
uint8_t date = 0;
|
||||
struct waterdata_struct waterdata;
|
||||
|
||||
realday = get_realday(day);
|
||||
validflag_read(realday);
|
||||
valid = get_validflag();
|
||||
year = get_validyear();
|
||||
mon = get_validmon();
|
||||
date = get_validday();
|
||||
|
||||
#ifdef DEBUG_FILEI2C
|
||||
HT_PRINT("存储有效时间 %05d:%02d:%02d 上几天=%02d 实际天数空间存储位置=%02d\r\n",year,mon,date,day,realday);
|
||||
//return;
|
||||
#endif
|
||||
|
||||
if(COLLECT_DENSITY_30 == density)
|
||||
{
|
||||
for(uint8_t i=0; i<24; i++)
|
||||
{
|
||||
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
#ifdef DEBUG_FILEI2C
|
||||
uint8_t * buf = (uint8_t*)&waterdata;
|
||||
HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d valid=%02x forwarddata=%02x%02x%02x%02x reversedata=%02x%02x%02x%02x status=%02x%02x\r\n",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour,waterdata.min,i,day,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10]);
|
||||
#endif
|
||||
if(waterdata.invalid == valid && waterdata.crc == get_ck((uint8_t*)&waterdata.invalid,WATERDATA_LEN) && waterdata.year == year && waterdata.mon == mon && waterdata.day == date)
|
||||
{
|
||||
get_one_reportdata(value,&waterdata);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(value,0xEE,4);
|
||||
}
|
||||
value = value + 4;
|
||||
|
||||
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
||||
file_waterdata_read(realday,i,30,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
#ifdef DEBUG_FILEI2C
|
||||
buf = (uint8_t*)&waterdata;
|
||||
HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d valid=%02x forwarddata=%02x%02x%02x%02x reversedata=%02x%02x%02x%02x status=%02x%02x\r\n",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour,waterdata.min,i,day,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10]);
|
||||
#endif
|
||||
if(waterdata.invalid == valid && waterdata.crc == get_ck((uint8_t*)&waterdata.invalid,WATERDATA_LEN) && waterdata.year == year && waterdata.mon == mon && waterdata.day == date)
|
||||
{
|
||||
get_one_reportdata(value,&waterdata);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(value,0xEE,4);
|
||||
}
|
||||
value = value + 4;
|
||||
}
|
||||
* num = 48;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(uint8_t i=0; i<24; i++)
|
||||
{
|
||||
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
#ifdef DEBUG_FILEI2C
|
||||
uint8_t * buf = (uint8_t*)&waterdata;
|
||||
HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d valid=%02x forwarddata=%02x%02x%02x%02x reversedata=%02x%02x%02x%02x status=%02x%02x\r\n",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour,waterdata.min,i,day,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10]);
|
||||
#endif
|
||||
if(waterdata.invalid == valid && waterdata.crc == get_ck((uint8_t*)&waterdata.invalid,WATERDATA_LEN) && waterdata.year == year && waterdata.mon == mon && waterdata.day == date)
|
||||
{
|
||||
get_one_reportdata(value,&waterdata);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(value,0xEE,4);
|
||||
}
|
||||
value = value + 4;
|
||||
}
|
||||
* num = 24;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
//在此时间之后的30天
|
||||
void curtime_read()
|
||||
{
|
||||
uint32_t year = 0;
|
||||
uint8_t mon = 0;
|
||||
uint8_t date = 0;
|
||||
uint8_t day = 0;
|
||||
uint32_t time = get_curtime(&year,&mon,&date);
|
||||
|
||||
|
||||
file_curtime_read((uint8_t*)&curtime,sizeof(curtime));
|
||||
|
||||
//第一次开机
|
||||
if(curtime.crc != get_ck((uint8_t*)&(curtime),CUR_TIME_LEN))
|
||||
{
|
||||
curtime_write();
|
||||
}
|
||||
|
||||
//如果时间大于当前时间
|
||||
if(curtime.time>time)
|
||||
{
|
||||
curtime_write();
|
||||
}
|
||||
else
|
||||
{
|
||||
day = get_space_day(time,curtime.time);
|
||||
//如果间隔时间大于DATA_DAY_MAX,重新计数
|
||||
if(day>=DATA_DAY_MAX)
|
||||
{
|
||||
curtime_write();
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef REPORT_REALDATA
|
||||
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(COLLECT_DENSITY_30 == density)
|
||||
{
|
||||
for(uint8_t i=0; i<24; i++)
|
||||
{
|
||||
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
#ifdef DEBUG_FILEI2C
|
||||
uint8_t * buf = (uint8_t*)&waterdata;
|
||||
// HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d valid=%02x forwarddata=%02x%02x%02x%02x reversedata=%02x%02x%02x%02x status=%02x%02x\r\n",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour,waterdata.min,i,day,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10]);
|
||||
#endif
|
||||
if(waterdata.invalid == valid && waterdata.crc == get_ck((uint8_t*)&waterdata.invalid,WATERDATA_LEN) && waterdata.year == year && waterdata.mon == mon && waterdata.day == day)
|
||||
{
|
||||
get_one_reportdata(value,&waterdata);
|
||||
value = value + 4;
|
||||
* num = * num + 1;
|
||||
}
|
||||
|
||||
memset((uint8_t *)&waterdata,0,sizeof(waterdata));
|
||||
file_waterdata_read(realday,i,30,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
#ifdef DEBUG_FILEI2C
|
||||
buf = (uint8_t*)&waterdata;
|
||||
// HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d valid=%02x forwarddata=%02x%02x%02x%02x reversedata=%02x%02x%02x%02x status=%02x%02x\r\n",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour,waterdata.min,i,day,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10]);
|
||||
#endif
|
||||
if(waterdata.invalid == valid && waterdata.crc == get_ck((uint8_t*)&waterdata.invalid,WATERDATA_LEN) && waterdata.year == year && waterdata.mon == mon && waterdata.day == day)
|
||||
{
|
||||
get_one_reportdata(value,&waterdata);
|
||||
value = value + 4;
|
||||
* num = * num + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(uint8_t i=0; i<24; i++)
|
||||
{
|
||||
file_waterdata_read(realday,i,0,(uint8_t *)&waterdata,sizeof(waterdata));
|
||||
#ifdef DEBUG_FILEI2C
|
||||
uint8_t * buf = (uint8_t*)&waterdata;
|
||||
// HT_PRINT("reportdata %04d/%02d/%02d %02d:%02d:00 cnt = %02d day=%02d valid=%02x forwarddata=%02x%02x%02x%02x reversedata=%02x%02x%02x%02x status=%02x%02x\r\n",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour,waterdata.min,i,day,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9],buf[10]);
|
||||
#endif
|
||||
if(waterdata.invalid == valid && waterdata.crc == get_ck((uint8_t*)&waterdata.invalid,WATERDATA_LEN) && waterdata.year == year && waterdata.mon == mon && waterdata.day == day)
|
||||
{
|
||||
get_one_reportdata(value,&waterdata);
|
||||
value = value + 4;
|
||||
* num = * num + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
/*
|
||||
#define DEVICE_EE256 0xa0 //FM24C256的器件地址
|
||||
#define ADDRLEN_EE256 2 //FM24C256的数据地址长度为2字节
|
||||
|
||||
#define LEN_MAX (1)
|
||||
uint08 Test_I2C1(void)
|
||||
{
|
||||
uint08 Device = DEVICE_EE256;
|
||||
uint16 Addr;
|
||||
uint08 AddrLen = ADDRLEN_EE256;
|
||||
uint08 Buf[64];
|
||||
uint08 Len = 16;
|
||||
uint08 Result = 0;
|
||||
|
||||
uint08 TestData[LEN_MAX] = {0};
|
||||
|
||||
memset(TestData,0x66,LEN_MAX);
|
||||
|
||||
IWDT_Clr(); //清系统看门狗
|
||||
|
||||
Addr = 8;
|
||||
Len = 16;
|
||||
|
||||
|
||||
for(uint16 j = 0;j<100;j++)
|
||||
{
|
||||
//memset(Buf, 0, 64);
|
||||
//Result = I2C_Read_Bottom(Device, Addr, AddrLen, Buf, Len);//读ee测试
|
||||
|
||||
memset(Buf, 0x55, 64);
|
||||
memcpy(Buf, TestData, 8);
|
||||
Result = I2C_Write_Bottom(Device, Addr+j*LEN_MAX, AddrLen, Buf, LEN_MAX);//写ee测试
|
||||
|
||||
memset(Buf, 0, 64);
|
||||
Result = I2C_Read_Bottom(Device, Addr+j*LEN_MAX, AddrLen, Buf, LEN_MAX);//读ee测试
|
||||
if(0 != memcmp(Buf,TestData,LEN_MAX))
|
||||
{
|
||||
uint16 k = 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint16 kkk = 0;
|
||||
|
||||
IWDT_Clr(); //清系统看门狗
|
||||
return Result;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
long kernel_mktimeday()
|
||||
{
|
||||
unsigned long oldtime = mktime(2021-1900,2,27,0,0,0);
|
||||
unsigned long newtime = mktime(2021-1900,3,1,0,0,0);
|
||||
unsigned long day = get_space_day(oldtime,newtime);;
|
||||
|
||||
HT_PRINT("day = %02d \r\n",day);
|
||||
return day;
|
||||
}
|
||||
|
||||
|
||||
#define DEVICE_EE256 0xa0 //FM24C256的器件地址
|
||||
//#define DEVICE_EE256 0xa1 //FM24C256的器件地址
|
||||
#define ADDRLEN_EE256 2 //FM24C256的数据地址长度为2字节
|
||||
|
||||
#define LEN_MAX (1)
|
||||
|
||||
#if 0
|
||||
|
||||
uint08 Buf[64];
|
||||
uint08 Test_I2C1(void)
|
||||
{
|
||||
|
||||
I2C_Init();
|
||||
uint08 Device = DEVICE_EE256;
|
||||
uint16 Addr;
|
||||
uint08 AddrLen = 2;//ADDRLEN_EE256;
|
||||
uint08 Len = 16;
|
||||
uint08 Result = 0;
|
||||
|
||||
uint08 TestData[LEN_MAX] = {0};
|
||||
|
||||
memset(TestData,0x77,LEN_MAX);
|
||||
|
||||
IWDT_Clr(); //清系统看门狗
|
||||
|
||||
Addr = 8;
|
||||
Len = 16;
|
||||
|
||||
|
||||
for(uint16 j = 0;j<1024;j++)
|
||||
{
|
||||
//memset(Buf, 0, 64);
|
||||
//Result = I2C_Read_Bottom(Device, Addr, AddrLen, Buf, Len);//读ee测试
|
||||
|
||||
memset(Buf, 0x55, 64);
|
||||
memcpy(Buf, TestData, 8);
|
||||
Result = I2C_Write_Bottom(0xa0, Addr+j*LEN_MAX, AddrLen, Buf, LEN_MAX);//写ee测试
|
||||
|
||||
if(1 == Result)
|
||||
{
|
||||
uint16 k = 0;
|
||||
}
|
||||
|
||||
//I2C_Init();
|
||||
//HT_PRINT("index=============================\r\n");
|
||||
vTaskDelay(3/ portTICK_PERIOD_MS);
|
||||
memset(Buf, 0, 64);
|
||||
Result = I2C_Read_Bottom(0xa0, Addr+j*LEN_MAX, AddrLen, Buf, LEN_MAX);//读ee测试
|
||||
if(1 == Result)
|
||||
{
|
||||
uint16 k = 0;
|
||||
}
|
||||
|
||||
|
||||
if(0 != memcmp(Buf,TestData,LEN_MAX))
|
||||
{
|
||||
uint16 k = 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint16 kkk = 0;
|
||||
|
||||
IWDT_Clr(); //清系统看门狗
|
||||
return Result;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static uint8_t value[128];
|
||||
|
||||
|
||||
void testwritebasetime()
|
||||
{
|
||||
RTC_TimeDateTypeDef rtctime;
|
||||
uint32_t year = 0;
|
||||
uint8_t mon = 0;
|
||||
uint8_t day = 0;
|
||||
uint8_t hour = 0;
|
||||
uint8_t min = 0;
|
||||
uint8_t sec = 0;
|
||||
year = bcd_to_dec(rtctime.Year) + DEC_YEAR;
|
||||
mon = bcd_to_dec(rtctime.Month);
|
||||
day = bcd_to_dec(rtctime.Date);
|
||||
hour = bcd_to_dec(rtctime.Hour);
|
||||
min = bcd_to_dec(rtctime.Minute);
|
||||
sec = bcd_to_dec(rtctime.Second);
|
||||
waterdata_write(year,mon,day,hour,min,sec);
|
||||
|
||||
}
|
||||
|
||||
#define EEPROM_TEST_LEN (127)
|
||||
void fillvalue()
|
||||
{
|
||||
for(int i = 0;i<EEPROM_TEST_LEN;i++)
|
||||
{
|
||||
value[i] = i%10;
|
||||
}
|
||||
}
|
||||
|
||||
void i2ctest()
|
||||
{
|
||||
|
||||
uint8_t tmpvalue[EEPROM_TEST_LEN];
|
||||
|
||||
for(int i = 0;i<2000;i++)
|
||||
{
|
||||
fillvalue();
|
||||
file_i2c_write(IIC_DATA_ADDR+i*EEPROM_TEST_LEN,value,EEPROM_TEST_LEN);
|
||||
memset(tmpvalue,0,sizeof(tmpvalue));
|
||||
file_i2c_read(IIC_DATA_ADDR+i*EEPROM_TEST_LEN,tmpvalue,EEPROM_TEST_LEN);
|
||||
|
||||
if(0 != memcmp(value,tmpvalue,EEPROM_TEST_LEN))
|
||||
{
|
||||
HT_PRINT("*** eeprom write read fail ***\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void debug_reportdata()
|
||||
{
|
||||
|
||||
uint8_t number = 0;
|
||||
|
||||
if(is_first == false)
|
||||
{
|
||||
is_first = true;
|
||||
uint32_t year = 21+DEC_YEAR;
|
||||
uint8_t mon = 1;
|
||||
uint8_t day = 1;
|
||||
uint8_t hour = 0;
|
||||
uint8_t min = 0;
|
||||
uint8_t sec = 0;
|
||||
HT_PRINT("*** 写入 ***\r\n");
|
||||
|
||||
|
||||
#if 1
|
||||
for(int i=0;i<DATA_COUNT_MAX/24;i++)
|
||||
{
|
||||
HT_PRINT("*** 写入 i=%d ***\r\n",i);
|
||||
|
||||
for(int j = 0;j<24;j++)
|
||||
{
|
||||
//年 月 日 时 分
|
||||
/*
|
||||
struct waterdata_struct
|
||||
{
|
||||
uint8_t invalid; //是否有效, 1
|
||||
uint8_t rpsucess; //上报是否成功。 1
|
||||
uint8_t current[5]; //取水口流量 5
|
||||
uint8_t sum[4]; //取水口累计流量 5
|
||||
uint8_t surplus[6]; //水表1剩余水量 6
|
||||
u8 ala[4]; //遥测状态及报警信息 4
|
||||
u8 vol[2]; //蓄电池电压 2
|
||||
u8 csq; //信号强度CSQ 1
|
||||
uint32_t year; // 4
|
||||
uint8_t mon; // 1
|
||||
uint8_t day; // 1
|
||||
uint8_t hour; // 1
|
||||
uint8_t min; // 1
|
||||
uint8_t crc;
|
||||
};
|
||||
*/
|
||||
struct waterdata_struct waterdata;
|
||||
memset(&waterdata,0,sizeof(waterdata));
|
||||
waterdata.invalid = 0xAA;
|
||||
|
||||
waterdata.current[0] = i;
|
||||
waterdata.current[1] = i;
|
||||
waterdata.current[2] = i;
|
||||
waterdata.current[3] = i;
|
||||
waterdata.current[4] = i;
|
||||
|
||||
waterdata.sum[0] = j;
|
||||
waterdata.sum[1] = j;
|
||||
waterdata.sum[2] = j;
|
||||
waterdata.sum[3] = j;
|
||||
|
||||
waterdata.surplus[0] = j;
|
||||
waterdata.surplus[1] = j;
|
||||
waterdata.surplus[2] = j;
|
||||
waterdata.surplus[3] = j;
|
||||
waterdata.surplus[4] = j;
|
||||
waterdata.surplus[5] = j;
|
||||
|
||||
|
||||
u16 count = 0;
|
||||
count = i*24 + j;
|
||||
|
||||
waterdata.crc= GetSum(&(waterdata.invalid),WATERDATA_LEN);
|
||||
|
||||
hb_waterdata_write(count,&waterdata,sizeof(waterdata));
|
||||
|
||||
|
||||
// hb_waterdata_write(count,
|
||||
//waterdata_write(year,mon,i,j,min,sec);
|
||||
//void hb_waterdata_write(u16 count,struct uint8_t * buf,uint16_t len)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
HT_PRINT("*** 读取 ***\r\n");
|
||||
//void file_waterdata_read(uint8_t day,uint8_t hour,uint8_t min,uint8_t * buf,uint16_t len)
|
||||
|
||||
for(int i=0;i<DATA_COUNT_MAX/24;i++)
|
||||
{
|
||||
HT_PRINT("*** 读取 *** i=%d \r\n",i);
|
||||
for(int j = 0;j<24;j++)
|
||||
{
|
||||
|
||||
u16 count = 0;
|
||||
count = i*24 + j;
|
||||
struct waterdata_struct waterdata;
|
||||
memset(&waterdata,0,sizeof(waterdata));
|
||||
hb_waterdata_read(count,&waterdata,sizeof(waterdata));
|
||||
//file_waterdata_read(i,j,0,value,sizeof(struct waterdata_struct));
|
||||
//void hb_waterdata_read(u16 count,struct uint8_t * buf,uint16_t len)
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
HT_PRINT("*** 得到上报数据 *** 中间修改历史时间?\r\n");
|
||||
for(uint16_t i = 0;i<30;i++)
|
||||
{
|
||||
memset(value,0,sizeof(value));
|
||||
get_reportdata(i,COLLECT_DENSITY_30,&number,value);
|
||||
|
||||
HT_PRINT("number = %d\r\n",number);
|
||||
|
||||
for(uint16_t j = 0;j<48;j++)
|
||||
{
|
||||
uint8_t * p = value;
|
||||
HT_PRINT("number = %02d %02x%02x%02x%02x\r\n",j,value[0+j*4],value[1+j*4],value[2+j*4],value[3+j*4]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
HT_PRINT("*** 得到上报数据 *** 中间修改历史时间?\r\n");
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
for(uint16_t i = 1;i<31;i++)
|
||||
{
|
||||
HT_PRINT("\r\n i = %d\r\n",i);
|
||||
memset(value,0,sizeof(value));
|
||||
//get_reportdata_mask(18,1,i,COLLECT_DENSITY_30,&number,value);
|
||||
get_reportdata_maskhour(18,1,i,23,COLLECT_DENSITY_30,&number,value);
|
||||
for(uint16_t j = 0;j<number;j++)
|
||||
{
|
||||
uint8_t * p = value;
|
||||
HT_PRINT("number = %02d %02x%02x%02x%02x\r\n",j,value[0+j*4],value[1+j*4],value[2+j*4],value[3+j*4]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
RTC_TimeDateTypeDef TempTime;
|
||||
uint8_t InitTime[] = {0x18, 0x01, 0x30, 0x02, 0x02, 0x03, 0x01};
|
||||
comm_memcpy((uint8_t*)(&TempTime), InitTime, 7);
|
||||
rtc_setRTC((&TempTime));
|
||||
// for(uint16_t i = 0;i<30;i++)
|
||||
{
|
||||
memset(value,0,sizeof(value));
|
||||
//get_reportdata(i,COLLECT_DENSITY_30,&number,value);
|
||||
get_reportdata_curtime(COLLECT_DENSITY_15,&number,value);
|
||||
HT_PRINT("number = %d\r\n",number);
|
||||
|
||||
for(uint16_t j = 0;j<number;j++)
|
||||
{
|
||||
uint8_t * p = value;
|
||||
HT_PRINT("number = %02d %02x%02x%02x%02x\r\n",j,value[0+j*4],value[1+j*4],value[2+j*4],value[3+j*4]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
19
filedata/filedatawr.c
Normal file
19
filedata/filedatawr.c
Normal file
@@ -0,0 +1,19 @@
|
||||
#include "file.h"
|
||||
#include "filedata.h"
|
||||
|
||||
extern bool I2C_eeprom_write_buf(u16 startAddr, u8 * buf, u16 length);
|
||||
extern bool I2C_eeprom_read_buf(u16 addr, u8 * buf, u16 length);
|
||||
extern void waterdata_printf(struct waterdata_struct * waterdata);
|
||||
|
||||
void file_curtime_write(uint8_t * buf,uint8_t len)
|
||||
{
|
||||
I2C_eeprom_write_buf(IIC_CUR_TIME_ADDR,buf,len);
|
||||
}
|
||||
|
||||
void file_curtime_read(uint8_t * buf,uint8_t len)
|
||||
{
|
||||
I2C_eeprom_read_buf(IIC_CUR_TIME_ADDR,buf,len);
|
||||
}
|
||||
|
||||
|
||||
|
||||
112
filedata/fileidatatime.c
Normal file
112
filedata/fileidatatime.c
Normal file
@@ -0,0 +1,112 @@
|
||||
#include "file.h"
|
||||
#include "filedata.h"
|
||||
#include "rtc_ext.h"
|
||||
|
||||
//include/linux/time.h
|
||||
//内核中的mktime()函数位于kernel/time.c内
|
||||
|
||||
|
||||
uint8_t rtc_getRTC(RTC_TimeDateTypeDef* para)
|
||||
{
|
||||
uint8_t Result = 1;
|
||||
|
||||
|
||||
st_rtc_ext TempTime1;
|
||||
|
||||
read_rtc_time(&TempTime1);//读一次时间
|
||||
|
||||
Result = 0;
|
||||
para->Year = TempTime1.year;
|
||||
para->Month = TempTime1.month;
|
||||
para->Date = TempTime1.day;
|
||||
para->Hour = TempTime1.hour;
|
||||
para->Minute = TempTime1.min;
|
||||
para->Second = TempTime1.sec;
|
||||
para->Week = TempTime1.week;
|
||||
return Result;
|
||||
}
|
||||
|
||||
unsigned long mktime (unsigned int year, unsigned int mon,
|
||||
unsigned int day, unsigned int hour,
|
||||
unsigned int min, unsigned int sec)
|
||||
{
|
||||
if (0 >= (int) (mon -= 2)) { /* 1..12 -> 11,12,1..10 */
|
||||
mon += 12; /* Puts Feb last since it has leap day */
|
||||
year -= 1;
|
||||
}
|
||||
|
||||
return (((
|
||||
(unsigned long) (year/4 - year/100 + year/400 + 367*mon/12 + day) +
|
||||
year*365 - 719499
|
||||
)*24 + hour /* now have hours */
|
||||
)*60 + min /* now have minutes */
|
||||
)*60 + sec; /* finally seconds */
|
||||
}
|
||||
|
||||
uint8_t bcd_to_dec(uint8_t val)
|
||||
{
|
||||
return ((((val)>>4)*10) + ((val)&0x0F));
|
||||
}
|
||||
|
||||
uint8_t get_space_day(uint32_t oldtime,uint32_t newtime)
|
||||
{
|
||||
uint8_t day = 0;
|
||||
if(newtime>oldtime)
|
||||
{
|
||||
day = (newtime - oldtime)/(3600*24);
|
||||
}
|
||||
return day;
|
||||
}
|
||||
|
||||
uint32_t get_curtime(uint8_t *curyear,uint8_t *curmon,uint8_t *curday)
|
||||
{
|
||||
RTC_TimeDateTypeDef rtctime;
|
||||
uint32_t time = 0;
|
||||
uint32_t year = 0;
|
||||
uint8_t mon = 0;
|
||||
uint8_t day = 0;
|
||||
rtc_getRTC(&rtctime);
|
||||
|
||||
year = bcd_to_dec(rtctime.Year);
|
||||
mon = bcd_to_dec(rtctime.Month);
|
||||
day = bcd_to_dec(rtctime.Date);
|
||||
|
||||
year = year + DEC_YEAR;
|
||||
time = mktime(year,mon,day,0,0,0);
|
||||
|
||||
*curyear = year;
|
||||
*curmon = mon;
|
||||
*curday = day;
|
||||
|
||||
#ifdef DEBUG_FILEI2C
|
||||
HT_PRINT("time = %d year = %d mon = %d day = %d\r\n",time,year,mon,day);
|
||||
#endif
|
||||
return time;
|
||||
}
|
||||
|
||||
|
||||
void get_complete_curtime(uint32_t *curyear,uint8_t *curmon,uint8_t *curday,uint8_t *curhour,uint8_t *curmin)
|
||||
{
|
||||
RTC_TimeDateTypeDef rtctime;
|
||||
uint32_t year = 0;
|
||||
uint8_t mon = 0;
|
||||
uint8_t day = 0;
|
||||
uint8_t hour = 0;
|
||||
uint8_t min = 0;
|
||||
rtc_getRTC(&rtctime);
|
||||
|
||||
year = bcd_to_dec(rtctime.Year);
|
||||
mon = bcd_to_dec(rtctime.Month);
|
||||
day = bcd_to_dec(rtctime.Date);
|
||||
hour = bcd_to_dec(rtctime.Hour);
|
||||
min = bcd_to_dec(rtctime.Minute);
|
||||
|
||||
year = year + DEC_YEAR;
|
||||
|
||||
*curyear = year;
|
||||
*curmon = mon;
|
||||
*curday = day;
|
||||
*curhour = hour;
|
||||
*curmin = min;
|
||||
}
|
||||
|
||||
400
filedata/filereportdata.c
Normal file
400
filedata/filereportdata.c
Normal file
@@ -0,0 +1,400 @@
|
||||
#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);
|
||||
}
|
||||
|
||||
|
||||
119
filedata/hbfile.c
Normal file
119
filedata/hbfile.c
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
#include "file.h"
|
||||
#include "filedata.h"
|
||||
#include "General.h"
|
||||
#include "Mem.h"
|
||||
|
||||
extern u8 GetSum(u8 * buffer, u16 length);
|
||||
extern bool I2C_eeprom_write_buf(u16 startAddr, u8 * buf, u16 length);
|
||||
extern bool I2C_eeprom_read_buf(u16 addr, u8 * buf, u16 length);
|
||||
void waterdata_printf(struct waterdata_struct * waterdata);
|
||||
|
||||
void hb_waterdata_write(u16 count,uint8_t * buf,uint16_t len)
|
||||
{
|
||||
if(count<DATA_COUNT_MAX)
|
||||
{
|
||||
uint32_t datapos =IIC_DATA_ADDR+WATERDATA_ONE_LEN*(count);
|
||||
I2C_eeprom_write_buf(datapos,(uint8_t *)buf, len);
|
||||
#ifdef DEBUG_FILEI2C
|
||||
uint8_t Buf[64];
|
||||
struct waterdata_struct * waterdata = (struct waterdata_struct *)buf;
|
||||
HT_PRINT("--->%05d count=%04d ",datapos,count);
|
||||
waterdata_printf(waterdata);
|
||||
memset(Buf, 0, 64);
|
||||
I2C_eeprom_read_buf(datapos,(uint8_t *)Buf, len);
|
||||
HT_PRINT("<---%05d count=%04d ",datapos,count);
|
||||
waterdata_printf(waterdata);
|
||||
if(0 !=memcmp(buf,Buf,len))
|
||||
{
|
||||
HT_PRINT("!!!file_waterdata_write error\r\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void hb_waterdata_read(u16 count,uint8_t * buf,uint16_t len)
|
||||
{
|
||||
if(count<DATA_COUNT_MAX)
|
||||
{
|
||||
uint32_t datapos =IIC_DATA_ADDR+WATERDATA_ONE_LEN*(count);
|
||||
I2C_eeprom_read_buf(datapos,(uint8_t *)buf, len);
|
||||
#ifdef DEBUG_FILEI2C
|
||||
struct waterdata_struct * waterdata = (struct waterdata_struct *)buf;
|
||||
HT_PRINT("waterdata_read addr=%05d day=%04d ",datapos,count);
|
||||
waterdata_printf(waterdata);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void hb_waterdata_one_write(u16 index,u8 * sumdata,u8 year,u8 month,u8 day,u8 hour)
|
||||
{
|
||||
struct waterdata_struct waterdata;
|
||||
memset(&waterdata,0,sizeof(waterdata));
|
||||
waterdata.year = year;
|
||||
waterdata.mon = month;
|
||||
waterdata.day = day;
|
||||
waterdata.hour = hour;
|
||||
|
||||
MemCpy(waterdata.sum,sumdata,SUM_DATA_LEN);
|
||||
|
||||
waterdata.crc = GetSum((uint8_t*)&waterdata.invalid,WATERDATA_LEN);
|
||||
hb_waterdata_write(index,(uint8_t *)&waterdata, sizeof(waterdata));
|
||||
|
||||
}
|
||||
|
||||
|
||||
void waterdata_printf(struct waterdata_struct * waterdata)
|
||||
{
|
||||
#ifdef DEBUG_FILEI2C
|
||||
uint8_t ck = 0;
|
||||
ck = GetSum((uint8_t*)&waterdata->invalid,WATERDATA_LEN);
|
||||
HT_PRINT("valid=%02x ",waterdata->invalid);
|
||||
HT_PRINT("current=%02x%02x%02x%02x%02x ",waterdata->current[0],waterdata->current[1],waterdata->current[2],waterdata->current[3],waterdata->current[4]);//取水口流量 5
|
||||
HT_PRINT("sum=%02x%02x%02x%02x%02x ",waterdata->sum[0],waterdata->sum[1],waterdata->sum[2],waterdata->sum[3],waterdata->sum[4]);//取水口累计流量 5
|
||||
HT_PRINT("surplus=%02x%02x%02x%02x%02x%02x ",waterdata->surplus[0],waterdata->surplus[1],waterdata->surplus[2],waterdata->surplus[3],waterdata->surplus[4],waterdata->surplus[5]);//水表1剩余水量 6
|
||||
HT_PRINT("ala=%02x%02x%02x%02x ",waterdata->ala[0],waterdata->ala[1],waterdata->ala[2],waterdata->ala[3]);//遥测状态及报警信息 4
|
||||
HT_PRINT("vol=%02x%02x ",waterdata->vol[0],waterdata->vol[1]);//蓄电池电压 2
|
||||
HT_PRINT("csq=%02x ",waterdata->csq);//csq信号强度 1
|
||||
HT_PRINT("time=%02x-%02x-%02x %02x ",waterdata->year,waterdata->mon,waterdata->day,waterdata->hour);//csq信号强度 1
|
||||
HT_PRINT("ck1=%02x ck2=%02x\r\n",waterdata->crc,ck);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void data_printf()
|
||||
{
|
||||
struct waterdata_struct waterdata;
|
||||
|
||||
printf("\r\n计数 有效 流量 累计 剩余 状态 电压 CSQ信号强度 年月日时 校验\r\n");
|
||||
for(u16 i = 0;i<DATA_COUNT_MAX;i++)
|
||||
{
|
||||
uint32_t datapos =IIC_DATA_ADDR+WATERDATA_ONE_LEN*(i);
|
||||
I2C_eeprom_read_buf(datapos,(uint8_t *)&waterdata, sizeof(waterdata));
|
||||
|
||||
uint8_t ck = 0;
|
||||
ck = GetSum((uint8_t*)&waterdata.invalid,WATERDATA_LEN);
|
||||
HT_PRINT("%04d ",i+1);
|
||||
HT_PRINT("%02x ",waterdata.invalid);
|
||||
HT_PRINT("%02x%02x%02x%02x%02x ",waterdata.current[0],waterdata.current[1],waterdata.current[2],waterdata.current[3],waterdata.current[4]);//取水口流量 5
|
||||
HT_PRINT("%02x%02x%02x%02x%02x ",waterdata.sum[0],waterdata.sum[1],waterdata.sum[2],waterdata.sum[3],waterdata.sum[4]);//取水口累计流量 5
|
||||
HT_PRINT("%02x%02x%02x%02x%02x%02x ",waterdata.surplus[0],waterdata.surplus[1],waterdata.surplus[2],waterdata.surplus[3],waterdata.surplus[4],waterdata.surplus[5]);//水表1剩余水量 6
|
||||
HT_PRINT("%02x%02x%02x%02x ",waterdata.ala[0],waterdata.ala[1],waterdata.ala[2],waterdata.ala[3]);//遥测状态及报警信息 4
|
||||
HT_PRINT("%02x%02x ",waterdata.vol[0],waterdata.vol[1]);//蓄电池电压 2
|
||||
HT_PRINT("%02x ",waterdata.csq);//csq信号强度 1
|
||||
HT_PRINT("%02x-%02x-%02x %02x ",waterdata.year,waterdata.mon,waterdata.day,waterdata.hour);//csq信号强度
|
||||
|
||||
if(waterdata.crc==ck)
|
||||
{
|
||||
HT_PRINT("%02x=%02x\r\n",waterdata.crc,ck);
|
||||
}
|
||||
else
|
||||
{
|
||||
HT_PRINT("%02x!=%02x error!\r\n",waterdata.crc,ck);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user