You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
If the peripheral sketch with a subscribeable characteristic closes the connection with the central calling the BLE.disconnect() all subsequent subscriptions, after the first connection, are not notified and the characteristic stays always as "subscribed".
Solution
In this PR the characteristic CCCD value is cleared when the BLE.disconnect() is called for resetting the characteristic subscription status and allowing new subscriptions.
Sketches for reproducing the problem
Central
#include<ArduinoBLE.h>voidsetup() {
Serial.begin(9600);
while (!Serial);
// initialize the Bluetooth® Low Energy hardware
BLE.begin();
BLE.scanForUuid("19B10000-E8F2-537E-4F6C-D104768A1214");
}
voidloop() {
// put your main code here, to run repeatedly:
BLEDevice peripheral = BLE.available();
if (peripheral) {
// discovered a peripheral, print out address, local name, and advertised service
Serial.print("Found ");
Serial.print(peripheral.address());
Serial.print(" '");
Serial.print(peripheral.localName());
Serial.print("' ");
Serial.print(peripheral.advertisedServiceUuid());
Serial.println();
// stop scanning
BLE.stopScan();
controlLed(peripheral);
delay(10000);
// peripheral disconnected, start scanning again
BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}
}
voidcontrolLed(BLEDevice peripheral) {
// connect to the peripheral
Serial.println("Connecting ...");
if (peripheral.connect()) {
Serial.println("Connected");
} else {
Serial.println("Failed to connect!");
return;
}
// discover peripheral attributes
Serial.println("Discovering attributes ...");
if (peripheral.discoverAttributes()) {
Serial.println("Attributes discovered");
} else {
Serial.println("Attribute discovery failed!");
peripheral.disconnect();
return;
}
BLECharacteristic byteCharacteristic = peripheral.characteristic("19B10001-E8F2-537E-4F6C-D104768A1214");
if (!byteCharacteristic) {
Serial.println("Peripheral does not have LED characteristic!");
peripheral.disconnect();
return;
} elseif (!byteCharacteristic.canSubscribe()) {
Serial.println("Peripheral does not have a writable LED characteristic!");
peripheral.disconnect();
return;
} elseif (!byteCharacteristic.subscribe()) {
Serial.println("subscription failed!");
peripheral.disconnect();
return;
} else {
Serial.println("Subscribed");
}
while (peripheral.connected()) {
// while the peripheral is connected// check if the value of the simple key characteristic has been updatedif (byteCharacteristic.valueUpdated()) {
// yes, get the value, characteristic is 1 byte so use byte value
byte value = 0;
byteCharacteristic.readValue(value);
Serial.print("received: ");
Serial.println(value, HEX);
}
}
Serial.println("Disconnected");
}
Peripheral
#include<ArduinoBLE.h>
BLEService testService("19B10000-E8F2-537E-4F6C-D104768A1214");
BLEByteCharacteristic byteCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEIndicate | BLEWrite);
volatilebool disconnect = false;
voidbyteRead(BLEDevice central, BLECharacteristic characteristic){
Serial.println("Characteristic subscribed, sending data");
byte c = 0x01;
int written = byteCharacteristic.writeValue(c);
disconnect=true;
}
voidsetup() {
Serial.begin(9600);
while (!Serial);
// put your setup code here, to run once:if (!BLE.begin()) {
Serial.println("starting Bluetooth® Low Energy module failed!");
while (1);
}
// set advertised local name and service UUID:if(!BLE.setLocalName("TEST-LOCAL-NAME")){
Serial.println("error setting the local name");
}
byteCharacteristic.setEventHandler(BLESubscribed, byteRead);
BLE.setAdvertisedService(testService);
// add the characteristic to the service
testService.addCharacteristic(byteCharacteristic);
// add service
BLE.addService(testService);
// start advertising
BLE.advertise();
Serial.println("BLE Peripheral");
}
voidloop() {
// put your main code here, to run repeatedly:if(disconnect){
BLE.disconnect();
disconnect = false;
Serial.println("disconnected");
}
BLE.poll();
}
Logs
Here the logs of the current behaviour. Central
11:18:48.793 -> Found 34:94:54:27:05:66 'TEST-LOCAL-NAME' 19b10000-e8f2-537e-4f6c-d104768a1214
11:18:48.829 -> Connecting ...
11:18:48.897 -> Connected
11:18:48.897 -> Discovering attributes ...
11:18:49.291 -> Attributes discovered
11:18:49.330 -> Subscribed
11:18:49.330 -> received: 1
11:18:49.330 -> Disconnected
//End of the first run
11:18:59.416 -> Found 34:94:54:27:05:66 'TEST-LOCAL-NAME' 19b10000-e8f2-537e-4f6c-d104768a1214
11:18:59.448 -> Connecting ...
11:18:59.527 -> Connected
11:18:59.527 -> Discovering attributes ...
11:18:59.948 -> Attributes discovered
11:18:59.948 -> Subscribed
//Has never received new data since the peripheral never sends it
Peripheral
11:18:27.926 -> BLE Peripheral
11:18:49.291 -> Characteristic subscribed, sending data
11:18:49.330 -> disconnected
// Note that the subscribed event at 11:18:59.948 has never been notified to the sketch
examples/Peripheral/Advertising/RawDataAdvertising RAM for global variables
%
examples/Peripheral/BatteryMonitor flash
%
examples/Peripheral/BatteryMonitor RAM for global variables
%
examples/Peripheral/ButtonLED flash
%
examples/Peripheral/ButtonLED RAM for global variables
%
examples/Peripheral/CallbackLED flash
%
examples/Peripheral/CallbackLED RAM for global variables
%
examples/Peripheral/EncryptedBatteryMonitor flash
%
examples/Peripheral/EncryptedBatteryMonitor RAM for global variables
%
examples/Peripheral/LED flash
%
examples/Peripheral/LED RAM for global variables
%
arduino:mbed_nano:nano33ble
-64
-0.01
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
arduino:mbed_nano:nanorp2040connect
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
arduino:megaavr:uno2018:mode=on
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
arduino:renesas_uno:unor4wifi
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
arduino:samd:mkrwifi1010
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
arduino:samd:nano_33_iot
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
Click for full report CSV
Board,examples/Central/LedControl<br>flash,%,examples/Central/LedControl<br>RAM for global variables,%,examples/Central/PeripheralExplorer<br>flash,%,examples/Central/PeripheralExplorer<br>RAM for global variables,%,examples/Central/Scan<br>flash,%,examples/Central/Scan<br>RAM for global variables,%,examples/Central/ScanCallback<br>flash,%,examples/Central/ScanCallback<br>RAM for global variables,%,examples/Central/SensorTagButton<br>flash,%,examples/Central/SensorTagButton<br>RAM for global variables,%,examples/Peripheral/Advertising/EnhancedAdvertising<br>flash,%,examples/Peripheral/Advertising/EnhancedAdvertising<br>RAM for global variables,%,examples/Peripheral/Advertising/RawDataAdvertising<br>flash,%,examples/Peripheral/Advertising/RawDataAdvertising<br>RAM for global variables,%,examples/Peripheral/BatteryMonitor<br>flash,%,examples/Peripheral/BatteryMonitor<br>RAM for global variables,%,examples/Peripheral/ButtonLED<br>flash,%,examples/Peripheral/ButtonLED<br>RAM for global variables,%,examples/Peripheral/CallbackLED<br>flash,%,examples/Peripheral/CallbackLED<br>RAM for global variables,%,examples/Peripheral/EncryptedBatteryMonitor<br>flash,%,examples/Peripheral/EncryptedBatteryMonitor<br>RAM for global variables,%,examples/Peripheral/LED<br>flash,%,examples/Peripheral/LED<br>RAM for global variables,%
arduino:mbed_nano:nano33ble,-64,-0.01,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0
arduino:mbed_nano:nanorp2040connect,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0
arduino:megaavr:uno2018:mode=on,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0
arduino:renesas_uno:unor4wifi,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0
arduino:samd:mkrwifi1010,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0
arduino:samd:nano_33_iot,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0
Hi @fabik111. Thanks for your pull request. Please disregard the failed spell check.
This is a spurious failure caused by bit rot in the antiquated infrastructure used for that check, nothing to do with the changes you propose here. The failed check won't block the reviewers from merging your PR and we'll be sure to fix the broken spell check system separately ASAP.
examples/Peripheral/Advertising/RawDataAdvertising RAM for global variables
%
examples/Peripheral/BatteryMonitor flash
%
examples/Peripheral/BatteryMonitor RAM for global variables
%
examples/Peripheral/ButtonLED flash
%
examples/Peripheral/ButtonLED RAM for global variables
%
examples/Peripheral/CallbackLED flash
%
examples/Peripheral/CallbackLED RAM for global variables
%
examples/Peripheral/EncryptedBatteryMonitor flash
%
examples/Peripheral/EncryptedBatteryMonitor RAM for global variables
%
examples/Peripheral/LED flash
%
examples/Peripheral/LED RAM for global variables
%
arduino:mbed_nano:nano33ble
-64
-0.01
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
arduino:mbed_nano:nanorp2040connect
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
arduino:megaavr:uno2018:mode=on
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
arduino:renesas_uno:unor4wifi
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
arduino:samd:mkrwifi1010
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
arduino:samd:nano_33_iot
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
Click for full report CSV
Board,examples/Central/LedControl<br>flash,%,examples/Central/LedControl<br>RAM for global variables,%,examples/Central/PeripheralExplorer<br>flash,%,examples/Central/PeripheralExplorer<br>RAM for global variables,%,examples/Central/Scan<br>flash,%,examples/Central/Scan<br>RAM for global variables,%,examples/Central/ScanCallback<br>flash,%,examples/Central/ScanCallback<br>RAM for global variables,%,examples/Central/SensorTagButton<br>flash,%,examples/Central/SensorTagButton<br>RAM for global variables,%,examples/Peripheral/Advertising/EnhancedAdvertising<br>flash,%,examples/Peripheral/Advertising/EnhancedAdvertising<br>RAM for global variables,%,examples/Peripheral/Advertising/RawDataAdvertising<br>flash,%,examples/Peripheral/Advertising/RawDataAdvertising<br>RAM for global variables,%,examples/Peripheral/BatteryMonitor<br>flash,%,examples/Peripheral/BatteryMonitor<br>RAM for global variables,%,examples/Peripheral/ButtonLED<br>flash,%,examples/Peripheral/ButtonLED<br>RAM for global variables,%,examples/Peripheral/CallbackLED<br>flash,%,examples/Peripheral/CallbackLED<br>RAM for global variables,%,examples/Peripheral/EncryptedBatteryMonitor<br>flash,%,examples/Peripheral/EncryptedBatteryMonitor<br>RAM for global variables,%,examples/Peripheral/LED<br>flash,%,examples/Peripheral/LED<br>RAM for global variables,%
arduino:mbed_nano:nano33ble,-64,-0.01,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0
arduino:mbed_nano:nanorp2040connect,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0
arduino:megaavr:uno2018:mode=on,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0
arduino:renesas_uno:unor4wifi,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0
arduino:samd:mkrwifi1010,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0
arduino:samd:nano_33_iot,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0
examples/Peripheral/Advertising/RawDataAdvertising RAM for global variables
%
examples/Peripheral/BatteryMonitor flash
%
examples/Peripheral/BatteryMonitor RAM for global variables
%
examples/Peripheral/ButtonLED flash
%
examples/Peripheral/ButtonLED RAM for global variables
%
examples/Peripheral/CallbackLED flash
%
examples/Peripheral/CallbackLED RAM for global variables
%
examples/Peripheral/EncryptedBatteryMonitor flash
%
examples/Peripheral/EncryptedBatteryMonitor RAM for global variables
%
examples/Peripheral/LED flash
%
examples/Peripheral/LED RAM for global variables
%
arduino:mbed_nano:nano33ble
-64
-0.01
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
0
0.0
arduino:mbed_nano:nanorp2040connect
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
arduino:megaavr:uno2018:mode=on
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
256
0.53
0
0.0
arduino:renesas_uno:unor4wifi
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
-32
-0.01
0
0.0
arduino:samd:mkrwifi1010
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
arduino:samd:nano_33_iot
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
-8
-0.0
0
0.0
Click for full report CSV
Board,examples/Central/LedControl<br>flash,%,examples/Central/LedControl<br>RAM for global variables,%,examples/Central/PeripheralExplorer<br>flash,%,examples/Central/PeripheralExplorer<br>RAM for global variables,%,examples/Central/Scan<br>flash,%,examples/Central/Scan<br>RAM for global variables,%,examples/Central/ScanCallback<br>flash,%,examples/Central/ScanCallback<br>RAM for global variables,%,examples/Central/SensorTagButton<br>flash,%,examples/Central/SensorTagButton<br>RAM for global variables,%,examples/Peripheral/Advertising/EnhancedAdvertising<br>flash,%,examples/Peripheral/Advertising/EnhancedAdvertising<br>RAM for global variables,%,examples/Peripheral/Advertising/RawDataAdvertising<br>flash,%,examples/Peripheral/Advertising/RawDataAdvertising<br>RAM for global variables,%,examples/Peripheral/BatteryMonitor<br>flash,%,examples/Peripheral/BatteryMonitor<br>RAM for global variables,%,examples/Peripheral/ButtonLED<br>flash,%,examples/Peripheral/ButtonLED<br>RAM for global variables,%,examples/Peripheral/CallbackLED<br>flash,%,examples/Peripheral/CallbackLED<br>RAM for global variables,%,examples/Peripheral/EncryptedBatteryMonitor<br>flash,%,examples/Peripheral/EncryptedBatteryMonitor<br>RAM for global variables,%,examples/Peripheral/LED<br>flash,%,examples/Peripheral/LED<br>RAM for global variables,%
arduino:mbed_nano:nano33ble,-64,-0.01,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0,0,0.0
arduino:mbed_nano:nanorp2040connect,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0
arduino:megaavr:uno2018:mode=on,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0,256,0.53,0,0.0
arduino:renesas_uno:unor4wifi,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0,-32,-0.01,0,0.0
arduino:samd:mkrwifi1010,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0
arduino:samd:nano_33_iot,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0,-8,-0.0,0,0.0
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
If the peripheral sketch with a subscribeable characteristic closes the connection with the central calling the
BLE.disconnect()
all subsequent subscriptions, after the first connection, are not notified and the characteristic stays always as "subscribed".Solution
In this PR the characteristic CCCD value is cleared when the BLE.disconnect() is called for resetting the characteristic subscription status and allowing new subscriptions.
Sketches for reproducing the problem
Central
Peripheral
Logs
Here the logs of the current behaviour.
Central
Peripheral