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

📄 funcs.c.bak

📁 这是一个在在Dynamic C环境下实现的设备web服务器的建立
💻 BAK
📖 第 1 页 / 共 3 页
字号:

		ucTmp<<=1;
	}

	ucTmp>>=RemoteUp.Cnt;

	WrPortE(RMT_UP,NULL,ucTmp);
}

/*** BeginHeader EnSend */
xmem void EnSend(void);
/*** EndHeader */
xmem void EnSend(void)
{
	int j;
	unsigned char  ucTmp;

	ucTmp=0;

	if( g_EnSend==0)
	{
		for(j=0;j<MAX_CHANNEL;++j)
		{
			if((g_AddrInfo[UserIndx].FirE1Para[j].Enable==1)&&(g_AddrInfo[UserIndx].FirE1Para[j].EnArp==0x00))
			{
				ucTmp|=0x01;
				g_EnSend=0x7E;
			}

			ucTmp<<=1;
		}
	}
	else
	{
		for(j=0;j<MAX_CHANNEL;++j)
		{
			if(g_AddrInfo[UserIndx].FirE1Para[j].Enable==1)
			{
				ucTmp|=0x01;
			}

			ucTmp<<=1;
		}
	}

	WrPortE(CHAN_ENABLE,NULL,(ucTmp>>1));

}
/*** BeginHeader CalChkSum */
xmem void CalChkSum(unsigned char index);
/*** EndHeader */
xmem void CalChkSum(unsigned char index)
{
	    unsigned long sum1,sum2,sum3;

	    unsigned int uiTmp;

	    unsigned char ucTmp1,ucTmp2;

	    if(index>=4)
	    {
	    	index=0;
	    }

	    uiTmp=0x4500;
	    uiTmp+=(unsigned int)(g_AddrInfo[UserIndx].TirdE1Para.Tos);

         sum1=(unsigned long)uiTmp;
         sum1+=(unsigned long)(g_AddrInfo[UserIndx].SecdE1Para[index].SegFlag);

         uiTmp=(unsigned int)(g_AddrInfo[UserIndx].SecdE1Para[index].Ttl);

         uiTmp<<=8;
         uiTmp+=(unsigned int)(g_AddrInfo[UserIndx].FirE1Para[index].Proto);

         sum1+=(unsigned long)uiTmp;

         sum1+=g_AddrInfo[UserIndx].ulIpAddr&0x0000FFFF;

         sum1+=((g_AddrInfo[UserIndx].ulIpAddr>>16)&0x0000FFFF);

         sum1+=g_AddrInfo[UserIndx].FirE1Para[index].DstIp&0x0000FFFF;

         sum1+=((g_AddrInfo[UserIndx].FirE1Para[index].DstIp>>16)&0x0000FFFF);

         uiTmp=CalIpLen(index);

         sum1+=(unsigned long)(uiTmp);

         if(g_AddrInfo[UserIndx].TirdE1Para.E1orT1==0)
         {
            sum2=sum1+E1_FRAME_LEN;
            sum3=sum1-E1_FRAME_LEN;
         }
         else
         {
         	 sum2=sum1+T1_FRAME_LEN;
         	 sum3=sum1-T1_FRAME_LEN;
         }


         sum1 = (sum1 >> 16) + (sum1 & 0x0000FFFF);

         sum1 += (sum1 >> 16);

         sum2 = (sum2 >> 16) + (sum2 & 0x0000FFFF);

         sum2 += (sum2 >> 16);

         sum3 = (sum3 >> 16) + (sum3 & 0x0000FFFF);

         sum3 += (sum3 >> 16);



         uiTmp = (unsigned int)(sum1 & 0x0000FFFF);


         ucTmp1=(unsigned char)(uiTmp&0x00FF);

         ucTmp2=(unsigned char)((uiTmp>>8)&0x00FF);


         WrPortE(A_CHAN_INI_SUM1_START+(index*CHAN_OFFSET),NULL,ucTmp2);
         WrPortE(A_CHAN_INI_SUM1_START+1+(index*CHAN_OFFSET),NULL,ucTmp1);

          uiTmp = (unsigned int)(sum2 & 0x0000FFFF);

         ucTmp1=(unsigned char)(uiTmp&0x00FF);

         ucTmp2=(unsigned char)((uiTmp>>8)&0x00FF);


         WrPortE(A_CHAN_INI_SUM0_START+(index*CHAN_OFFSET),NULL,ucTmp2);
         WrPortE(A_CHAN_INI_SUM0_START+1+(index*CHAN_OFFSET),NULL,ucTmp1);

          uiTmp =(unsigned)(sum3 & 0x0000FFFF);

         ucTmp1=(unsigned char)(uiTmp&0x00FF);

         ucTmp2=(unsigned char)((uiTmp>>8)&0x00FF);

         WrPortE(A_CHAN_INI_SUM2_START+(index*CHAN_OFFSET),NULL,ucTmp2);
         WrPortE(A_CHAN_INI_SUM2_START+1+(index*CHAN_OFFSET),NULL,ucTmp1);
}


