From f4066ad84e02a390837d3cf3a2d4bf6473d65553 Mon Sep 17 00:00:00 2001 From: hoeflich Date: Wed, 30 Jul 2025 08:30:19 +0200 Subject: [PATCH 01/10] Added ReadArgs --- src/NimBLECharacteristic.cpp | 6 ++--- src/NimBLECharacteristic.h | 4 ++-- src/NimBLEConnInfo.h | 1 + src/NimBLEDescriptor.cpp | 2 +- src/NimBLEDescriptor.h | 2 +- src/NimBLELocalValueAttribute.h | 3 ++- src/NimBLEReadEventArgs.h | 33 +++++++++++++++++++++++++++ src/NimBLEServer.cpp | 12 ++++++++-- src/buffer.h | 40 +++++++++++++++++++++++++++++++++ 9 files changed, 93 insertions(+), 10 deletions(-) create mode 100644 src/NimBLEReadEventArgs.h create mode 100644 src/buffer.h diff --git a/src/NimBLECharacteristic.cpp b/src/NimBLECharacteristic.cpp index 26ce838e..d37b781e 100644 --- a/src/NimBLECharacteristic.cpp +++ b/src/NimBLECharacteristic.cpp @@ -321,8 +321,8 @@ bool NimBLECharacteristic::sendValue(const uint8_t* value, size_t length, bool i return true; } // sendValue -void NimBLECharacteristic::readEvent(NimBLEConnInfo& connInfo) { - m_pCallbacks->onRead(this, connInfo); +void NimBLECharacteristic::readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) { + m_pCallbacks->onRead(this, connInfo, args); } // readEvent void NimBLECharacteristic::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) { @@ -374,7 +374,7 @@ std::string NimBLECharacteristic::toString() const { * @param [in] pCharacteristic The characteristic that is the source of the event. * @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info. */ -void NimBLECharacteristicCallbacks::onRead(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo) { +void NimBLECharacteristicCallbacks::onRead(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) { NIMBLE_LOGD("NimBLECharacteristicCallbacks", "onRead: default"); } // onRead diff --git a/src/NimBLECharacteristic.h b/src/NimBLECharacteristic.h index 02ae89a7..f4fe9047 100644 --- a/src/NimBLECharacteristic.h +++ b/src/NimBLECharacteristic.h @@ -226,7 +226,7 @@ class NimBLECharacteristic : public NimBLELocalValueAttribute { friend class NimBLEService; void setService(NimBLEService* pService); - void readEvent(NimBLEConnInfo& connInfo) override; + void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) override; void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) override; bool sendValue(const uint8_t* value, size_t length, @@ -248,7 +248,7 @@ class NimBLECharacteristic : public NimBLELocalValueAttribute { class NimBLECharacteristicCallbacks { public: virtual ~NimBLECharacteristicCallbacks() {} - virtual void onRead(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo); + virtual void onRead(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args); virtual void onWrite(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo); virtual void onStatus(NimBLECharacteristic* pCharacteristic, int code); virtual void onSubscribe(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, uint16_t subValue); diff --git a/src/NimBLEConnInfo.h b/src/NimBLEConnInfo.h index cd1e4c3e..767dcfc2 100644 --- a/src/NimBLEConnInfo.h +++ b/src/NimBLEConnInfo.h @@ -25,6 +25,7 @@ #endif #include "NimBLEAddress.h" +#include "buffer.h" /** * @brief Connection information. diff --git a/src/NimBLEDescriptor.cpp b/src/NimBLEDescriptor.cpp index d85d1d1a..ad935ad1 100644 --- a/src/NimBLEDescriptor.cpp +++ b/src/NimBLEDescriptor.cpp @@ -120,7 +120,7 @@ std::string NimBLEDescriptor::toString() const { return res; } // toString -void NimBLEDescriptor::readEvent(NimBLEConnInfo& connInfo) { +void NimBLEDescriptor::readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) { m_pCallbacks->onRead(this, connInfo); } // readEvent diff --git a/src/NimBLEDescriptor.h b/src/NimBLEDescriptor.h index 907ad09c..efa42d86 100644 --- a/src/NimBLEDescriptor.h +++ b/src/NimBLEDescriptor.h @@ -49,7 +49,7 @@ class NimBLEDescriptor : public NimBLELocalValueAttribute { friend class NimBLEService; void setCharacteristic(NimBLECharacteristic* pChar); - void readEvent(NimBLEConnInfo& connInfo) override; + void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) override; void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) override; NimBLEDescriptorCallbacks* m_pCallbacks{nullptr}; diff --git a/src/NimBLELocalValueAttribute.h b/src/NimBLELocalValueAttribute.h index c9f9d8de..2e6db1ac 100644 --- a/src/NimBLELocalValueAttribute.h +++ b/src/NimBLELocalValueAttribute.h @@ -18,6 +18,7 @@ #ifndef NIMBLE_LOCAL_VALUE_ATTRIBUTE_H_ #define NIMBLE_LOCAL_VALUE_ATTRIBUTE_H_ +#include "NimBLEReadEventArgs.h" #include "nimconfig.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL @@ -113,7 +114,7 @@ class NimBLELocalValueAttribute : public NimBLELocalAttribute, public NimBLEValu * @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info. * @details This function is called by NimBLEServer when a read request is received. */ - virtual void readEvent(NimBLEConnInfo& connInfo) = 0; + virtual void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) = 0; /** * @brief Callback function to support a write request. diff --git a/src/NimBLEReadEventArgs.h b/src/NimBLEReadEventArgs.h new file mode 100644 index 00000000..148c8283 --- /dev/null +++ b/src/NimBLEReadEventArgs.h @@ -0,0 +1,33 @@ +// +// Created by hoeflich on 30.07.2025. +// + +#ifndef NIMBLEREADEVENTARGS_H +#define NIMBLEREADEVENTARGS_H + +#include + +#include "buffer.h" + +class NimBLEReadEventArgs{ +public: + void overwriteReturnValue(const uint8_t* value, int size) { + data = new buffer(size); + memcpy(data->getPointer(), value, size); + } + + bool isDataOverwritten() const { return data != nullptr; } + + buffer* getData() { return data; } + + NimBLEReadEventArgs() {} + + ~NimBLEReadEventArgs() { + if(data != nullptr) + delete data; + } +private: + buffer* data = nullptr; +}; + +#endif //NIMBLEREADEVENTARGS_H diff --git a/src/NimBLEServer.cpp b/src/NimBLEServer.cpp index 8694d850..12a40432 100644 --- a/src/NimBLEServer.cpp +++ b/src/NimBLEServer.cpp @@ -16,6 +16,7 @@ */ #include "NimBLEServer.h" +#include "NimBLEReadEventArgs.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL # include "NimBLEDevice.h" @@ -631,12 +632,19 @@ int NimBLEServer::handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_ case BLE_GATT_ACCESS_OP_READ_CHR: { // Don't call readEvent if the buffer len is 0 (this is a follow up to a previous read), // or if this is an internal read (handle is NONE) + auto eventArgs = NimBLEReadEventArgs(); if (ctxt->om->om_len > 0 && connHandle != BLE_HS_CONN_HANDLE_NONE) { - pAtt->readEvent(peerInfo); + pAtt->readEvent(peerInfo, eventArgs); } ble_npl_hw_enter_critical(); - int rc = os_mbuf_append(ctxt->om, val.data(), val.size()); + int rc; + if(eventArgs.isDataOverwritten()) { + auto buffer = eventArgs.getData(); + rc = os_mbuf_append(ctxt->om, buffer->getPointer(), buffer->getSize()); + } else { + rc = os_mbuf_append(ctxt->om, val.data(), val.size()); + } ble_npl_hw_exit_critical(0); return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; } diff --git a/src/buffer.h b/src/buffer.h new file mode 100644 index 00000000..700f9e08 --- /dev/null +++ b/src/buffer.h @@ -0,0 +1,40 @@ +// +// Created by hoeflich on 30.07.2025. +// +#include + +#ifndef BUFFER_H +#define BUFFER_H + +class buffer { + public: + + u_int8_t* getPointer() { + return data; + } + + size_t getSize() { + return size; + } + + explicit buffer(size_t size){ + if(size == 0) { + this->data = nullptr; + this->size = 0; + return; + } + + this->data = new uint8_t[size]; + this->size = size; + } + + ~buffer(){ + delete data; + } + +private: + uint8_t *data; + size_t size; +}; + +#endif //BUFFER_H From f9b9bfb568caf4d2688dcbb1a7476a5eac6e8730 Mon Sep 17 00:00:00 2001 From: hoeflich Date: Wed, 30 Jul 2025 15:16:31 +0200 Subject: [PATCH 02/10] Alle aenderungen --- src/NimBLECharacteristic.cpp | 10 +++-- src/NimBLECharacteristic.h | 5 ++- src/NimBLEDescriptor.cpp | 14 ++++--- src/NimBLEDescriptor.h | 7 ++-- src/NimBLEDevice.h | 8 ++++ src/NimBLEEventArgs.h | 65 +++++++++++++++++++++++++++++++++ src/NimBLEHIDDevice.cpp | 1 + src/NimBLELocalValueAttribute.h | 4 +- src/NimBLEReadEventArgs.h | 33 ----------------- src/NimBLEServer.cpp | 13 +++++-- src/NimBLEService.h | 2 +- 11 files changed, 107 insertions(+), 55 deletions(-) create mode 100644 src/NimBLEEventArgs.h delete mode 100644 src/NimBLEReadEventArgs.h diff --git a/src/NimBLECharacteristic.cpp b/src/NimBLECharacteristic.cpp index d37b781e..8bd76c7c 100644 --- a/src/NimBLECharacteristic.cpp +++ b/src/NimBLECharacteristic.cpp @@ -325,9 +325,11 @@ void NimBLECharacteristic::readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventAr m_pCallbacks->onRead(this, connInfo, args); } // readEvent -void NimBLECharacteristic::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) { - setValue(val, len); - m_pCallbacks->onWrite(this, connInfo); +void NimBLECharacteristic::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) { + m_pCallbacks->onWrite(this, connInfo, args); + if(!args.isCanceled()) { + setValue(val, len); + } } // writeEvent /** @@ -383,7 +385,7 @@ void NimBLECharacteristicCallbacks::onRead(NimBLECharacteristic* pCharacteristic * @param [in] pCharacteristic The characteristic that is the source of the event. * @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info. */ -void NimBLECharacteristicCallbacks::onWrite(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo) { +void NimBLECharacteristicCallbacks::onWrite(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) { NIMBLE_LOGD("NimBLECharacteristicCallbacks", "onWrite: default"); } // onWrite diff --git a/src/NimBLECharacteristic.h b/src/NimBLECharacteristic.h index f4fe9047..c07db12f 100644 --- a/src/NimBLECharacteristic.h +++ b/src/NimBLECharacteristic.h @@ -28,6 +28,7 @@ class NimBLEDescriptor; class NimBLE2904; # include "NimBLELocalValueAttribute.h" +# include "NimBLEDevice.h" # include # include @@ -227,7 +228,7 @@ class NimBLECharacteristic : public NimBLELocalValueAttribute { void setService(NimBLEService* pService); void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) override; - void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) override; + void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) override; bool sendValue(const uint8_t* value, size_t length, bool is_notification = true, @@ -249,7 +250,7 @@ class NimBLECharacteristicCallbacks { public: virtual ~NimBLECharacteristicCallbacks() {} virtual void onRead(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args); - virtual void onWrite(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo); + virtual void onWrite(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args); virtual void onStatus(NimBLECharacteristic* pCharacteristic, int code); virtual void onSubscribe(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, uint16_t subValue); }; diff --git a/src/NimBLEDescriptor.cpp b/src/NimBLEDescriptor.cpp index ad935ad1..1061dd9b 100644 --- a/src/NimBLEDescriptor.cpp +++ b/src/NimBLEDescriptor.cpp @@ -121,12 +121,14 @@ std::string NimBLEDescriptor::toString() const { } // toString void NimBLEDescriptor::readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) { - m_pCallbacks->onRead(this, connInfo); + m_pCallbacks->onRead(this, connInfo, args); } // readEvent -void NimBLEDescriptor::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) { - setValue(val, len); - m_pCallbacks->onWrite(this, connInfo); +void NimBLEDescriptor::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) { + m_pCallbacks->onWrite(this, connInfo, args); + if(!args.isCanceled()) { + setValue(val, len); + } } // writeEvent /** @@ -134,7 +136,7 @@ void NimBLEDescriptor::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnIn * @param [in] pDescriptor The descriptor that is the source of the event. * @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info. */ -void NimBLEDescriptorCallbacks::onRead(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo) { +void NimBLEDescriptorCallbacks::onRead(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) { NIMBLE_LOGD("NimBLEDescriptorCallbacks", "onRead: default"); } // onRead @@ -143,7 +145,7 @@ void NimBLEDescriptorCallbacks::onRead(NimBLEDescriptor* pDescriptor, NimBLEConn * @param [in] pDescriptor The descriptor that is the source of the event. * @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info. */ -void NimBLEDescriptorCallbacks::onWrite(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo) { +void NimBLEDescriptorCallbacks::onWrite(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) { NIMBLE_LOGD("NimBLEDescriptorCallbacks", "onWrite: default"); } // onWrite diff --git a/src/NimBLEDescriptor.h b/src/NimBLEDescriptor.h index efa42d86..337335ba 100644 --- a/src/NimBLEDescriptor.h +++ b/src/NimBLEDescriptor.h @@ -21,6 +21,7 @@ #include "nimconfig.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL +# include "NimBLEDevice.h" # include "NimBLELocalValueAttribute.h" # include @@ -50,7 +51,7 @@ class NimBLEDescriptor : public NimBLELocalValueAttribute { void setCharacteristic(NimBLECharacteristic* pChar); void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) override; - void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) override; + void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) override; NimBLEDescriptorCallbacks* m_pCallbacks{nullptr}; NimBLECharacteristic* m_pCharacteristic{nullptr}; @@ -66,8 +67,8 @@ class NimBLEDescriptor : public NimBLELocalValueAttribute { class NimBLEDescriptorCallbacks { public: virtual ~NimBLEDescriptorCallbacks() = default; - virtual void onRead(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo); - virtual void onWrite(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo); + virtual void onRead(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args); + virtual void onWrite(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args); }; # include "NimBLE2904.h" diff --git a/src/NimBLEDevice.h b/src/NimBLEDevice.h index df89852c..69ed2553 100644 --- a/src/NimBLEDevice.h +++ b/src/NimBLEDevice.h @@ -15,9 +15,15 @@ * limitations under the License. */ + #ifndef NIMBLE_CPP_DEVICE_H_ #define NIMBLE_CPP_DEVICE_H_ +class buffer; +class NimBLEReadEventArgs; +class NimBLEWriteEventArgs; + + #include "nimconfig.h" #if CONFIG_BT_ENABLED # ifdef ESP_PLATFORM @@ -68,9 +74,11 @@ class NimBLEL2CAPServer; class NimBLEConnInfo; # endif + class NimBLEAddress; class NimBLEDeviceCallbacks; + # define BLEDevice NimBLEDevice # define BLEClient NimBLEClient # define BLERemoteService NimBLERemoteService diff --git a/src/NimBLEEventArgs.h b/src/NimBLEEventArgs.h new file mode 100644 index 00000000..46cdcb7a --- /dev/null +++ b/src/NimBLEEventArgs.h @@ -0,0 +1,65 @@ +// +// Created by hoeflich on 30.07.2025. +// + +#ifndef NIMBLEEVENTS_H +#define NIMBLEEVENTS_H + +#include "NimBLEDevice.h" +#include "buffer.h" +#include +#include + +class NimBLEReadEventArgs{ +public: + void overwriteReturnValue(const uint8_t* value, int size) { + data = new buffer(size); + std::memcpy(data->getPointer(), value, size); + } + + bool isDataOverwritten() const { return data != nullptr; } + + buffer* getData() { return data; } + + NimBLEReadEventArgs() {} + + ~NimBLEReadEventArgs() { + if(data != nullptr) + delete data; + } +private: + buffer* data = nullptr; +}; + +class NimBLEWriteEventArgs{ +public: + void Cancel(){ + canceled = true; + } + + bool isCanceled(){ + return canceled; + } + + std::string GetOldData(){ + return oldData; + } + + std::string GetNewData(){ + return newData; + } + + NimBLEWriteEventArgs(std::string oldData, std::string newData) { + this->oldData = oldData; + this->newData = newData; + } + + ~NimBLEWriteEventArgs() { + } +private: + std::string oldData; + std::string newData; + bool canceled = false; +}; + +#endif //NIMBLEEVENTS_H diff --git a/src/NimBLEHIDDevice.cpp b/src/NimBLEHIDDevice.cpp index 73393930..c480333d 100644 --- a/src/NimBLEHIDDevice.cpp +++ b/src/NimBLEHIDDevice.cpp @@ -18,6 +18,7 @@ #include "NimBLEHIDDevice.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_BROADCASTER && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL +# include "NimBLEDevice.h" # include "NimBLEServer.h" # include "NimBLEService.h" # include "NimBLE2904.h" diff --git a/src/NimBLELocalValueAttribute.h b/src/NimBLELocalValueAttribute.h index 2e6db1ac..f07065d8 100644 --- a/src/NimBLELocalValueAttribute.h +++ b/src/NimBLELocalValueAttribute.h @@ -18,7 +18,6 @@ #ifndef NIMBLE_LOCAL_VALUE_ATTRIBUTE_H_ #define NIMBLE_LOCAL_VALUE_ATTRIBUTE_H_ -#include "NimBLEReadEventArgs.h" #include "nimconfig.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL @@ -52,6 +51,7 @@ typedef enum { # include "NimBLEValueAttribute.h" # include "NimBLEAttValue.h" # include +#include "NimBLEEventArgs.h" class NimBLEConnInfo; class NimBLELocalValueAttribute : public NimBLELocalAttribute, public NimBLEValueAttribute { @@ -123,7 +123,7 @@ class NimBLELocalValueAttribute : public NimBLELocalAttribute, public NimBLEValu * @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info. * @details This function is called by NimBLEServer when a write request is received. */ - virtual void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) = 0; + virtual void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) = 0; /** * @brief Get a pointer to value of the attribute. diff --git a/src/NimBLEReadEventArgs.h b/src/NimBLEReadEventArgs.h deleted file mode 100644 index 148c8283..00000000 --- a/src/NimBLEReadEventArgs.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Created by hoeflich on 30.07.2025. -// - -#ifndef NIMBLEREADEVENTARGS_H -#define NIMBLEREADEVENTARGS_H - -#include - -#include "buffer.h" - -class NimBLEReadEventArgs{ -public: - void overwriteReturnValue(const uint8_t* value, int size) { - data = new buffer(size); - memcpy(data->getPointer(), value, size); - } - - bool isDataOverwritten() const { return data != nullptr; } - - buffer* getData() { return data; } - - NimBLEReadEventArgs() {} - - ~NimBLEReadEventArgs() { - if(data != nullptr) - delete data; - } -private: - buffer* data = nullptr; -}; - -#endif //NIMBLEREADEVENTARGS_H diff --git a/src/NimBLEServer.cpp b/src/NimBLEServer.cpp index 12a40432..b82cab71 100644 --- a/src/NimBLEServer.cpp +++ b/src/NimBLEServer.cpp @@ -16,7 +16,7 @@ */ #include "NimBLEServer.h" -#include "NimBLEReadEventArgs.h" +#include "NimBLEEventArgs.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL # include "NimBLEDevice.h" @@ -632,7 +632,7 @@ int NimBLEServer::handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_ case BLE_GATT_ACCESS_OP_READ_CHR: { // Don't call readEvent if the buffer len is 0 (this is a follow up to a previous read), // or if this is an internal read (handle is NONE) - auto eventArgs = NimBLEReadEventArgs(); + NimBLEReadEventArgs eventArgs = NimBLEReadEventArgs(); if (ctxt->om->om_len > 0 && connHandle != BLE_HS_CONN_HANDLE_NONE) { pAtt->readEvent(peerInfo, eventArgs); } @@ -660,18 +660,23 @@ int NimBLEServer::handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_ uint8_t buf[maxLen]; memcpy(buf, ctxt->om->om_data, len); + os_mbuf* next; next = SLIST_NEXT(ctxt->om, om_next); while (next != NULL) { if ((len + next->om_len) > maxLen) { return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN; } - memcpy(&buf[len], next->om_data, next->om_len); + memcpy(&buf[len], next->om_data, next->om_len); len += next->om_len; next = SLIST_NEXT(next, om_next); } - pAtt->writeEvent(buf, len, peerInfo); + auto oldData = std::string((char*)pAtt->getValue().data()); + auto newData = std::string((char*)buf); + + NimBLEWriteEventArgs eventArgs = NimBLEWriteEventArgs(oldData, newData); + pAtt->writeEvent(buf, len, peerInfo, eventArgs); return 0; } diff --git a/src/NimBLEService.h b/src/NimBLEService.h index 357f32cd..03149780 100644 --- a/src/NimBLEService.h +++ b/src/NimBLEService.h @@ -23,7 +23,7 @@ class NimBLEService; -# include "NimBLEAttribute.h" +# include "NimBLEDevice.h" # include "NimBLEServer.h" # include "NimBLECharacteristic.h" From 6346cc4dae4e15a7284d6be124e53fa26382d84e Mon Sep 17 00:00:00 2001 From: hoeflich Date: Thu, 31 Jul 2025 08:16:05 +0200 Subject: [PATCH 03/10] Endlich gefixed. Funktioniert jetzt wieder --- src/NimBLECharacteristic.cpp | 1 + src/NimBLEDescriptor.cpp | 3 +++ src/NimBLEDescriptor.h | 2 +- src/NimBLEDevice.h | 9 +++++---- src/NimBLEEventArgs.h | 3 ++- src/NimBLEServer.cpp | 2 +- src/NimBLEServer.h | 1 + src/buffer.h | 8 +++++++- 8 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/NimBLECharacteristic.cpp b/src/NimBLECharacteristic.cpp index 8bd76c7c..f65c5d27 100644 --- a/src/NimBLECharacteristic.cpp +++ b/src/NimBLECharacteristic.cpp @@ -21,6 +21,7 @@ # include "NimBLE2904.h" # include "NimBLEDevice.h" # include "NimBLELog.h" +# include "NimBLELocalValueAttribute.h" static NimBLECharacteristicCallbacks defaultCallback; static const char* LOG_TAG = "NimBLECharacteristic"; diff --git a/src/NimBLEDescriptor.cpp b/src/NimBLEDescriptor.cpp index 1061dd9b..a1d14387 100644 --- a/src/NimBLEDescriptor.cpp +++ b/src/NimBLEDescriptor.cpp @@ -18,6 +18,9 @@ #include "NimBLEDescriptor.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL +# include "NimBLELocalAttribute.h" +# include "NimBLEValueAttribute.h" +# include "NimBLELocalValueAttribute.h" # include "NimBLEService.h" # include "NimBLELog.h" diff --git a/src/NimBLEDescriptor.h b/src/NimBLEDescriptor.h index 337335ba..ab755f9e 100644 --- a/src/NimBLEDescriptor.h +++ b/src/NimBLEDescriptor.h @@ -21,8 +21,8 @@ #include "nimconfig.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL +#include "NimBLELocalValueAttribute.h" # include "NimBLEDevice.h" -# include "NimBLELocalValueAttribute.h" # include class NimBLECharacteristic; diff --git a/src/NimBLEDevice.h b/src/NimBLEDevice.h index 69ed2553..8f5a2af7 100644 --- a/src/NimBLEDevice.h +++ b/src/NimBLEDevice.h @@ -19,10 +19,6 @@ #ifndef NIMBLE_CPP_DEVICE_H_ #define NIMBLE_CPP_DEVICE_H_ -class buffer; -class NimBLEReadEventArgs; -class NimBLEWriteEventArgs; - #include "nimconfig.h" #if CONFIG_BT_ENABLED @@ -72,6 +68,11 @@ class NimBLEL2CAPServer; # if CONFIG_BT_NIMBLE_ROLE_PERIPHERAL || CONFIG_BT_NIMBLE_ROLE_CENTRAL class NimBLEConnInfo; + +class buffer; +class NimBLEReadEventArgs; +class NimBLEWriteEventArgs; + # endif diff --git a/src/NimBLEEventArgs.h b/src/NimBLEEventArgs.h index 46cdcb7a..adb0b5a9 100644 --- a/src/NimBLEEventArgs.h +++ b/src/NimBLEEventArgs.h @@ -5,7 +5,7 @@ #ifndef NIMBLEEVENTS_H #define NIMBLEEVENTS_H -#include "NimBLEDevice.h" +#if CONFIG_BT_ENABLED && (CONFIG_BT_NIMBLE_ROLE_PERIPHERAL || CONFIG_BT_NIMBLE_ROLE_CENTRAL) #include "buffer.h" #include #include @@ -62,4 +62,5 @@ class NimBLEWriteEventArgs{ bool canceled = false; }; +#endif #endif //NIMBLEEVENTS_H diff --git a/src/NimBLEServer.cpp b/src/NimBLEServer.cpp index b82cab71..920242c2 100644 --- a/src/NimBLEServer.cpp +++ b/src/NimBLEServer.cpp @@ -16,11 +16,11 @@ */ #include "NimBLEServer.h" -#include "NimBLEEventArgs.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL # include "NimBLEDevice.h" # include "NimBLELog.h" +#include "NimBLEEventArgs.h" # if CONFIG_BT_NIMBLE_ROLE_CENTRAL # include "NimBLEClient.h" diff --git a/src/NimBLEServer.h b/src/NimBLEServer.h index f8b6423b..b88fc177 100644 --- a/src/NimBLEServer.h +++ b/src/NimBLEServer.h @@ -34,6 +34,7 @@ # include # include +# include "NimBLEEventArgs.h" # define NIMBLE_ATT_REMOVE_HIDE 1 # define NIMBLE_ATT_REMOVE_DELETE 2 diff --git a/src/buffer.h b/src/buffer.h index 700f9e08..a8530842 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -1,11 +1,15 @@ // // Created by hoeflich on 30.07.2025. // -#include + + #ifndef BUFFER_H #define BUFFER_H +#if CONFIG_BT_ENABLED && (CONFIG_BT_NIMBLE_ROLE_PERIPHERAL || CONFIG_BT_NIMBLE_ROLE_CENTRAL) +#include + class buffer { public: @@ -37,4 +41,6 @@ class buffer { size_t size; }; +#endif + #endif //BUFFER_H From b31ba8bbefc0dc5a20845609d69009b1c29a8c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20H=C3=B6flich?= Date: Thu, 31 Jul 2025 07:47:56 +0000 Subject: [PATCH 04/10] README.md bearbeiten --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bacf985d..5a59b2e0 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ ![Release Date](https://img.shields.io/github/release-date/h2zero/esp-nimble-cpp.svg?style=plastic)](https://github.com/h2zero/esp-nimble-cpp/releases/latest/) > [!IMPORTANT] -> Version 2 is now released! -> Check out the [1.x to 2.x Migration Guide](docs/1.x_to2.x_migration_guide.md) and [Release Notes](https://github.com/h2zero/esp-nimble-cpp/releases/latest/) +> Diese Library ist ein Fork von diesem [Github repo](https://github.com/h2zero/esp-nimble-cpp). +> Alle Änderungen zum Original werden im [Wiki](/wiki/Änderungen) festgehalten. # esp-nimble-cpp From fa81ec7e3d292356e536a242fb0249d885198a64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20H=C3=B6flich?= Date: Thu, 31 Jul 2025 07:48:20 +0000 Subject: [PATCH 05/10] README.md bearbeiten --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a59b2e0..0cc81743 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ > [!IMPORTANT] > Diese Library ist ein Fork von diesem [Github repo](https://github.com/h2zero/esp-nimble-cpp). -> Alle Änderungen zum Original werden im [Wiki](/wiki/Änderungen) festgehalten. +> Alle Änderungen zum Original werden im [Wiki](../wiki/Änderungen) festgehalten. # esp-nimble-cpp From 03271d3219b0629e8b9c90c3c49946318b8dd66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20H=C3=B6flich?= Date: Thu, 31 Jul 2025 07:49:28 +0000 Subject: [PATCH 06/10] README.md bearbeiten --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0cc81743..1e24832e 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ > [!IMPORTANT] > Diese Library ist ein Fork von diesem [Github repo](https://github.com/h2zero/esp-nimble-cpp). -> Alle Änderungen zum Original werden im [Wiki](../wiki/Änderungen) festgehalten. +> Alle Änderungen zum Original werden im [Wiki](../wikis/Änderungen) festgehalten. # esp-nimble-cpp From c5076c0174116a69ab0a7ee6776bccf7a2f8d921 Mon Sep 17 00:00:00 2001 From: hoeflich Date: Thu, 31 Jul 2025 11:12:26 +0200 Subject: [PATCH 07/10] added explicit length to string creation --- src/NimBLEServer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NimBLEServer.cpp b/src/NimBLEServer.cpp index 920242c2..f1eb70e9 100644 --- a/src/NimBLEServer.cpp +++ b/src/NimBLEServer.cpp @@ -672,8 +672,8 @@ int NimBLEServer::handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_ next = SLIST_NEXT(next, om_next); } - auto oldData = std::string((char*)pAtt->getValue().data()); - auto newData = std::string((char*)buf); + auto oldData = std::string((char*)pAtt->getValue().data(), pAtt->getValue().length()); + auto newData = std::string((char*)buf, len); NimBLEWriteEventArgs eventArgs = NimBLEWriteEventArgs(oldData, newData); pAtt->writeEvent(buf, len, peerInfo, eventArgs); From 22d8f85ed1611a88ab400244a9e6aa640f6254db Mon Sep 17 00:00:00 2001 From: hoeflich Date: Thu, 31 Jul 2025 11:30:38 +0200 Subject: [PATCH 08/10] Change back README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1e24832e..bacf985d 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ ![Release Date](https://img.shields.io/github/release-date/h2zero/esp-nimble-cpp.svg?style=plastic)](https://github.com/h2zero/esp-nimble-cpp/releases/latest/) > [!IMPORTANT] -> Diese Library ist ein Fork von diesem [Github repo](https://github.com/h2zero/esp-nimble-cpp). -> Alle Änderungen zum Original werden im [Wiki](../wikis/Änderungen) festgehalten. +> Version 2 is now released! +> Check out the [1.x to 2.x Migration Guide](docs/1.x_to2.x_migration_guide.md) and [Release Notes](https://github.com/h2zero/esp-nimble-cpp/releases/latest/) # esp-nimble-cpp From e8f2672b7a207e9f6469d50da8595b56bfbcac6f Mon Sep 17 00:00:00 2001 From: hoeflich Date: Mon, 22 Sep 2025 14:07:10 +0200 Subject: [PATCH 09/10] Added old events back as overloads --- src/NimBLECharacteristic.cpp | 21 +++++++++++++++++++++ src/NimBLECharacteristic.h | 4 ++++ src/NimBLEDescriptor.cpp | 26 +++++++++++++++++++++++++- src/NimBLEDescriptor.h | 4 ++++ src/NimBLELocalValueAttribute.h | 2 ++ src/NimBLEServer.cpp | 2 ++ 6 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/NimBLECharacteristic.cpp b/src/NimBLECharacteristic.cpp index f65c5d27..e4de41d1 100644 --- a/src/NimBLECharacteristic.cpp +++ b/src/NimBLECharacteristic.cpp @@ -322,11 +322,21 @@ bool NimBLECharacteristic::sendValue(const uint8_t* value, size_t length, bool i return true; } // sendValue +void NimBLECharacteristic::readEvent(NimBLEConnInfo& connInfo) { + m_pCallbacks->onRead(this, connInfo); +} // readEvent + void NimBLECharacteristic::readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) { + m_pCallbacks->onRead(this, connInfo); m_pCallbacks->onRead(this, connInfo, args); } // readEvent +void NimBLECharacteristic::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) { + m_pCallbacks->onWrite(this, connInfo); +} // writeEvent + void NimBLECharacteristic::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) { + m_pCallbacks->onWrite(this, connInfo); m_pCallbacks->onWrite(this, connInfo, args); if(!args.isCanceled()) { setValue(val, len); @@ -381,6 +391,9 @@ void NimBLECharacteristicCallbacks::onRead(NimBLECharacteristic* pCharacteristic NIMBLE_LOGD("NimBLECharacteristicCallbacks", "onRead: default"); } // onRead +void NimBLECharacteristicCallbacks::onRead(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo) { + NIMBLE_LOGD("NimBLECharacteristicCallbacks", "onRead: default"); +} // onRead /** * @brief Callback function to support a write request. * @param [in] pCharacteristic The characteristic that is the source of the event. @@ -390,6 +403,14 @@ void NimBLECharacteristicCallbacks::onWrite(NimBLECharacteristic* pCharacteristi NIMBLE_LOGD("NimBLECharacteristicCallbacks", "onWrite: default"); } // onWrite +/** + * @brief Callback function to support a write request. + * @param [in] pCharacteristic The characteristic that is the source of the event. + * @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info. + */ +void NimBLECharacteristicCallbacks::onWrite(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo) { + NIMBLE_LOGD("NimBLECharacteristicCallbacks", "onWrite: default"); +} // onWrite /** * @brief Callback function to support a Notify/Indicate Status report. * @param [in] pCharacteristic The characteristic that is the source of the event. diff --git a/src/NimBLECharacteristic.h b/src/NimBLECharacteristic.h index c07db12f..9078f657 100644 --- a/src/NimBLECharacteristic.h +++ b/src/NimBLECharacteristic.h @@ -227,7 +227,9 @@ class NimBLECharacteristic : public NimBLELocalValueAttribute { friend class NimBLEService; void setService(NimBLEService* pService); + void readEvent(NimBLEConnInfo& connInfo) override; void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) override; + void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) override; void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) override; bool sendValue(const uint8_t* value, size_t length, @@ -249,7 +251,9 @@ class NimBLECharacteristic : public NimBLELocalValueAttribute { class NimBLECharacteristicCallbacks { public: virtual ~NimBLECharacteristicCallbacks() {} + virtual void onRead(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo); virtual void onRead(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args); + virtual void onWrite(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo); virtual void onWrite(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args); virtual void onStatus(NimBLECharacteristic* pCharacteristic, int code); virtual void onSubscribe(NimBLECharacteristic* pCharacteristic, NimBLEConnInfo& connInfo, uint16_t subValue); diff --git a/src/NimBLEDescriptor.cpp b/src/NimBLEDescriptor.cpp index a1d14387..02a50d13 100644 --- a/src/NimBLEDescriptor.cpp +++ b/src/NimBLEDescriptor.cpp @@ -123,17 +123,25 @@ std::string NimBLEDescriptor::toString() const { return res; } // toString +void NimBLEDescriptor::readEvent(NimBLEConnInfo& connInfo) { + m_pCallbacks->onRead(this, connInfo); +} // readEvent + void NimBLEDescriptor::readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) { m_pCallbacks->onRead(this, connInfo, args); } // readEvent void NimBLEDescriptor::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) { + m_pCallbacks->onWrite(this, connInfo); m_pCallbacks->onWrite(this, connInfo, args); if(!args.isCanceled()) { setValue(val, len); } } // writeEvent +void NimBLEDescriptor::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) { + m_pCallbacks->onWrite(this, connInfo); +} // writeEvent /** * @brief Callback function to support a read request. * @param [in] pDescriptor The descriptor that is the source of the event. @@ -143,6 +151,15 @@ void NimBLEDescriptorCallbacks::onRead(NimBLEDescriptor* pDescriptor, NimBLEConn NIMBLE_LOGD("NimBLEDescriptorCallbacks", "onRead: default"); } // onRead + +/** + * @brief Callback function to support a read request. + * @param [in] pDescriptor The descriptor that is the source of the event. + * @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info. + */ +void NimBLEDescriptorCallbacks::onRead(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo) { + NIMBLE_LOGD("NimBLEDescriptorCallbacks", "onRead: default"); +} // onRead /** * @brief Callback function to support a write request. * @param [in] pDescriptor The descriptor that is the source of the event. @@ -151,5 +168,12 @@ void NimBLEDescriptorCallbacks::onRead(NimBLEDescriptor* pDescriptor, NimBLEConn void NimBLEDescriptorCallbacks::onWrite(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) { NIMBLE_LOGD("NimBLEDescriptorCallbacks", "onWrite: default"); } // onWrite - +/** + * @brief Callback function to support a write request. + * @param [in] pDescriptor The descriptor that is the source of the event. + * @param [in] connInfo A reference to a NimBLEConnInfo instance containing the peer info. + */ +void NimBLEDescriptorCallbacks::onWrite(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo) { + NIMBLE_LOGD("NimBLEDescriptorCallbacks", "onWrite: default"); +} // onWrite #endif // CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL diff --git a/src/NimBLEDescriptor.h b/src/NimBLEDescriptor.h index ab755f9e..af5b45f2 100644 --- a/src/NimBLEDescriptor.h +++ b/src/NimBLEDescriptor.h @@ -50,7 +50,9 @@ class NimBLEDescriptor : public NimBLELocalValueAttribute { friend class NimBLEService; void setCharacteristic(NimBLECharacteristic* pChar); + void readEvent(NimBLEConnInfo& connInfo) override; void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) override; + void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) override; void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) override; NimBLEDescriptorCallbacks* m_pCallbacks{nullptr}; @@ -67,7 +69,9 @@ class NimBLEDescriptor : public NimBLELocalValueAttribute { class NimBLEDescriptorCallbacks { public: virtual ~NimBLEDescriptorCallbacks() = default; + virtual void onRead(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo); virtual void onRead(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args); + virtual void onWrite(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo); virtual void onWrite(NimBLEDescriptor* pDescriptor, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args); }; diff --git a/src/NimBLELocalValueAttribute.h b/src/NimBLELocalValueAttribute.h index f07065d8..254af25d 100644 --- a/src/NimBLELocalValueAttribute.h +++ b/src/NimBLELocalValueAttribute.h @@ -115,6 +115,7 @@ class NimBLELocalValueAttribute : public NimBLELocalAttribute, public NimBLEValu * @details This function is called by NimBLEServer when a read request is received. */ virtual void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) = 0; + virtual void readEvent(NimBLEConnInfo& connInfo) = 0; /** * @brief Callback function to support a write request. @@ -124,6 +125,7 @@ class NimBLELocalValueAttribute : public NimBLELocalAttribute, public NimBLEValu * @details This function is called by NimBLEServer when a write request is received. */ virtual void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) = 0; + virtual void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) = 0; /** * @brief Get a pointer to value of the attribute. diff --git a/src/NimBLEServer.cpp b/src/NimBLEServer.cpp index f1eb70e9..9a3d3d4e 100644 --- a/src/NimBLEServer.cpp +++ b/src/NimBLEServer.cpp @@ -634,6 +634,7 @@ int NimBLEServer::handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_ // or if this is an internal read (handle is NONE) NimBLEReadEventArgs eventArgs = NimBLEReadEventArgs(); if (ctxt->om->om_len > 0 && connHandle != BLE_HS_CONN_HANDLE_NONE) { + pAtt->readEvent(peerInfo); pAtt->readEvent(peerInfo, eventArgs); } @@ -676,6 +677,7 @@ int NimBLEServer::handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_ auto newData = std::string((char*)buf, len); NimBLEWriteEventArgs eventArgs = NimBLEWriteEventArgs(oldData, newData); + pAtt->writeEvent(buf, len, peerInfo); pAtt->writeEvent(buf, len, peerInfo, eventArgs); return 0; } From a18908a18b559c5a399bfa64676bd21b2d183168 Mon Sep 17 00:00:00 2001 From: hoeflich Date: Tue, 23 Sep 2025 07:16:52 +0200 Subject: [PATCH 10/10] removed unnecessary overloads --- src/NimBLECharacteristic.cpp | 8 -------- src/NimBLECharacteristic.h | 2 -- src/NimBLEDescriptor.cpp | 8 +------- src/NimBLEDescriptor.h | 2 -- src/NimBLELocalValueAttribute.h | 2 -- src/NimBLEServer.cpp | 2 -- 6 files changed, 1 insertion(+), 23 deletions(-) diff --git a/src/NimBLECharacteristic.cpp b/src/NimBLECharacteristic.cpp index e4de41d1..effe8244 100644 --- a/src/NimBLECharacteristic.cpp +++ b/src/NimBLECharacteristic.cpp @@ -322,19 +322,11 @@ bool NimBLECharacteristic::sendValue(const uint8_t* value, size_t length, bool i return true; } // sendValue -void NimBLECharacteristic::readEvent(NimBLEConnInfo& connInfo) { - m_pCallbacks->onRead(this, connInfo); -} // readEvent - void NimBLECharacteristic::readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) { m_pCallbacks->onRead(this, connInfo); m_pCallbacks->onRead(this, connInfo, args); } // readEvent -void NimBLECharacteristic::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) { - m_pCallbacks->onWrite(this, connInfo); -} // writeEvent - void NimBLECharacteristic::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) { m_pCallbacks->onWrite(this, connInfo); m_pCallbacks->onWrite(this, connInfo, args); diff --git a/src/NimBLECharacteristic.h b/src/NimBLECharacteristic.h index 9078f657..c8fff2f6 100644 --- a/src/NimBLECharacteristic.h +++ b/src/NimBLECharacteristic.h @@ -227,9 +227,7 @@ class NimBLECharacteristic : public NimBLELocalValueAttribute { friend class NimBLEService; void setService(NimBLEService* pService); - void readEvent(NimBLEConnInfo& connInfo) override; void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) override; - void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) override; void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) override; bool sendValue(const uint8_t* value, size_t length, diff --git a/src/NimBLEDescriptor.cpp b/src/NimBLEDescriptor.cpp index 02a50d13..b6169ece 100644 --- a/src/NimBLEDescriptor.cpp +++ b/src/NimBLEDescriptor.cpp @@ -123,11 +123,8 @@ std::string NimBLEDescriptor::toString() const { return res; } // toString -void NimBLEDescriptor::readEvent(NimBLEConnInfo& connInfo) { - m_pCallbacks->onRead(this, connInfo); -} // readEvent - void NimBLEDescriptor::readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) { + m_pCallbacks->onRead(this, connInfo); m_pCallbacks->onRead(this, connInfo, args); } // readEvent @@ -139,9 +136,6 @@ void NimBLEDescriptor::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnIn } } // writeEvent -void NimBLEDescriptor::writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) { - m_pCallbacks->onWrite(this, connInfo); -} // writeEvent /** * @brief Callback function to support a read request. * @param [in] pDescriptor The descriptor that is the source of the event. diff --git a/src/NimBLEDescriptor.h b/src/NimBLEDescriptor.h index af5b45f2..99216ef1 100644 --- a/src/NimBLEDescriptor.h +++ b/src/NimBLEDescriptor.h @@ -50,9 +50,7 @@ class NimBLEDescriptor : public NimBLELocalValueAttribute { friend class NimBLEService; void setCharacteristic(NimBLECharacteristic* pChar); - void readEvent(NimBLEConnInfo& connInfo) override; void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) override; - void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) override; void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) override; NimBLEDescriptorCallbacks* m_pCallbacks{nullptr}; diff --git a/src/NimBLELocalValueAttribute.h b/src/NimBLELocalValueAttribute.h index 254af25d..f07065d8 100644 --- a/src/NimBLELocalValueAttribute.h +++ b/src/NimBLELocalValueAttribute.h @@ -115,7 +115,6 @@ class NimBLELocalValueAttribute : public NimBLELocalAttribute, public NimBLEValu * @details This function is called by NimBLEServer when a read request is received. */ virtual void readEvent(NimBLEConnInfo& connInfo, NimBLEReadEventArgs& args) = 0; - virtual void readEvent(NimBLEConnInfo& connInfo) = 0; /** * @brief Callback function to support a write request. @@ -125,7 +124,6 @@ class NimBLELocalValueAttribute : public NimBLELocalAttribute, public NimBLEValu * @details This function is called by NimBLEServer when a write request is received. */ virtual void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo, NimBLEWriteEventArgs& args) = 0; - virtual void writeEvent(const uint8_t* val, uint16_t len, NimBLEConnInfo& connInfo) = 0; /** * @brief Get a pointer to value of the attribute. diff --git a/src/NimBLEServer.cpp b/src/NimBLEServer.cpp index 9a3d3d4e..f1eb70e9 100644 --- a/src/NimBLEServer.cpp +++ b/src/NimBLEServer.cpp @@ -634,7 +634,6 @@ int NimBLEServer::handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_ // or if this is an internal read (handle is NONE) NimBLEReadEventArgs eventArgs = NimBLEReadEventArgs(); if (ctxt->om->om_len > 0 && connHandle != BLE_HS_CONN_HANDLE_NONE) { - pAtt->readEvent(peerInfo); pAtt->readEvent(peerInfo, eventArgs); } @@ -677,7 +676,6 @@ int NimBLEServer::handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_ auto newData = std::string((char*)buf, len); NimBLEWriteEventArgs eventArgs = NimBLEWriteEventArgs(oldData, newData); - pAtt->writeEvent(buf, len, peerInfo); pAtt->writeEvent(buf, len, peerInfo, eventArgs); return 0; }