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

📄 w3150a.h

📁 W3510A PPPoE code for network use
💻 H
字号:
#ifndef	_W3150A_H_
#define	_W3150A_H_

#include "iinchip_conf.h"
#include "../mcu/types.h"

#define TMODE __DEF_IINCHIP_MAP_BASE__
#define IDM_OR ((__DEF_IINCHIP_MAP_BASE__ + 0x00))
#define IDM_AR0 ((__DEF_IINCHIP_MAP_BASE__ + 0x01))
#define IDM_AR1 ((__DEF_IINCHIP_MAP_BASE__ + 0x02))
#define IDM_DR ((__DEF_IINCHIP_MAP_BASE__ + 0x03))

/*
* Maxmium number of socket 
*/
#define	MAX_SOCK_NUM		4

/**
 * \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 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)
#define PPP_TIMEOUT				(COMMON_BASE + 0x0028)
#define PPP_MAGIC				(COMMON_BASE + 0x0029)
/**
 * \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)

/* socket register */
#define CH_BASE (COMMON_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 IP Type of Service(TOS) Register 
 */
#define IP_TOS(ch)						(CH_BASE + ch * CH_SIZE + 0x0015)
/**
 * \brief IP Time to live(TTL) Register 
 */
#define IP_TTL(ch)						(CH_BASE + ch * CH_SIZE + 0x0016)

/**
 * \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
#define SOCKOPT_MULTI			0x80		// support multicating

/* 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

#ifdef __DEF_IINCHIP_PPP__
	#define CPPPCON					0x23		// updata txbuf pointer, send data
	#define CPPPDISCON				0x24		// updata txbuf pointer, send data
	#define CPPPCR					0x25		// updata txbuf pointer, send data
	#define CPPPCN					0x26		// updata txbuf pointer, send data
	#define CPPPCJ					0x27		// updata txbuf pointer, send data
#endif

/* 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

#ifdef __DEF_IINCHIP_PPP__
	#define ISR_PPP_NXT				0x20		// receiving data
	#define ISR_PPP_FAIL			0x40		// receiving data
	#define ISR_PPP_RECV			0x80		// receiving data
#endif
                            	
/* SOCK_STATUS values */
#define SOCK_CLOSED				0x00		// closed
#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 */

/*********************************************************
* iinchip access function
*********************************************************/
uint8 IINCHIP_READ(uint16 addr);
uint8 IINCHIP_WRITE(uint16 addr,uint8 data);
uint16 wiz_read_buf(uint16 addr, uint8* buf,uint16 len);
uint16 wiz_write_buf(uint16 addr,uint8* buf,uint16 len);

void iinchip_init(void); // reset iinchip
void sysinit(uint8 tx_size, uint8 rx_size); // setting tx/rx buf size
uint8 getISR(uint8 s);
uint16 getIINCHIP_RxMAX(uint8 s);
uint16 getIINCHIP_TxMAX(uint8 s);
uint16 getIINCHIP_RxMASK(uint8 s);
uint16 getIINCHIP_TxMASK(uint8 s);
uint16 getIINCHIP_RxBASE(uint8 s);
uint16 getIINCHIP_TxBASE(uint8 s);
void setgateway(uint8 * addr); // set gateway address
void setsubmask(uint8 * addr); // set subnet mask address
uint8 issubnet(uint8 *addr);
uint8 issubnet_gw(void);
void setMACAddr(uint8 * addr); // set local MAC address
void setIP(uint8 * addr); // set local IP address
void settimeout(uint16 timeout); // set retry duration for data transmission, connection, closing ...
void setRCR(uint8 retry); // set retry count (above the value, assert timeout interrupt)
void setINTMask(uint8 mask); // set interrupt mask. 
void getGWIP(uint8 * addr);
void getGWMAC_processing(void);
void getGWMAC(uint8 * addr);
void getLocalAddr(uint8 * addr);
void getDestMAC(SOCKET s, uint8 * addr);
void getDestAddr(SOCKET s, uint8 * addr);
void getDestPort(SOCKET s, uint8 * addr);
void setMSS(SOCKET s, uint16 mss); // set maximum segment size
void setIPprotocol(SOCKET s, uint8 proto); // set IP Protocol value using IP-Raw mode
uint16 select(SOCKET s, uint8 func); // Get socket status/Tx free buffer size/ Rx buffer size

#ifdef __DEF_IINCHIP_PPP__
   uint8 pppinit(uint8 *id, uint8 idlen, uint8 *passwd, uint8 passwdlen);
   uint8 pppterm(uint8 *mac,uint8 *sessionid);
#endif

void send_data_processing(SOCKET s, uint8 *data, uint16 len);
void recv_data_processing(SOCKET s, uint8 *data, uint16 len);
void read_data(SOCKET s, vuint8 * src, vuint8 * dst, uint16 len);
void write_data(SOCKET s, vuint8 * src, vuint8 * dst, uint16 len);

/* select 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

#endif

⌨️ 快捷键说明

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