⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 store.c

📁 这是一个在在Dynamic C环境下实现的设备web服务器的建立
💻 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 + -