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

Dependencies:   mbed-http

Revision:
79:a2187bbfa407
Parent:
78:07bb86e3ce14
Child:
80:e8f0e92e3ac9
--- a/source/ATCmdManager.cpp	Sat Mar 16 13:05:52 2019 +0000
+++ b/source/ATCmdManager.cpp	Wed Mar 20 21:02:47 2019 +0000
@@ -1,13 +1,21 @@
 #include "ATCmdManager.h"
 #include "common_config.h"
+#include "common_types.h"
+
 
 ATCmdManager::ATCmdManager(PinName tx, PinName rx, SMDevicePeripheral *blePeripheral, 
-                           WiFiManager *wifi, bool debug)
+                           events::EventQueue &event_queue, WiFiManager *wifi, 
+                           MemoryPool<wifi_cmd_message_t, 16> *aT2WiFimPool, 
+                           Queue<wifi_cmd_message_t, 16> *aT2WiFiCmdQueue, 
+                           bool debug)
     :
     _serial(tx, rx, DEFAULT_BAUD_RATE),
     _parser(&_serial),
     blePeripheral(blePeripheral),
-    wifi(wifi)
+    _event_queue(event_queue),
+    wiFiManager(wiFiManager),
+    _aT2WiFimPool(aT2WiFimPool),
+    _aT2WiFiCmdQueue(aT2WiFiCmdQueue)
 
 { 
 // constructor
@@ -25,6 +33,8 @@
     _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+UWSCA=", callback(this, &ATCmdManager::_oob_connect2WiFiNetwork));
     
 
     //_parser.oob("ATE0", callback(this, &ATCmdManager::_oob_startup_hdlr));
@@ -74,6 +84,11 @@
 void ATCmdManager::_oob_err(){
 }
 
+void ATCmdManager::_oob_get_fw_ver()
+{
+}
+
+
 void ATCmdManager::_oob_uart_setup(){
     int uOpts[NUM_UART_OPTIONS];
     //if(_parser.recv("=%d,%d,%d,%d,%d,%d", &uOpts[0], &uOpts[1], &uOpts[2], &uOpts[3], &uOpts[4], &uOpts[5])) {
@@ -186,10 +201,89 @@
     _smutex.unlock();
 }
 
-void ATCmdManager::_oob_get_fw_ver(){
+const char * ATCmdManager::sec2str(nsapi_security_t sec)
+{
+    switch (sec) {
+        case NSAPI_SECURITY_NONE:
+            return "None";
+        case NSAPI_SECURITY_WEP:
+            return "WEP";
+        case NSAPI_SECURITY_WPA:
+            return "WPA";
+        case NSAPI_SECURITY_WPA2:
+            return "WPA2";
+        case NSAPI_SECURITY_WPA_WPA2:
+            return "WPA/WPA2";
+        case NSAPI_SECURITY_UNKNOWN:
+        default:
+            return "Unknown";
+    }
+}
+bool  ATCmdManager::queueWiFiCommand(wifi_cmd_t cmd){
+    wifi_cmd_message_t *wifiCmd = _aT2WiFimPool->alloc();
+    wifiCmd->wifi_cmd            = cmd;
+    _aT2WiFiCmdQueue->put(wifiCmd);
+    return true;
+}
+
+void ATCmdManager::_oob_scanWiFiNetworks(){
     _smutex.lock();
-    printf("\n Received Firmware Version command!!\n");
+    printf("\n Received scanWiFiNetworks command!!\n");
     _parser.send("OK\n");
     _smutex.unlock();
+    wifi_cmd_t cmd = WIFI_CMD_SCAN;
+    // queue next command
+    queueWiFiCommand(cmd);
+    bool success;
+    success = wiFiManager->setNextCommand(cmd);
+    if(success){
+        printf("\n scan command successfully sent to wiFiManager!!\n");
+    }
+    else {
+        printf("\n ERROR: Failed to send scan command wiFiManager!!\n");
+    }
+    return;
+    /* call WiFi Scan in 20 ms */
+    //_event_queue.call_in(
+    //    20, wiFiManager,
+    //    &WiFiManager::scanNetworks);
+    //return;
+    WiFiAccessPoint       *ap;
+    nsapi_size_or_error_t count;
+    //count = wiFiManager->scanNetworks();
+    if (count <= 0) {
+        _smutex.lock();
+        printf("scan() failed with return value: %d\n", count);
+        _smutex.unlock();
+        return;
+    }
+    /* Limit number of network arbitrary to 15 */
+    count = count < 15 ? count : 15;
+    ap = new WiFiAccessPoint[count];
+    count = wiFiManager->getAvailableAPs(ap, count);
+    if (count <= 0) {
+        printf("scan() failed with return value: %d\n", count);
+        return;
+    }
+
+    for (int i = 0; i < count; i++) {
+        printf("Network: %s secured: %s BSSID: %hhX:%hhX:%hhX:%hhx:%hhx:%hhx RSSI: %hhd Ch: %hhd\n", ap[i].get_ssid(),
+               sec2str(ap[i].get_security()), ap[i].get_bssid()[0], ap[i].get_bssid()[1], ap[i].get_bssid()[2],
+               ap[i].get_bssid()[3], ap[i].get_bssid()[4], ap[i].get_bssid()[5], ap[i].get_rssi(), ap[i].get_channel());
+    }
+    printf("%d networks available.\n", count);
+
+    delete[] ap;
+    
 }
 
+void ATCmdManager::_oob_connect2WiFiNetwork()
+{
+    wiFiManager->connect();
+}
+
+
+void ATCmdManager::_oob_disconnectWiFiNetwork()
+{
+    wiFiManager->disconnect();
+}