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

Dependencies:   mbed-http

Files at this revision

API Documentation at this revision

Comitter:
ocomeni
Date:
Sun Mar 24 17:32:06 2019 +0000
Parent:
81:637a87eb8170
Child:
83:9c271a50a70b
Commit message:
wifi configuration setup implemented

Changed in this revision

source/ATCmdManager.cpp Show annotated file Show diff for this revision Revisions of this file
source/ATCmdManager.h Show annotated file Show diff for this revision Revisions of this file
source/WiFiManager.cpp Show annotated file Show diff for this revision Revisions of this file
source/main-https.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/source/ATCmdManager.cpp	Sat Mar 23 16:28:34 2019 +0000
+++ b/source/ATCmdManager.cpp	Sun Mar 24 17:32:06 2019 +0000
@@ -51,12 +51,17 @@
     _parser.oob("AT+UBTLE=2", callback(this, &ATCmdManager::_oob_ena_ble_peri));
     _parser.oob("AT+CPWROFF", callback(this, &ATCmdManager::_oob_reboot));
     _parser.oob("AT+CGMR", callback(this, &ATCmdManager::_oob_get_fw_ver));
-    _parser.oob("AT+UWSC=", callback(this, &ATCmdManager::_oob_scanWiFiNetworks));
+    _parser.oob("AT+UWSCAN", callback(this, &ATCmdManager::_oob_scanWiFiNetworks));
     _parser.oob("AT+UWSCA=", callback(this, &ATCmdManager::_oob_connect2WiFiNetwork));
     _parser.oob("AT+UWSCD=", callback(this, &ATCmdManager::_oob_disconnectWiFiNetwork));
     _parser.oob("AT+UDDRP", callback(this, &ATCmdManager::_oob_setupInternetConnection));
+    _parser.oob("AT+UWSC=0,2", callback(this, &ATCmdManager::_oob_setWiFiSSID));
+    _parser.oob("AT+UWSC=0,8", callback(this, &ATCmdManager::_oob_setWiFiPWD));
+    _parser.oob("AT+UWSC=0,5", callback(this, &ATCmdManager::_oob_setWiFiSecurity));
  
-
+//AT+UWSC=0,2,<SSID>
+//AT+UWSC=0,8,<PWD>
+//AT+UWSC=0,5,2 (WPA)
     //_parser.oob("ATE0", callback(this, &ATCmdManager::_oob_startup_hdlr));
     printf("\n --- ATCmdManager constructor completed ---\n");
     at_resp = AT_RESP_NONE;
@@ -113,10 +118,10 @@
                 _smutex.unlock();
                 at_resp = AT_RESP_NONE;
                 break;
-            case AT_HTTPS_RESP:  
-                // AT_HTTPS_RESP response state 
+            case AT_CONFIG_RESP:  
+                // AT_CONFIG_RESP response state 
                 _smutex.lock();
-                printf("\n [ATCMD MAN] WIFI HTTPS RESPONSE RECEIVED!!\n");
+                printf("\n [ATCMD MAN] WIFI CONFIG RESPONSE RECEIVED!!\n");
                 _parser.send("OK\n");
                 _smutex.unlock();
                 at_resp = AT_RESP_NONE;
@@ -131,6 +136,10 @@
                 break;
             default:
                 // UNKNOWN response state
+                _smutex.lock();
+                printf("\n [ATCMD MAN] UNKNOWN RESPONSE RECEIVED!!\n");
+                _parser.send("OK\n");
+                _smutex.unlock();
                 at_resp = AT_RESP_NONE;
                 break;
         }
@@ -364,7 +373,7 @@
     int n;
     internet_config_t internet_config;
     _smutex.lock();
