Sergei G / NetworkServices

Dependents:   coap-example Borsch coap-example

Fork of NetworkServices by AMETEK Powervar

Revision:
16:82e7a0bf58d8
Parent:
15:14382459c8b7
Child:
17:c976088bf39d
--- a/DHCPClient/DHCPClient.cpp	Thu Jun 15 20:29:03 2017 +0000
+++ b/DHCPClient/DHCPClient.cpp	Sat Jul 01 07:20:29 2017 +0000
@@ -4,7 +4,7 @@
 #include "UDPSocket.h"
 #include "DHCPClient.h"
 
-#define DBG_DHCP 0
+#define DBG_DHCP 1
 
 #if DBG_DHCP
 #define DBG(...) do{debug("[%s:%d]", __PRETTY_FUNCTION__,__LINE__);debug(__VA_ARGS__);} while(0);
@@ -110,20 +110,24 @@
 
 void DHCPClient::callback()
 {
-    //printf("DHCPClient callback\n");
+    //DBG("DHCPClient callback\n");
     SocketAddress host;
     int recv_len = m_udp->recvfrom(&host, (char*)m_buf, sizeof(m_buf));
     if (recv_len < 0) {
+        //DBG("recv_len < 0\n");
         return;
     }
     if (!verify(m_buf, recv_len)) {
+        DBG("!verify(m_buf, recv_len)\n");
         return;
     }
     int r = offer(m_buf, recv_len);
     if (r == DHCPOFFER) {
+        DBG("r == DHCPOFFER\n");
         int send_size = request();
         m_udp->sendto(m_server, (char*)m_buf, send_size);
     } else if (r == DHCPACK) {
+        DBG("r == DHCPACK\n");
         exit_flag = true;
     }
 }
@@ -156,33 +160,54 @@
     }
 }
 
-int DHCPClient::setup(NetworkStack *ns, int timeout_ms)
+int DHCPClient::setup(NetworkStack *ns, uint8_t mac_addr[6], int timeout_ms)
 {
+    memcpy(chaddr, mac_addr, 6);
+    
     int interval_ms = 5*1000; // 5000msec
     if (timeout_ms < interval_ms) {
         interval_ms = timeout_ms;
     }
+    
     UDPSocket udp_sock;
     m_udp = &udp_sock;
     
-    udp_sock.open(ns);
+    nsapi_error_t err;
+    err = udp_sock.open(ns);
+    if (err) {
+        DBG("setup failed to open UDP socket.");
+        return err;
+    }
     udp_sock.set_blocking(false);
-    udp_sock.bind(68); // local port
+    err = udp_sock.bind(68); // local port
+    if (err) {
+        DBG("setup failed in bind: %d", err);
+        return err;
+    }
     m_server.set_ip_address("255.255.255.255"); // DHCP broadcast
     m_server.set_port(67);                      // DHCP broadcast
     exit_flag = false;
-    int err = 0;
+    err = 0;
     int seq = 0;
     int send_size;
     while(!exit_flag) {
         switch(seq) {
             case 0:
+                DBG("case 0\n");
                 m_retry = 0;
                 seq++;
                 break;
             case 1:
+                DBG("case 1\n");
                 send_size = discover();
-                udp_sock.sendto(m_server, (char*)m_buf, send_size);
+                DBG("udp sock sendto begins\n");
+                nsapi_size_or_error_t err;
+                err = udp_sock.sendto(m_server, (char*)m_buf, send_size);
+                DBG("udp sock sendto ends\n");
+                if (err < 0) {
+                    DBG("udp sendto error: %d\n", err);
+                    return err;
+                }
                 m_interval.reset();
                 m_interval.start();
                 seq++;