supla-device
Loading...
Searching...
No Matches
wifi_scan_result.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_NETWORK_WIFI_SCAN_RESULT_H_
5#define SRC_SUPLA_NETWORK_WIFI_SCAN_RESULT_H_
6
7#include <stdint.h>
8
9namespace Supla {
10
11#if defined(ESP8266) || defined(ARDUINO_ARCH_ESP8266)
12constexpr uint8_t WifiScanMaxResults = 5;
13#elif defined(ESP32) || defined(ARDUINO_ARCH_ESP32) || \
14 defined(SUPLA_DEVICE_ESP32)
15constexpr uint8_t WifiScanMaxResults = 8;
16#else
17constexpr uint8_t WifiScanMaxResults = 16;
18#endif
19constexpr uint8_t WifiScanSsidMaxSize = 33;
20constexpr uint32_t WifiScanDefaultMaxAgeMs = 5 * 60 * 1000;
21
23 char ssid[WifiScanSsidMaxSize] = {};
24 int8_t rssi = 0;
25 uint8_t channel = 0;
26};
27
28enum class WifiScanLookupStatus : uint8_t {
29 NotAvailable,
30 Found,
31 NotFound,
32 Stale,
33};
34
36 public:
37 static WifiScanResultCache *Instance();
38
39 void clear();
40 void beginUpdate();
41 void addOrUpdate(const char *ssid, int32_t rssi, int32_t channel);
42 void finishUpdate(uint32_t timestampMs);
43
44 WifiScanLookupStatus lookup(const char *ssid,
45 WifiScanResult *result,
46 uint32_t nowMs,
47 uint32_t maxAgeMs =
48 WifiScanDefaultMaxAgeMs) const;
49
50 uint8_t getCount() const;
51 uint32_t getTimestampMs() const;
52 bool hasScan() const;
53 bool getResult(uint8_t index, WifiScanResult *result) const;
54
55 private:
56 void sortByRssi();
57 int find(const char *ssid) const;
58 int findWeakest() const;
59
60 WifiScanResult entries[WifiScanMaxResults] = {};
61 uint8_t count = 0;
62 uint32_t timestampMs = 0;
63 bool scanAvailable = false;
64};
65
66} // namespace Supla
67
68#endif // SRC_SUPLA_NETWORK_WIFI_SCAN_RESULT_H_
Definition wifi_scan_result.h:35
Definition wifi_scan_result.h:22