move BleScanner to seperate lib
This commit is contained in:
13
lib/BleScanner/src/BleInterfaces.h
Normal file
13
lib/BleScanner/src/BleInterfaces.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
#include <NimBLEDevice.h>
|
||||
|
||||
class BLEScannerSubscriber {
|
||||
public:
|
||||
virtual void onResult(NimBLEAdvertisedDevice* advertisedDevice) = 0;
|
||||
};
|
||||
|
||||
class BLEScannerPublisher {
|
||||
public:
|
||||
virtual void subscribe(BLEScannerSubscriber* subscriber) = 0;
|
||||
virtual void unsubscribe(BLEScannerSubscriber* subscriber) = 0;
|
||||
};
|
||||
54
lib/BleScanner/src/BleScanner.cpp
Normal file
54
lib/BleScanner/src/BleScanner.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
#include "BleScanner.h"
|
||||
#include <NimBLEUtils.h>
|
||||
#include <NimBLEScan.h>
|
||||
#include <NimBLEAdvertisedDevice.h>
|
||||
|
||||
BleScanner::BleScanner(int reservedSubscribers) {
|
||||
subscribers.reserve(reservedSubscribers);
|
||||
}
|
||||
|
||||
void BleScanner::initialize(const std::string& deviceName, const bool wantDuplicates, const uint16_t interval, const uint16_t window) {
|
||||
if (!BLEDevice::getInitialized()) {
|
||||
BLEDevice::init(deviceName);
|
||||
}
|
||||
bleScan = BLEDevice::getScan();
|
||||
bleScan->setAdvertisedDeviceCallbacks(this, wantDuplicates);
|
||||
bleScan->setActiveScan(true);
|
||||
bleScan->setInterval(interval);
|
||||
bleScan->setWindow(window);
|
||||
}
|
||||
|
||||
void BleScanner::update() {
|
||||
if (bleScan->isScanning()) {
|
||||
return;
|
||||
}
|
||||
bool result = bleScan->start(scanDuration, nullptr, false);
|
||||
if (!result) {
|
||||
log_w("BLE Scan error");
|
||||
}
|
||||
}
|
||||
|
||||
void BleScanner::setScanDuration(const uint32_t value) {
|
||||
scanDuration = value;
|
||||
}
|
||||
|
||||
void BleScanner::subscribe(BLEScannerSubscriber* subscriber) {
|
||||
if (std::find(subscribers.begin(), subscribers.end(), subscriber) != subscribers.end()) {
|
||||
return;
|
||||
}
|
||||
subscribers.push_back(subscriber);
|
||||
}
|
||||
|
||||
void BleScanner::unsubscribe(BLEScannerSubscriber* subscriber) {
|
||||
auto it = std::find(subscribers.begin(), subscribers.end(), subscriber);
|
||||
if (it != subscribers.end()) {
|
||||
subscribers.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
void BleScanner::onResult(NimBLEAdvertisedDevice* advertisedDevice) {
|
||||
for (const auto& subscriber : subscribers) {
|
||||
subscriber->onResult(advertisedDevice);
|
||||
}
|
||||
}
|
||||
|
||||
25
lib/BleScanner/src/BleScanner.h
Normal file
25
lib/BleScanner/src/BleScanner.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <NimBLEDevice.h>
|
||||
#include "BleInterfaces.h"
|
||||
|
||||
class BleScanner : public BLEScannerPublisher, BLEAdvertisedDeviceCallbacks {
|
||||
public:
|
||||
BleScanner(int reservedSubscribers = 10);
|
||||
~BleScanner() = default;
|
||||
|
||||
void initialize(const std::string& deviceName = "blescanner", const bool wantDuplicates = false, const uint16_t interval = 40, const uint16_t window = 40);
|
||||
void update();
|
||||
void setScanDuration(const uint32_t value);
|
||||
|
||||
void subscribe(BLEScannerSubscriber* subscriber) override;
|
||||
void unsubscribe(BLEScannerSubscriber* subscriber) override;
|
||||
|
||||
void onResult(NimBLEAdvertisedDevice* advertisedDevice) override;
|
||||
|
||||
private:
|
||||
uint32_t scanDuration = 3;
|
||||
BLEScan* bleScan = nullptr;
|
||||
std::vector<BLEScannerSubscriber*> subscribers;
|
||||
};
|
||||
9
lib/BleScanner/src/main.cpp
Normal file
9
lib/BleScanner/src/main.cpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include <Arduino.h>
|
||||
|
||||
void setup() {
|
||||
// put your setup code here, to run once:
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// put your main code here, to run repeatedly:
|
||||
}
|
||||
Reference in New Issue
Block a user