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

📄 socket.h

📁 W3100A网络调试程序,可进行数据传输
💻 H
字号:
#ifndef	__SOCKET_H__
#define	__SOCKET_H__

/*
*******************************************************************
To prevent occurrence of warning when there's unused function by KEIL compiler,
include functions to use as using mode
********************************************************************
*/
#define	__TCP__		// Function for TCP
#define __TCP_SERVER__	// Function for TCP server
//#define __TCP_CLIENT__	// Function for TCP client
//#define	__UDP__		// Function for UDP
//#define	__OPT__		// Option function
//#define __IP_RAW__	// To use upper layer protocol with IP Protocol 
#ifdef __IP_RAW__
	#ifndef __UDP__
		#define __UDP__
	#endif
#endif
/**
* involve code for PPPoE
*/
#define _DEF_IINCHIP_PPP

#define	IINCHIP_BASE				0x8000		/* Base address of the W3100A */
#define TMODE						(IINCHIP_BASE + 0x0000)
#define IDM_OR						((IINCHIP_BASE + 0x00))
#define IDM_AR0						((IINCHIP_BASE + 0x01))
#define IDM_AR1						((IINCHIP_BASE + 0x02))
#define IDM_DR						((IINCHIP_BASE + 0x03))
#define IINCHIP_READ(ADDR)			(*((volatile unsigned char xdata*)(ADDR)))
#define IINCHIP_WRITE(ADDR,DATA)	(*((volatile unsigned char xdata*)(ADDR)) = DATA)

/*******************************************************************/

#define	MAX_SOCK_NUM	4			// Concurrent maxmium number of socket
#define MAX_SEGMENT_SIZE	1460		// Maximum TCP transmission packet size
#define MAX_BUF_SIZE1		0

/* 
* Internal Tx buffer address of the iinchip 
*/
#define	SEND_DATA_BUF			(IINCHIP_BASE + 0x4000)		
/* 
*Internal Rx buffer address of the iinchip 
*/
#define	RECV_DATA_BUF			(IINCHIP_BASE + 0x6000)		

#define COMMON_BASE				IINCHIP_BASE + 0x0000
/**
 * \brief Gateway IP Register address
 */
#define GATEWAY_PTR				(COMMON_BASE + 0x0001)
/**
 * \brief Subnet mask Register address
 */
#define SUBNET_MASK_PTR			(COMMON_BASE + 0x0005)
/**
 * \brief Source MAC Register address
 */
#define SRC_HA_PTR				(COMMON_BASE + 0x0009)
/**
 * \brief Source IP Register address
 */
#define SRC_IP_PTR				(COMMON_BASE + 0x000F)
/**
 * \brief IP Type of Service(TOS) Register 
 */
#define TOS						(COMMON_BASE + 0x0013)
/**
 * \brief IP Time to live(TTL) Register 
 */
#define TTL						(COMMON_BASE + 0x0014)
/**
 * \brief Interrupt Register
 */
#define INT_REG					(COMMON_BASE + 0x0015)
/**
 * \brief Interrupt mask register
 */
#define INTMASK					(COMMON_BASE + 0x0016)
/**
 * \brief Timeout register address
 *
 * 1 is 100us
 */
#define TIMEOUT_PTR				(COMMON_BASE + 0x0017)
/**
 * \brief Retry count reigster
 */
#define RCR						(COMMON_BASE + 0x0019)
/**
 * \brief Receive memory size reigster
 */
#define RX_DMEM_SIZE			(COMMON_BASE + 0x001A)
/**
 * \brief Transmit memory size reigster
 */
#define TX_DMEM_SIZE			(COMMON_BASE + 0x001B)
/**
 * \brief Authentication type register address in PPPoE mode
 */
#define PPPAUTH					(COMMON_BASE + 0x001C)
#define PPPALGO					(COMMON_BASE + 0x001D)
/**
 * \brief Unreachable IP register address in UDP mode
 */
#define UNREACH_IP				(COMMON_BASE + 0x002A)
/**
 * \brief Unreachable Port register address in UDP mode
 */
#define UNREACH_PORT			(COMMON_BASE + 0x002E)

#define CH_BASE		IINCHIP_BASE + 0x0400
/**
 * size of each channel register map
 */
#define CH_SIZE		0x0100
/**
 * \brief socket option register
 */
#define OPT_PROTOCOL(ch)		(CH_BASE + ch * CH_SIZE + 0x0000)
/**
 * \brief channel command register
 */
#define COMMAND(ch)				(CH_BASE + ch * CH_SIZE + 0x0001)
/**
 * \brief channel interrupt register
 */
#define INT_STATUS(ch)			(CH_BASE + ch * CH_SIZE + 0x0002)
/**
 * \brief channel status register
 */
