NimBLEService::start is deprecated; services are now added when the server starts.
+
NimBLEHIDDevice::startServices() is deprecated; services are now added when the server starts.
+
[2.3.4] 2025-12-27
-
+
Fixed
Disconnect event not finding the client by address in some cases, use the connection handle instead.
@@ -103,13 +136,13 @@ Fixed
Attribute values will now consider type size when using a container.
Descriptor searching will now correctly stop at the end handle of the characteristic.
-
+
Changed
Build conditionals now use MYNEWT_VAL_ macros instead of CONFIG_ macros where applicable.
Sending of indications/notifications has been refactored for greater efficiency and tracks client subscription state locally instead uof relying on the stack.
-NimBLEScanCallbacks::onScanEnd, replaces the scanEnded callback passed toNimBLEScan::startand now takes aconst NimBLEScanResults&andint reasonparameter.
-NimBLEScanCallbacks::onDiscovered, This is called immediately when a device is first scanned, before any scan response data is available and takes aconst NimBLEAdvertisedDevice*parameter. -NimBLEScan::stopwill no longer call theonScanEndcallback as the caller should know its been stopped when this is called. -NimBLEScan::clearDuplicateCachehas been removed as it was problematic and only for the esp32. Stop and start the scanner for the same effect. -NimBLEScanResults::getDevicemethods now returnconst NimBLEAdvertisedDevice*. -NimBLEScanResultsiterators are nowconst_iterator. -NimBLEAdvertisedDevice::hasRSSIremoved as redundant, RSSI is always available. -NimBLEAdvertisedDevice::getPayloadnow returnsconst std::vector<uint8_t>instead of a pointer to internal memory. -NimBLEAdvertisedDeviceTimestamp removed, if needed then the app should track the time from the callback. -NimBLECharacteristic::notifyno longer takes abool is_notificationparameter, insteadindicate()should be called to send indications. -NimBLECharacteristicCallbacks::onNotifyremoved as unnecessary, the library does not call notify without app input. -NimBLECharacteristicCallbacks::onStatusNo longer takes astatusparameter, refer to the return code for success/failure. -NimBLERemoteCharacteristic::getRemoteServicenow returns aconst NimBLERemoteService*instead of non-const. -NimBLERemoteCharacteristic::readUInt32Has been removed. -NimBLERemoteCharacteristic::readUInt16Has been removed. -NimBLERemoteCharacteristic::readUInt8Has been removed. -NimBLERemoteCharacteristic::readFloatHas been removed. -NimBLERemoteCharacteristic::registerForNotifyHas been removed. -NimBLERemoteService::getCharacteristicsnow returns aconst std::vector<NimBLERemoteCharacteristic*>&instead of non-conststd::vector<NimBLERemoteCharacteristic*>*. -NimBLERemoteService::getValuenow returnsNimBLEAttValueinstead ofstd::string. -NimBLEService::getCharacteristicsnow returns aconst std::vector<NimBLECharacteristic*>&instead of std::vector<NimBLECharacteristic *>. -NimBLEUUID::getNativemethod replaced withNimBLEUUID::getBasewhich returns a read-only pointer to the underlyingble_uuid_tstruct. -NimBLEUUID;msbFirstparameter has been removed from constructor, caller should reverse the data first or call the newreverseByteOrdermethod after. -NimBLEAddressconstructor; default value for thetypeparameter removed, caller should know the address type and specify it. -NimBLEAddress::getNativereplaced withNimBLEAddress::getBaseand now returns a pointer toconst ble_addr_tinstead of a pointer to the address value. -NimBLEAddress::equalsmethod andNimBLEAddress::== operatorwill now also test if the address types are the same. -NimBLEUtils::dumpGapEventfunction removed. -NimBLEUtils::buildHexDatareplaced withNimBLEUtils::dataToHexString, which returns astd::stringcontaining the hex string. -NimBLEEddystoneTLM::setTempnow takes anint16_tparameter instead of float to be friendly to devices without floating point support. -NimBLEEddystoneTLM::getTempnow returnsint16_tto work with devices that don't have floating point support. -NimBLEEddystoneTLM::setDatanow takes a reference to *NimBLEEddystoneTLM::BeaconDatainstead ofstd::string. -NimBLEEddystoneTLM::getDatanow returns a reference to *NimBLEEddystoneTLM::BeaconDatainstead ofstd::string. -NimBLEBeacon::setDatanow takesconst NimBLEBeacon::BeaconData&instead ofstd::string. -NimBLEBeacon::getDatanow returnsconst NimBLEBeacon::BeaconData&instead ofstd::string. -NimBLEHIDDevice::reportMaprenamed toNimBLEHIDDevice::getReportMap. -NimBLEHIDDevice::hidControlrenamed toNimBLEHIDDevice::getHidControl. -NimBLEHIDDevice::inputReportrenamed toNimBLEHIDDevice::getInputReport. -NimBLEHIDDevice::outputReportrenamed toNimBLEHIDDevice::getOutputReport. -NimBLEHIDDevice::featureReportrenamed toNimBLEHIDDevice::getFeatureReport. -NimBLEHIDDevice::protocolModerenamed toNimBLEHIDDevice::getProtocolMode. -NimBLEHIDDevice::bootOutputrenamed toNimBLEHIDDevice::getBootOutput. -NimBLEHIDDevice::pnprenamed toNimBLEHIDDevice::setPnp. -NimBLEHIDDevice::hidInforenamed toNimBLEHIDDevice::setHidInfo. -NimBLEHIDDevice::deviceInforenamed toNimBLEHIDDevice::getDeviceInfoService. -NimBLEHIDDevice::hidServicerenamed toNimBLEHIDDevice::getHidService. -NimBLEHIDDevice::batteryServicerenamed toNimBLEHIDDevice::getBatteryService`.
-
+
Fixed
NimBLEDevice::getPower and NimBLEDevice::getPowerLevel bug worked around for the esp32s3 and esp32c3.
@@ -347,7 +380,7 @@ Fixed
Fixed building with esp-idf and Arduino component.
Workaround for esp32s3 and esp32c3 not returning the correct txPower with some IDF versions.
-
+
Changed
NimBLEClient::secureConnection now takes an additional parameter bool async, if true, will send the secure command and return immediately with a true value for successfully sending the command, else false. This allows for asynchronously securing a connection.
Revert previous change that forced writing with response when subscribing in favor of allowing the application to decide.
-
+
Added
Added NimBLEHIDDevice::batteryLevel.
@@ -470,7 +503,7 @@ Added
[1.4.0] - 2022-07-31
-
+
Fixed
Fixed missing data from long notification values.
@@ -478,7 +511,7 @@ Fixed
Prevent a potential crash when retrieving characteristics from a service if the result was successful but no characteristics found.
logs/typos.
-
+
Changed
AD flags are no longer set in the advertisements of non-connectable beacons, freeing up 3 bytes of advertisement room.
@@ -487,7 +520,7 @@ Changed
NimBLEClient::discoverAttributes now returns a bool value to indicate success/failure.
Scan result callbacks are no longer called when the scan response data is updated in order to reduce duplicates.
-
+
Added
Preliminary support for non-esp devices, NRF51 and NRF52 devices supported with n-able arduino core
@@ -497,12 +530,12 @@ Added
[1.3.3] - 2022-02-15
-
+
Changed
If attribute retrieval fails with a "not found" try again with the 16 bit version if a 128 bit base uuid is used.
-
+
Fixed
Memory leak when deleting client instance.
@@ -512,7 +545,7 @@ Fixed
[1.3.2] - 2022-01-15
-
+
Fixed
Initialize advertising complete callback in NimBLEAdvertising constructor.
@@ -521,7 +554,7 @@ Fixed
Fix missing data in notifications when using a large MTU size and more than 270 bytes of data are sent.
Workaround fix added for cases when the task notification value is not cleared, causing various functions that should block not to block.
-
+
Added
NimBLEClient::getLastError : Gets the error code of the last function call that produces a return code from the stack.
@@ -531,7 +564,7 @@ Added
NimBLEClient::setDataLen and NimBLEServer::setDataLen: Data length extension support (IDF version >= 4.3.2 only)
Config option to set logging level for esp-nimble-cpp
-
+
Changed
Critical section calls now use the NimBLE API instead of FreeRTOS directly. This removes the need for a portMUX_TYPE variable in the class definitions.
@@ -539,14 +572,14 @@ Changed
[1.3.1] - 2021-08-04
-
+
Fixed
Corrected a compiler/linker error when an application or a library uses bluetooth classic due to the redefinition of btInUse.
[1.3.0] - 2021-08-02
-
+
Added
NimBLECharacteristic::removeDescriptor: Dynamically remove a descriptor from a characteristic. Takes effect after all connections are closed and sends a service changed indication.
NimBLEScan::clearDuplicateCache: This can be used to reset the cache of advertised devices so they will be immediately discovered again.
-
+
Changed
FreeRTOS files have been removed as they are not used by the library.
@@ -580,7 +613,7 @@ Changed
Excess logging and some asserts removed.
Use ESP_LOGx macros to enable using local log level filtering.
-
+
Fixed
NimBLECharacteristicCallbacks::onSubscribe Is now called after the connection is added to the vector.
@@ -594,7 +627,7 @@ Fixed
[1.2.0] - 2021-02-08
-
+
Added
NimBLECharacteristic::getDescriptorByHandle: Return the BLE Descriptor for the given handle.
@@ -632,7 +665,7 @@ Added
-
+
Changed
nimconfig.h (Arduino) is now easier to use.
@@ -643,14 +676,14 @@ Changed
NimBLEScan Now uses the controller duplicate filter.
NimBLEAdvertisedDevice Has been refactored to store the complete advertisement payload and no longer parses the data from each advertisement. Instead the data will be parsed on-demand when the user application asks for specific data.
-
+
Fixed
NimBLEHIDDevice Characteristics now use encryption, this resolves an issue with communicating with devices requiring encryption for HID devices.
NimBLEServerCallbacks::onDisconnect overloaded callback added to provide a ble_gap_conn_desc parameter for the application to obtain information about the disconnected client.
Conditional checks in nimconfig.h for command line defined macros to support platformio config settings.
Advertising tx power level is now sent in the advertisement packet instead of scan response.
NimBLEScan When the scan ends the scan stopped flag is now set before calling the scan complete callback (if used) this allows the starting of a new scan from the callback function.
-
+
Fixed
Sometimes NimBLEClient::connect would hang on the task block if no event arrived to unblock. A time limit has been added to timeout appropriately.
@@ -691,7 +724,7 @@ Fixed
[1.0.2] - 2020-09-13
-
+
Changed
NimBLEAdvertising::start Now takes 2 optional parameters, the first is the duration to advertise for (in seconds), the second is a callback that is invoked when advertising ends and takes a pointer to a NimBLEAdvertising object (similar to the NimBLEScan::start API).