From d115e73e7e9e714eaa56ea70e7b49983a2fb263d Mon Sep 17 00:00:00 2001 From: Vincent Coubard Date: Tue, 27 Nov 2018 16:01:56 +0000 Subject: [PATCH 1/2] BLE: Fix iteration on connections in CordioGattServer. --- .../TARGET_CORDIO/source/CordioGattServer.cpp | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp b/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp index 4e1b5bad68..46857dd6c6 100644 --- a/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp +++ b/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp @@ -596,14 +596,10 @@ ble_error_t GattServer::write( uint16_t cccd_value; memcpy(&cccd_value, buffer, sizeof(cccd_value)); - uint16_t conn_id = 0; - uint16_t conn_found = 0; - while ((conn_found < DM_CONN_MAX) && (conn_id < CONNECTION_ID_LIMIT)) { + for (dmConnId_t conn_id = DM_CONN_MAX; conn_id > DM_CONN_ID_NONE; --conn_id) { if (DmConnInUse(conn_id) == true) { - ++conn_found; AttsCccSet(conn_id, cccd_index, cccd_value); } - ++conn_id; } return BLE_ERROR_NONE; @@ -622,13 +618,10 @@ ble_error_t GattServer::write( // This characteristic has a CCCD attribute. Handle notifications and // indications for all active connections if the authentication is // successful - uint16_t conn_id = 0; - uint16_t conn_found = 0; size_t updates_sent = 0; - while((conn_found < DM_CONN_MAX) && (conn_id < CONNECTION_ID_LIMIT)) { + for (dmConnId_t conn_id = DM_CONN_MAX; conn_id > DM_CONN_ID_NONE; --conn_id) { if (DmConnInUse(conn_id) == true) { - ++conn_found; if (is_update_authorized(conn_id, att_handle)) { uint16_t cccd_config = AttsCccEnabled(conn_id, cccd_index); if (cccd_config & ATT_CLIENT_CFG_NOTIFY) { @@ -641,7 +634,6 @@ ble_error_t GattServer::write( } } } - ++conn_id; } if (updates_sent) { @@ -709,12 +701,8 @@ ble_error_t GattServer::areUpdatesEnabled( ) { for (size_t idx = 0; idx < cccd_cnt; idx++) { if (characteristic.getValueHandle() == cccd_handles[idx]) { - uint16_t conn_id = 0; - uint16_t conn_found = 0; - - while ((conn_found < DM_CONN_MAX) && (conn_id < CONNECTION_ID_LIMIT)) { + for (dmConnId_t conn_id = DM_CONN_MAX; conn_id > DM_CONN_MAX; --conn_id) { if (DmConnInUse(conn_id) == true) { - ++conn_found; uint16_t cccd_value = AttsCccGet(conn_id, idx); if (cccd_value & (ATT_CLIENT_CFG_NOTIFY | ATT_CLIENT_CFG_INDICATE)) { *enabled = true; @@ -722,7 +710,6 @@ ble_error_t GattServer::areUpdatesEnabled( } } - ++conn_id; } *enabled = false; return BLE_ERROR_NONE; From 0c21112482923f3c72841f5441daf6d1f93f6bb2 Mon Sep 17 00:00:00 2001 From: Paul Szczepanek Date: Fri, 30 Nov 2018 08:16:17 +0000 Subject: [PATCH 2/2] fix DM_CONN_ID_NONE loop condition --- .../targets/TARGET_CORDIO/source/CordioGattServer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp b/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp index 46857dd6c6..258ff27701 100644 --- a/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp +++ b/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp @@ -701,7 +701,7 @@ ble_error_t GattServer::areUpdatesEnabled( ) { for (size_t idx = 0; idx < cccd_cnt; idx++) { if (characteristic.getValueHandle() == cccd_handles[idx]) { - for (dmConnId_t conn_id = DM_CONN_MAX; conn_id > DM_CONN_MAX; --conn_id) { + for (dmConnId_t conn_id = DM_CONN_MAX; conn_id > DM_CONN_ID_NONE; --conn_id) { if (DmConnInUse(conn_id) == true) { uint16_t cccd_value = AttsCccGet(conn_id, idx); if (cccd_value & (ATT_CLIENT_CFG_NOTIFY | ATT_CLIENT_CFG_INDICATE)) {