From e5a78b2fb3b16f16a974a883f825f6d9468c89b8 Mon Sep 17 00:00:00 2001 From: nick Date: Thu, 4 Jun 2026 02:15:19 -0600 Subject: [PATCH] Print BLE scan results as devices are discovered --- firmware/esp32/xterra-controller/bms.cpp | 65 +++++++++++++++++++----- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/firmware/esp32/xterra-controller/bms.cpp b/firmware/esp32/xterra-controller/bms.cpp index d33eace..b256c7c 100644 --- a/firmware/esp32/xterra-controller/bms.cpp +++ b/firmware/esp32/xterra-controller/bms.cpp @@ -104,31 +104,70 @@ int scanBleDevices(uint32_t scanSeconds) { scan->setInterval(100); scan->setWindow(99); - NimBLEScanResults results = scan->getResults(scanSeconds, false); + Serial.println("BLE: Scanning..."); + Serial.println("BLE devices:"); - int resultCount = results.getCount(); + for (uint32_t second = 0; second < scanSeconds; second++) { + NimBLEScanResults results = scan->getResults(1, false); + int resultCount = results.getCount(); - for (int i = 0; i < resultCount && bleScanResultCount < MAX_BLE_SCAN_RESULTS; i++) { - const NimBLEAdvertisedDevice* device = results.getDevice(i); + for (int i = 0; i < resultCount && bleScanResultCount < MAX_BLE_SCAN_RESULTS; i++) { + const NimBLEAdvertisedDevice* device = results.getDevice(i); - String address = device->getAddress().toString().c_str(); - String name = ""; + String address = device->getAddress().toString().c_str(); + bool alreadySeen = false; - if (device->haveName()) { - name = device->getName().c_str(); + for (int existing = 0; existing < bleScanResultCount; existing++) { + if (bleScanResults[existing].address == address) { + alreadySeen = true; + break; + } + } + + if (alreadySeen) { + continue; + } + + String name = ""; + if (device->haveName()) { + name = device->getName().c_str(); + } + + bleScanResults[bleScanResultCount].address = address; + bleScanResults[bleScanResultCount].name = name; + bleScanResults[bleScanResultCount].rssi = device->getRSSI(); + + Serial.print(bleScanResultCount + 1); + Serial.print(") "); + + if (name.length() > 0) { + Serial.print(name); + } else { + Serial.print("(no name)"); + } + + Serial.print(" | "); + Serial.print(address); + Serial.print(" | RSSI "); + Serial.println(device->getRSSI()); + + bleScanResultCount++; } - bleScanResults[bleScanResultCount].address = address; - bleScanResults[bleScanResultCount].name = name; - bleScanResults[bleScanResultCount].rssi = device->getRSSI(); - bleScanResultCount++; + scan->clearResults(); + + Serial.print("."); } - scan->clearResults(); + Serial.println(); Serial.print("BLE: Devices found: "); Serial.println(bleScanResultCount); + if (bleScanResultCount > 0) { + Serial.println("Use: select bms "); + } + return bleScanResultCount; }