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:
Fri Jun 14 21:13:46 2019 +0000
Branch:
PassingRegression
Parent:
122:62166886db5f
Child:
124:eae4512b131b
Commit message:
Implemented the following features:; 1. FW version; 2. BLE MAC address; 3. BLE name; 4. WiFi MAC address; Not fully tested

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/BleManager.cpp 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/WiFiManager.h Show annotated file Show diff for this revision Revisions of this file
source/common_config.h Show annotated file Show diff for this revision Revisions of this file
source/common_types.h Show annotated file Show diff for this revision Revisions of this file
source/main.h Show annotated file Show diff for this revision Revisions of this file
--- a/source/ATCmdManager.cpp	Tue Jun 11 20:23:43 2019 +0000
+++ b/source/ATCmdManager.cpp	Fri Jun 14 21:13:46 2019 +0000
@@ -70,8 +70,8 @@
     _parser.oob("AT+UWSCAN", callback(this, &ATCmdManager::_oob_scanWiFiNetworks));
     _parser.oob("AT+UWSCA=", callback(this, &ATCmdManager::_oob_WiFiStationConfigAction));
     
-    _parser.oob("AT+UMLA=", callback(this, &ATCmdManager::_oob_ok_hdlr));
-    _parser.oob("AT+UBTLN", callback(this, &ATCmdManager::_oob_ok_hdlr));
+    _parser.oob("AAT+UBTLN?", callback(this, &ATCmdManager::_oob_get_ble_name));
+    _parser.oob("AT+UBTLN=", callback(this, &ATCmdManager::_oob_ok_hdlr));
     _parser.oob("AT+UBTSM?", callback(this, &ATCmdManager::_oob_ok_hdlr));
     _parser.oob("AT+UBTPM", callback(this, &ATCmdManager::_oob_ok_hdlr));
     
@@ -301,12 +301,37 @@
             }
             case BLE_DISCONNECT_EVENT:  
             {
-                // AT Event state 
+                // BLE_DISCONNECT_EVENT state 
                 dbg_printf(LOG, "\n [ATCMD MAN] BLE_DISCONNECT_EVENT RECEIVED!!\r\n");
                 sendBleDisconnectEvent();
                 at_resp = AT_RESP_NONE;
                 break;
             }
+            case AT_WIFI_MAC_RESP:  
+                // AT_WIFI_MAC_RESP response state 
+                dbg_printf(LOG, "\n [ATCMD MAN] AT_WIFI_MAC_RESP RESPONSE RECEIVED!!\r\n");
+                respStr = (char *) resp_data->buffer;
+                sendAtConfirmationFreeMpool(respStr);
+                at_resp = AT_RESP_NONE;
+                break;
+            case AT_BLE_MAC_RESP:  
+                // AT_BLE_MAC_RESP response state 
+                dbg_printf(LOG, "\n [ATCMD MAN] AT_BLE_MAC_RESP RESPONSE RECEIVED!!\r\n");
+                respStr = (char *) ble_resp_data->buffer;
+                sendAtConfirmation(respStr);
+                _ble2ATDatamPool->free(ble_resp_data);
+                ble_resp_data = NULL;                
+                at_resp = AT_RESP_NONE;
+                break;
+            case AT_BLE_NAME_RESP:  
+                // AT_BLE_MAC_RESP response state 
+                dbg_printf(LOG, "\n [ATCMD MAN] AT_BLE_NAME_RESP RESPONSE RECEIVED!!\r\n");
+                respStr = (char *) ble_resp_data->buffer;
+                sendAtConfirmation(respStr);
+                _ble2ATDatamPool->free(ble_resp_data);
+                ble_resp_data = NULL;                
+                at_resp = AT_RESP_NONE;
+                break;
             default:
                  //UNKNOWN response state
                 dbg_printf(LOG, "\n [ATCMD MAN] UNKNOWN RESPONSE RECEIVED!!\r\n");
