HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
BaseWifi.h
Go to the documentation of this file.
1
20#pragma once
21
22#include "HardwareTypes.h"
23#include <cstdint>
24#include <functional>
25#include <string>
26#include <string_view>
27
47#define HF_WIFI_ERR_LIST(X) \
48 /* Success codes */ \
49 X(WIFI_SUCCESS, 0, "Success") \
50 \
51 /* General errors */ \
52 X(WIFI_ERR_FAILURE, 1, "General failure") \
53 X(WIFI_ERR_INVALID_PARAM, 2, "Invalid parameter") \
54 X(WIFI_ERR_NOT_INITIALIZED, 3, "WiFi not initialized") \
55 X(WIFI_ERR_ALREADY_INITIALIZED, 4, "WiFi already initialized") \
56 X(WIFI_ERR_NOT_CONNECTED, 5, "WiFi not connected") \
57 X(WIFI_ERR_ALREADY_CONNECTED, 6, "WiFi already connected") \
58 X(WIFI_ERR_CONNECTION_FAILED, 7, "Connection failed") \
59 X(WIFI_ERR_DISCONNECTION_FAILED, 8, "Disconnection failed") \
60 X(WIFI_ERR_SCAN_FAILED, 9, "Network scan failed") \
61 X(WIFI_ERR_AP_START_FAILED, 10, "Access Point start failed") \
62 X(WIFI_ERR_AP_STOP_FAILED, 11, "Access Point stop failed") \
63 X(WIFI_ERR_TIMEOUT, 12, "Operation timeout") \
64 X(WIFI_ERR_NO_MEMORY, 13, "Insufficient memory") \
65 X(WIFI_ERR_INVALID_SSID, 14, "Invalid SSID") \
66 X(WIFI_ERR_INVALID_PASSWORD, 15, "Invalid password") \
67 X(WIFI_ERR_WEAK_SIGNAL, 16, "Weak signal strength") \
68 X(WIFI_ERR_AUTHENTICATION_FAILED, 17, "Authentication failed") \
69 X(WIFI_ERR_ASSOCIATION_FAILED, 18, "Association failed") \
70 X(WIFI_ERR_HANDSHAKE_FAILED, 19, "4-way handshake failed") \
71 X(WIFI_ERR_INIT_FAILED, 20, "WiFi initialization failed") \
72 X(WIFI_ERR_CONFIG_INVALID, 21, "Invalid configuration") \
73 X(WIFI_ERR_ENTERPRISE_FAILED, 22, "Enterprise authentication failed") \
74 X(WIFI_ERR_WPA3_NOT_SUPPORTED, 23, "WPA3 not supported") \
75 X(WIFI_ERR_MESH_FAILED, 24, "Mesh operation failed") \
76 X(WIFI_ERR_UNKNOWN, 25, "Unknown error")
77
82#define X(name, value, desc) name = value,
84#undef X
85
92constexpr std::string_view HfWifiErrToString(hf_wifi_err_t err) noexcept {
93 switch (err) {
94#define X(NAME, VALUE, DESC) \
95 case hf_wifi_err_t::NAME: \
96 return DESC;
98#undef X
99 default:
101 }
102}
103
114
131
146
156
175
181 std::string ssid;
182 uint8_t bssid[6];
184 int8_t rssi;
185 uint8_t channel;
186 bool hidden;
187};
188
204
219
225 uint32_t ip;
226 uint32_t netmask;
227 uint32_t gateway;
228};
229
234using hf_wifi_event_callback_t = std::function<void(hf_wifi_event_t event, void* event_data)>;
235
241 std::function<void(const std::vector<hf_wifi_network_info_t>& networks)>;
242
255class BaseWifi {
256public:
260 virtual ~BaseWifi() noexcept = default;
261
262 // ========== Initialization and Configuration ==========
263
269 virtual hf_wifi_err_t Initialize(hf_wifi_mode_t mode) noexcept = 0;
270
275 virtual hf_wifi_err_t Deinitialize() noexcept = 0;
276
281 virtual bool IsInitialized() const noexcept = 0;
282
288 virtual hf_wifi_err_t SetMode(hf_wifi_mode_t mode) noexcept = 0;
289
294 virtual hf_wifi_mode_t GetMode() const noexcept = 0;
295
296 // ========== Station Mode Operations ==========
297
303 virtual hf_wifi_err_t ConfigureStation(const hf_wifi_station_config_t& config) noexcept = 0;
304
310 virtual hf_wifi_err_t Connect(uint32_t timeout_ms = 0) noexcept = 0;
311
316 virtual hf_wifi_err_t Disconnect() noexcept = 0;
317
322 virtual bool IsConnected() const noexcept = 0;
323
328 virtual int8_t GetRssi() const noexcept = 0;
329
335 virtual hf_wifi_err_t GetIpInfo(hf_wifi_ip_info_t& ip_info) const noexcept = 0;
336
337 // ========== Access Point Mode Operations ==========
338
344 virtual hf_wifi_err_t ConfigureAccessPoint(const hf_wifi_ap_config_t& config) noexcept = 0;
345
350 virtual hf_wifi_err_t StartAccessPoint() noexcept = 0;
351
356 virtual hf_wifi_err_t StopAccessPoint() noexcept = 0;
357
362 virtual bool IsAccessPointActive() const noexcept = 0;
363
368 virtual int GetConnectedStationCount() const noexcept = 0;
369
370 // ========== Network Scanning ==========
371
379 virtual hf_wifi_err_t StartScan(bool show_hidden = false, bool passive = false,
380 uint32_t max_scan_time_ms = 0) noexcept = 0;
381
389 uint16_t max_networks = 0) noexcept = 0;
390
395 virtual bool IsScanning() const noexcept = 0;
396
397 // ========== State and Status ==========
398
403 virtual hf_wifi_state_t GetState() const noexcept = 0;
404
409 virtual std::string GetConnectedSsid() const noexcept = 0;
410
416 virtual hf_wifi_err_t GetConnectedBssid(uint8_t bssid[6]) const noexcept = 0;
417
418 // ========== Power Management ==========
419
426
431 virtual hf_wifi_power_save_t GetPowerSave() const noexcept = 0;
432
433 // ========== Event Handling ==========
434
441
447
448 // ========== Utility Functions ==========
449
456 virtual hf_wifi_err_t GetMacAddress(uint8_t mac[6], uint8_t interface = 0) const noexcept = 0;
457
464 virtual hf_wifi_err_t SetMacAddress(const uint8_t mac[6], uint8_t interface = 0) noexcept = 0;
465
470 virtual uint8_t GetChannel() const noexcept = 0;
471
477 virtual hf_wifi_err_t SetChannel(uint8_t channel) noexcept = 0;
478
484 static std::string_view GetErrorString(hf_wifi_err_t error);
485
486protected:
490 BaseWifi() = default;
491
495 BaseWifi(const BaseWifi&) = delete;
496
500 BaseWifi& operator=(const BaseWifi&) = delete;
501};
502
507inline std::string_view BaseWifi::GetErrorString(hf_wifi_err_t error) {
508#define X(name, value, desc) \
509 case hf_wifi_err_t::name: \
510 return desc;
511 switch (error) {
513 default:
515 }
516#undef X
517}
hf_wifi_err_t
Definition BaseWifi.h:83
Platform-agnostic hardware type definitions for the HardFOC system.
uint8_t hf_u8_t
Platform-agnostic 8-bit unsigned integer type.
Definition HardwareTypes.h:40
Abstract base class for WiFi functionality.
Definition BaseWifi.h:255
virtual std::string GetConnectedSsid() const noexcept=0
Get connected network SSID.
virtual hf_wifi_err_t GetScanResults(std::vector< hf_wifi_network_info_t > &networks, uint16_t max_networks=0) noexcept=0
Get scan results.
virtual hf_wifi_err_t GetConnectedBssid(uint8_t bssid[6]) const noexcept=0
Get connected network BSSID.
virtual hf_wifi_err_t GetMacAddress(uint8_t mac[6], uint8_t interface=0) const noexcept=0
Get MAC address.
virtual hf_wifi_err_t GetIpInfo(hf_wifi_ip_info_t &ip_info) const noexcept=0
Get current IP information.
virtual hf_wifi_power_save_t GetPowerSave() const noexcept=0
Get current power save mode.
virtual uint8_t GetChannel() const noexcept=0
Get WiFi channel.
virtual ~BaseWifi() noexcept=default
Virtual destructor for proper cleanup of derived classes.
virtual hf_wifi_err_t SetMacAddress(const uint8_t mac[6], uint8_t interface=0) noexcept=0
Set MAC address.
virtual bool IsInitialized() const noexcept=0
Check if WiFi is initialized.
virtual int8_t GetRssi() const noexcept=0
Get signal strength (RSSI)
virtual bool IsAccessPointActive() const noexcept=0
Check if Access Point is running.
virtual hf_wifi_err_t SetMode(hf_wifi_mode_t mode) noexcept=0
Set WiFi operating mode.
virtual hf_wifi_err_t RegisterEventCallback(hf_wifi_event_callback_t callback) noexcept=0
Register event callback.
virtual hf_wifi_err_t Disconnect() noexcept=0
Disconnect from WiFi network.
virtual hf_wifi_err_t ConfigureAccessPoint(const hf_wifi_ap_config_t &config) noexcept=0
Configure Access Point parameters.
virtual hf_wifi_mode_t GetMode() const noexcept=0
Get current WiFi operating mode.
virtual hf_wifi_err_t Initialize(hf_wifi_mode_t mode) noexcept=0
Initialize the WiFi subsystem.
virtual hf_wifi_err_t ConfigureStation(const hf_wifi_station_config_t &config) noexcept=0
Configure station parameters.
virtual hf_wifi_err_t SetPowerSave(hf_wifi_power_save_t mode) noexcept=0
Set power save mode.
virtual hf_wifi_err_t StartAccessPoint() noexcept=0
Start Access Point.
virtual bool IsScanning() const noexcept=0
Check if scan is in progress.
virtual hf_wifi_err_t StartScan(bool show_hidden=false, bool passive=false, uint32_t max_scan_time_ms=0) noexcept=0
Start network scan.
virtual hf_wifi_err_t SetChannel(uint8_t channel) noexcept=0
Set WiFi channel.
virtual hf_wifi_err_t Connect(uint32_t timeout_ms=0) noexcept=0
Connect to a WiFi network (station mode)
virtual hf_wifi_err_t StopAccessPoint() noexcept=0
Stop Access Point.
virtual hf_wifi_state_t GetState() const noexcept=0
Get current WiFi state.
virtual bool IsConnected() const noexcept=0
Check if connected to a network.
virtual int GetConnectedStationCount() const noexcept=0
Get number of connected stations.
virtual hf_wifi_err_t Deinitialize() noexcept=0
Deinitialize the WiFi subsystem.
virtual hf_wifi_err_t UnregisterEventCallback() noexcept=0
Unregister event callback.
hf_wifi_event_t
WiFi event types for callback functions.
Definition BaseWifi.h:161
std::function< void(const std::vector< hf_wifi_network_info_t > &networks)> hf_wifi_scan_callback_t
WiFi scan callback function type.
Definition BaseWifi.h:240
hf_wifi_state_t
WiFi connection states.
Definition BaseWifi.h:136
hf_wifi_mode_t
WiFi operating modes.
Definition BaseWifi.h:108
#define HF_WIFI_ERR_LIST(X)
HardFOC WiFi error codes macro list.
Definition BaseWifi.h:47
hf_wifi_security_t
WiFi security types.
Definition BaseWifi.h:119
constexpr std::string_view HfWifiErrToString(hf_wifi_err_t err) noexcept
Convert hf_wifi_err_t to human-readable string.
Definition BaseWifi.h:92
#define X(name, value, desc)
Generate WiFi error enumeration using X-macro pattern.
Definition BaseWifi.h:82
std::function< void(hf_wifi_event_t event, void *event_data)> hf_wifi_event_callback_t
WiFi event callback function type.
Definition BaseWifi.h:234
hf_wifi_power_save_t
WiFi power save modes.
Definition BaseWifi.h:151
static std::string_view GetErrorString(hf_wifi_err_t error)
Get error description string.
Definition BaseWifi.h:507
@ HF_WIFI_EVENT_AP_STADISCONNECTED
@ HF_WIFI_EVENT_STA_DISCONNECTED
@ HF_WIFI_EVENT_STA_AUTHMODE_CHANGE
@ HF_WIFI_EVENT_AP_STACONNECTED
WiFi Access Point configuration structure.
Definition BaseWifi.h:209
std::string ssid
Definition BaseWifi.h:210
hf_wifi_security_t authmode
Definition BaseWifi.h:214
uint8_t ssid_len
Definition BaseWifi.h:212
uint8_t max_connection
Definition BaseWifi.h:216
uint16_t beacon_interval
Definition BaseWifi.h:217
std::string password
Definition BaseWifi.h:211
uint8_t ssid_hidden
Definition BaseWifi.h:215
uint8_t channel
Definition BaseWifi.h:213
WiFi IP configuration structure.
Definition BaseWifi.h:224
uint32_t gateway
Definition BaseWifi.h:227
uint32_t netmask
Definition BaseWifi.h:226
uint32_t ip
Definition BaseWifi.h:225
WiFi network information structure.
Definition BaseWifi.h:180
uint8_t bssid[6]
Definition BaseWifi.h:182
int8_t rssi
Definition BaseWifi.h:184
bool hidden
Definition BaseWifi.h:186
hf_wifi_security_t security
Definition BaseWifi.h:183
std::string ssid
Definition BaseWifi.h:181
uint8_t channel
Definition BaseWifi.h:185
WiFi station configuration structure.
Definition BaseWifi.h:193
hf_wifi_security_t threshold_authmode
Definition BaseWifi.h:202
std::string password
Definition BaseWifi.h:195
uint32_t scan_method
Definition BaseWifi.h:199
uint16_t threshold_rssi
Definition BaseWifi.h:201
std::string ssid
Definition BaseWifi.h:194
bool bssid_set
Definition BaseWifi.h:198
uint8_t bssid[6]
Definition BaseWifi.h:196
uint8_t channel
Definition BaseWifi.h:197
bool sort_method
Definition BaseWifi.h:200