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
11constexpr uint8_t WifiScanMaxResults = 16;
12constexpr uint8_t WifiScanSsidMaxSize = 33;
13constexpr uint32_t WifiScanDefaultMaxAgeMs = 5 * 60 * 1000;
14
16 char ssid[WifiScanSsidMaxSize] = {};
17 int32_t rssi = 0;
18 int32_t channel = 0;
19};
20
21enum class WifiScanLookupStatus : uint8_t {
22 NotAvailable,
23 Found,
24 NotFound,
25 Stale,
26};
27
29 public:
30 static WifiScanResultCache *Instance();
31
32 void clear();
33 void beginUpdate();
34 void addOrUpdate(const char *ssid, int32_t rssi, int32_t channel);
35 void finishUpdate(uint32_t timestampMs);
36
37 WifiScanLookupStatus lookup(const char *ssid,
38 WifiScanResult *result,
39 uint32_t nowMs,
40 uint32_t maxAgeMs =
41 WifiScanDefaultMaxAgeMs) const;
42
43 uint8_t getCount() const;
44 uint32_t getTimestampMs() const;
45 bool hasScan() const;
46 bool getResult(uint8_t index, WifiScanResult *result) const;
47
48 private:
49 void sortByRssi();
50 int find(const char *ssid) const;
51 int findWeakest() const;
52
53 WifiScanResult entries[WifiScanMaxResults] = {};
54 uint8_t count = 0;
55 uint32_t timestampMs = 0;
56 bool scanAvailable = false;
57};
58
59} // namespace Supla
60
61#endif // SRC_SUPLA_NETWORK_WIFI_SCAN_RESULT_H_
Definition wifi_scan_result.h:28
Definition wifi_scan_result.h:15