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