120 lines
4.6 KiB
C
120 lines
4.6 KiB
C
|
|
#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);
|
|
}
|
|
}
|
|
}
|
|
|
|
|