No more update~~ please use W5500Interface.

Fork of EthernetInterfaceW5500 by Bongjun Hur


Bongjun Hur wrote:

NO more update for this library.

Please move to this page W5500Interface for newer version.

Import libraryW5500Interface

This is the Interface library for WIZnet W5500 chip which forked of EthernetInterfaceW5500, WIZnetInterface and WIZ550ioInterface. This library has simple name as "W5500Interface". and can be used for Wiz550io users also.

This Library for W5500 users. no need to use lwIP(or S/W TCP/IP) Some update & code clean for W5500 only refer from WIZ550ioInterface, WIZnetLibrary and WiflyInterface.

Thanks for ban4jp. This library forks of WIZ550ioInterface.

Committer:
ppo
Date:
Fri Aug 29 12:00:38 2014 +0000
Revision:
15:fe68ac753657
Parent:
10:cadac6bcd169
bug fixed in close(), now socket is really closed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bongjun 10:cadac6bcd169 1 // EthernetInterfaceW5500.cpp 2014/7/17
Bongjun 10:cadac6bcd169 2
Bongjun 10:cadac6bcd169 3 #include "EthernetInterfaceW5500.h"
Bongjun 10:cadac6bcd169 4 #include "DHCPClient.h"
Bongjun 10:cadac6bcd169 5
Bongjun 10:cadac6bcd169 6 EthernetInterfaceW5500::EthernetInterfaceW5500(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset) :
Bongjun 10:cadac6bcd169 7 WIZnet_Chip(mosi, miso, sclk, cs, reset)
Bongjun 10:cadac6bcd169 8 {
Bongjun 10:cadac6bcd169 9 ip_set = false;
Bongjun 10:cadac6bcd169 10 }
Bongjun 10:cadac6bcd169 11
Bongjun 10:cadac6bcd169 12 EthernetInterfaceW5500::EthernetInterfaceW5500(SPI* spi, PinName cs, PinName reset) :
Bongjun 10:cadac6bcd169 13 WIZnet_Chip(spi, cs, reset)
Bongjun 10:cadac6bcd169 14 {
Bongjun 10:cadac6bcd169 15 ip_set = false;
Bongjun 10:cadac6bcd169 16 }
Bongjun 10:cadac6bcd169 17
Bongjun 10:cadac6bcd169 18 int EthernetInterfaceW5500::init()
Bongjun 10:cadac6bcd169 19 {
Bongjun 10:cadac6bcd169 20 dhcp = true;
Bongjun 10:cadac6bcd169 21 //
Bongjun 10:cadac6bcd169 22 //for (int i =0; i < 6; i++) this->mac[i] = mac[i];
Bongjun 10:cadac6bcd169 23 //
Bongjun 10:cadac6bcd169 24 reset();
Bongjun 10:cadac6bcd169 25 return 0;
Bongjun 10:cadac6bcd169 26 }
Bongjun 10:cadac6bcd169 27
Bongjun 10:cadac6bcd169 28 int EthernetInterfaceW5500::init(uint8_t * mac)
Bongjun 10:cadac6bcd169 29 {
Bongjun 10:cadac6bcd169 30 dhcp = true;
Bongjun 10:cadac6bcd169 31 //
Bongjun 10:cadac6bcd169 32 for (int i =0; i < 6; i++) this->mac[i] = mac[i];
Bongjun 10:cadac6bcd169 33 //
Bongjun 10:cadac6bcd169 34 reset();
Bongjun 10:cadac6bcd169 35 setmac();
Bongjun 10:cadac6bcd169 36 return 0;
Bongjun 10:cadac6bcd169 37 }
Bongjun 10:cadac6bcd169 38
Bongjun 10:cadac6bcd169 39 // add this function, because sometimes no needed MAC address in init calling.
Bongjun 10:cadac6bcd169 40 int EthernetInterfaceW5500::init(const char* ip, const char* mask, const char* gateway)
Bongjun 10:cadac6bcd169 41 {
Bongjun 10:cadac6bcd169 42 dhcp = false;
Bongjun 10:cadac6bcd169 43 //
Bongjun 10:cadac6bcd169 44 //for (int i =0; i < 6; i++) this->mac[i] = mac[i];
Bongjun 10:cadac6bcd169 45 //
Bongjun 10:cadac6bcd169 46 this->ip = str_to_ip(ip);
Bongjun 10:cadac6bcd169 47 strcpy(ip_string, ip);
Bongjun 10:cadac6bcd169 48 ip_set = true;
Bongjun 10:cadac6bcd169 49 this->netmask = str_to_ip(mask);
Bongjun 10:cadac6bcd169 50 this->gateway = str_to_ip(gateway);
Bongjun 10:cadac6bcd169 51 reset();
Bongjun 10:cadac6bcd169 52
Bongjun 10:cadac6bcd169 53 // @Jul. 8. 2014 add code. should be called to write chip.
Bongjun 10:cadac6bcd169 54 setip();
Bongjun 10:cadac6bcd169 55
Bongjun 10:cadac6bcd169 56 return 0;
Bongjun 10:cadac6bcd169 57 }
Bongjun 10:cadac6bcd169 58
Bongjun 10:cadac6bcd169 59 int EthernetInterfaceW5500::init(uint8_t * mac, const char* ip, const char* mask, const char* gateway)
Bongjun 10:cadac6bcd169 60 {
Bongjun 10:cadac6bcd169 61 dhcp = false;
Bongjun 10:cadac6bcd169 62 //
Bongjun 10:cadac6bcd169 63 for (int i =0; i < 6; i++) this->mac[i] = mac[i];
Bongjun 10:cadac6bcd169 64 //
Bongjun 10:cadac6bcd169 65 this->ip = str_to_ip(ip);
Bongjun 10:cadac6bcd169 66 strcpy(ip_string, ip);
Bongjun 10:cadac6bcd169 67 ip_set = true;
Bongjun 10:cadac6bcd169 68 this->netmask = str_to_ip(mask);
Bongjun 10:cadac6bcd169 69 this->gateway = str_to_ip(gateway);
Bongjun 10:cadac6bcd169 70 reset();
Bongjun 10:cadac6bcd169 71
Bongjun 10:cadac6bcd169 72 // @Jul. 8. 2014 add code. should be called to write chip.
Bongjun 10:cadac6bcd169 73 setmac();
Bongjun 10:cadac6bcd169 74 setip();
Bongjun 10:cadac6bcd169 75
Bongjun 10:cadac6bcd169 76 return 0;
Bongjun 10:cadac6bcd169 77 }
Bongjun 10:cadac6bcd169 78
Bongjun 10:cadac6bcd169 79 // Connect Bring the interface up, start DHCP if needed.
Bongjun 10:cadac6bcd169 80 int EthernetInterfaceW5500::connect()
Bongjun 10:cadac6bcd169 81 {
Bongjun 10:cadac6bcd169 82 if (dhcp) {
Bongjun 10:cadac6bcd169 83 int r = IPrenew();
Bongjun 10:cadac6bcd169 84 if (r < 0) {
Bongjun 10:cadac6bcd169 85 return r;
Bongjun 10:cadac6bcd169 86 }
Bongjun 10:cadac6bcd169 87 }
Bongjun 10:cadac6bcd169 88
Bongjun 10:cadac6bcd169 89 if (WIZnet_Chip::setip() == false) return -1;
Bongjun 10:cadac6bcd169 90 return 0;
Bongjun 10:cadac6bcd169 91 }
Bongjun 10:cadac6bcd169 92
Bongjun 10:cadac6bcd169 93 // Disconnect Bring the interface down.
Bongjun 10:cadac6bcd169 94 int EthernetInterfaceW5500::disconnect()
Bongjun 10:cadac6bcd169 95 {
Bongjun 10:cadac6bcd169 96 if (WIZnet_Chip::disconnect() == false) return -1;
Bongjun 10:cadac6bcd169 97 return 0;
Bongjun 10:cadac6bcd169 98 }
Bongjun 10:cadac6bcd169 99
Bongjun 10:cadac6bcd169 100 char* EthernetInterfaceW5500::getIPAddress()
Bongjun 10:cadac6bcd169 101 {
Bongjun 10:cadac6bcd169 102 uint32_t ip = reg_rd<uint32_t>(SIPR);
Bongjun 10:cadac6bcd169 103 snprintf(ip_string, sizeof(ip_string), "%d.%d.%d.%d", (ip>>24)&0xff, (ip>>16)&0xff, (ip>>8)&0xff, ip&0xff);
Bongjun 10:cadac6bcd169 104 return ip_string;
Bongjun 10:cadac6bcd169 105 }
Bongjun 10:cadac6bcd169 106
Bongjun 10:cadac6bcd169 107 char* EthernetInterfaceW5500::getNetworkMask()
Bongjun 10:cadac6bcd169 108 {
Bongjun 10:cadac6bcd169 109 uint32_t ip = reg_rd<uint32_t>(SUBR);
Bongjun 10:cadac6bcd169 110 snprintf(mask_string, sizeof(mask_string), "%d.%d.%d.%d", (ip>>24)&0xff, (ip>>16)&0xff, (ip>>8)&0xff, ip&0xff);
Bongjun 10:cadac6bcd169 111 return mask_string;
Bongjun 10:cadac6bcd169 112 }
Bongjun 10:cadac6bcd169 113
Bongjun 10:cadac6bcd169 114 char* EthernetInterfaceW5500::getGateway()
Bongjun 10:cadac6bcd169 115 {
Bongjun 10:cadac6bcd169 116 uint32_t ip = reg_rd<uint32_t>(GAR);
Bongjun 10:cadac6bcd169 117 snprintf(gw_string, sizeof(gw_string), "%d.%d.%d.%d", (ip>>24)&0xff, (ip>>16)&0xff, (ip>>8)&0xff, ip&0xff);
Bongjun 10:cadac6bcd169 118 return gw_string;
Bongjun 10:cadac6bcd169 119 }
Bongjun 10:cadac6bcd169 120
Bongjun 10:cadac6bcd169 121 char* EthernetInterfaceW5500::getMACAddress()
Bongjun 10:cadac6bcd169 122 {
Bongjun 10:cadac6bcd169 123 uint8_t mac[6];
Bongjun 10:cadac6bcd169 124 reg_rd_mac(SHAR, mac);
Bongjun 10:cadac6bcd169 125 snprintf(mac_string, sizeof(mac_string), "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
Bongjun 10:cadac6bcd169 126 return mac_string;
Bongjun 10:cadac6bcd169 127 }
Bongjun 10:cadac6bcd169 128
Bongjun 10:cadac6bcd169 129 int EthernetInterfaceW5500::IPrenew(int timeout_ms)
Bongjun 10:cadac6bcd169 130 {
Bongjun 10:cadac6bcd169 131 // printf("DHCP Started, waiting for IP...\n");
Bongjun 10:cadac6bcd169 132 DHCPClient dhcp;
Bongjun 10:cadac6bcd169 133 int err = dhcp.setup(timeout_ms);
Bongjun 10:cadac6bcd169 134 if (err == (-1)) {
Bongjun 10:cadac6bcd169 135 // printf("Timeout.\n");
Bongjun 10:cadac6bcd169 136 return -1;
Bongjun 10:cadac6bcd169 137 }
Bongjun 10:cadac6bcd169 138 // printf("Connected, IP: %d.%d.%d.%d\n", dhcp.yiaddr[0], dhcp.yiaddr[1], dhcp.yiaddr[2], dhcp.yiaddr[3]);
Bongjun 10:cadac6bcd169 139 ip = (dhcp.yiaddr[0] <<24) | (dhcp.yiaddr[1] <<16) | (dhcp.yiaddr[2] <<8) | dhcp.yiaddr[3];
Bongjun 10:cadac6bcd169 140 gateway = (dhcp.gateway[0]<<24) | (dhcp.gateway[1]<<16) | (dhcp.gateway[2]<<8) | dhcp.gateway[3];
Bongjun 10:cadac6bcd169 141 netmask = (dhcp.netmask[0]<<24) | (dhcp.netmask[1]<<16) | (dhcp.netmask[2]<<8) | dhcp.netmask[3];
Bongjun 10:cadac6bcd169 142 dnsaddr = (dhcp.dnsaddr[0]<<24) | (dhcp.dnsaddr[1]<<16) | (dhcp.dnsaddr[2]<<8) | dhcp.dnsaddr[3];
Bongjun 10:cadac6bcd169 143 return 0;
Bongjun 10:cadac6bcd169 144 }