0.移植说明,w5500移植文件
Ethernet和Internet里面包含的文件就是以太网五层模型中的应用层
应用层协议:HTTP,FTP,SMTP,TFTP,Telent, MQTT 支撑协议:DNS,SNMP
HTTP使用TCP而不是UDP.
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。
0-1,Ethernet可以认为是对W5500芯片硬件的配置,全部添加
0-2 ,Internet就是按照需求自由添加了,全部添加也可以。
比如我要通过域名www.baidu.com或者www.sina.com.cn直接访问广域网,
1,需要连接可以上网的路由器(不能是PC,PC没有DHCP功能),则应该添加DHCP.H
2,作为域名解析,需要添加DNS.H
3,如果是W5500作为服务器HTTP,需要添加httpServer.h
下面的重点就是W5500_conf.h,W5500.h和socket.h这三个头文件中的函数,其余的都是在这上面的封装
1,#include "W5500_conf.h",最基础的读写函数封装
/*W5500SPI相关函数*/
void IINCHIP_WRITE( uint32 addrbsb, uint8 data); /*写入一个8位数据到W5500*/
uint8 IINCHIP_READ(uint32 addrbsb); /*从W5500读出一个8位数据*/
uint16 wiz_write_buf(uint32 addrbsb,uint8* buf,uint16 len); /*向W5500写入len字节数据*/
uint16 wiz_read_buf(uint32 addrbsb, uint8* buf,uint16 len); /*从W5500读出len字节数据*/
/*W5500基本配置相关函数*/
void reset_w5500(void); /*硬复位W5500*/
void set_w5500_mac(void); /*配置W5500的MAC地址*/
void set_w5500_ip(void); /*配置W5500的IP地址*/
/*需要用定时的的应用函数*/
void dhcp_timer_init(void); /*dhcp用到的定时器初始化*/
void ntp_timer_init(void); /*npt用到的定时器初始化*/
send()->send_data_processing->IINCHIP_WRITE(),wiz_write_buf()
2,#include "W5500.h" ,各种状态的检查函数,本机IP配置函数
/*********************************************************
* iinchip access function
*********************************************************/
void iinchip_init(void); // reset iinchip
void socket_buf_init(uint8 * tx_size, uint8 * rx_size); // setting tx/rx buf size
uint8 getISR(uint8 s);
void putISR(uint8 s, uint8 val);
uint16 getIINCHIP_RxMAX(uint8 s); //获取socket接收最大值
uint16 getIINCHIP_TxMAX(uint8 s);
void setMR(uint8 val);
void setRTR(uint16 timeout); // set retry duration for data transmission, connection, closing ...
void setRCR(uint8 retry); // set retry count (above the value, assert timeout interrupt)
void clearIR(uint8 mask); // clear interrupt
uint8 getIR( void );
void setSn_MSS(SOCKET s, uint16 Sn_MSSR); // set maximum segment size
uint8 getSn_IR(SOCKET s); // get socket interrupt status 用的非常多
uint8 getSn_SR(SOCKET s); // get socket status
uint16 getSn_TX_FSR(SOCKET s); // get socket TX free buf size
uint16 getSn_RX_RSR(SOCKET s); // get socket RX recv buf size
//uint8 getSn_SR(SOCKET s);
void setSn_TTL(SOCKET s, uint8 ttl);
void send_data_processing(SOCKET s, uint8 *wizdata, uint16 len);//数据的发送
void recv_data_processing(SOCKET s, uint8 *wizdata, uint16 len);
void setGAR(uint8 * addr); // set gateway address
void setSUBR(uint8 * addr); // set subnet mask address
void setSHAR(uint8 * addr); // set local MAC address
void setSIPR(uint8 * addr); // set local IP address
void getGAR(uint8 * addr);
void getSUBR(uint8 * addr);
void getSHAR(uint8 * addr);
void getSIPR(uint8 * addr);
void setSn_IR(uint8 s, uint8 val);
void Reset_W5500(void);
void PHY_check(void); //网口连接检查
extern uint8 rxsize[];
3,#include<socket.h>,连接服务器,数据的上传和接收函数
extern uint8 socket(SOCKET s, uint8 protocol, uint16 port, uint8 flag); // Opens a socket(TCP or UDP or IP_RAW mode)
extern void close(SOCKET s); // Close socket
extern uint8 connect(SOCKET s, uint8 * addr, uint16 port); // Establish TCP connection (Active connection)
extern void disconnect(SOCKET s); // disconnect the connection
extern uint8 listen(SOCKET s); // Establish TCP connection (Passive connection)
extern uint16 send(SOCKET s, const uint8 * buf, uint16 len); // Send data (TCP)
//send函数包含了send_data_processing()函数
extern uint16 recv(SOCKET s, uint8 * buf, uint16 len); // Receive data (TCP)
extern uint16 sendto(SOCKET s, const uint8 * buf, uint16 len, uint8 * addr, uint16 port); // Send data (UDP/IP RAW)
extern uint16 recvfrom(SOCKET s, uint8 * buf, uint16 len, uint8 * addr, uint16 *port); // Receive data (UDP/IP RAW)
4,#include<dhcp.h>
uint8 check_DHCP_state(SOCKET s); // Check the DHCP state
void do_dhcp(void);
5, #include "http_server.h"
void unescape_http_url(char * url); /* convert escape character to ascii */
void parse_http_request(st_http_request *, uint8 *);/* parse request from peer */
void find_http_uri_type(uint8 *, char *); /* find MIME type of a file */
void make_http_response_head(unsigned char *, char, u_long); /* make response header */
unsigned char* get_http_param_value(char* uri, char* param_name); /* get the user-specific parameter value */
6,#include "http_client.h"
void do_http_client(void);//TCP Clinet回环演示函数
7,#include "httputil.h"
void proc_http(SOCKET s, u_char * buf);
void do_https(void);
void cgi_ipconfig(st_http_request *http_request);
//void trimp(uint8* src, uint8* dst, uint16 len);
uint16 make_msg_response(uint8* buf,int8* msg);
void make_cgi_response(uint16 a,int8* b,int8* c);
void make_pwd_response(int8 isRight,uint16 delay,int8* cgi_response_content, int8 isTimeout);
8, #include "ntp.h"
void get_seconds_from_ntp_server(uint8* buf,uint16 idx);
void ntp_client_init(void);
void do_ntp_client(void);
tstamp change_datetime_to_seconds(void);
void calc_date_time(tstamp seconds);
9,#include "dns.h"
extern uint8 dns_get_ip[4];
extern uint8 domain_name[];
int dns_makequery(uint16 op, uint8 * name, uint8 * buf, uint16 len);
int parse_name(uint8 * msg, uint8 * compressed, /*char * buf,*/ uint16 len);
uint8 * dns_question(uint8 * msg, uint8 * cp);
uint8 * dns_answer(uint8 * msg, uint8 * cp);
uint8 parseMSG(struct dhdr * pdhdr, uint8 * pbuf);
uint8 dns_query(uint8 s, uint8 * name);
void do_dns(void);
10,#include "smtp.h"
void send_mail(void);
void mail_message(void);
void base64encode(char *s, char *r);
void str_insert(char *s1,char *s2,int pos);
void do_smtp(void);