this is using the mbed os version 5-13-1
Revision 123:a49e9ffbaca6, committed 2019-06-14
- 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
--- 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();