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

Dependencies:   mbed-http

Revision:
95:290859010c8c
Parent:
94:fb4414aff957
Child:
96:f5ed273881af
--- a/source/WiFiManager.cpp	Sun Apr 14 17:03:02 2019 +0000
+++ b/source/WiFiManager.cpp	Wed Apr 17 18:11:45 2019 +0000
@@ -96,10 +96,13 @@
                 wifiCmd = WIFI_CMD_NONE;
                 if(is_connected==false){
                     printf("[WIFI MAN] +++ WIFI CONNECTION TIMEOUT +++ \r\n");
-                    queueATresponse(AT_COMMAND_FAILED);
+                    //queueATresponse(AT_COMMAND_FAILED);
+                    responseString = (char *) malloc(100);
+                    sprintf(responseString, "\r\n+UUTIMEOUT\r\n");
+                    sendATresponseString(AT_COMMAND_FAILED);
                 }
                 else {
-                    queueATresponse(AT_CONNECT_RESP);
+                    sendATresponseString(AT_CONNECT_RESP);
                 }
                 break;
             case WIFI_CMD_DISCONNECT:
@@ -114,8 +117,18 @@
                 break;
             case WIFI_CMD_INTERNET_CONFIG:
                 set_internet_config();
+                queueATresponse(AT_INTERNET_CONFIG_RESP);
                 wifiCmd = WIFI_CMD_NONE;
-                queueATresponse(AT_INTERNET_CONFIG_RESP);
+                break;
+            case WIFI_CMD_NETWORK_STATUS:
+                getNetworkStatus();
+                sendATresponseString(AT_NETWORK_STATUS_RESP);
+                wifiCmd = WIFI_CMD_NONE;
+                break;
+            case WIFI_CMD_WIFI_STATUS:
+                getWiFiStatus();
+                sendATresponseString(AT_WIFI_STATUS_RESP);
+                wifiCmd = WIFI_CMD_NONE;
                 break;
             case WIFI_CMD_SEND_HTTPS_REQ:
                 printf("before call to send http request \n");
@@ -136,16 +149,16 @@
 }
 
 
-void  WiFiManager::sentATresponseString(at_cmd_resp_t at_cmd, 
-                                        const char *responseString, 
-                                        int strLen)
+void  WiFiManager::sendATresponseString(at_cmd_resp_t at_cmd)
 {
+    int strLen = strlen(responseString) + 1;
     at_data_resp = new at_data_msg_t;
     // create message pointer for response header generation
     char * msgPtr = (char *)at_data_resp->buffer;
     // set string length 
     at_data_resp->dataLen = strLen;
     memcpy(at_data_resp->buffer, responseString, strLen);
+    free(responseString);
     // package and send on wifi data queue    
     at_data_resp->at_resp = at_cmd;
     bool queueResult = true;
@@ -318,6 +331,121 @@
     delete socket;
 }
 
