Keep BLE UI state at CONNECTED while re-advertising

After #18 (MAX_CONNECTIONS=2), onConnect sets need_advertise=true to
fill the second slot. start_advertising() then unconditionally overwrote
state to ADVERTISING, so with a single connected client the UI flipped
CONNECTED -> ADVERTISING on the next tick and stayed there until a
second central attached.

Only flip the state to ADVERTISING when no clients are connected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
George Tasioulis
2026-05-18 18:59:16 +03:00
co-authored by Claude Opus 4.7
parent baed1d722b
commit 0b47a54956
+9 -1
View File
@@ -87,8 +87,16 @@ static void start_advertising() {
adv->setScanResponseData(scanResp);
adv->enableScanResponse(true);
bool ok = adv->start();
// Only reflect ADVERTISING in the UI state when no client is connected.
// With MAX_CONNECTIONS=2, onConnect re-advertises to fill the second slot;
// without this guard the UI would flip CONNECTED → ADVERTISING on every
// first connect and never come back until a second client arrived.
if (!server || server->getConnectedCount() == 0) {
state = BLE_STATE_ADVERTISING;
Serial.printf("BLE: advertising start=%s\n", ok ? "OK" : "FAILED");
}
Serial.printf("BLE: advertising start=%s (connected=%u)\n",
ok ? "OK" : "FAILED",
server ? (unsigned)server->getConnectedCount() : 0);
}
class ServerCallbacks : public NimBLEServerCallbacks {