@@ -750,8 +775,13 @@
 void ATCmdManager::_oob_get_fw_ver()
 {
 #ifdef MBED_MAJOR_VERSION
-    char * fw_ver_str = new char[20];
-    sprintf(fw_ver_str, "Mbed OS version %d.%d.%d.0\n\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
+    char * fw_ver_str = new char[40];
+    sprintf(fw_ver_str, "API version:%d.%d.%d.%d.%d.%d\n\n", MBED_MAJOR_VERSION 
+                                                           , MBED_MINOR_VERSION 
+                                                           , MBED_PATCH_VERSION
+                                                           , API_MAJOR_VERSION
+                                                           , API_MINOR_VERSION
+                                                           , API_BUILD_NUMBER);
     sendAtConfirmation(fw_ver_str);
     delete fw_ver_str;
 #endif
@@ -861,9 +891,16 @@
         {
             case 1:
                 dbg_printf(LOG, "\nATCmdParser: BLE MAC Address request received");
+                at_ble_msg_t data_req;
+                data_req.ble_cmd = BLE_CMD_MAC_ADDR;
+                // queue next BLE command
+                queueBleDataRequest(data_req);
                 break;
             case 2:
-                dbg_printf(LOG, "\nATCmdParser: WiFi MAC Address request received");
+                dbg_printf(LOG, "\nATCmdParser: WiFi MAC Address request received");                
+                wifi_cmd_t cmd = WIFI_CMD_WIFI_MAC_ADDR;
+                // queue next command
+                queueWiFiCommand(cmd);
                 break;
             default:
                 dbg_printf(LOG, "\nATCmdParser: ERROR - UNKNOWN MAC ADDRESS REQUEST RECEIVED!!! \n");
@@ -875,6 +912,16 @@
     sendAtConfirmation(OK_RESP);   //_parser.send(OK_RESP);
 }
 
+
+void ATCmdManager::_oob_get_ble_name()
+{
+    dbg_printf(LOG, "\nATCmdParser: BLE CMD DEVICE_NAME request received");
+    at_ble_msg_t data_req;
+    data_req.ble_cmd = BLE_CMD_DEVICE_NAME;
+    // queue next BLE command
+    queueBleDataRequest(data_req);
+}
+
 void ATCmdManager::_oob_get_ble_role(){
     trigger_start_BLE();
     dbg_printf(LOG, "\n Received get BLE role command!!\n");
@@ -1292,7 +1339,7 @@
     bleData->dataLen        = data_req.dataLen;
     memcpy(bleData->buffer, data_req.buffer, data_req.dataLen);
     _aT2BleDataQueue->put(bleData);
-    dbg_printf(LOG, "[ATCMD MAN] queued BLE data size = %d : wifi_cmd = %d\n", data_req.dataLen, data_req.ble_cmd);
+    dbg_printf(LOG, "[ATCMD MAN] queued BLE data size = %d : ble_cmd = %d\n", data_req.dataLen, data_req.ble_cmd);
     return true;
 }
 
--- a/source/ATCmdManager.h	Tue Jun 11 20:23:43 2019 +0000
+++ b/source/ATCmdManager.h	Fri Jun 14 21:13:46 2019 +0000
@@ -117,6 +117,7 @@
     void _oob_get_mac_addr();
     void _oob_get_ble_role();
     void _oob_ena_ble_peri();
+    void _oob_get_ble_name();
     void _oob_reboot();
     void _oob_get_fw_ver();
     void _oob_saveSettings_hdlr();
--- a/source/BleManager.cpp	Tue Jun 11 20:23:43 2019 +0000
+++ b/source/BleManager.cpp	Fri Jun 14 21:13:46 2019 +0000
@@ -605,6 +605,8 @@
     sendATresponseBytes(BLE_DISCONNECT_EVENT);
 }
 
+
+
 void SMDevicePeripheral::processQueues()
 {
     dequeueATdataResponse();
@@ -626,6 +628,44 @@
         bleCmd = BLE_CMD_NONE;
         break;
     }
+    case BLE_CMD_MAC_ADDR:
+    {
+        // send BLE MAC_ADDR
+        _aT2BleDatamPool->free(data_msg);
+        at_data_resp = new ble_at_msg_t;
+        char * respStr = (char *)at_data_resp->buffer;
+        /* print device address */
+        Gap::AddressType_t addr_type;
+        Gap::Address_t addr;
+        _ble.gap().getAddress(&addr_type, addr);
+        //dbg_printf(LOG, "Device address: %02x:%02x:%02x:%02x:%02x:%02x\r\n",
+        //       addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]);
+        sprintf(respStr, "\r\n%s%d,%02X%02X%02X%02X%02X%02X\r\n", LOCAL_ADDRESS_RESP
+                                                                , BLE_IF_ID
+                                                                , addr[5]
+                                                                , addr[4]
+                                                                , addr[3]
+                                                                , addr[2]
+                                                                , addr[1]
+                                                                , addr[0]
+                                                                );
+        at_data_resp->dataLen = strlen(respStr); // get bytes total
+        sendATresponseBytes(AT_BLE_MAC_RESP);
+        bleCmd = BLE_CMD_NONE;
+        break;
+    }
+    case BLE_CMD_DEVICE_NAME:
+    {
+        // send BLE_CMD_DEVICE_NAME
+        _aT2BleDatamPool->free(data_msg);
+        at_data_resp = new ble_at_msg_t;
+        char * respStr = (char *)at_data_resp->buffer;
+        sprintf(respStr, "\r\n%s%s\r\n", BLE_DEVICE_NAME_RESP, ble_config->deviceName);
+        at_data_resp->dataLen = strlen(respStr); // get bytes total
+        sendATresponseBytes(AT_BLE_NAME_RESP);
+        bleCmd = BLE_CMD_NONE;
+        break;
+    }
     case BLE_CMD_SEND_RX_DATA_2AT:
         sendATresponseBytes(AT_BLE_RESPONSE);
         bleCmd = BLE_CMD_NONE;
--- a/source/WiFiManager.cpp	Tue Jun 11 20:23:43 2019 +0000
+++ b/source/WiFiManager.cpp	Fri Jun 14 21:13:46 2019 +0000
@@ -49,7 +49,8 @@
     wifiWatchdogTimer.start();
     watchdogCnt = 0;
     //_event_queue.call_every(10000, this, &WiFiManager::callWifiWatchDog);
-    keep_alive_id = _event_queue.call_every(CLOUD_KEEP_ALIVE_INTERVAL, this, &WiFiManager::callInternetKeepAlive);
+    //keep_alive_id = _event_queue.call_every(CLOUD_KEEP_ALIVE_INTERVAL, this, &WiFiManager::callInternetKeepAlive);
+    keep_alive_id = 0;
     //watchDogTick.attach(callback(this, &WiFiManager::callWifiWatchDogIsr), 10.0); // call flip function every 10 seconds
     
 }
