Files
2025-12-15 16:07:49 +08:00

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