📄 main.c
字号:
#include "config.h"
#include "../include/cfg_net.h"
#include "../include/main.h"
void printf (const char *fmt, ...)
{
u8 i,length=0;
for(i=0;*fmt!=0x00;i++,length++)
{
uart0.SendBuf[i]=*fmt;
if(*fmt=='\n')
{
i++;
uart0.SendBuf[i]='\r';
length++;
}
fmt++;
}
uart0.SendIndex=0;
uart0.SendLength=length;
U0THR=uart0.SendBuf[uart0.SendIndex];
}
/************************************************************/
int main (void)
{
PINSEL0 = (0x00000005)|(0x03<<18); //P0.0 P0.1用作UART
PINSEL1 = 0x00000000; //其余为GPIO
ReadModuleP(); // 读参数
SetNetPort();
InitializeInterrupt();
InitNic(0); //RTL8019芯片初始化,在global.c中定义
//WDTC =27662592; //2s
//WDMOD =0X03;
printf("Start OK!\n");
while(1)
{
if(WorkMode==CLIENTHOST) //TCP客户端
ClientHostProcess();
if(WorkMode==SERVERHOST) //tcp 服务器
ServerHostProcess();
if(WorkMode==UDPHOST) //UDP 模式
UDPHostProcess();
}
return 0;
}
/*======================================================================================
UDP 服务器的功能函数
=======================================================================================*/
/****************************************************/
void UDPHostProcess (void)
{
uint16 i;
InitialPort();
while(WorkMode==UDPHOST)
{
// WdtFeed();
if(Rec_Packet()!=0)
if(Rec_Ethernet_Packed(&REC_BUFF[0].bytes[4],0)==2) //
{
i=IP_PROCESS(&REC_BUFF[0].bytes[18],0);
switch(i)
{
case 'U':
if(UDP_Check(UDPSocket,&RECQ[0])!=0)
{
for(i=0;i<udprelength;i++)
uart0.SendBuf[i]=UdpRecBuff[0].udpdata[i];
uart0.SendIndex=0;
uart0.SendLength=udprelength;
U0THR=uart0.SendBuf[uart0.SendIndex];
}
break;
case 'T':
Process_Tcp1((Rec_Ptr *)&RECQ[0]);
if(TcpStatus[0].State==TCP_STATE_ESTABLISHED)
{
if(TcpRecFlag&&(TcpRecLength>0))
{
if(TcpStatus[0].My_Port==80)
HttpProcess(&TcpStatus[0].TcpDataQ[0]); //设置端口不发送
TcpRecFlag=0;
TcpRecLength=0;
}
}
break;
default:
break ;
};//end of switch
}
if(uart0.ReFinished==1) //RS32接收标记
{
for(i=0;i<uart0.ReLength;i++)
UdpSendBuff[0].Udp.udpdata[i]=uart0.ReBuf[i];
UdpSendBuff[0].Udp.length=uart0.ReLength;
UDPsend(&UdpSendBuff[0]);
uart0.ReFinished=0;
}
}
}
/*======================================================================================
TCP 服务器的功能函数
=======================================================================================*/
/****************************************************/
void ServerHostProcess (void)
{
uint16 i;
InitializeServer();
while(WorkMode==SERVERHOST)
{
WdtFeed();
if(Rec_Packet()!=0)
if(Rec_Ethernet_Packed(&REC_BUFF[0].bytes[4],0)==2) //
if(IP_PROCESS(&REC_BUFF[0].bytes[18],0)=='T')
{
Process_Tcp1((Rec_Ptr *)&RECQ[0]);
}
if(TcpStatus[0].State==TCP_STATE_ESTABLISHED)
{
if(TcpRecFlag&&(TcpRecLength>0))
{
if(TcpStatus[0].My_Port==80)
HttpProcess(&TcpStatus[0].TcpDataQ[0]); //设置端口不发送
else
{
for(i=0;i<TcpRecLength;i++)
uart0.SendBuf[i]=TcpStatus[0].TcpDataQ[i];
uart0.SendIndex=0;
uart0.SendLength=TcpRecLength;
U0THR=uart0.SendBuf[uart0.SendIndex];
//send(0,&TcpStatus[0].TcpDataQ[0], TcpRecLength, 0); //通信端口
}
TcpRecFlag=0;
TcpRecLength=0;
}
if(uart0.ReFinished==1) //RS32接收标记
{
send(0,&uart0.ReBuf[0], uart0.ReLength, 0);
uart0.ReFinished=0;
}
}
}
}
/*======================================================================================
TCP 客户端的功能函数
=======================================================================================*/
/****************************************************/
void ClientHostProcess (void)
{
uint16 j;
LastData.State=FALSE;
while(WorkMode==CLIENTHOST)
{
WdtFeed();
if(TcpStatus[0].State<=TCP_STATE_LISTEN)
{
j=InitializeClient();
ConTimer=0; //重新开始计时
if(j=='A')
ConTimer=REPEAT_CON_TIMER-40; //两秒钟后重发连接命令,第一次发ARP COMMAND
}
if(TcpStatus[0].State!=TCP_STATE_ESTABLISHED)
{
if(ConTimer>=REPEAT_CON_TIMER) //20秒钟后重发连接命令
TcpStatus[0].State=TCP_STATE_CLOSED;
}
if(Rec_Packet()!=0)
if(Rec_Ethernet_Packed(&REC_BUFF[0].bytes[4],0)==2) //
if(IP_PROCESS(&REC_BUFF[0].bytes[18],0)=='T')
{
Process_Tcp1((Rec_Ptr *)&RECQ[0]);
}
if(TcpStatus[0].State==TCP_STATE_ESTABLISHED)
{
if(TcpRecFlag&&(TcpRecLength>0))
{
if(TcpStatus[0].My_Port==80)
HttpProcess(&TcpStatus[0].TcpDataQ[0]); //设置端口不发送
else
{
for(j=0;j<TcpRecLength;j++)
uart0.SendBuf[j]=TcpStatus[0].TcpDataQ[j];
uart0.SendIndex=0;
uart0.SendLength=TcpRecLength;
U0THR=uart0.SendBuf[uart0.SendIndex];
}
TcpRecFlag=0;
TcpRecLength=0;
}
if(uart0.ReFinished==1) //RS32接收标记
{
send(0,&uart0.ReBuf[0], uart0.ReLength, 0);
uart0.ReFinished=0;
}
}
}
}
/******************************************************/
void InitializeServer (void)
{
TcpStatus[0].State=TCP_STATE_LISTEN;
TcpStatus[0].My_Ip[0]=My_ip[0];
TcpStatus[0].My_Ip[1]=My_ip[1];
TcpStatus[0].My_Ip[2]=My_ip[2];
TcpStatus[0].My_Ip[3]=My_ip[3];
TcpStatus[0].My_Port=MyServerPort;
TcpStatus[0].StaSem=0x82;
}
/****************************************************/
void InitialPort(void)
{
TcpStatus[0].State=TCP_STATE_LISTEN;
TcpStatus[0].My_Ip[0]=My_ip[0];
TcpStatus[0].My_Ip[1]=My_ip[1];
TcpStatus[0].My_Ip[2]=My_ip[2];
TcpStatus[0].My_Ip[3]=My_ip[3];
TcpStatus[0].My_Port=MyServerPort;
TcpStatus[0].StaSem=0x82;
UDPSocket.SourceIP[0]=My_ip[0];
UDPSocket.SourceIP[0]=My_ip[1];
UDPSocket.SourceIP[0]=My_ip[2];
UDPSocket.SourceIP[0]=My_ip[3];
UDPSocket.DesPort=MyServerPort;
}
/***************************************
void ReadModuleP(void)
{
SourceMAC[0]=0x00;
SourceMAC[1]=0x14;
SourceMAC[2]=0x97;
SourceMAC[3]=0x0f;
SourceMAC[4]=0x17;
SourceMAC[5]=0xcd;
My_ip[0]=192;
My_ip[1]=168;
My_ip[2]=1;
My_ip[3]=100;
MyServerPort=2000;
GateWayIP[0]=192;
GateWayIP[1]=168;
GateWayIP[2]=1;
GateWayIP[3]=1;
SubIPMark[0]=255;
SubIPMark[1]=255;
SubIPMark[2]=255;
SubIPMark[3]=0;
}*/
/***************************************/
void ReadModuleP(void)
{
uint8 i,j;
uint8 *p;
uint8 Temp[32];
ReadEEprom(Temp,MACADDRESS,6);
if(Temp[0]==0xff && Temp[1]==0xff && Temp[2]==0xff
&& Temp[3]==0xff && Temp[4]==0xff && Temp[5]==0xff)
{
SourceMAC[0]=0x00;
SourceMAC[1]=0x14;
SourceMAC[2]=0x97;
SourceMAC[3]=0x0f;
SourceMAC[4]=0x17;
SourceMAC[5]=0xcd;
}
else
{
for(i=0;i<6;i++)
SourceMAC[i]=Temp[i];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -