From b8d6e3d87fc28760cfa9436de97fdf484e2a4a16 Mon Sep 17 00:00:00 2001 From: h2zero Date: Wed, 3 Jul 2024 14:03:12 -0600 Subject: [PATCH] Remove assert for 0x2902, make a dummy descriptor instead. Rather than asserting for a harmless situation, this will just create a dummy descriptor object, marked as removed, and print a warning. --- src/NimBLECharacteristic.cpp | 4 +--- src/NimBLEDescriptor.cpp | 9 ++++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/NimBLECharacteristic.cpp b/src/NimBLECharacteristic.cpp index 3ea4b84..5e1364f 100644 --- a/src/NimBLECharacteristic.cpp +++ b/src/NimBLECharacteristic.cpp @@ -87,9 +87,7 @@ NimBLEDescriptor* NimBLECharacteristic::createDescriptor(const char* uuid, uint3 */ NimBLEDescriptor* NimBLECharacteristic::createDescriptor(const NimBLEUUID &uuid, uint32_t properties, uint16_t max_len) { NimBLEDescriptor* pDescriptor = nullptr; - if(uuid == NimBLEUUID(uint16_t(0x2902))) { - assert(0 && "0x2902 descriptors cannot be manually created"); - } else if (uuid == NimBLEUUID(uint16_t(0x2904))) { + if (uuid == NimBLEUUID(uint16_t(0x2904))) { pDescriptor = new NimBLE2904(this); } else { pDescriptor = new NimBLEDescriptor(uuid, properties, max_len, this); diff --git a/src/NimBLEDescriptor.cpp b/src/NimBLEDescriptor.cpp index 28a1513..6fdc049 100644 --- a/src/NimBLEDescriptor.cpp +++ b/src/NimBLEDescriptor.cpp @@ -55,7 +55,14 @@ NimBLEDescriptor::NimBLEDescriptor(NimBLEUUID uuid, uint16_t properties, uint16_ m_pCharacteristic = pCharacteristic; m_pCallbacks = &defaultCallbacks; // No initial callback. m_properties = 0; - m_removed = 0; + + // Check if this is the client configuration descriptor and set to removed if true. + if (uuid == NimBLEUUID((uint16_t)0x2902)) { + NIMBLE_LOGW(LOG_TAG, "Manually created 2902 descriptor has no functionality; please remove."); + m_removed = 1; + } else { + m_removed = 0; + } if (properties & BLE_GATT_CHR_F_READ) { // convert uint16_t properties to uint8_t m_properties |= BLE_ATT_F_READ;