@@ -122,6 +123,7 @@
        https_connection_active = false;
        socket->close();
        delete socket;
+       socket = NULL;
        return;
     }
     
@@ -344,7 +346,10 @@
             case WIFI_CMD_SEND_HTTPS_REQ:
             {
                 // cancel keep alive event as not needed since new request has come in.
-                _event_queue.cancel(keep_alive_id);                
+                if(keep_alive_id != 0) // only cancel if it has been activated
+                {
+                    _event_queue.cancel(keep_alive_id); 
+                }               
                 wifiBusy = 1;
 #ifdef SEND_DEBUG_MESSAGES
                 if(outputBuffersAvailable())
@@ -423,6 +428,8 @@
                     if(https_connection_active == false)
                     {
                         queueATresponse(AT_SOCKET_KEEP_ALIVE_FAILED);
+                        delete socket;
+                        socket = NULL;
                     }
                 }
                 wifiCmd = WIFI_CMD_NONE;
@@ -435,6 +442,16 @@
                 wifiCmd = WIFI_CMD_NONE;
                 wifiBusy = 0;
                 break;
+            case WIFI_CMD_WIFI_MAC_ADDR:
+                wifiBusy = 1;
+                if(outputBuffersAvailable())
+                {
+                    getWiFiMACaddress();
+                    sendATresponseString(AT_WIFI_MAC_RESP);
+                }
+                wifiCmd = WIFI_CMD_NONE;
+                wifiBusy = 0;
+                break;
             case WIFI_CMD_SEND_HTTP_REQ:
                 break;
             default:
@@ -796,6 +813,13 @@
     sprintf(nextStrPtr, "%s", UDDRP_WRITE_OK);
 }
 
