📄 store.c
字号:
/*** BeginHeader */
#ifndef _STORE_FUNC_
#define _STORE_FUNC_
// BEGIN STORAGE DEFINE =========================================================================
/* NOTICE : The struct of the whole storage region is :
store_version_segment + variable_1_segment + ... + variable_N_segment
The storage base address of each segment is fixed. */
/* NOTICE : I don't use a macro to express the size of each storage segment, but use the
actual number. Because once the size is defined, then it's fixed, and CAN'T be
changed, even if the size of the corresponding variable in the ram is altered. */
// For Storing
#define MAX_LOGO 100
#define STORE_TIMER 30 //sec
#define STORE_FLAG_DATA0 0x55
#define STORE_FLAG_DATA1 0xAA
#define STORE_VER_DATA 0x01
// STORE_BEGIN
#ifdef _RAM_
#define STORE_MODULE_BASE (0x60000 + 0x80000)
#else
#define STORE_MODULE_BASE (0x60000)
#endif
// Login user info length
#define STORE_USERINFO_NUM (2)
#define STORE_LEN_USERINFO (42)
#define STORE_LEN_OEM_INFO (170)
#define STORE_LEN_IPADDR (4) // IP address length
#define STORE_LEN_MAC (6) // MAC address length
// Store version
#define STORE_FLAG (STORE_MODULE_BASE)
#define STORE_VERSION (STORE_FLAG + 2)
#define DATA_START (STORE_VERSION+1)
#define STORE_OEM_INDEX (DATA_START)
#define LOGO_STRING (STORE_OEM_INDEX+1)
#define STORE_USER (LOGO_STRING+MAX_LOGO)
// x = 0 ~ 1
#define STORE_USER_INFO(x) (STORE_USER + STORE_LEN_USERINFO * (x))
// x = 0 ~ 3
#define STORE_OEM_INFO(x) (STORE_USER_INFO(STORE_USERINFO_NUM) + STORE_LEN_OEM_INFO * (x))
// STORE END
#define STORE_DATA_END (STORE_OEM_INFO(MAX_OEM_USER))
// STORE SIZE
#define STORE_DATA_LEN ((int)(STORE_DATA_END - STORE_MODULE_BASE))
// END STORAGE DEFINE =========================================================================
/*** EndHeader */
/*** BeginHeader PrgStoreRegion */
unsigned char PrgStoreRegion( unsigned long ulDstAddr, unsigned long ulSrcAddr, unsigned int uiLength );
/*** EndHeader */
unsigned char PrgStoreRegion( unsigned long ulDstAddr, unsigned long ulSrcAddr, unsigned int uiLength )
{
#ifdef _RAM_
ProgramFLASH( 0, ulDstAddr, ulSrcAddr, (unsigned long)uiLength );
#else
xmem2root( g_CommBuf + (unsigned int)(ulDstAddr - STORE_MODULE_BASE), ulSrcAddr, (unsigned int)uiLength );
#endif
}
/*** BeginHeader StoreDataChk */
unsigned char StoreDataChk(void);
/*** EndHeader */
unsigned char StoreDataChk(void)
{
auto unsigned char StoreFlg[2];
auto unsigned char ucStoreVer;
xmem2root( StoreFlg, STORE_FLAG, 2 );
xmem2root( &ucStoreVer, STORE_VERSION, 1 );
return (StoreFlg[0] == STORE_FLAG_DATA0 && StoreFlg[1] == STORE_FLAG_DATA1
&& ucStoreVer == STORE_VER_DATA) ? 1 : 0;
}
/*** BeginHeader StoreData */
void StoreData(void);
/*** EndHeader */
void StoreData(void)
{
auto int i,j;
auto unsigned char pData[2];
auto unsigned long ulStorePnt;
#ifdef _RAM_
// Clear the Flash
Erase4KFLASH( STORE_MODULE_BASE );
#else
memset( g_CommBuf, 0xFF, STORE_DATA_LEN );
#endif
// store the flag
pData[0] = STORE_FLAG_DATA0;
pData[1] = STORE_FLAG_DATA1;
PrgStoreRegion( STORE_FLAG, paddr( pData ), 2 );
// store the version
pData[0] = STORE_VER_DATA;
PrgStoreRegion( STORE_VERSION, paddr( pData ), 1 );
// store UserIndx
PrgStoreRegion( STORE_OEM_INDEX, paddr((unsigned char*)&UserIndx ),1 );
// store Logo String
PrgStoreRegion(LOGO_STRING, paddr(LogoPic),MAX_LOGO);
// Store User information
for(i = 0; i < MAX_LOGIN_USER; ++i )
{
PrgStoreRegion( STORE_USER_INFO(i) + 0, paddr( (unsigned char *)(&User[i].Name) ), MAX_USER_NAME );
PrgStoreRegion( STORE_USER_INFO(i) + MAX_USER_NAME, paddr( (unsigned char *)(&User[i].Password)), MAX_USER_PWD );
PrgStoreRegion( STORE_USER_INFO(i) + MAX_USER_NAME+MAX_USER_PWD, paddr( (unsigned char *)(&User[i].Group) ), 2 );
}
// Store parameter information
for(i = 0; i < MAX_OEM_USER; ++i )
{
ulStorePnt = STORE_OEM_INFO(i);
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].ulIpAddr) ),4 );
ulStorePnt+=STORE_LEN_IPADDR;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].ulIpMask) ),4 );
ulStorePnt+=STORE_LEN_IPADDR;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].ulGateway)),4 );
ulStorePnt+=STORE_LEN_IPADDR;
PrgStoreRegion( ulStorePnt, paddr( g_AddrInfo[i].ucMacAddr),6 );
ulStorePnt+=STORE_LEN_MAC;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].uiUDPPort)),2 );
ulStorePnt+=2;
PrgStoreRegion( ulStorePnt, paddr( &g_AddrInfo[i].uiFrmType),2);
ulStorePnt+=2;
PrgStoreRegion( ulStorePnt, paddr( g_AddrInfo[i].Reserver),12 );
ulStorePnt+=12;
for(j=0;j<MAX_CHANNEL;++j)
{
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].FirE1Para[j].Enable)),1 );
ulStorePnt+=1;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].FirE1Para[j].Port)),1 );
ulStorePnt+=1;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(g_AddrInfo[i].FirE1Para[j].DstMac)),STORE_LEN_MAC);
ulStorePnt+=STORE_LEN_MAC;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].FirE1Para[j].DstIp)),STORE_LEN_IPADDR);
ulStorePnt+=STORE_LEN_IPADDR;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].FirE1Para[j].DstUDPPort)),2);
ulStorePnt+=2;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].SecdE1Para[j].ClkMod)),1);
ulStorePnt+=1;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].FirE1Para[j].Proto)),1);
ulStorePnt+=1;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].SecdE1Para[j].CacheLen)),2);
ulStorePnt+=2;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].SecdE1Para[j].EnVlan)),1);
ulStorePnt+=1;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].SecdE1Para[j].Ttl)),1);
ulStorePnt+=1;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].SecdE1Para[j].SegFlag)),2);
ulStorePnt+=2;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].SecdE1Para[j].VlanId)),2);
ulStorePnt+=2;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(g_AddrInfo[i].SecdE1Para[j].Reserver)),6);
ulStorePnt+=6;
}
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].TirdE1Para.EnLev)),1);
ulStorePnt+=1;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].TirdE1Para.E1orT1)),1);
ulStorePnt+=1;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].TirdE1Para.EnIp)),1);
ulStorePnt+=1;
//PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].TirdE1Para.ClkMod)),1);
//ulStorePnt+=1;
//PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].TirdE1Para.AppMod)),1);
ulStorePnt+=2;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].TirdE1Para.Filter)),1);
ulStorePnt+=1;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].TirdE1Para.Tos)),2);
ulStorePnt+=2;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(&g_AddrInfo[i].TirdE1Para.Upwidth)),2);
ulStorePnt+=2;
PrgStoreRegion( ulStorePnt, paddr( (unsigned char *)(g_AddrInfo[i].TirdE1Para.Reserver)),6);
}
#ifndef _RAM_
WriteFlash( STORE_MODULE_BASE, g_CommBuf, STORE_DATA_LEN );
#endif
}
/*** BeginHeader Restore */
void Restore(void);
/*** EndHeader */
void Restore(void)
{
auto int i,j;
auto long lStorePnt;
if( !StoreDataChk( ) )
{
return;
}
xmem2root(&UserIndx,STORE_OEM_INDEX,1 );
if(UserIndx>(MAX_OEM_USER-1))
{
UserIndx=0;
}
xmem2root(LogoPic,LOGO_STRING,MAX_LOGO);
for(i = 0; i < MAX_LOGIN_USER; ++i )
{
xmem2root( (unsigned char *)(&User[i].Name), STORE_USER_INFO(i), MAX_USER_NAME );
xmem2root( (unsigned char *)(&User[i].Password), STORE_USER_INFO(i) + MAX_USER_NAME, MAX_USER_PWD );
xmem2root( (unsigned char *)(&User[i].Group), STORE_USER_INFO(i) + MAX_USER_NAME+MAX_USER_PWD, 2 );
}
for(i = 0; i < MAX_OEM_USER; ++i )
{
lStorePnt= STORE_OEM_INFO(i);
xmem2root((unsigned char *)(&g_AddrInfo[i].ulIpAddr), lStorePnt ,STORE_LEN_IPADDR );
lStorePnt+=STORE_LEN_IPADDR;
xmem2root((unsigned char *)(&g_AddrInfo[i].ulIpMask), lStorePnt,STORE_LEN_IPADDR );
lStorePnt+=STORE_LEN_IPADDR;
xmem2root((unsigned char *)(&g_AddrInfo[i].ulGateway),lStorePnt,STORE_LEN_IPADDR );
lStorePnt+=STORE_LEN_IPADDR;
xmem2root(g_AddrInfo[i].ucMacAddr,lStorePnt,STORE_LEN_MAC );
lStorePnt+=STORE_LEN_MAC;
xmem2root((unsigned char *)(&g_AddrInfo[i].uiUDPPort),lStorePnt,2 );
lStorePnt+=2;
xmem2root( &g_AddrInfo[i].uiFrmType,lStorePnt,2);
lStorePnt+=2;
xmem2root(g_AddrInfo[i].Reserver,lStorePnt,12 );
lStorePnt+=12;
for(j=0;j<MAX_CHANNEL;++j)
{
xmem2root( &g_AddrInfo[i].FirE1Para[j].Enable,lStorePnt,1 );
lStorePnt+=1;
xmem2root( &g_AddrInfo[i].FirE1Para[j].Port,lStorePnt,1 );
lStorePnt+=1;
//xmem2root( g_AddrInfo[i].FirE1Para[j].DstMac,lStorePnt,STORE_LEN_MAC);
lStorePnt+=STORE_LEN_MAC;
xmem2root( &g_AddrInfo[i].FirE1Para[j].DstIp,lStorePnt,STORE_LEN_IPADDR);
lStorePnt+=STORE_LEN_IPADDR;
xmem2root( &g_AddrInfo[i].FirE1Para[j].DstUDPPort,lStorePnt,2);
lStorePnt+=2;
xmem2root( &g_AddrInfo[i].SecdE1Para[j].ClkMod,lStorePnt,1);
lStorePnt+=1;
xmem2root( &g_AddrInfo[i].FirE1Para[j].Proto,lStorePnt,1);
lStorePnt+=1;
xmem2root( &g_AddrInfo[i].SecdE1Para[j].CacheLen,lStorePnt,2);
lStorePnt+=2;
xmem2root( &g_AddrInfo[i].SecdE1Para[j].EnVlan,lStorePnt,1);
lStorePnt+=1;
xmem2root( &g_AddrInfo[i].SecdE1Para[j].Ttl,lStorePnt,1);
lStorePnt+=1;
xmem2root( &g_AddrInfo[i].SecdE1Para[j].SegFlag,lStorePnt,2);
lStorePnt+=2;
xmem2root( &g_AddrInfo[i].SecdE1Para[j].VlanId,lStorePnt,2);
lStorePnt+=2;
xmem2root( g_AddrInfo[i].SecdE1Para[j].Reserver,lStorePnt,6);
lStorePnt+=6;
}
xmem2root( &g_AddrInfo[i].TirdE1Para.EnLev,lStorePnt,1);
lStorePnt+=1;
xmem2root( &g_AddrInfo[i].TirdE1Para.E1orT1,lStorePnt,1);
lStorePnt+=1;
xmem2root( &g_AddrInfo[i].TirdE1Para.EnIp,lStorePnt,1);
lStorePnt+=1;
//xmem2root( &g_AddrInfo[i].TirdE1Para.ClkMod,lStorePnt,1);
//lStorePnt+=1;
//xmem2root( &g_AddrInfo[i].TirdE1Para.AppMod,lStorePnt,1);
lStorePnt+=2;
xmem2root( &g_AddrInfo[i].TirdE1Para.Filter,lStorePnt,1);
lStorePnt+=1;
xmem2root( &g_AddrInfo[i].TirdE1Para.Tos,lStorePnt,2);
lStorePnt+=2;
xmem2root( &g_AddrInfo[i].TirdE1Para.Upwidth,lStorePnt,2);
lStorePnt+=2;
xmem2root(g_AddrInfo[i].TirdE1Para.Reserver,lStorePnt,6);
}
}
/*** BeginHeader */
#endif
/*** EndHeader */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -