From 434d02c49f0ee05448ba360a45568c47d4057971 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 11 Jan 2021 20:44:38 +1100 Subject: [PATCH] BLERemoteCharacteristic::registerForNotify: Permit event registration without updating descriptor. (#4659) --- libraries/BLE/src/BLERemoteCharacteristic.cpp | 6 +++--- libraries/BLE/src/BLERemoteCharacteristic.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/BLE/src/BLERemoteCharacteristic.cpp b/libraries/BLE/src/BLERemoteCharacteristic.cpp index d6771044..5b322c30 100644 --- a/libraries/BLE/src/BLERemoteCharacteristic.cpp +++ b/libraries/BLE/src/BLERemoteCharacteristic.cpp @@ -453,7 +453,7 @@ std::string BLERemoteCharacteristic::readValue() { * unregistering a notification. * @return N/A. */ -void BLERemoteCharacteristic::registerForNotify(notify_callback notifyCallback, bool notifications) { +void BLERemoteCharacteristic::registerForNotify(notify_callback notifyCallback, bool notifications, bool descriptorRequiresRegistration) { log_v(">> registerForNotify(): %s", toString().c_str()); m_notifyCallback = notifyCallback; // Save the notification callback. @@ -474,7 +474,7 @@ void BLERemoteCharacteristic::registerForNotify(notify_callback notifyCallback, uint8_t val[] = {0x01, 0x00}; if(!notifications) val[0] = 0x02; BLERemoteDescriptor* desc = getDescriptor(BLEUUID((uint16_t)0x2902)); - if (desc != nullptr) + if (desc != nullptr && descriptorRequiresRegistration) desc->writeValue(val, 2, true); } // End Register else { // If we weren't passed a callback function, then this is an unregistration. @@ -490,7 +490,7 @@ void BLERemoteCharacteristic::registerForNotify(notify_callback notifyCallback, uint8_t val[] = {0x00, 0x00}; BLERemoteDescriptor* desc = getDescriptor((uint16_t)0x2902); - if (desc != nullptr) + if (desc != nullptr && descriptorRequiresRegistration) desc->writeValue(val, 2, true); } // End Unregister diff --git a/libraries/BLE/src/BLERemoteCharacteristic.h b/libraries/BLE/src/BLERemoteCharacteristic.h index 5ba0f2c6..76dfb658 100644 --- a/libraries/BLE/src/BLERemoteCharacteristic.h +++ b/libraries/BLE/src/BLERemoteCharacteristic.h @@ -46,7 +46,7 @@ public: uint16_t readUInt16(); uint32_t readUInt32(); float readFloat(); - void registerForNotify(notify_callback _callback, bool notifications = true); + void registerForNotify(notify_callback _callback, bool notifications = true, bool descriptorRequiresRegistration = true); void writeValue(uint8_t* data, size_t length, bool response = false); void writeValue(std::string newValue, bool response = false); void writeValue(uint8_t newValue, bool response = false);