mirror of
https://github.com/h2zero/esp-nimble-cpp.git
synced 2024-11-22 13:10:55 +01:00
Allow subscribing to characteristics if CCCD does not exist on peer device.
- This changes NimBLERemoteCharacteristic::subscribe and NimBLERemoteCharacteristic::registerForNotify functionality such that the notification callback will always be set. Additionally these methods will always return true unless the descriptor write fails. This allows for notifications to trigger the callback when a peer device sends them and does not have a CCCD. Also it should not be flagged as a failure if the CCCD does not exist. It should only be flagged when an acutal write operation fails.
This commit is contained in:
parent
22d5564d04
commit
36317e18db
2 changed files with 10 additions and 7 deletions
|
@ -20,6 +20,9 @@ to obtain information about the disconnected client.
|
||||||
- Conditional checks in `nimconfig.h` for command line defined macros to support platformio config settings.
|
- Conditional checks in `nimconfig.h` for command line defined macros to support platformio config settings.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
- `NimBLERemoteCharacteristic::subscribe` and `NimBLERemoteCharacteristic::registerForNotify` will now set the callback
|
||||||
|
regardless of the existance of the CCCD and return true unless the descriptor write operation failed.
|
||||||
|
|
||||||
- Advertising tx power level is now sent in the advertisement packet instead of scan response.
|
- 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)
|
- `NimBLEScan` When the scan ends the scan stopped flag is now set before calling the scan complete callback (if used)
|
||||||
|
|
|
@ -507,19 +507,19 @@ int NimBLERemoteCharacteristic::onReadCB(uint16_t conn_handle,
|
||||||
* @param [in] notifyCallback A callback to be invoked for a notification.
|
* @param [in] notifyCallback A callback to be invoked for a notification.
|
||||||
* @param [in] response If write response required set this to true.
|
* @param [in] response If write response required set this to true.
|
||||||
* If NULL is provided then no callback is performed.
|
* If NULL is provided then no callback is performed.
|
||||||
* @return true if successful.
|
* @return false if writing to the descriptor failed.
|
||||||
*/
|
*/
|
||||||
bool NimBLERemoteCharacteristic::setNotify(uint16_t val, notify_callback notifyCallback, bool response) {
|
bool NimBLERemoteCharacteristic::setNotify(uint16_t val, notify_callback notifyCallback, bool response) {
|
||||||
NIMBLE_LOGD(LOG_TAG, ">> setNotify(): %s, %02x", toString().c_str(), val);
|
NIMBLE_LOGD(LOG_TAG, ">> setNotify(): %s, %02x", toString().c_str(), val);
|
||||||
|
|
||||||
|
m_notifyCallback = notifyCallback;
|
||||||
|
|
||||||
NimBLERemoteDescriptor* desc = getDescriptor(NimBLEUUID((uint16_t)0x2902));
|
NimBLERemoteDescriptor* desc = getDescriptor(NimBLEUUID((uint16_t)0x2902));
|
||||||
if(desc == nullptr) {
|
if(desc == nullptr) {
|
||||||
NIMBLE_LOGE(LOG_TAG, "<< setNotify(): Could not get descriptor");
|
NIMBLE_LOGW(LOG_TAG, "<< setNotify(): Callback set, CCCD not found");
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_notifyCallback = notifyCallback;
|
|
||||||
|
|
||||||
NIMBLE_LOGD(LOG_TAG, "<< setNotify()");
|
NIMBLE_LOGD(LOG_TAG, "<< setNotify()");
|
||||||
|
|
||||||
return desc->writeValue((uint8_t *)&val, 2, response);
|
return desc->writeValue((uint8_t *)&val, 2, response);
|
||||||
|
@ -532,7 +532,7 @@ bool NimBLERemoteCharacteristic::setNotify(uint16_t val, notify_callback notifyC
|
||||||
* @param [in] notifyCallback A callback to be invoked for a notification.
|
* @param [in] notifyCallback A callback to be invoked for a notification.
|
||||||
* @param [in] response If true, require a write response from the descriptor write operation.
|
* @param [in] response If true, require a write response from the descriptor write operation.
|
||||||
* If NULL is provided then no callback is performed.
|
* If NULL is provided then no callback is performed.
|
||||||
* @return true if successful.
|
* @return false if writing to the descriptor failed.
|
||||||
*/
|
*/
|
||||||
bool NimBLERemoteCharacteristic::subscribe(bool notifications, notify_callback notifyCallback, bool response) {
|
bool NimBLERemoteCharacteristic::subscribe(bool notifications, notify_callback notifyCallback, bool response) {
|
||||||
if(notifications) {
|
if(notifications) {
|
||||||
|
@ -546,7 +546,7 @@ bool NimBLERemoteCharacteristic::subscribe(bool notifications, notify_callback n
|
||||||
/**
|
/**
|
||||||
* @brief Unsubscribe for notifications or indications.
|
* @brief Unsubscribe for notifications or indications.
|
||||||
* @param [in] response bool if true, require a write response from the descriptor write operation.
|
* @param [in] response bool if true, require a write response from the descriptor write operation.
|
||||||
* @return true if successful.
|
* @return false if writing to the descriptor failed.
|
||||||
*/
|
*/
|
||||||
bool NimBLERemoteCharacteristic::unsubscribe(bool response) {
|
bool NimBLERemoteCharacteristic::unsubscribe(bool response) {
|
||||||
return setNotify(0x00, nullptr, response);
|
return setNotify(0x00, nullptr, response);
|
||||||
|
|
Loading…
Reference in a new issue