-    n = _parser.scanf("=%1d,%200[^,],%1d", &internet_config.peer_id, 
+    n = _parser.scanf("=%1d,%199[^,],%1d", &internet_config.peer_id, 
                                       url,
                                      &internet_config.connectionScheme);
     if(n>0) 
@@ -378,14 +387,109 @@
         data_msg.wifi_cmd = WIFI_CMD_INTERNET_CONFIG;
         data_msg.dataLen = sizeof(internet_config) + internet_config.url.length();
         memcpy(data_msg.buffer,&internet_config, data_msg.dataLen);
+        // queue next data request
         queueWiFiDataRequest(data_msg);
+        _parser.send("OK\n");
     } else {
         printf("\n[ATCMD MAN]: internet configuration failed %d fields parsed \n", n);
-        printf("\npeer_id = %d, url = %s, connScheme = %d\n", internet_config.peer_id, 
-                                                          url, 
-                                                          internet_config.connectionScheme);
+        _parser.send("NAK\n");
+    }
+    _smutex.unlock();
+}
+
+wifi_config_t ATCmdManager::init_wifi_config()
+{ 
+    wifi_config_t wifi_cfg;
+    wifi_cfg.ssid[0]  = NULL;
+    wifi_cfg.pass[0]  = NULL;
+    wifi_cfg.security = NSAPI_SECURITY_UNKNOWN;
+    return wifi_cfg;    
+}
+
+int ATCmdManager::readBytes(uint8_t *buf, int maxBytes)
+{ 
+    int c;
+    int sptr = 0;
+    for(int i=0;i<maxBytes;i++){
+        c = _parser.getc();
+        if(c==-1){
+            buf[sptr] = '\0'; // null terminate if string
+            return i;
+        }
+        if(c != ',' && c!= '"'){
+            buf[sptr++] = (uint8_t) c;
+        }
     }
-    _parser.send("OK\n");
+}
+
+void ATCmdManager::_oob_setWiFiSSID()
+{
+    int n;
+    wifi_config_t wifi_cfg = init_wifi_config();
+    _smutex.lock();
+    n = readBytes((uint8_t *)wifi_cfg.ssid, 32);
+    printf("[ATCMD MAN]: number of bytes read = %d\n", n);
+    if(n>0) 
+    {
+        printf("[ATCMD MAN]: wifi_cfg.ssid = %s\n", wifi_cfg.ssid);
+        // package and send on wifi data queue
+        wifi_data_msg_t data_msg;
+        data_msg.wifi_cmd = WIFI_CMD_CONFIG;
+        data_msg.dataLen = sizeof(wifi_config_t);
+        memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
+        queueWiFiDataRequest(data_msg);
+        _parser.send("OK\n");
+    } else {
+        printf("\n[ATCMD MAN]: wifi configuration failed  \n");
+        _parser.send("NAK\n");
+    }
+    _smutex.unlock();
+}
+
+void ATCmdManager::_oob_setWiFiPWD()
+{
+    int n;
+    wifi_config_t wifi_cfg = init_wifi_config();
+    _smutex.lock();
+    //n = _parser.scanf("%31[^\r\n]", wifi_cfg.pass);
+    n = readBytes((uint8_t *)wifi_cfg.pass, 32);
+    if(n>0) 
+    {
+        printf("ATCMD MAN]: wifi_cfg.pass = %s\n", wifi_cfg.pass);
+        // package and send on wifi data queue
+        wifi_data_msg_t data_msg;
+        data_msg.wifi_cmd = WIFI_CMD_CONFIG;
+        data_msg.dataLen = sizeof(wifi_config_t);
+        memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
+        queueWiFiDataRequest(data_msg);
+        _parser.send("OK\n");
+    } else {
+        printf("\n[ATCMD MAN]: wifi configuration failed  \n");
+        _parser.send("NAK\n");
+    }
+    _smutex.unlock();
+}
+
+void ATCmdManager::_oob_setWiFiSecurity()
+{
+    int n;
+    wifi_config_t wifi_cfg = init_wifi_config();
+    _smutex.lock();
+    n = _parser.scanf(",%d", &wifi_cfg.security);
+    if(n>0) 
+    {
+        printf("ATCMD MAN]: wifi_cfg.security = %s\n", sec2str(wifi_cfg.security));
+        // package and send on wifi data queue
+        wifi_data_msg_t data_msg;
+        data_msg.wifi_cmd = WIFI_CMD_CONFIG;
+        data_msg.dataLen = sizeof(wifi_config_t);
+        memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
+        queueWiFiDataRequest(data_msg);
+        _parser.send("OK\n");
+    } else {
+        printf("\n[ATCMD MAN]: wifi configuration failed  \n");
+        _parser.send("NAK\n");
+    }
     _smutex.unlock();
 }
 
