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.

Dependents:   EvrythngApi Websocket_Ethernet_HelloWorld_W5500 Websocket_Ethernet_W5500 CurrentWeatherData_W5500 ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers EthernetInterface.cpp Source File

EthernetInterface.cpp

00001 // EthernetInterface for W5500 2014/8/20
00002 /*
00003 // sample usgae. 
00004 // copy below code block to main code.
00005 
00006 #if defined(TARGET_LPC1114)
00007     SPI spi(dp2, dp1, dp6); // mosi, miso, sclk
00008     EthernetInterface eth(&spi, dp25, dp26); // spi, cs, reset
00009     wait(1); // 1 second for stable state
00010 #elif defined(TARGET_LPC1768)
00011     SPI spi(p11, p12, p13); // mosi, miso, sclk
00012     EthernetInterface eth(&spi, p14, p15); // spi, cs, reset
00013     wait(1); // 1 second for stable state
00014 #elif defined(TARGET_LPC11U68)
00015     SPI spi(P0_9, P0_8, P1_29); // mosi, miso, sclk
00016     EthernetInterface eth(&spi, P0_2, P1_28);//, nRESET(p9); // reset pin is dummy, don't affect any pin of WIZ550io
00017     spi.format(8,0); // 8bit, mode 0
00018     spi.frequency(7000000); // 7MHz
00019     wait(1); // 1 second for stable state
00020 #endif
00021 
00022     eth.init(); //Use DHCP
00023     dbg.printf("init\r\n");
00024     eth.connect();
00025     dbg.printf("IP address: %s\r\n", eth.getIPAddress());
00026 
00027 */
00028 
00029 #include "EthernetInterface.h"
00030 #include "DHCPClient.h"
00031 //static char ip_string[17];
00032 //static uint32_t ipaddr ;
00033 EthernetInterface::EthernetInterface(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset) :
00034         WIZnet_Chip(mosi, miso, sclk, cs, reset)
00035 {
00036     ip_set = false;
00037 }
00038 
00039 EthernetInterface::EthernetInterface(SPI* spi, PinName cs, PinName reset) :
00040         WIZnet_Chip(spi, cs, reset)
00041 {
00042     ip_set = false;
00043 }
00044 
00045 
00046 int EthernetInterface::init()
00047 {
00048     dhcp = true;
00049     //
00050     //for (int i =0; i < 6; i++) this->mac[i] = mac[i];
00051     //
00052     reset();
00053     return 0;
00054 }
00055 
00056 int EthernetInterface::init(uint8_t * mac)
00057 {
00058     dhcp = true;
00059     //
00060     for (int i =0; i < 6; i++) this->mac[i] = mac[i];
00061     //
00062     reset();
00063     setmac();    
00064     return 0;
00065 }
00066 
00067 // add this function, because sometimes no needed MAC address in init calling.
00068 int EthernetInterface::init(const char* ip, const char* mask, const char* gateway)
00069 {
00070     dhcp = false;
00071     //
00072     //for (int i =0; i < 6; i++) this->mac[i] = mac[i];
00073     //
00074     this->ip = str_to_ip(ip);
00075     strcpy(ip_string, ip);
00076     ip_set = true;
00077     this->netmask = str_to_ip(mask);
00078     this->gateway = str_to_ip(gateway);
00079     reset();
00080     
00081     // @Jul. 8. 2014 add code. should be called to write chip.
00082     setip(); 
00083     
00084     return 0;
00085 }
00086 
00087 int EthernetInterface::init(uint8_t * mac, const char* ip, const char* mask, const char* gateway)
00088 {
00089     dhcp = false;
00090     //
00091     for (int i =0; i < 6; i++) this->mac[i] = mac[i];
00092     //
00093     this->ip = str_to_ip(ip);
00094     strcpy(ip_string, ip);
00095     ip_set = true;
00096     this->netmask = str_to_ip(mask);
00097     this->gateway = str_to_ip(gateway);
00098     reset();
00099 
00100     // @Jul. 8. 2014 add code. should be called to write chip.
00101     setmac();
00102     setip();
00103     
00104     return 0;
00105 }
00106 
00107 // Connect Bring the interface up, start DHCP if needed.
00108 int EthernetInterface::connect()
00109 {
00110     if (dhcp) {
00111         int r = IPrenew();
00112         if (r < 0) {
00113             return r;
00114         }
00115     }
00116     
00117     if (WIZnet_Chip::setip() == false) return -1;
00118     return 0;
00119 }
00120 
00121 // Disconnect Bring the interface down.
00122 int EthernetInterface::disconnect()
00123 {
00124     if (WIZnet_Chip::disconnect() == false) return -1;
00125     return 0;
00126 }
00127 
00128 /*
00129 void EthernetInterface::getip(void)
00130 {
00131     //ip = 0x12345678;
00132     ipaddr = reg_rd<uint32_t>(SIPR);
00133     //snprintf(ip_string, sizeof(ip_string), "%d.%d.%d.%d", (ipaddr>>24)&0xff, (ipaddr>>16)&0xff, (ipaddr>>8)&0xff, ipaddr&0xff);   
00134 }
00135 */
00136 char* EthernetInterface::getIPAddress()
00137 {
00138     //Suint32_t ip = inet_getip(SIPR);//reg_rd<uint32_t>(SIPR);
00139     //static uint32_t ip = getip();
00140     //uint32_t ip = getip();
00141     
00142     uint32_t ip = reg_rd<uint32_t>(SIPR);
00143     snprintf(ip_string, sizeof(ip_string), "%d.%d.%d.%d", (ip>>24)&0xff, (ip>>16)&0xff, (ip>>8)&0xff, ip&0xff);   
00144     return ip_string;
00145 }
00146 
00147 char* EthernetInterface::getNetworkMask()
00148 {
00149     uint32_t ip = reg_rd<uint32_t>(SUBR);
00150     snprintf(mask_string, sizeof(mask_string), "%d.%d.%d.%d", (ip>>24)&0xff, (ip>>16)&0xff, (ip>>8)&0xff, ip&0xff);
00151     return mask_string;
00152 }
00153 
00154 char* EthernetInterface::getGateway()
00155 {
00156     uint32_t ip = reg_rd<uint32_t>(GAR);
00157     snprintf(gw_string, sizeof(gw_string), "%d.%d.%d.%d", (ip>>24)&0xff, (ip>>16)&0xff, (ip>>8)&0xff, ip&0xff);
00158     return gw_string;
00159 }
00160 
00161 char* EthernetInterface::getMACAddress()
00162 {
00163     uint8_t mac[6];
00164     reg_rd_mac(SHAR, mac);
00165     snprintf(mac_string, sizeof(mac_string), "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
00166     return mac_string; 
00167 }
00168 
00169 int EthernetInterface::IPrenew(int timeout_ms)
00170 {
00171 //    printf("DHCP Started, waiting for IP...\n");  
00172     DHCPClient dhcp;
00173     int err = dhcp.setup(timeout_ms);
00174     if (err == (-1)) {
00175 //        printf("Timeout.\n");
00176         return -1;
00177     }
00178 //    printf("Connected, IP: %d.%d.%d.%d\n", dhcp.yiaddr[0], dhcp.yiaddr[1], dhcp.yiaddr[2], dhcp.yiaddr[3]);
00179     ip      = (dhcp.yiaddr[0] <<24) | (dhcp.yiaddr[1] <<16) | (dhcp.yiaddr[2] <<8) | dhcp.yiaddr[3];
00180     gateway = (dhcp.gateway[0]<<24) | (dhcp.gateway[1]<<16) | (dhcp.gateway[2]<<8) | dhcp.gateway[3];
00181     netmask = (dhcp.netmask[0]<<24) | (dhcp.netmask[1]<<16) | (dhcp.netmask[2]<<8) | dhcp.netmask[3];
00182     dnsaddr = (dhcp.dnsaddr[0]<<24) | (dhcp.dnsaddr[1]<<16) | (dhcp.dnsaddr[2]<<8) | dhcp.dnsaddr[3];
00183     return 0;
00184 }