www.pudn.com > zlIP-8051-rtl8019as.zip > Main.c
/* * Copyright (c) 2003 Electric Application Laboratory of NAN KAI University * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY * OF SUCH DAMAGE. * * Author: Li Zhanglin* */ #include "..\GloblDef\GloblDef.h" #include "..\TCPIP\TCPIPmem.h" #include "..\Netif\RTL8019.h" #include "..\TCPIP\IP.h" #include "..\Netif\etherif.h" #include "..\Netif\ARP.h" #include "..\TCPIP\Netif.h" #include "..\TCPIP\TCP.h" #include "..\App\main.h" #define DATA_SIZE 0x500 BYTE DT_XDATA DataBlock[DATA_SIZE]; BYTE DT_XDATA str[]="Hello,My name is cxh,I am Server!!"; socket DT_XDATA * DT_XDATA ExConn; socket DT_XDATA * DT_XDATA ExAccept; socket DT_XDATA * DT_XDATA ExListen; sbit led0=P1^4; sbit led1=P1^5; //#define LenTxBuf 2000 //Don't too small,because it will cause display abnormal. //#define LenRxBuf 50 //unsigned char TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收发缓冲区实体 //unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收发缓冲区读写指针 //bit TIflag=1;//Note:It must be 1. void OnReceive(void DT_XDATA * buf,WORD size) REENTRANT_MUL { /* send back data */ TCPSend(ExConn,buf,size); } void OnAcceptRecv(void DT_XDATA *buf,WORD size) REENTRANT_MUL { /* printf received data */ void DT_XDATA *buff,*buff1; buff=buf; buff1=""; #ifdef DEBUG while(size--) printf("%c",*((BYTE DT_XDATA *)buf)++); #endif if ((char)(*((BYTE DT_XDATA *)buff))=='1') { led0=1; led1=0; TCPSend(ExAccept,buff1,1); } else if ((char)(*((BYTE DT_XDATA *)buff))=='2') { led0=0; led1=1; TCPSend(ExAccept,buff1,1); } else if ((char)(*((BYTE DT_XDATA *)buff))=='3') { led0=0; led1=0; TCPSend(ExAccept,buff1,1); } else if ((char)(*((BYTE DT_XDATA *)buff))=='4') { led0=1; led1=1; TCPSend(ExAccept,buff1,1); } /* send back data */ else TCPSend(ExAccept,buf,size); } void OnAccept(socket DT_XDATA *pNewSocket) REENTRANT_MUL { ExAccept = pNewSocket; pNewSocket->recv = OnAcceptRecv; pNewSocket->close = OnClose; } void OnClose(socket DT_XDATA * pSocket) REENTRANT_MUL { TCPClose(pSocket); /* we close too */ } void Timer() REENTRANT_MUL interrupt 1 { TH0 = 0x3C; /*TIMER_24M_25MS_H;*/ TL0 = 0xAA; /*TIMER_24M_25MS_L;*/ NetIfTimer(); ARPTimer(); TCPTimer(); } void SerialInit() { /* set TI to 1, set TR1 to 1 */ TMOD=TMOD&0x0F; TMOD=TMOD|0x20; TL1=0xFD,TH1=0xFD;//19200 , 22.1184MHz SCON=0x50;PCON=0x00; TR1=1; TI = 1; /* SCON = 0x52;/* SM0 SM1 =1 SM2 REN TB8 RB8 TI RI */ /* TMOD = 0x20; GATE=0 C/T-=0 M1 M0=2 GATE C/T- M1 M0 */ /* TH1 = 0xE6; TH1=E6 4800 when at 24MHz,TH1=F3,9600,24MHz */ /* PCON = 0x80; TCON = 0x40;/* 01101001 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT */ } /*void InitSerialBuffer(void) reentrant//串口缓冲区初始化 { inTxBuf=TxBuf;outTxBuf=TxBuf; inRxBuf=RxBuf;outRxBuf=RxBuf; ES=1; } */ void InterruptInit() { TMOD |= 0x01; TH0 = 0x3C; /*TIMER_24M_25MS_H;*/ TL0 = 0xAA; /*TIMER_24M_25MS_L;*/ TR0 = 1; /* open interrupt for rtl and timer */ EA = 1; /* EX0 = 1; */ ET0 = 1; } main() { struct SMemHead DT_XDATA *MemHead; struct SEtherDevice DT_XDATA DevRTL; BYTE DT_XDATA EtherAddr[ETHER_ADDR_LEN] = {0x52,0x54,0x4c,0x30,0x2e,0x2f}; IP_ADDR IPAddr = 0xc0a8020D; /* 192.168.2.13 *//* ca71e590:202.113.229.144 *//* ca711075:202.113.16.117 */ IP_ADDR NetMask = 0xffffff00; /* 255.255.255.0 */ IP_ADDR GateWay = 0xc0a80201; /* 192.168.1.1 */ led0=0; led1=0; /* * init */ /* init. the order is not important */ NetIfInit(); ARPInit(); TCPInit(); MemInit(); RTLInit(EtherAddr); /* init Devcie struct and init this device */ EtherDevInit(&DevRTL,EtherAddr,RTLSendPacket,RTLReceivePacket); /* add this device to NetIf */ NetIfAdd(IPAddr,NetMask,GateWay,EtherInput,EtherOutput,&DevRTL); /* * start use socket */ SerialInit(); InterruptInit(); TRACE("start"); /* Illustrate how to listen as a server */ ExListen = TCPSocket(IPAddr); ExAccept = NULL; TCPListen(ExListen,TCP_DEFAULT_PORT, OnAccept); /* Illustrate how to connect to a server */ /* ExConn = TCPSocket(IPAddr); if(TCPConnect(ExConn,0xc0a8020e,1001,OnReceive,OnClose) == TRUE) { // Illustrate how to Use TCPSend() TCPSend(ExConn,str,sizeof(str)); // Illustrate how to Use TCPSendEx() while(1) { if((MemHead = TCPAllocate(DATA_SIZE)) == NULL) break; MemCopy(MemHead->pStart,DataBlock,DATA_SIZE); if(TCPSendEx(ExConn,MemHead) == FALSE) break; } } TCPAbort(ExConn); */ while(1); }