/*** BeginHeader IpHead */
xmem void IpHead(void);
/*** EndHeader */
xmem void IpHead(void)
{
	int	      i,j;
	unsigned long ulTmp;
	unsigned int  uiTmp;
	unsigned char ucTmp;

	for(j=0;j<MAX_CHANNEL;++j)
        {
		ucTmp=0;

		if(g_AddrInfo[UserIndx].TirdE1Para.EnIp)
		{
			ucTmp|=0x01;
		}

		if(g_AddrInfo[UserIndx].SecdE1Para[j].EnVlan)
		{
			ucTmp|=0x02;
		}


		ucTmp|=((g_AddrInfo[UserIndx].FirE1Para[j].Port&0x03)<<2);

		WrPortE(A_CHAN_MISC+(j*CHAN_OFFSET),NULL,ucTmp);

		uiTmp=g_AddrInfo[UserIndx].SecdE1Para[0].SegFlag;


		ucTmp=(unsigned char)((uiTmp>>8)&0x00FF);

		WrPortE(A_FRAG_START+(j*CHAN_OFFSET),NULL,ucTmp);


		ucTmp=(unsigned char)(uiTmp&0x00FF);


		WrPortE(A_FRAG_START+1+(j*CHAN_OFFSET),NULL,ucTmp);


		for(i=0;i<6;++i)
		{
			WrPortE(A_DST_MAC_START+i+(j*CHAN_OFFSET),NULL,g_AddrInfo[UserIndx].FirE1Para[j].DstMac[i]);
		}

		ucTmp=g_AddrInfo[UserIndx].TirdE1Para.Tos;

		WrPortE(A_CHAN_TOS+(j*CHAN_OFFSET),NULL,ucTmp);//Tos

		ucTmp=g_AddrInfo[UserIndx].SecdE1Para[j].Ttl;
		WrPortE(A_CHAN_TTL+(j*CHAN_OFFSET),NULL,ucTmp);//ttl

		CalChkSum(j);

		ulTmp=g_AddrInfo[UserIndx].FirE1Para[j].DstIp;

		for(i=0;i<4;++i)
		{
			ucTmp=(unsigned char)(ulTmp&0x000000FF);

			WrPortE((A_CHAN_DST_IP_START+(3-i)+(j*CHAN_OFFSET)),NULL,ucTmp);

			ulTmp>>=8;
		}

		uiTmp=g_AddrInfo[UserIndx].FirE1Para[j].DstUDPPort;
		ucTmp=(unsigned char)(uiTmp&0x00FF);
		WrPortE(A_CHAN_UDP_PORT_START+1+(j*CHAN_OFFSET),NULL,ucTmp);
		ucTmp=(unsigned char)((uiTmp>>8)&0x00FF);
		WrPortE(A_CHAN_UDP_PORT_START+(j*CHAN_OFFSET),NULL,ucTmp);

		uiTmp=g_AddrInfo[UserIndx].SecdE1Para[j].VlanId;
		ucTmp=(unsigned char)(uiTmp&0x00FF);
		WrPortE(A_VLAN_TAG_START+1+(j*CHAN_OFFSET),NULL,ucTmp);
	        ucTmp=(unsigned char)((uiTmp>>8)&0x00FF);
		WrPortE(A_VLAN_TAG_START+(j*CHAN_OFFSET),NULL,ucTmp);
    }

    WrPortE(IP_PROTOCOL,NULL, g_AddrInfo[UserIndx].FirE1Para[0].Proto);

    WrPortE(FILTER,NULL,g_AddrInfo[UserIndx].TirdE1Para.Filter);

}



/*** BeginHeader Getstring */
int Getstring(unsigned long xstring_addr, int index, char *data, int max_data);
/*** EndHeader */
int Getstring(unsigned long xstring_addr, int index, char *data, int max_data)
{
	unsigned long	string_addr, index_addr;

	// calculate address in string index
	xstring_addr += index * sizeof(long);

	// get address of desired string
 	xmem2root((void *)&string_addr, xstring_addr, sizeof(long));

	// load string into data
	xmem2root((void *)data, string_addr, max_data);
}

/*** BeginHeader StrtoMac */
xmem void StrtoMac(void);
/*** EndHeader */
xmem void StrtoMac(void)
{
	int   i;
	unsigned char ucTmp[6];

	for(i=0;i<6;++i)
	{
	   	ucTmp[i]=Strto2Hex(&FormData[1].value[0+3*i]);
	}

	memcpy(g_AddrInfo[UserIndx].ucMacAddr,ucTmp,6);
}

/*** BeginHeader Strto2Hex */
unsigned char Strto2Hex(unsigned char* pData);
/*** EndHeader */
unsigned char Strto2Hex(unsigned char* pData)
{
	int i;

	//unsigned char Data[2];
	unsigned char Conval[2];

	for(i=0;i<2;++i)
	{
	  	 if(pData[i]=='0')
	    {
	    	Conval[i]=0x00;
	    }
	     else if(pData[i]=='1')
	    {
	    	Conval[i]=0x01;
	    }
	     else if(pData[i]=='2')
	    {
	    	Conval[i]=0x02;
       }
	     else if(pData[i]=='3')
	    {
	    	Conval[i]=0x03;
	    }
	     else if(pData[i]=='4')
	    {
	    	Conval[i]=0x04;
	    }
	     else if(pData[i]=='5')
	    {
	    	Conval[i]=0x05;
	    }
	     else if(pData[i]=='6')
	    {
	    	Conval[i]=0x06;
	    }
	     else if(pData[i]=='7')
	    {
	    	 Conval[i]=0x07;
	    }
	     else if(pData[i]=='8')
	    {
	    	Conval[i]=0x08;
	    }
	     else if(pData[i]=='9')
	    {
	    	Conval[i]=0x09;
	    }
	    else if((pData[i]=='a')||(pData[i]=='A'))
	    {
	    	Conval[i]=0x0a;
	    }
	     else if((pData[i]=='b')||(pData[i]=='B'))
	    {
	    	Conval[i]=0x0b;
	    }
	     else if((pData[i]=='c')||(pData[i]=='C'))
	    {
	    	Conval[i]=0x0c;
	    }
	     else if((pData[i]=='d')||(pData[i]=='D'))
	    {
	    	Conval[i]=0x0d;
	    }
	     else if((pData[i]=='e')||(pData[i]=='E'))
	    {
	    	Conval[i]=0x0e;
	    }
	     else if((pData[i]=='f')||(pData[i]=='F'))
	    {
	    	Conval[i]=0x0f;
	    }
	    else
	    {
	    	return 0x00;
	    }
	}

	Conval[0]<<=4;
	Conval[0]|=Conval[1];

	return Conval[0];

}