#define SOCK_STATUS(ch)			(CH_BASE + ch * CH_SIZE + 0x0003)
/**
 * \brief source port register
 */
#define SRC_PORT_PTR(ch)		(CH_BASE + ch * CH_SIZE + 0x0004)
/**
 * \brief Peer MAC register address
 */
#define DST_HA_PTR(ch)			(CH_BASE + ch * CH_SIZE + 0x0006)
/**
 * \brief Peer IP register address
 */
#define DST_IP_PTR(ch)			(CH_BASE + ch * CH_SIZE + 0x000C)
/**
 * \brief Peer port register address
 */
#define DST_PORT_PTR(ch)		(CH_BASE + ch * CH_SIZE + 0x0010)
/**
 * \brief Maximum Segment Size(MSS) register address
 */
#define MSS(ch)					(CH_BASE + ch * CH_SIZE + 0x0012)
/**
 * \brief Protocol of IP Header field register in IP raw mode
 */
#define IP_PROTOCOL(ch)			(CH_BASE + ch * CH_SIZE + 0x0014)
/**
 * \brief Transmit free memory size register
 */
#define TX_FREE_SIZE_PTR(ch)	(CH_BASE + ch * CH_SIZE + 0x0020)
/**
 * \brief Transmit memory read pointer register address
 */
#define TX_RD_PTR(ch)			(CH_BASE + ch * CH_SIZE + 0x0022)
/**
 * \brief Transmit memory write pointer register address
 */
#define TX_WR_PTR(ch)			(CH_BASE + ch * CH_SIZE + 0x0024)
/**
 * \brief Received data size register
 */
#define RX_RECV_SIZE_PTR(ch)	(CH_BASE + ch * CH_SIZE + 0x0026)
/**
 * \brief Read point of Receive memory
 */
#define RX_RD_PTR(ch)			(CH_BASE + ch * CH_SIZE + 0x0028)
/**
 * \brief Write point of Receive memory
 */
#define RX_WR_PTR(ch)			(CH_BASE + ch * CH_SIZE + 0x002A)
/** @} */

/* TMODE register values */
#define TMODE_INDIRECT			0x01
#define TMODE_AUTOINC			0x02
#define TMODE_LITTLEENDIAN		0x04
#define TMODE_PPPOE				0x08
#define TMODE_PINGBLOCK			0x10
#define TMODE_MEMTEST			0x20
#define TMODE_STATIC_ISN		0x40
#define TMODE_SWRESET			0x80

/* INT_REG register values */
#define INT_CH(ch)				(0x01 << ch)
#define INT_PPPTERM				0x20
#define INT_UNREACH				0x40
#define INT_IPCONFLICT			0x80

/* OPT_PROTOCOL values */
#define	SOCK_CLOSEDM			0x00		// unused socket
#define	SOCK_STREAM				0x01		// TCP
#define	SOCK_DGRAM				0x02		// UDP
#define	SOCK_ICMPM				0x03		// icmp
#define	SOCK_IPL_RAWM			0x03		// IP LAYER RAW SOCK
#define	SOCK_MACL_RAWM			0x04		// MAC LAYER RAW SOCK
#define	SOCK_PPPOEM				0x05		// PPPoE
#define SOCKOPT_ZEROCHKSUM		0x10
#define SOCKOPT_NDACK			0x20		// No Delayed Ack(TCP) flag

/* COMMAND values */
#define CSOCKINIT				0x01		// initialize or open socket
#define CLISTEN					0x02		// wait connection request in tcp mode(Server mode)
#define CCONNECT				0x04		// send connection request in tcp mode(Client mode)
#define CDISCONNECT				0x08		// send closing reqeuset in tcp mode
#define CCLOSE					0x10		// close socket
#define CSEND					0x20		// updata txbuf pointer, send data
#define CSENDMAC				0x21		// send data with MAC address
#define CSENDKEEPALIVE			0x22		// send keep alive message
#define CRECV					0x40		// update rxbuf pointer, recv data

/* INT_STATUS values */
#define ISR_CON					0x01		// established connection
#define ISR_DISCON				0x02		// closed socket
#define ISR_RECV				0x04		// receiving data
#define ISR_TIMEOUT				0x08		// assert timeout
                            	
/* SOCK_STATUS values */
#define SOCK_CLOSED				0x00		// closed
//#define SOCK_ARP				0x01		// 
#define SOCK_INIT				0x13		// init state
#define SOCK_LISTEN				0x14		// listen state
#define SOCK_SYNSENT			0x15		// connection state
#define SOCK_SYNRECV			0x16		// connection state
#define SOCK_ESTABLISHED		0x17		// success to connect
#define SOCK_FIN_WAIT1			0x18		// closing state
#define SOCK_FIN_WAIT2			0x19		// closing state
#define SOCK_CLOSING			0x1A		// closing state
#define SOCK_TIME_WAIT			0x1B		// closing state
#define SOCK_CLOSE_WAIT			0x1C		// closing state
#define SOCK_LAST_ACK			0x1D		// closing state
#define SOCK_UDP				0x22		// udp socket
#define SOCK_IPL_RAW			0x32		// ip raw mode socket
#define SOCK_MACL_RAW			0x42		// mac raw mode socket
#define SOCK_PPPOE				0x5F		// pppoe socket

