From 99a23d3c194daeef4b13a8ea9c8d9aaf159a1a07 Mon Sep 17 00:00:00 2001 From: h2zero Date: Mon, 14 Feb 2022 20:18:18 -0700 Subject: [PATCH] Remove recursive calling when fetching remote attributes. --- src/NimBLEClient.cpp | 12 ++++++++++-- src/NimBLERemoteCharacteristic.cpp | 12 ++++++++++-- src/NimBLERemoteService.cpp | 12 ++++++++++-- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/NimBLEClient.cpp b/src/NimBLEClient.cpp index 9d931d0..583f55a 100644 --- a/src/NimBLEClient.cpp +++ b/src/NimBLEClient.cpp @@ -620,7 +620,11 @@ NimBLERemoteService* NimBLEClient::getService(const NimBLEUUID &uuid) { { NimBLEUUID uuid128(uuid); uuid128.to128(); - return getService(uuid128); + if(retrieveServices(&uuid128)) { + if(m_servicesVector.size() > prev_size) { + return m_servicesVector.back(); + } + } } else { // If the request was successful but the 128 bit uuid not found // try again with the 16 bit uuid. @@ -628,7 +632,11 @@ NimBLERemoteService* NimBLEClient::getService(const NimBLEUUID &uuid) { uuid16.to16(); // if the uuid was 128 bit but not of the BLE base type this check will fail if (uuid16.bitSize() == BLE_UUID_TYPE_16) { - return getService(uuid16); + if(retrieveServices(&uuid16)) { + if(m_servicesVector.size() > prev_size) { + return m_servicesVector.back(); + } + } } } } diff --git a/src/NimBLERemoteCharacteristic.cpp b/src/NimBLERemoteCharacteristic.cpp index d25bce1..4f88bdb 100644 --- a/src/NimBLERemoteCharacteristic.cpp +++ b/src/NimBLERemoteCharacteristic.cpp @@ -323,7 +323,11 @@ NimBLERemoteDescriptor* NimBLERemoteCharacteristic::getDescriptor(const NimBLEUU { NimBLEUUID uuid128(uuid); uuid128.to128(); - return getDescriptor(uuid128); + if(retrieveDescriptors(&uuid128)) { + if(m_descriptorVector.size() > prev_size) { + return m_descriptorVector.back(); + } + } } else { // If the request was successful but the 128 bit uuid not found // try again with the 16 bit uuid. @@ -331,7 +335,11 @@ NimBLERemoteDescriptor* NimBLERemoteCharacteristic::getDescriptor(const NimBLEUU uuid16.to16(); // if the uuid was 128 bit but not of the BLE base type this check will fail if (uuid16.bitSize() == BLE_UUID_TYPE_16) { - return getDescriptor(uuid16); + if(retrieveDescriptors(&uuid16)) { + if(m_descriptorVector.size() > prev_size) { + return m_descriptorVector.back(); + } + } } } } diff --git a/src/NimBLERemoteService.cpp b/src/NimBLERemoteService.cpp index 218396d..cd3d528 100644 --- a/src/NimBLERemoteService.cpp +++ b/src/NimBLERemoteService.cpp @@ -116,7 +116,11 @@ NimBLERemoteCharacteristic* NimBLERemoteService::getCharacteristic(const NimBLEU { NimBLEUUID uuid128(uuid); uuid128.to128(); - return getCharacteristic(uuid128); + if (retrieveCharacteristics(&uuid128)) { + if(m_characteristicVector.size() > prev_size) { + return m_characteristicVector.back(); + } + } } else { // If the request was successful but the 128 bit uuid not found // try again with the 16 bit uuid. @@ -124,7 +128,11 @@ NimBLERemoteCharacteristic* NimBLERemoteService::getCharacteristic(const NimBLEU uuid16.to16(); // if the uuid was 128 bit but not of the BLE base type this check will fail if (uuid16.bitSize() == BLE_UUID_TYPE_16) { - return getCharacteristic(uuid16); + if(retrieveCharacteristics(&uuid16)) { + if(m_characteristicVector.size() > prev_size) { + return m_characteristicVector.back(); + } + } } } }