this is using the mbed os version 5-13-1
Diff: source/ATCmdManager.cpp
- 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();
+}