diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index 3497bad..9b6df33 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -77,7 +77,7 @@ void NukiWrapper::update() _bleScanner->update(); vTaskDelay( 5000 / portTICK_PERIOD_MS); - if (_nukiBle.pairNuki()) { + if (_nukiBle.pairNuki() == Nuki::PairingResult::Success) { Serial.println(F("Nuki paired")); _paired = true; } @@ -90,6 +90,7 @@ void NukiWrapper::update() vTaskDelay( 20 / portTICK_PERIOD_MS); _bleScanner->update(); + _nukiBle.updateConnectionState(); unsigned long ts = millis(); @@ -214,20 +215,6 @@ void NukiWrapper::updateAuthData() } } -//struct __attribute__((packed)) LogEntry { -// uint32_t index; -// uint16_t timeStampYear; -// uint8_t timeStampMonth; -// uint8_t timeStampDay; -// uint8_t timeStampHour; -// uint8_t timeStampMinute; -// uint8_t timeStampSecond; -// uint32_t authId; -// uint8_t name[32]; -// LoggingType loggingType; -// uint8_t data[5]; -//}; - Nuki::LockAction NukiWrapper::lockActionToEnum(const char *str) { if(strcmp(str, "unlock") == 0) return Nuki::LockAction::Unlock; diff --git a/lib/BleScanner/src/BleInterfaces.h b/lib/BleScanner/src/BleInterfaces.h index 6601ecb..3d4571e 100644 --- a/lib/BleScanner/src/BleInterfaces.h +++ b/lib/BleScanner/src/BleInterfaces.h @@ -25,6 +25,7 @@ class Publisher { public: virtual void subscribe(Subscriber* subscriber) = 0; virtual void unsubscribe(Subscriber* subscriber) = 0; + virtual void enableScanning(bool enable) = 0; }; } // namespace BleScanner diff --git a/lib/BleScanner/src/BleScanner.cpp b/lib/BleScanner/src/BleScanner.cpp index d2295b9..be78ddb 100644 --- a/lib/BleScanner/src/BleScanner.cpp +++ b/lib/BleScanner/src/BleScanner.cpp @@ -32,12 +32,23 @@ void Scanner::initialize(const std::string& deviceName, const bool wantDuplicate } void Scanner::update() { - if (bleScan->isScanning()) { + if (!scanningEnabled || bleScan->isScanning()) { return; } + bool result = bleScan->start(scanDuration, nullptr, false); if (!result) { - log_w("BLE Scan error"); + scanErrors++; + if (scanErrors % 100 == 0) { + log_w("BLE Scan error (100x)"); + } + } +} + +void Scanner::enableScanning(bool enable) { + scanningEnabled = enable; + if (!enable) { + bleScan->stop(); } } diff --git a/lib/BleScanner/src/BleScanner.h b/lib/BleScanner/src/BleScanner.h index b414b37..c4ef202 100644 --- a/lib/BleScanner/src/BleScanner.h +++ b/lib/BleScanner/src/BleScanner.h @@ -6,7 +6,7 @@ * Created: 2022 * License: GNU GENERAL PUBLIC LICENSE (see LICENSE) * - * This library provides a BLE scanner to be used by other libraries to + * This library provides a BLE scanner to be used by other libraries to * receive advertisements from BLE devices * */ @@ -44,10 +44,17 @@ class Scanner : public Publisher, BLEAdvertisedDeviceCallbacks { /** * @brief Set the Scan Duration * - * @param value scan duration in seconds + * @param value scan duration in seconds, 0 for indefinite scan */ void setScanDuration(const uint32_t value); + /** + * @brief enable/disable scanning + * + * @param enable + */ + void enableScanning(bool enable); + /** * @brief Subscribe to the scanner and receive results * @@ -73,6 +80,8 @@ class Scanner : public Publisher, BLEAdvertisedDeviceCallbacks { uint32_t scanDuration = 3; BLEScan* bleScan = nullptr; std::vector subscribers; + uint16_t scanErrors = 0; + bool scanningEnabled = true; }; } // namespace BleScanner diff --git a/lib/nuki_ble b/lib/nuki_ble index e9fca7b..24fb438 160000 --- a/lib/nuki_ble +++ b/lib/nuki_ble @@ -1 +1 @@ -Subproject commit e9fca7b48d6334591493dd03a6d63c7577c7604e +Subproject commit 24fb438d8099b6e839a506b21ac26be7ae1ad3c5