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

156 lines
2.4 KiB
C

#include "metertable.h"
#include "bl24c512.h"
//#include "GWD13762.h"
#include "filesave.h"
extern u32 Dwbin2bcd(u32 bin);
struct metertable_struct
{
u8 addr[METER_ADDR_LEN];
// u8 type;
};
static struct metertable_struct metertable[METERTABLE_NUM_MAX];
static u16 metertablenum=0;
//u8
void metertable_init()
{
metertablenum = 0;
memset(metertable,0,sizeof(metertable));
}
u16 metertable_getnum()
{
if(metertablenum>METERTABLE_NUM_MAX)
{
metertable_init();
}
return metertablenum;
}
u8 * metertable_getadddr(u16 index)
{
if(index<metertablenum)
{
return metertable[index].addr;
}
return NULL;
}
bool metertable_find(const u8 * addr,u16 * index)
{
u16 i = 0;
for (i=0; i<metertable_getnum(); i++)
{
if(0 == memcmp(metertable_getadddr(i),addr,METER_ADDR_LEN))
{
* index = i;
return true;
}
}
return false;
}
void metertable_add(const u8 * addr,const u8 type)
{
u16 index = 0;
if(!metertable_find(addr,&index))
{
if(metertablenum < METERTABLE_NUM_MAX )
{
memmove(metertable[metertablenum].addr,addr,METER_ADDR_LEN);
metertablenum ++;
}
}
}
//文件的存储
void metertable_write()
{
file_metertablenum_write((u8*)&metertablenum,sizeof(metertablenum));
file_meter_write((u8*)metertable,sizeof(metertable));
}
void metertable_read()
{
file_metertablenum_read((u8*)&metertablenum,sizeof(metertablenum));
file_meter_read((u8*)metertable,sizeof(metertable));
}
void metertable_file_init()
{
metertablenum = 0;
file_metertablenum_write((u8*)&metertablenum,sizeof(metertablenum));
}
#if 0
/*
电表对应的数据保存索引值
*/
u16 find_meter_index(u8* id)
{
for (int i =0; i < metertable_getnum(); i++)
{
if (cmp_datas(id, metertable[i].addr, 4))
{
return i;
}
}
return METER_INDEX_INVALID;
}
void read_long_addr_with_index(u16 index, u8* buf)
{
MemCpy(buf, metertable[index].addr, 6);
}
void print_meter_map(void)
{
if(0 == metertable_getnum())
{
printf("\r\n meternum = 0!\r\n");
}
printf("\r\n");
for (int i = 0; i < metertable_getnum(); i++)
{
printf("index: %d ",i);
printf("addr:");
printf_buf(metertable_getadddr(i), 6);
printf("\r\n");
vTaskDelay( 10 / portTICK_RATE_MS );
}
}
void meter_map_addall_test(void)
{
for(int i = 0;i<METERTABLE_NUM_MAX;i++)
{
u8 tmp[6] = {0};
u32 itmp = Dwbin2bcd(i+1);
tmp[0] = itmp&0xFF;
tmp[1] = itmp>>8&0xFF;
tmp[2] = itmp>>16&0xFF;
metertable_add(tmp,2);
}
metertable_write();
}
#endif