/* IP PROTOCOL */
#define IPPROTO_IP              0           /* Dummy for IP */
#define IPPROTO_ICMP            1           /* Control message protocol */
#define IPPROTO_IGMP            2           /* Internet group management protocol */
#define IPPROTO_GGP             3           /* Gateway^2 (deprecated) */
#define IPPROTO_TCP             6           /* TCP */
#define IPPROTO_PUP             12          /* PUP */
#define IPPROTO_UDP             17          /* UDP */
#define IPPROTO_IDP             22          /* XNS idp */
#define IPPROTO_ND              77          /* UNOFFICIAL net disk protocol */
#define IPPROTO_RAW             255         /* Raw IP packet */


//void ISR_ESTABLISHED(unsigned char s);
//void ISR_CLOSED(unsigned char s);
//void ISR_RX(unsigned char s);

void iinchip_init(void); // reset iinchip
#define initW3100A() iinchip_init()
void sysinit(unsigned char tx_size, unsigned char rx_size); // setting tx/rx buf size
void setgateway(unsigned char * addr); // set gateway address
void setsubmask(unsigned char * addr); // set subnet mask address
void setMACAddr(unsigned char * addr); // set local MAC address
void setIP(unsigned char * addr); // set local IP address

unsigned char socket(unsigned char s, unsigned char protocol, unsigned int port, unsigned char flag); // Opens a socket(TCP or UDP or IP_RAW mode)


#ifdef __IP_RAW__
void setIPprotocol(unsigned char ch, unsigned char proto); // set IP Protocol value using IP-Raw mode
#endif

#ifdef	__OPT__
void settimeout(unsigned int timeout); // set retry duration for data transmission, connection, closing ...
void setRCR(unsigned char retry); // set retry count (above the value, assert timeout interrupt)
void setINTMask(unsigned char mask); // set interrupt mask. 
void setTOS(unsigned char s, unsigned char tos);
void reset_sock(unsigned char s);
/* Useful functions */
void getDestAddr(unsigned char ch, unsigned char * addr);
void Send_KeepalivePacket(unsigned char s);
#endif


#ifdef	__TCP_CLIENT__
unsigned char connect(unsigned char s, unsigned char * addr, unsigned int port); // Establish TCP connection (Active connection)
#endif

#ifdef	__TCP_SERVER__
void NBlisten(unsigned char s);
#endif

//void initseqnum(unsigned char s);

#ifdef	__TCP__
void disconnect(unsigned char s); // disconnect the connection
unsigned int send(unsigned char s, const unsigned char * buf, unsigned int len);
unsigned int recv(unsigned char s, const unsigned char * buf, unsigned int len);
#endif	// __TCP__

#ifdef	__UDP__
//unsigned int sendto(unsigned char , const unsigned char  xdata*, unsigned int, unsigned char *, unsigned int);
unsigned int sendto(unsigned char s, const unsigned char * buf, unsigned int len, unsigned char * addr, unsigned int port);
unsigned int recvfrom(unsigned char , const unsigned char  *, unsigned int, unsigned char *, unsigned int *);
#endif	// __UDP__

unsigned int send_in(unsigned char s, const unsigned char * buf, unsigned int len, unsigned char kind);
unsigned int read_data(unsigned char s, unsigned char  * src, unsigned char * dst, unsigned int len);
unsigned int write_data(unsigned char s, unsigned char * src, unsigned char * dst, unsigned int len);

void close(unsigned char s);
unsigned int select(unsigned char s, unsigned char func); // Get socket status/Tx free buffer size/ Rx buffer size
/*
* func value
*/	
	#define SEL_CONTROL		0 // socket status
	#define SEL_SEND		1 // free size in tx buf
	#define SEL_RECV		2 // receving data size in rx buf

#ifdef _DEF_IINCHIP_PPP
	void getLocalAddr(unsigned char * addr);
	void getDestMAC(unsigned char ch, unsigned char * addr);
	unsigned int getDestPort(unsigned char ch);
	unsigned char pppinit(unsigned char * id, unsigned char idlen, unsigned char * passwd, unsigned char passwdlen);
	unsigned char pppterm(unsigned char * mac,unsigned int sessionid);
void wait_10ms(int cnt);
void wait_1ms(int cnt);
#endif

void wait_1us(int cnt);

#endif	/* __SOCKET_H__*/

⌨️ 快捷键说明

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