--- a/source/ATCmdManager.h	Sat Mar 23 16:28:34 2019 +0000
+++ b/source/ATCmdManager.h	Sun Mar 24 17:32:06 2019 +0000
@@ -87,13 +87,18 @@
     void _oob_connect2WiFiNetwork();
     void _oob_disconnectWiFiNetwork();
     void _oob_setupInternetConnection();
+    void _oob_setWiFiSSID();
+    void _oob_setWiFiPWD();
+    void _oob_setWiFiSecurity();
+    wifi_config_t init_wifi_config();
     const char * sec2str(nsapi_security_t sec);
     bool  queueWiFiCommand(wifi_cmd_t cmd);
     bool  dequeueATresponse();
     bool  queueWiFiDataRequest(wifi_data_msg_t cmd);
     bool  dequeueATdataResponse();
     void  processResponses();
-    bool  setNextResponse(at_cmd_resp_t resp);
+    bool  setNextResponse(at_cmd_resp_t resp);    
+    int   readBytes(uint8_t *buf, int maxBytes);
 
     
     /**
--- a/source/WiFiManager.cpp	Sat Mar 23 16:28:34 2019 +0000
+++ b/source/WiFiManager.cpp	Sun Mar 24 17:32:06 2019 +0000
@@ -90,6 +90,7 @@
                 set_WIFI_CONFIG();
                 wifiCmd = WIFI_CMD_NONE;
                 queueATresponse(AT_CONFIG_RESP);
+                break;
             case WIFI_CMD_INTERNET_CONFIG:
                 set_internet_config();
                 wifiCmd = WIFI_CMD_NONE;
@@ -209,27 +210,31 @@
 void WiFiManager::set_WIFI_CONFIG()
 {
     wifi_config_t *wifi_cfg= (wifi_config_t *) data_msg->buffer;
-    set_WIFI_SSID(wifi_cfg->ssid);
-    set_WIFI_PASSWORD(wifi_cfg->pass);
-    set_WIFI_SECURITY(wifi_cfg->security);
+    if(wifi_cfg->ssid[0] != NULL)set_WIFI_SSID(wifi_cfg->ssid);
+    if(wifi_cfg->pass[0] != NULL)set_WIFI_PASSWORD(wifi_cfg->pass);
+    if(wifi_cfg->security != NSAPI_SECURITY_UNKNOWN)set_WIFI_SECURITY(wifi_cfg->security);
     free_DataMsg();
 }
 
 void WiFiManager::set_WIFI_SSID(char * wifi_ssid)
 {
     strcpy(wifi_config.ssid, wifi_ssid);
+    printf("[WIFI-MAN]  wifi_ssid set to %s\n", wifi_config.ssid);
+
 }
 
 
 void WiFiManager::set_WIFI_PASSWORD(char * wifi_pass)
 {
     strcpy(wifi_config.pass, wifi_pass);
+    printf("[WIFI-MAN]  wifi_pass set to %s\n", wifi_config.pass);
 }
 
 
 void WiFiManager::set_WIFI_SECURITY(nsapi_security_t wifi_security)
 {
     wifi_config.security = wifi_security;
+    printf("[WIFI-MAN]  wifi_security set to %s\n", sec2str(wifi_config.security));
 }
 
 
--- a/source/main-https.cpp	Sat Mar 23 16:28:34 2019 +0000
+++ b/source/main-https.cpp	Sun Mar 24 17:32:06 2019 +0000
@@ -524,7 +524,7 @@
                                                 &wiFi2ATmPool, &wiFi2ATCmdQueue,
                                                 &aT2WiFiDatamPool, &aT2WiFiDataQueue,
                                                 &wiFi2ATDatamPool, &wiFi2ATDataQueue,
-                                                true);
+                                                false);
     //aTCmdManager->runMain();
     atcmd_thread.start(callback(aTCmdManager, &ATCmdManager::runMain));
     while(1) wait(0.1);