+void WiFiManager::getWiFiMACaddress()
+{
+    responseString = (char *) malloc(100);
+    sprintf(responseString, "\r\n%s%d,%s\r\n", LOCAL_ADDRESS_RESP, 
+                                           WIFI_IF_ID,
+                                           network->get_mac_address());
+}
 
 
 void WiFiManager::getWiFiStatus(){
--- a/source/WiFiManager.h	Tue Jun 11 20:23:43 2019 +0000
+++ b/source/WiFiManager.h	Fri Jun 14 21:13:46 2019 +0000
@@ -106,6 +106,7 @@
     http_result_t http_result;
     bool     use_full_hostname;
     int      keep_alive_id;
+    
 #ifdef DNANUDGE_DEBUG
     rtos::Semaphore callback_semaphore;
 #endif    
@@ -149,6 +150,7 @@
     void                  sendATresponseBytes(at_cmd_resp_t at_cmd, int len);
     void                  getNetworkStatus();
     void                  getWiFiStatus();
+    void                  getWiFiMACaddress();
     void                  status_callback_event(nsapi_event_t status, intptr_t param);    
     void                  gethostbyname_callback(nsapi_error_t res, SocketAddress *addr);    
     void                  gethostbyname();
--- a/source/common_config.h	Tue Jun 11 20:23:43 2019 +0000
+++ b/source/common_config.h	Fri Jun 14 21:13:46 2019 +0000
@@ -50,6 +50,10 @@
 #define CLOUD_RETRY_TIME_MS       10000
 #define MAX_BLE_POOL_DATA_SIZE    40
 #define BLE_PROCESS_QUEUES_INTERVAL_MS  200 // check BLE queues every 200 ms
+#define BLE_IF_ID                       1
+#define WIFI_IF_ID                      2
+#define LOCAL_ADDRESS_RESP              "+UMLA:"
+#define BLE_DEVICE_NAME_RESP            "+UBTLN:"
 //#define ENABLE_MEMORY_CHECKS
 //#define SEND_DEBUG_MESSAGES
 
--- a/source/common_types.h	Tue Jun 11 20:23:43 2019 +0000
+++ b/source/common_types.h	Fri Jun 14 21:13:46 2019 +0000
@@ -85,6 +85,7 @@
   WIFI_CMD_DISCONNECT,
   WIFI_CMD_NETWORK_STATUS,
   WIFI_CMD_WIFI_STATUS,
+  WIFI_CMD_WIFI_MAC_ADDR,
   WIFI_CMD_SEND_HTTPS_REQ,
   WIFI_CMD_SEND_HTTP_REQ,
   WIFI_CMD_TLS_CONNECT,
@@ -118,7 +119,10 @@
   AT_BLE_RESPONSE = 22,
   AT_SOCKET_KEEP_ALIVE_OK = 23,
   AT_SOCKET_KEEP_ALIVE_FAILED = 24,
-  BLE_DISCONNECT_EVENT = 25
+  BLE_DISCONNECT_EVENT = 25,
+  AT_WIFI_MAC_RESP = 26,
+  AT_BLE_MAC_RESP = 27,
+  AT_BLE_NAME_RESP = 28
 }at_cmd_resp_t;
 
 typedef enum edm_msg_id
@@ -275,6 +279,8 @@
 {
   BLE_CMD_NONE,
   BLE_CMD_CONFIG,
+  BLE_CMD_MAC_ADDR,
+  BLE_CMD_DEVICE_NAME,
   BLE_CMD_CONNECT,
   BLE_CMD_DISCONNECT,
   BLE_CMD_SEND_RX_DATA_2AT,
--- a/source/main.h	Tue Jun 11 20:23:43 2019 +0000
+++ b/source/main.h	Fri Jun 14 21:13:46 2019 +0000
@@ -1,5 +1,8 @@
 #ifndef __MAIN_H__
 #define __MAIN_H__
+#define API_MAJOR_VERSION 1
+#define API_MINOR_VERSION 0
+#define API_BUILD_NUMBER  122
 void print_memory_info();
 void blinkLEDs();
 void trigger_start_BLE();