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

📄 test.c

📁 实现在ARM上的ICP/IP功能的源代码。
💻 C
字号:
#include "true_false.h"
#include "stdlib.h"
#include "typedef.h"
#include "mem_man.h"
#include "rtl8019.h"
#include "netif.h"
#include "etherif.h"
#include "ip.h"
#include "arp.h"
#include "utilities.h"
#include "tcp.h"


#define DATA_SIZE 	0xffff

BYTE  DataBlock[DATA_SIZE];
BYTE  str[]="hello";

socket		 *  ExConn;
socket		 *  ExAccept;
socket		 *  ExListen;


void OnReceive(void   * buf,WORD size)   
{
	/* send back data */
	TCPSend(ExConn,buf,size);
}
void OnAcceptRecv(void   *buf,WORD size)  
{
	/* printf received data */
#if 0 //def DEBUG
	while(size--)
		printf("%c",*((BYTE   *)buf)++);
#endif
		
	/* send back data */
	TCPSend(ExAccept,buf,size);
}
void OnClose(socket   * pSocket)  
{
	TCPClose(pSocket);	/* we close too */
}
void OnAccept(socket   *pNewSocket)  
{
	ExAccept = pNewSocket;
	pNewSocket->recv = OnAcceptRecv;
	pNewSocket->close = OnClose;
}


void test()
{
	struct SMemHead   *MemHead;
	struct SEtherDevice   DevRTL;
	BYTE	  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.138.2.1  */
	NetIfInit();
	ARPInit();
	TCPInit();
	MemInit();
	RTLInit(EtherAddr);	
	
	/* init Devcie struct and init this device */
	EtherDevInit((struct SEtherDevice   * )&DevRTL,
	(u8_t*)EtherAddr,
	RTLSendPacket,
	RTLReceivePacket);
	
	EtherDevInit(&DevRTL,EtherAddr,
	RTLSendPacket,//问题出在这里!
	RTLReceivePacket);
	/* add this device to NetIf */
	NetIfAdd(IPAddr,NetMask,GateWay,EtherInput,EtherOutput,&DevRTL);

	/*
	 * start use socket 
	 */
	 
	/* 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,6);
		/* 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); 
	ping();	
	while(1);
}

⌨️ 快捷键说明

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