/*** BeginHeader StrtoTos */
unsigned char StrtoTos(int index);
/*** EndHeader */
unsigned char StrtoTos(int index)
{
    int           i;
	unsigned char Data[2];
	unsigned char Retval;

	memcpy(Data,FormData[index].value,2);
	Retval=Strto2Hex(Data);
    return Retval;
}

/*** BeginHeader StrtoHex */
unsigned int StrtoHex(int index);
/*** EndHeader */
unsigned int StrtoHex(int index)
{
	int i;

	unsigned char Conval[4];
	unsigned char Data[4];
	unsigned int RetVal;

    memcpy(Data,FormData[index].value,4);

	for(i=0;i<4;++i)
	{
	  	 if(Data[i]=='0')
	    {
	    	Conval[i]=0x00;
	    }
	     else if(Data[i]=='1')
	    {
	    	Conval[i]=0x01;
	    }
	     else if(Data[i]=='2')
	    {
	    	Conval[i]=0x02;
       }
	     else if(Data[i]=='3')
	    {
	    	Conval[i]=0x03;
	    }
	     else if(Data[i]=='4')
	    {
	    	Conval[i]=0x04;
	    }
	     else if(Data[i]=='5')
	    {
	    	Conval[i]=0x05;
	    }
	     else if(Data[i]=='6')
	    {
	    	Conval[i]=0x06;
	    }
	     else if(Data[i]=='7')
	    {
	    	 Conval[i]=0x07;
	    }
	     else if(Data[i]=='8')
	    {
	    	Conval[i]=0x08;
	    }
	     else if(Data[i]=='9')
	    {
	    	Conval[i]=0x09;
	    }

	    else if((Data[i]=='a')||(Data[i]=='A'))
	    {
	    	Conval[i]=0x0a;
	    }
	     else if((Data[i]=='b')||(Data[i]=='B'))
	    {
	    	Conval[i]=0x0b;
	    }
	     else if((Data[i]=='c')||(Data[i]=='C'))
	    {
	    	Conval[i]=0x0c;
	    }
	     else if((Data[i]=='d')||(Data[i]=='D'))
	    {
	    	Conval[i]=0x0d;
	    }
	     else if((Data[i]=='e')||(Data[i]=='E'))
	    {
	    	Conval[i]=0x0e;
	    }
	     else if((Data[i]=='f')||(Data[i]=='F'))
	    {
	    	Conval[i]=0x0f;
	    }
	    else
	    {
	    	return 0xC000;
	    }

	}

	Conval[0]<<=4;
	Conval[2]<<=4;
	Conval[0]|=Conval[1];
	Conval[2]|=Conval[3];

	RetVal=Conval[0];
	RetVal<<=8;
	RetVal+=Conval[2];

	return RetVal;
}

/*** BeginHeader Alarm */
void Alarm(void);
/*** EndHeader */
void Alarm(void)
{
	int i;

	unsigned char ucTmp[3];

	memset(ucTmp,0,3);

	ucTmp[2]=RdPortE(CHAN_ALARM);

	 for(i=0;i<MAX_CHANNEL;++i)
	 {
		if(g_AddrInfo[UserIndx].FirE1Para[i].Enable==1)
		{
			switch(ucTmp[2]&0xC0)
			{
				case 0x00://Urgent Alarm
				 ucTmp[0]=1;
				break;
				case 0xC0://Delay Alarm
				 ucTmp[1]=1;
				break;
				default:
				break;
			}
		}

		ucTmp[2]<<=2;
	}

	ucTmp[2]=RdPortE(PACK_LOS);


	if(ucTmp[2]&0x10)
	{
		ucTmp[0]=1;
	}

    BitWrPortI( PBDR, &PBDRShadow, ucTmp[0], 5 );
    BitWrPortI( PBDR, &PBDRShadow, ucTmp[1], 6 );

}
/*** BeginHeader Updata */
void Updata(void);
/*** EndHeader */
void Updata(void)
{

   unsigned char ucTmp[2];
   int           i;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -