NimBLE-Arduino 2.1.2
|
Nearly all of the codebase has been updated and changed under the surface, which has greatly reduced the resource use of the library and improved it's performance. To be able to support these changes it required various API changes and additions.
This guide will help you migrate your application code to use the new API.
The changes listed here are only the required changes that must be made, and a short overview of options for migrating existing applications.
NimBLEScan::start(10000); // 10 seconds
NimBLESecurity
class has been removed it's functionality has been merged into the NimBLEServer
and NimBLEClient
classes.NimBLEConnInfo
and the ble_gap_conn_desc
parameter has been replaced with NimBLEConnInfo
in the functions that received it. onAuthenticationComplete(ble_gap_conn_desc* desc)
signature is now onAuthenticationComplete(NimBLEConnInfo& connInfo)
and NimBLEServerCallbacks::onConnect(NimBLEServer* pServer)
signature is now NimBLEServerCallbacks::onConnect(NimBLEServer* pServer, NimBLEConnInfo& connInfo)
. NimBLEDevice::startSecurity
now returns a bool
, true on success, instead of an int to be consistent with the rest of the library.NimBLEDevice::getInitialized
renamed to NimBLEDevice::isInitialized
.NimBLEDevice::setPower
no longer takes the esp_power_level_t
and esp_ble_power_type_t
, instead only an integer value in dbm units is accepted, so instead of ESP_PWR_LVL_P9
an int8_t
value of 9
would be used for the same result.NimBLEDevice::setOwnAddrType
no longer takes a bool nrpa
parameter, the random address type will be determined by the bits the in the address instead. NimBLEDevice::setOwnAddr
first before calling NimBLEDevice::setOwnAddrType
.NimBLEDevice::getClientListSize
replaced with NimBLEDevice::getCreatedClientCount
.NimBLEDevice::getClientList
was removed and NimBLEDevice::getConnectedClients
can be used instead which returns a std::vector
of pointers to the connected client instances. This was done because internally the clients are managed in a std::array
which replaced the 'std::list`. NimBLEAddress comparisons have changed to now consider the address type. If 2 address values are the same but the type is different then they are no longer considered equal. This is a correction to the 1.x version which did not consider the type, whereas the BLE specification states:
Whenever two device addresses are compared, the comparison shall include the device address type (i.e. if the two addresses have different types, they are different even if the two 48-bit addresses are the same).
This means that if in your application you create a NimBLEAddress instance and are comparing a scan result or some other address created by the library and you did not define the address type then the comparison may fail. The default address type is public 0
, whereas many devices use a random 1
address type. If you experience this issue please create your address instances with the address type specified, i.e. NimBLEAddress address("11:22:33:44:55:66", TYPE_HERE)
NimBLEAddress::getNative
has been removed and replaced with NimBLEAddress::getBase
. This returns a pointer to const ble_addr_t
instead of a pointer to the address value that getNative
did. The value can be accessed through this struct via ble_addr_t.value
and type is in ble_addr_t.type
.
NimBLEUUID::getNative
method replaced with NimBLEUUID::getBase
which returns a read-only pointer to the underlying ble_uuid_t
struct.NimBLEUUID
; msbFirst
parameter has been removed from constructor, caller should reverse the data first or call the new NimBLEUUID::reverseByteOrder
method after. NimBLEServer::disconnect
now returns bool
, true = success, instead of int
to be consistent with the rest of the library.NimBLEServerCallbacks::onMTUChanged
renamed to NimBLEServerCallbacks::onMTUChange
to be consistent with the client callback.NimBLEServer::getPeerIDInfo
renamed to NimBLEServer::getPeerInfoByHandle
to better describe it's use. NimBLEService::getCharacteristics
now returns a const std::vector<NimBLECharacteristic*>&
instead of a copy of the vector. NimBLECharacteristic::notify
no longer takes a bool is_notification
parameter, instead NimBLECharacteristic::indicate
should be called to send indications. NimBLECharacteristicCallbacks::onNotify
removed as unnecessary, the library does not call notify without app input.NimBLECharacteristicCallbacks::onStatus
No longer takes a status
parameter, refer to the return code parameter for success/failure. NimBLEServerCallbacks::onPassKeyRequest
has been renamed to NimBLEServerCallbacks::onPassKeyDisplay
as it is intended that the device should display the passkey for the client to enter.NimBLEServerCallbacks::onAuthenticationComplete
now takes a NimBLEConnInfo&
parameter. NimBLEClient::getServices
now returns a const reference to std::vector<NimBLERemoteService*> instead of a pointer to the internal vector.NimBLEClient::getConnId
has been renamed to getConnHandle
to be consistent with bluetooth terminology.NimBLEClient::disconnect
now returns a bool
, true on success, instead of an int
to be consistent with the rest of the library. NimBLEClientCallbacks::onConfirmPIN
renamed to NimBLEClientCallbacks::onConfirmPasskey
, takes a NimBLEConnInfo&
parameter and no longer returns a value. This should be used to prompt a user to confirm the pin on the display (YES/NO) after which the response should be sent with NimBLEDevice::injectConfirmPasskey
.NimBLEClientCallbacks::onPassKeyRequest
has been changed to NimBLEClientCallbacks::onPassKeyEntry
which takes a NimBLEConnInfo&
parameter and no longer returns a value. Instead of returning a value this callback should prompt a user to enter a passkey number which is sent later via NimBLEDevice::injectPassKey
. NimBLERemoteService::getCharacteristics
now returns a const std::vector<NimBLERemoteCharacteristic*>&
instead of non-const std::vector<NimBLERemoteCharacteristic*>*
. NimBLERemoteCharacteristic::getRemoteService
now returns a const NimBLERemoteService*
instead of non-const.NimBLERemoteCharacteristic::registerForNotify
, has been removed, the application should use NimBLERemoteCharacteristic::subscribe
and NimBLERemoteCharacteristic::unSubscribe
. `NimBLERemoteCharacteristic::readUInt32` `NimBLERemoteCharacteristic::readUInt16` `NimBLERemoteCharacteristic::readUInt8` `NimBLERemoteCharacteristic::readFloat`Have been removed, instead the application should use
NimBLERemoteCharacteristic::readValue<type\>
. NimBLEScan::stop
will no longer call the onScanEnd
callback as the caller should know it has been stopped either by initiating a connection or calling this function itself.NimBLEScan::clearDuplicateCache
has been removed as it was problematic and only for the original esp32. The application should stop and start the scanner for the same effect or call NimBLEScan::start
with the new bool restart
parameter set to true.NimBLEScanResults::getDevice
methods now return const NimBLEAdvertisedDevice*
instead of a non-const pointer.NimBLEScanResults
iterators are now const_iterator
.The callback parameter for NimBLEScan::start
has been removed and the blocking overload of NimBLEScan::start
has been replaced by an overload of NimBLEScan::getResults
with the same parameters.
So if your code prior was this:
NimBLEScanResults results = pScan->start(10, false);
It should now be:
NimBLEScanResults results = pScan->getResults(10000, false); // note the time is now in milliseconds
NimBLEAdvertisedDeviceCallbacks
Has been replaced by NimBLEScanCallbacks
which contains the following methods:NimBLEScanCallbacks::onResult
, functions the same as the old NimBLEAdvertisedDeviceCallbacks::onResult
but now takes aa const NimBLEAdvertisedDevice*
instead of non-const.NimBLEScanCallbacks::onScanEnd
, replaces the scanEnded callback passed to NimBLEScan::start
and now takes a const NimBLEScanResults&
and int reason
parameter.NimBLEScanCallbacks::onDiscovered
, This is called immediately when a device is first scanned, before any scan response data is available and takes a const NimBLEAdvertisedDevice*
parameter. NimBLEAdvertisedDevice::hasRSSI
removed as redundant, RSSI is always available.NimBLEAdvertisedDevice::getPayload
now returns const std::vector<uint8_t>&
instead of a pointer to internal memory.NimBLEAdvertisedDevice
Timestamp removed, if needed then the app should track the time from the callback. NimBLEAdvertising::setMinPreferred
and NimBLEAdvertising::setMaxPreferred
have been removed and replaced by NimBLEAdvertising::setPreferredParams
which takes both the min and max parameters.NimBLEAdvertising::setName
and NimBLEAdvertising::addTxPower
.NimBLEAdvertising::setAdvertisementType
has been renamed to NimBLEAdvertising::setConnectableMode
to better reflect it's function.NimBLEAdvertising::setScanResponse
has been renamed to NimBLEAdvertising::enableScanResponse
to better reflect it's function.NimBLEAdvertising
; Scan response is no longer enabled by default.NimBLEAdvertising::start
No longer takes a callback pointer parameter, instead the new method NimBLEAdvertising::setAdvertisingCompleteCallback
should be used to set the callback function. NimBLEEddystoneTLM::setTemp
now takes an int16_t
parameter instead of float to be friendly to devices without floating point support.NimBLEEddystoneTLM::getTemp
now returns int16_t
to work with devices that don't have floating point support.NimBLEEddystoneTLM::setData
now takes a reference to * NimBLEEddystoneTLM::BeaconData
instead of std::string
.NimBLEEddystoneTLM::getData
now returns a reference to * NimBLEEddystoneTLM::BeaconData
instead of std::string
.NimBLEBeacon::setData
now takes const NimBLEBeacon::BeaconData&
instead of std::string
.NimBLEBeacon::getData
now returns const NimBLEBeacon::BeaconData&
instead of std::string
. NimBLEUtils::dumpGapEvent
function removed.NimBLEUtils::buildHexData
replaced with NimBLEUtils::dataToHexString
, which returns a std::string
containing the hex string.