WIZNet W5500 with additional enhancements

Fork of WIZnetInterface by WIZnet

Revision:
35:fe3028eda085
Parent:
34:7d44648ec5f2
Child:
36:0ba2e8d5274a
--- a/EthernetInterface.cpp	Mon Oct 09 19:58:19 2017 +0200
+++ b/EthernetInterface.cpp	Tue Oct 10 20:56:13 2017 +0200
@@ -24,15 +24,25 @@
         WIZnet_Chip(mosi, miso, sclk, cs, reset)
 {
     ip_set = false;
+    domainName = NULL;
+    leaseStart = 0;
 }
 
 EthernetInterface::EthernetInterface(SPI* spi, PinName cs, PinName reset) :
         WIZnet_Chip(spi, cs, reset)
 {
     ip_set = false;
+    domainName = NULL;
+    leaseStart = 0;
 }
 #endif
 
+EthernetInterface::~EthernetInterface()
+{
+    if (domainName)
+        free(domainName);
+}
+
 int EthernetInterface::init()
 {
     dhcp = true;
@@ -83,7 +93,6 @@
             return r;
         }
     }
-    
     if (WIZnet_Chip::setip() == false) return -1;
     return 0;
 }
@@ -151,6 +160,7 @@
     
 }
 
+
 int EthernetInterface::IPrenew(int timeout_ms)
 {
     DHCPClient dhcp;
@@ -159,10 +169,24 @@
         return -1;
     }
 //    printf("Connected, IP: %d.%d.%d.%d\n", dhcp.yiaddr[0], dhcp.yiaddr[1], dhcp.yiaddr[2], dhcp.yiaddr[3]);
+    /*
+     * Sync DHCP response variables
+     */
     ip      = (dhcp.yiaddr[0] <<24) | (dhcp.yiaddr[1] <<16) | (dhcp.yiaddr[2] <<8) | dhcp.yiaddr[3];
     gateway = (dhcp.gateway[0]<<24) | (dhcp.gateway[1]<<16) | (dhcp.gateway[2]<<8) | dhcp.gateway[3];
     netmask = (dhcp.netmask[0]<<24) | (dhcp.netmask[1]<<16) | (dhcp.netmask[2]<<8) | dhcp.netmask[3];
     dnsaddr = (dhcp.dnsaddr[0]<<24) | (dhcp.dnsaddr[1]<<16) | (dhcp.dnsaddr[2]<<8) | dhcp.dnsaddr[3];
+    timesrv = (dhcp.timesrv[0]<<24) | (dhcp.timesrv[1]<<16) | (dhcp.timesrv[2]<<8) | dhcp.timesrv[3];
+    leaseTime = (dhcp.leaseTime[0]<<24) | (dhcp.leaseTime[1]<<16) | (dhcp.leaseTime[2]<<8) | dhcp.leaseTime[3];
+    leaseStart = time(NULL);
+    if (domainName) {
+        free(domainName);
+    	domainName = NULL;
+    }
+    if (dhcp.domainName) {
+        domainName = dhcp.domainName;
+        dhcp.domainName = NULL;
+    }
     return 0;
 }