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

Dependencies:   mbed-http

Branch:
PassingRegression
Revision:
121:ac4f59839e4f
Parent:
120:779b74689747
Child:
123:a49e9ffbaca6
--- a/source/BleManager.cpp	Mon May 27 17:00:43 2019 +0000
+++ b/source/BleManager.cpp	Sat Jun 01 15:29:03 2019 +0000
@@ -288,10 +288,9 @@
 #ifndef DEMO_BLE_SECURITY
     dbg_printf(LOG, "Restarting advertising...\r\n");
     _ble.gap().startAdvertising(ble::LEGACY_ADVERTISING_HANDLE);
-#else
-    _event_queue.break_dispatch();
 #endif
     isConnected = false;
+    _event_queue.call(this, &SMDevice::setNextCommand, BLE_CMD_DISCONNECT);
 }
 
 /** End demonstration unexpectedly. Called if timeout is reached during advertising,
@@ -356,11 +355,18 @@
         buffer[index++] = 0;
         at_data_resp = new ble_at_msg_t;
         at_data_resp->dataLen = params->len;
+        // first set buffer to zeroes
+        //memset(at_data_resp->buffer, 0x00, sizeof(at_data_resp->buffer));
         memcpy(at_data_resp->buffer, params->data, params->len);
-        dbg_printf(LOG, "Data : %s ",buffer);
+        at_data_resp->buffer[params->len] = NULL;
+        at_data_resp->at_resp = AT_BLE_RESPONSE;
+        dbg_printf(LOG, "Data : %s : len = %d",(char *)at_data_resp->buffer, at_data_resp->dataLen);
         dbg_printf(LOG, "\r\n");
+        dbg_printf(LOG, "Data : %s : len = %d",buffer, params->len);
+        dbg_printf(LOG, "\r\n");
+        /* directly queue received data */
+        _event_queue.call(this, &SMDevice::sendATresponseBytes, AT_BLE_RESPONSE);
         /* start echo in 50 ms */
-        _event_queue.call(this, &SMDevice::setNextCommand, BLE_CMD_SEND_RX_DATA_2AT);
         _event_queue.call_in(50, this, &SMDevice::EchoBleUartReceived);
         //_event_queue.call(EchoBleUartReceived);
 
@@ -539,6 +545,66 @@
 }
 
 
+void SMDevicePeripheral::sendConnectionResponses()
+{
+    // send ACL Connected +UUBTACLC
+    at_data_resp = new ble_at_msg_t;
+    char * respStr = (char *)at_data_resp->buffer;
+    sprintf(respStr, "\r\n+UUBTACLC:%d,%d,%02X%02X%02X%02X%02X%02X\r\n", 
+            DEFAULT_BTLE_CHANNEL, GATT_TYPE,_peer_address[5] ,_peer_address[4],
+            _peer_address[3],_peer_address[2],_peer_address[1],_peer_address[0]);
+    at_data_resp->dataLen = strlen(respStr); // get bytes total
+    sendATresponseBytes(AT_BLE_EVENT);
+    
+    // send +UUDPC
+    at_data_resp = new ble_at_msg_t;
+    respStr = (char *)at_data_resp->buffer;
+    sprintf(respStr, "\r\n+UUDPC:%d,%d,%d,%02X%02X%02X%02X%02X%02X,%d\r\n", 
+            BTLE_PEER_HANDLE, BLE_CONNECTION, BLE_UUID_PROFILE,_peer_address[5] ,
+            _peer_address[4], _peer_address[3],_peer_address[2],_peer_address[1],
+            _peer_address[0], BLE_FRAME_SIZE);
+    at_data_resp->dataLen = strlen(respStr); // get bytes total
+    sendATresponseBytes(AT_BLE_EVENT);
+    
+    // send connect event
+    at_data_resp = new ble_at_msg_t;
+    at_data_resp->dataLen = 10; // 10 bytes total
+    int idx = 0;
+    // connect type BLE = 0x01
+    at_data_resp->buffer[idx++] = 0x01;
+    // Serial Port Service BLE profile = 0x0E (14)
+    at_data_resp->buffer[idx++] = 0x0E;
+    // copy peer device address
+    memcpy(&at_data_resp->buffer[idx], _peer_address, sizeof(_peer_address));
+    idx+=sizeof(_peer_address);
+    // frame size 0x0166
+    at_data_resp->buffer[idx++] = 0x01;
+    at_data_resp->buffer[idx++] = 0x66;
+    sendATresponseBytes(BLE_CONNECT_EVENT);
+}
+
+
+void SMDevicePeripheral::sendDisconnectionResponses()
+{
+    // send ACL disconnected +UUBTACLD
+    at_data_resp = new ble_at_msg_t;
+    char * respStr = (char *)at_data_resp->buffer;
+    sprintf(respStr, "\r\n+UUBTACLD:%d\r\n", DEFAULT_BTLE_CHANNEL);
+    at_data_resp->dataLen = strlen(respStr); // get bytes total
+    sendATresponseBytes(AT_BLE_EVENT);
+    
+    // send +UUDPD
+    at_data_resp = new ble_at_msg_t;
+    respStr = (char *)at_data_resp->buffer;
+    sprintf(respStr, "\r\n+UUDPD:%d\r\n", BTLE_PEER_HANDLE);
+    at_data_resp->dataLen = strlen(respStr); // get bytes total
+    sendATresponseBytes(AT_BLE_EVENT);
+    
+    // send connect event
+    at_data_resp = new ble_at_msg_t;
+    sendATresponseBytes(BLE_DISCONNECT_EVENT);
+}
+
 void SMDevicePeripheral::processQueues()
 {
     dequeueATdataResponse();
@@ -551,26 +617,15 @@
         bleCmd = BLE_CMD_NONE;
         break;
     case BLE_CMD_CONNECT:
-        at_data_resp = new ble_at_msg_t;
-        at_data_resp->dataLen = 10; // 10 bytes total
-        int idx = 0;
-        // connect type BLE = 0x01
-        at_data_resp->buffer[idx++] = 0x01;
-        // Serial Port Service BLE profile = 0x0E (14)
-        at_data_resp->buffer[idx++] = 0x0E;
-        // copy peer device address
-        memcpy(&at_data_resp->buffer[idx], _peer_address, sizeof(_peer_address));
-        idx+=sizeof(_peer_address);
-        // frame size 0x0166
-        at_data_resp->buffer[idx++] = 0x01;
-        at_data_resp->buffer[idx++] = 0x66;
+        sendConnectionResponses();
         bleCmd = BLE_CMD_NONE;
-        sendATresponseBytes(BLE_CONNECT_EVENT);
         break;
     case BLE_CMD_DISCONNECT:
-        sendATresponseBytes(BLE_CONNECT_EVENT);
+    {
+        sendDisconnectionResponses();
         bleCmd = BLE_CMD_NONE;
         break;
+    }
     case BLE_CMD_SEND_RX_DATA_2AT:
         sendATresponseBytes(AT_BLE_RESPONSE);
         bleCmd = BLE_CMD_NONE;