From aebfbe2a76452afa5acd40f28dcfdcd535caa06e Mon Sep 17 00:00:00 2001 From: buxtronix Date: Sun, 5 Jul 2020 18:42:28 +1000 Subject: [PATCH 1/2] Only trigger connect/disconnect callbacks when actually connected --- libraries/BLE/src/BLEClient.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/libraries/BLE/src/BLEClient.cpp b/libraries/BLE/src/BLEClient.cpp index 436813f859d..006ac4bddf8 100644 --- a/libraries/BLE/src/BLEClient.cpp +++ b/libraries/BLE/src/BLEClient.cpp @@ -180,10 +180,10 @@ void BLEClient::gattClientEventHandler( case ESP_GATTC_DISCONNECT_EVT: { // If we receive a disconnect event, set the class flag that indicates that we are // no longer connected. - m_isConnected = false; - if (m_pClientCallbacks != nullptr) { + if (m_isConnected && m_pClientCallbacks != nullptr) { m_pClientCallbacks->onDisconnect(this); } + m_isConnected = false; esp_ble_gattc_app_unregister(m_gattc_if); m_semaphoreOpenEvt.give(ESP_GATT_IF_NONE); m_semaphoreRssiCmplEvt.give(); @@ -202,11 +202,13 @@ void BLEClient::gattClientEventHandler( // case ESP_GATTC_OPEN_EVT: { m_conn_id = evtParam->open.conn_id; - if (m_pClientCallbacks != nullptr) { - m_pClientCallbacks->onConnect(this); - } if (evtParam->open.status == ESP_GATT_OK) { m_isConnected = true; // Flag us as connected. + if (m_pClientCallbacks != nullptr) { + m_pClientCallbacks->onConnect(this); + } + } else { + log_e("Failed to connect, status=%s", GeneralUtils::errorToString(evtParam->open.status)); } m_semaphoreOpenEvt.give(evtParam->open.status); break; From 411929941e6189539879234301672ce3185eeae4 Mon Sep 17 00:00:00 2001 From: buxtronix Date: Mon, 6 Jul 2020 11:33:42 +1000 Subject: [PATCH 2/2] removePeerDevice if connection fails --- libraries/BLE/src/BLEClient.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/BLE/src/BLEClient.cpp b/libraries/BLE/src/BLEClient.cpp index 006ac4bddf8..fe1df3099af 100644 --- a/libraries/BLE/src/BLEClient.cpp +++ b/libraries/BLE/src/BLEClient.cpp @@ -105,6 +105,7 @@ bool BLEClient::connect(BLEAddress address, esp_ble_addr_type_t type) { esp_err_t errRc = ::esp_ble_gattc_app_register(m_appId); if (errRc != ESP_OK) { log_e("esp_ble_gattc_app_register: rc=%d %s", errRc, GeneralUtils::errorToString(errRc)); + BLEDevice::removePeerDevice(m_appId, true); return false; } @@ -122,6 +123,7 @@ bool BLEClient::connect(BLEAddress address, esp_ble_addr_type_t type) { ); if (errRc != ESP_OK) { log_e("esp_ble_gattc_open: rc=%d %s", errRc, GeneralUtils::errorToString(errRc)); + BLEDevice::removePeerDevice(m_appId, true); return false; }