From 0c6742d4d7716bf76d42248eefde8eb1bb295821 Mon Sep 17 00:00:00 2001 From: Andreas <36504107+AndreasLamparter@users.noreply.github.com> Date: Sun, 26 May 2024 11:27:58 +0200 Subject: [PATCH] Set wait timeout for indication --- libraries/Bluefruit52Lib/src/BLEConnection.cpp | 9 ++++++++- libraries/Bluefruit52Lib/src/BLEConnection.h | 6 ++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/libraries/Bluefruit52Lib/src/BLEConnection.cpp b/libraries/Bluefruit52Lib/src/BLEConnection.cpp index 7764aa1d1..ba27778d1 100644 --- a/libraries/Bluefruit52Lib/src/BLEConnection.cpp +++ b/libraries/Bluefruit52Lib/src/BLEConnection.cpp @@ -64,6 +64,8 @@ BLEConnection::BLEConnection(uint16_t conn_hdl, ble_gap_evt_connected_t const* e _hvc_received = false; _ediv = 0xFFFF; + + _waitForIndicateConfirmTimeout = portMAX_DELAY; } BLEConnection::~BLEConnection() @@ -285,13 +287,18 @@ bool BLEConnection::requestPairing(void) return Bluefruit.Security._authenticate(_conn_hdl); } +void BLEConnection::setWaitForIndicateConfirmTimeout(uint16_t timeOutMs) +{ + _waitForIndicateConfirmTimeout = pdMS_TO_TICKS (timeOutMs); +} + bool BLEConnection::waitForIndicateConfirm(void) { // on the fly semaphore _hvc_sem = xSemaphoreCreateBinary(); _hvc_received = false; - xSemaphoreTake(_hvc_sem, portMAX_DELAY); + xSemaphoreTake(_hvc_sem, _waitForIndicateConfirmTimeout); vSemaphoreDelete(_hvc_sem); _hvc_sem = NULL; diff --git a/libraries/Bluefruit52Lib/src/BLEConnection.h b/libraries/Bluefruit52Lib/src/BLEConnection.h index d69d52f5e..e69ae594a 100644 --- a/libraries/Bluefruit52Lib/src/BLEConnection.h +++ b/libraries/Bluefruit52Lib/src/BLEConnection.h @@ -70,6 +70,8 @@ class BLEConnection // On-demand semaphore/data that are created on the fly SemaphoreHandle_t _hvc_sem; + TickType_t _waitForIndicateConfirmTimeout; + public: BLEConnection(uint16_t conn_hdl, ble_gap_evt_connected_t const * evt_connected, uint8_t hvn_qsize, uint8_t wrcmd_qsize); virtual ~BLEConnection(); @@ -95,6 +97,7 @@ class BLEConnection bool disconnect(void); bool setTxPower(int8_t power); // set power for this connection + void setWaitForIndicateConfirmTimeout(uint16_t timeOutMs); bool requestDataLengthUpdate(ble_gap_data_length_params_t const *p_dl_params = NULL, ble_gap_data_length_limitation_t *p_dl_limitation = NULL); bool requestMtuExchange(uint16_t mtu); @@ -116,8 +119,7 @@ class BLEConnection bool removeBondKey(void); bool saveCccd(void); - bool loadCccd(void); - + bool loadCccd(void); /*------------------------------------------------------------------*/ /* INTERNAL USAGE ONLY * Although declare as public, it is meant to be invoked by internal code.