847 lines
22 KiB
C
847 lines
22 KiB
C
#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
|
||
|
||
|
||
|
||
|
||
|