this is using the mbed os version 5-13-1

Dependencies:   mbed-http

Branch:
PassingRegression
Revision:
124:eae4512b131b
Parent:
123:a49e9ffbaca6
Child:
125:d2830421006c
--- a/source/WiFiManager.cpp	Fri Jun 14 21:13:46 2019 +0000
+++ b/source/WiFiManager.cpp	Sat Jun 15 15:52:26 2019 +0000
@@ -58,6 +58,9 @@
 WiFiManager::~WiFiManager()
 {
     delete network;
+    wifiWatchdogTimer.stop();
+    socket->close();
+    delete socket;
 }
 //#define DISABLE_WATCHDOG
 
@@ -262,6 +265,11 @@
             }
             case WIFI_CMD_CONNECT:
             {
+                if(is_connected) // already connected
+                {
+                    wifiCmd = WIFI_CMD_NONE;
+                    break;
+                }
                 wifiBusy = 1;
                 error = connect();
                 int secCount = 0;
@@ -287,12 +295,42 @@
                 break;
             }
             case WIFI_CMD_DISCONNECT:
+            {
+                if(!is_connected) // already disconnected
+                {
+                    wifiCmd = WIFI_CMD_NONE;
+                    break;
+                }
                 wifiBusy = 1;
                 error = disconnect();
                 wifiCmd = WIFI_CMD_NONE;
-                queueATresponse(AT_DISCONNECT_RESP);
+                if(error >= 0)
+                {
+                    int secCount = 0;
+                    while(secCount++ < WIFI_CONNECT_TIMEOUT_SECS && is_connected==true){
+                        wait(1); // wait 1 sec
+                    }
+                    if(!is_connected)
+                    {
+                        sendATresponseString(AT_DISCONNECT_RESP);
+                    }
+                    else
+                    {
+                        dbg_printf(LOG, "[WIFI MAN] +++ WIFI DISCONNECTION TIMEOUT +++ \r\n");
+                        //queueATresponse(AT_COMMAND_FAILED);
+                        responseString = (char *) malloc(100);
+                        sprintf(responseString, "\r\n+UUTIMEOUT\r\n");
+                        sendATresponseString(AT_COMMAND_FAILED);
+                    }
+                    // attempt reconnection if always connected scheme is set
+                    if(internet_config->connectionScheme == ALWAYS_CONNECTED)
+                    {
+                        setNextCommand(WIFI_CMD_CONNECT);
+                    }
+                }
                 wifiBusy = 0;
                 break;
+            }
             case WIFI_CMD_CONFIG:
                 wifiBusy = 1;
                 set_WIFI_CONFIG();
@@ -815,10 +853,14 @@
 
 void WiFiManager::getWiFiMACaddress()
 {
+    char * mp = new char[20];
+    sscanf(network->get_mac_address(),"%02s:%2s:%2s:%2s:%2s:%2s",&mp[0],&mp[2],&mp[4],&mp[6],&mp[8],&mp[10]);
     responseString = (char *) malloc(100);
-    sprintf(responseString, "\r\n%s%d,%s\r\n", LOCAL_ADDRESS_RESP, 
-                                           WIFI_IF_ID,
-                                           network->get_mac_address());
+    
+    sprintf(responseString, "\r\n%s%d,%sOK\r\n", LOCAL_ADDRESS_RESP, 
+                                                 WIFI_IF_ID,
+                                                 mp);
+    delete mp;
 }
 
 
@@ -898,22 +940,21 @@
                                                               network->get_mac_address(),
                                                               DEFAULT_WIFI_CHANNEL);
                 
+                wifiBusy = 0;
                 is_connected = true;
-                wifiBusy = 0;
             }
             break;
         case NSAPI_STATUS_DISCONNECTED:
             dbg_printf(LOG, "No connection to network!\r\n");
             dbg_printf(LOG, "\n [WIFI-MAN] No connection to network!\n");
-            is_connected = false;
-            // attempt reconnection if always connected scheme is set
-            if(internet_config->connectionScheme == ALWAYS_CONNECTED)
+            if(outputBuffersAvailable())
             {
-                wifiBusy = 1;
-                nsapi_error_t error;
-                error = connect();
-                queueATresponse(WIFI_RECONNECT_INFO);
+                responseString = (char *) malloc(100);
+                sprintf(responseString, "\r\n%s%d,5\r\n", WIFI_LINK_DISABLED, WIFI_CHANNEL);
+                //sendATresponseString(AT_EVENT);
             }
+            wifiBusy = 0;
+            is_connected = false;
             break;
         case NSAPI_STATUS_CONNECTING:
             dbg_printf(LOG, "Connecting to network!\r\n");
@@ -1043,6 +1084,12 @@
 {
     nsapi_error_t error;
     error = network->disconnect();
+    if(error < 0)
+    {
+        responseString = (char *) malloc(100); 
+        sprintf(responseString, "%s", UDDRP_ERROR);
+        sendATresponseString(AT_EVENT);
+    }
     return error;
 }