河北水利局项目
This commit is contained in:
155
metertable/metertable.c
Normal file
155
metertable/metertable.c
Normal file
@@ -0,0 +1,155 @@
|
||||
#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
|
||||
|
||||
23
metertable/metertable.h
Normal file
23
metertable/metertable.h
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
#ifndef __METERTABLE_H__
|
||||
#define __METERTABLE_H__
|
||||
|
||||
|
||||
#include "include.h"
|
||||
|
||||
void metertable_init();
|
||||
bool metertable_find(const u8 * addr,u16 * index);
|
||||
void metertable_add(const u8 * addr,const u8 type);
|
||||
u8 * metertable_getadddr(u16 index);
|
||||
u16 metertable_getnum();
|
||||
u16 find_meter_index(u8* id);
|
||||
|
||||
void metertable_write();
|
||||
void metertable_read();
|
||||
void metertable_file_init();
|
||||
void print_meter_map(void);
|
||||
u16 find_meter_index(u8* id);
|
||||
void read_long_addr_with_index(u16 index, u8* buf);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user