📄 socket.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 + -