From 05de017bd557a20f21a2519e7f977f3d42f99f6e Mon Sep 17 00:00:00 2001 From: Roman Savrulin Date: Tue, 9 Jul 2019 19:35:07 +0300 Subject: [PATCH] BLE Library onRead Callback fix and Client disconnect feature (#2913) * BLEServer::disconnect() * Invoke Read callback first, to make data update possible before read --- libraries/BLE/src/BLECharacteristic.cpp | 8 ++++---- libraries/BLE/src/BLEServer.cpp | 5 +++++ libraries/BLE/src/BLEServer.h | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/libraries/BLE/src/BLECharacteristic.cpp b/libraries/BLE/src/BLECharacteristic.cpp index 406da7a7..45d3c8e1 100644 --- a/libraries/BLE/src/BLECharacteristic.cpp +++ b/libraries/BLE/src/BLECharacteristic.cpp @@ -378,6 +378,10 @@ void BLECharacteristic::handleGATTServerEvent( } } else { // read.is_long == false + if (m_pCallbacks != nullptr) { // If is.long is false then this is the first (or only) request to read data, so invoke the callback + m_pCallbacks->onRead(this); // Invoke the read callback. + } + std::string value = m_value.getValue(); if (value.length() + 1 > maxOffset) { @@ -392,10 +396,6 @@ void BLECharacteristic::handleGATTServerEvent( rsp.attr_value.offset = 0; memcpy(rsp.attr_value.value, value.data(), rsp.attr_value.len); } - - if (m_pCallbacks != nullptr) { // If is.long is false then this is the first (or only) request to read data, so invoke the callback - m_pCallbacks->onRead(this); // Invoke the read callback. - } } rsp.attr_value.handle = param->read.handle; rsp.attr_value.auth_req = ESP_GATT_AUTH_REQ_NONE; diff --git a/libraries/BLE/src/BLEServer.cpp b/libraries/BLE/src/BLEServer.cpp index 006f20b7..73d60c81 100644 --- a/libraries/BLE/src/BLEServer.cpp +++ b/libraries/BLE/src/BLEServer.cpp @@ -412,4 +412,9 @@ void BLEServer::updateConnParams(esp_bd_addr_t remote_bda, uint16_t minInterval, conn_params.timeout = timeout; // timeout = 400*10ms = 4000ms esp_ble_gap_update_conn_params(&conn_params); } + +void BLEServer::disconnect(uint16_t connId) { + esp_ble_gatts_close(m_gatts_if, connId); +} + #endif // CONFIG_BT_ENABLED diff --git a/libraries/BLE/src/BLEServer.h b/libraries/BLE/src/BLEServer.h index d39d8bfe..d2f8038d 100644 --- a/libraries/BLE/src/BLEServer.h +++ b/libraries/BLE/src/BLEServer.h @@ -72,6 +72,7 @@ public: BLEService* getServiceByUUID(const char* uuid); BLEService* getServiceByUUID(BLEUUID uuid); bool connect(BLEAddress address); + void disconnect(uint16_t connId); uint16_t m_appId; void updateConnParams(esp_bd_addr_t remote_bda, uint16_t minInterval, uint16_t maxInterval, uint16_t latency, uint16_t timeout);