+
+
+void WiFiManager::getNetworkStatus(){
+    
+    responseString = (char *) malloc(MAX_RESPONSE_STRING_LEN);
+    net_stat_id_t status_id;
+    char * nextStrPtr = responseString;
+    for(int i=0; i< NumNetworkStatus;i++){
+        status_id = netStatusIds[i]; // get current status id
+        switch(status_id){
+            case IF_HW_ADDRESS:
+                sprintf(nextStrPtr, "\r\n%s%d,%d,%s\r\n", NETWORK_STATUS, 
+                                                              WIFI_CHANNEL,
+                                                              status_id,
+                                                              network->get_mac_address());
+                break;
+            case NETWORK_IF_STATUS:
+                sprintf(nextStrPtr, "\r\n%s%d,%d, %d\r\n", NETWORK_STATUS, 
+                                                           WIFI_CHANNEL,
+                                                           status_id,
+                                                           (uint8_t)is_connected);
+                break;
+            case INTERFACE_TYPE:
+                sprintf(nextStrPtr, "\r\n%s%d,%d,%d\r\n", NETWORK_STATUS, 
+                                                              WIFI_CHANNEL,
+                                                              status_id,
+                                                              WIFI_STATION);
+                break;
+            case IPv4_ADDRESS:
+                sprintf(nextStrPtr, "\r\n%s%d,%d,%s\r\n", NETWORK_STATUS, 
+                                                              WIFI_CHANNEL,
+                                                              status_id,
+                                                              network->get_ip_address());
+                break;
+            case SUBNET_MASK:
+                sprintf(nextStrPtr, "\r\n%s%d,%d,%s\r\n", NETWORK_STATUS, 
+                                                              WIFI_CHANNEL,
+                                                              status_id,
+                                                              network->get_netmask());
+                break;
+            case GATEWAY_ADDRESS:
+                sprintf(nextStrPtr, "\r\n%s%d,%d,%s\r\n", NETWORK_STATUS, 
+                                                              WIFI_CHANNEL,
+                                                              status_id,
+                                                              network->get_gateway());
+                break;
+            case PRIMARY_DNS_SERVER:
+                sprintf(nextStrPtr, "\r\n%s%d,%d,%s\r\n", NETWORK_STATUS, 
+                                                              WIFI_CHANNEL,
+                                                              status_id,
+                                                              DEFAULT_DNS_ADDRESS);
+                break;
+            case SECONDARY_DNS_SERVER:
+                sprintf(nextStrPtr, "\r\n%s%d,%d,%s\r\n", NETWORK_STATUS, 
+                                                              WIFI_CHANNEL,
+                                                              status_id,
+                                                              DEFAULT_DNS_ADDRESS);
+                break;
+            case IPv6_ADDRESS:
+                sprintf(nextStrPtr, "\r\n%s%d,%d,::\r\n", NETWORK_STATUS, 
+                                                              WIFI_CHANNEL,
+                                                              status_id);
+                break;
+            default:
+                sprintf(nextStrPtr, "\r\n%s,::\r\n", NETWORK_STATUS);
+                break;
+        }
+        nextStrPtr += strlen(nextStrPtr) +1; // progress to end of current string
+    }
+}
+
+
+
+void WiFiManager::getWiFiStatus(){
+    
+    responseString = (char *) malloc(MAX_RESPONSE_STRING_LEN);
+    wifi_stat_id_t status_id;
+    char * nextStrPtr = responseString;
+    for(int i=0; i< NumWiFiStatus;i++){
+        status_id = wifiStatusIds[i]; // get current status id
+        switch(status_id){
+            case WIFI_SSID:
+                sprintf(nextStrPtr, "\r\n%s%d,%s\r\n", WIFI_NETWORK_STATUS, 
+                                                       status_id,
+                                                       wifi_config.ssid);
+                break;
+            case WIFI_BSSID:
+                sprintf(nextStrPtr, "\r\n%s%d,%s\r\n", WIFI_NETWORK_STATUS, 
+                                                       status_id,
+                                                       network->get_mac_address());
+                break;
+            case WIFI__CURRENT_CHANNEL:
+                sprintf(nextStrPtr, "\r\n%s%d,%d\r\n", WIFI_NETWORK_STATUS, 
+                                                       status_id,
+                                                       DEFAULT_WIFI_CHANNEL);
+                break;
+            case WIFI_STA_STATUS:
+                sprintf(nextStrPtr, "\r\n%s%d,%d\r\n", WIFI_NETWORK_STATUS, 
+                                                       status_id,
+                                                       (uint8_t)is_connected);
+                break;
+            case WIFI_RSSI:
+                sprintf(nextStrPtr, "\r\n%s%d,%d\r\n", WIFI_NETWORK_STATUS, 
+                                                       status_id,
+                                                       network->get_rssi());
+                break;
+            default:
+                sprintf(nextStrPtr, "\r\n%s,::\r\n", WIFI_NETWORK_STATUS);
+                break;
+        }
+        nextStrPtr += strlen(nextStrPtr) +1; // progress to end of current string
+    }
+}
+
+
 void WiFiManager::free_DataMsg()
 {
     // free memory after processing
@@ -339,6 +467,12 @@
             printf("Global IP address set!\r\n");
             printf("[WIFI-MAN] IP address: %s\n", network->get_ip_address());
             printf("[WIFI-MAN] Connected to the network %s\n", wifi_config.ssid);
+            responseString = (char *) malloc(MAX_RESPONSE_STRING_LEN); 
+            sprintf(responseString, "\r\n%s%d,%s,%d\r\n", WIFI_LINK_ENABLED, 
+                                                          WIFI_CHANNEL,
+                                                          network->get_mac_address(),
+                                                          DEFAULT_WIFI_CHANNEL);
+            
             is_connected = true;
             break;
         case NSAPI_STATUS_DISCONNECTED: