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

Dependencies:   mbed-http

Branch:
PassingRegression
Revision:
120:779b74689747
Parent:
119:8d939a902333
Child:
121:ac4f59839e4f
--- a/source/ATCmdManager.cpp	Mon May 27 12:34:58 2019 +0000
+++ b/source/ATCmdManager.cpp	Mon May 27 17:00:43 2019 +0000
@@ -119,6 +119,7 @@
 void ATCmdManager::processResponses(){
         dequeueATresponse();
         dequeueWiFidataResponse();
+        dequeueBleDataResponse();
         updateWiFiMgrStatus();
         char * respStr;
         switch(at_resp){
@@ -289,6 +290,14 @@
                 at_resp = AT_RESP_NONE;
                 break;
             }
+            case BLE_DISCONNECT_EVENT:  
+            {
+                // AT Event state 
+                dbg_printf(LOG, "\n [ATCMD MAN] BLE_DISCONNECT_EVENT RECEIVED!!\r\n");
+                sendBleDisconnectEvent();
+                at_resp = AT_RESP_NONE;
+                break;
+            }
             default:
                  //UNKNOWN response state
                 dbg_printf(LOG, "\n [ATCMD MAN] UNKNOWN RESPONSE RECEIVED!!\r\n");
@@ -298,7 +307,7 @@
         }
 }
 
-
+//
 void ATCmdManager::updateWiFiMgrStatus()
 {
     static int wifiBusyMonitor = 0;
@@ -1226,6 +1235,34 @@
     return true;
 }
 
+bool  ATCmdManager::queueBleDataRequest(at_ble_msg_t data_req){
+    at_ble_msg_t *bleData = _aT2BleDatamPool->alloc();
+    if(bleData == NULL)
+    {
+#ifdef SEND_DEBUG_MESSAGES
+        sendAtConfirmation("\r\nBLE QUEUE MEMORY FULL\r\n");
+#endif
+        return false;
+    }
+    bleData->ble_cmd        = data_req.ble_cmd;
+    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);
+    return true;
+}
+
+bool  ATCmdManager::dequeueBleDataResponse(){
+    if(at_resp != AT_RESP_NONE) return false; // busy
+    osEvent evt = _ble2ATDataQueue->get(0);
+    if(evt.status == osEventMessage){
+        ble_resp_data = (ble_at_msg_t*)evt.value.p;
+        setNextResponse(ble_resp_data->at_resp);
+        dbg_printf(LOG, "[ATCMD MAN] dequeued data size = %d : at_resp = %d\n", resp_data->dataLen, resp_data->at_resp);
+    }
+    return true;
+}
+
 
 void ATCmdManager::sendAtConfirmation(const char *buf)
 {
@@ -1349,6 +1386,15 @@
     ble_resp_data = NULL;
 }
 
+void ATCmdManager::sendBleDisconnectEvent()
+{
+    _smutex.lock();
+    outputEDMdata(NULL, 0, DISCONNECT_MSG_ID, EVENT_MSG_TYPE, BLE_CHANNEL);
+    _smutex.unlock();
+    _ble2ATDatamPool->free(ble_resp_data);
+    ble_resp_data = NULL;
+}
+
 
 void ATCmdManager::sendConnectEvent(const uint8_t *buf, int len)
 {
@@ -1389,7 +1435,10 @@
     if(channel_id != NO_CHANNEL)
         _parser.putc(channel_id);
     // send the data
-    _parser.write((const char *)buf, pLen);
+    if(pLen > 0)
+    {
+        _parser.write((const char *)buf, pLen);
+    }
     // send EDM Message stop byte
     _parser.putc(EDM_STOP_BYTE);
     _smutex.unlock();