HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
EspWifi.h
Go to the documentation of this file.
1
21#pragma once
22
23// Suppress pedantic warnings for ESP-IDF headers
24#ifdef __cplusplus
25#pragma GCC diagnostic push
26#pragma GCC diagnostic ignored "-Wpedantic"
27#endif
28
29// ESP-IDF C headers must be wrapped in extern "C" for C++ compatibility
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#include "esp_event.h"
35#include "esp_mesh.h"
36#include "esp_netif.h"
37#include "esp_smartconfig.h"
38#include "esp_wifi.h"
39// WPS not available on ESP32-C6
40// #include "esp_wps.h"
41#include "lwip/err.h"
42#include "lwip/sys.h"
43#include "nvs_flash.h"
44
45#ifdef __cplusplus
46}
47#endif
48
49// Restore warnings after ESP-IDF headers
50#ifdef __cplusplus
51#pragma GCC diagnostic pop
52#endif
53
54// C++ headers
55#include "BaseWifi.h"
57#include "utils/PlatformMutex.h"
58#include <atomic>
59#include <memory>
60#include <queue>
61
66 // Power management
68 wifi_ps_type_t power_save_type;
69 uint16_t listen_interval;
71 // Performance tuning
72 uint8_t tx_power;
73 wifi_bandwidth_t bandwidth;
77 // Advanced features
85 // Enterprise features
87 std::string enterprise_username;
88 std::string enterprise_password;
89 std::string enterprise_ca_cert;
93 // Mesh networking
98 // Smart config and provisioning
100 smartconfig_type_t smartconfig_type;
101 // WPS not available on ESP32-C6
102 // bool enable_wps; /**< Enable WPS */
103 // wps_type_t wps_type; /**< WPS type */
104};
105
143class EspWifi : public BaseWifi {
144public:
149 explicit EspWifi(const EspWifiAdvancedConfig* advanced_config = nullptr);
150
154 virtual ~EspWifi();
155
156 // ========== BaseWifi Interface Implementation ==========
157
158 // Initialization and Configuration
159 hf_wifi_err_t Initialize(hf_wifi_mode_t mode) noexcept override;
160 hf_wifi_err_t Deinitialize() noexcept override;
161 bool IsInitialized() const noexcept override;
162 hf_wifi_err_t SetMode(hf_wifi_mode_t mode) noexcept override;
163 hf_wifi_mode_t GetMode() const noexcept override;
164
165 // Station Mode Operations
166 hf_wifi_err_t ConfigureStation(const hf_wifi_station_config_t& config) noexcept override;
167 hf_wifi_err_t Connect(uint32_t timeout_ms = 0) noexcept override;
168 hf_wifi_err_t Disconnect() noexcept override;
169 bool IsConnected() const noexcept override;
170 int8_t GetRssi() const noexcept override;
171 hf_wifi_err_t GetIpInfo(hf_wifi_ip_info_t& ip_info) const noexcept override;
172
173 // Access Point Mode Operations
174 hf_wifi_err_t ConfigureAccessPoint(const hf_wifi_ap_config_t& config) noexcept override;
175 hf_wifi_err_t StartAccessPoint() noexcept override;
176 hf_wifi_err_t StopAccessPoint() noexcept override;
177 bool IsAccessPointActive() const noexcept override;
178 int GetConnectedStationCount() const noexcept override;
179
180 // Network Scanning
181 hf_wifi_err_t StartScan(bool show_hidden = false, bool passive = false,
182 uint32_t max_scan_time_ms = 0) noexcept override;
183 hf_wifi_err_t GetScanResults(std::vector<hf_wifi_network_info_t>& networks,
184 uint16_t max_networks = 0) noexcept override;
185 bool IsScanning() const noexcept override;
186
187 // State and Status
188 hf_wifi_state_t GetState() const noexcept override;
189 std::string GetConnectedSsid() const noexcept override;
190 hf_wifi_err_t GetConnectedBssid(uint8_t bssid[6]) const noexcept override;
191
192 // Power Management
193 hf_wifi_err_t SetPowerSave(hf_wifi_power_save_t mode) noexcept override;
194 hf_wifi_power_save_t GetPowerSave() const noexcept override;
195
196 // Event Handling
198 hf_wifi_err_t UnregisterEventCallback() noexcept override;
199
200 // Utility Functions
201 hf_wifi_err_t GetMacAddress(uint8_t mac[6], uint8_t interface = 0) const noexcept override;
202 hf_wifi_err_t SetMacAddress(const uint8_t mac[6], uint8_t interface = 0) noexcept override;
203 uint8_t GetChannel() const noexcept override;
204 hf_wifi_err_t SetChannel(uint8_t channel) noexcept override;
205
206 // ========== ESP32-Specific Extensions ==========
207
214
221
228
236 hf_wifi_err_t ConfigureRoaming(bool enable_11k, bool enable_11r, bool enable_11v);
237
247 hf_wifi_err_t ConfigureEnterprise(const std::string& username, const std::string& password,
248 const std::string& ca_cert = "",
249 const std::string& client_cert = "",
250 const std::string& client_key = "");
251
258 hf_wifi_err_t StartSmartConfig(smartconfig_type_t type = SC_TYPE_ESPTOUCH,
259 uint32_t timeout_ms = 60000);
260
266
267 // WPS not available on ESP32-C6
268 // /**
269 // * @brief Start WPS provisioning
270 // * @param type WPS type
271 // * @param timeout_ms Provisioning timeout in milliseconds
272 // * @return hf_wifi_err_t::WIFI_SUCCESS on success, error code otherwise
273 // */
274 // hf_wifi_err_t StartWps(wps_type_t type = WPS_TYPE_PBC, uint32_t timeout_ms = 120000);
275
276 // /**
277 // * @brief Stop WPS provisioning
278 // * @return hf_wifi_err_t::WIFI_SUCCESS on success, error code otherwise
279 // */
280 // hf_wifi_err_t StopWps();
281
289 hf_wifi_err_t InitMesh(const uint8_t mesh_id[6], uint8_t max_layer = 6,
290 uint16_t max_connection = 10);
291
297
303
309
315 hf_wifi_err_t GetStatistics(wifi_pkt_rx_ctrl_t& stats) const;
316
322 hf_wifi_err_t SetTxPower(uint8_t power);
323
328 int8_t GetTxPower() const;
329
335 hf_wifi_err_t SetBandwidth(wifi_bandwidth_t bandwidth);
336
341 wifi_bandwidth_t GetBandwidth() const;
342
348
354 hf_wifi_err_t GetConnectionInfo(wifi_ap_record_t& info) const;
355
356private:
357 // ========== Internal State Management ==========
358
360 std::atomic<bool> m_initialized;
361 std::atomic<bool> m_enabled;
362 std::atomic<hf_wifi_mode_t> m_mode;
363 std::atomic<hf_wifi_state_t> m_state;
365 // Configuration storage
370 // ESP-IDF handles
371 esp_netif_t* m_sta_netif;
372 esp_netif_t* m_ap_netif;
373 EventGroupHandle_t m_event_group;
374 esp_event_handler_instance_t m_wifi_event_handler;
375 esp_event_handler_instance_t m_ip_event_handler;
377 // Event handling
382 std::queue<std::pair<hf_wifi_event_t, void*>> m_event_queue;
385 // Scan results
386 std::vector<hf_wifi_network_info_t> m_scan_results;
387 std::atomic<bool> m_scanning;
390 // Connection state
391 std::atomic<bool> m_connected;
392 std::atomic<bool> m_ap_active;
393 std::atomic<int8_t> m_rssi;
394 std::atomic<uint8_t> m_channel;
396 // Advanced features state
397 std::atomic<bool> m_smartconfig_active;
398 // std::atomic<bool> m_wps_active; /**< WPS active */
399 std::atomic<bool> m_mesh_active;
401 // ========== Internal Helper Methods ==========
402
408
414
420
426
432 wifi_mode_t ConvertToEspMode(hf_wifi_mode_t mode) const;
433
439 hf_wifi_mode_t ConvertFromEspMode(wifi_mode_t mode) const;
440
446 wifi_auth_mode_t ConvertToEspAuthMode(hf_wifi_security_t security) const;
447
453 hf_wifi_security_t ConvertFromEspAuthMode(wifi_auth_mode_t auth_mode) const;
454
460 hf_wifi_err_t ConvertEspError(esp_err_t esp_err) const;
461
469 static void wifiEventHandler(void* arg, esp_event_base_t event_base, int32_t event_id,
470 void* event_data);
471
479 static void ipEventHandler(void* arg, esp_event_base_t event_base, int32_t event_id,
480 void* event_data);
481
489 static void smartconfigEventHandler(void* arg, esp_event_base_t event_base, int32_t event_id,
490 void* event_data);
491
497 void handleWifiEvent(int32_t event_id, void* event_data);
498
504 void handleIpEvent(int32_t event_id, void* event_data);
505
511 void handleSmartconfigEvent(int32_t event_id, void* event_data);
512
518 void NotifyEventCallback(hf_wifi_event_t event, void* event_data);
519
525
531
537 bool ValidateConfig(const hf_wifi_station_config_t& config) const;
538
544 bool ValidateApConfig(const hf_wifi_ap_config_t& config) const;
545
546 // Prevent copying
547 EspWifi(const EspWifi&) = delete;
548 EspWifi& operator=(const EspWifi&) = delete;
549};
Unified WiFi base class for all WiFi implementations.
hf_wifi_err_t
Definition BaseWifi.h:83
ESP32 base type definitions for hardware abstraction.
Cross-platform RTOS mutex and synchronization primitives.
Abstract base class for WiFi functionality.
Definition BaseWifi.h:255
Advanced ESP32 implementation of unified BaseWifi with ESP-IDF v5.5+ features.
Definition EspWifi.h:143
EspWifi & operator=(const EspWifi &)=delete
hf_wifi_err_t RegisterEventHandlers()
Register ESP-IDF event handlers.
wifi_mode_t ConvertToEspMode(hf_wifi_mode_t mode) const
Convert HardFOC WiFi mode to ESP-IDF mode.
Definition EspWifi.cpp:1008
void handleIpEvent(int32_t event_id, void *event_data)
Handle IP events internally.
Definition EspWifi.cpp:1202
hf_wifi_err_t StartScan(bool show_hidden=false, bool passive=false, uint32_t max_scan_time_ms=0) noexcept override
Start network scan.
Definition EspWifi.cpp:684
static void smartconfigEventHandler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
Static SmartConfig event handler for ESP-IDF.
Definition EspWifi.cpp:1028
std::atomic< hf_wifi_mode_t > m_mode
Definition EspWifi.h:362
hf_wifi_err_t RegisterEventCallback(hf_wifi_event_callback_t callback) noexcept override
Register event callback.
Definition EspWifi.cpp:907
hf_wifi_err_t SetAdvancedConfig(const EspWifiAdvancedConfig &config)
Set advanced ESP32-specific configuration.
hf_wifi_err_t SetMacAddress(const uint8_t mac[6], uint8_t interface=0) noexcept override
Set MAC address.
Definition EspWifi.cpp:942
hf_wifi_err_t InitMesh(const uint8_t mesh_id[6], uint8_t max_layer=6, uint16_t max_connection=10)
Initialize ESP-MESH networking.
bool IsConnected() const noexcept override
Check if connected to a network.
Definition EspWifi.cpp:1115
esp_netif_t * m_ap_netif
Definition EspWifi.h:372
bool IsAccessPointActive() const noexcept override
Check if Access Point is running.
Definition EspWifi.cpp:663
hf_wifi_err_t UnregisterEventHandlers()
Unregister ESP-IDF event handlers.
hf_wifi_err_t Disconnect() noexcept override
Disconnect from WiFi network.
Definition EspWifi.cpp:1104
static void ipEventHandler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
Static IP event handler for ESP-IDF.
Definition EspWifi.cpp:1022
hf_wifi_err_t StartMeshRoot()
Start ESP-MESH as root node.
hf_wifi_scan_callback_t m_scan_callback
Definition EspWifi.h:379
EspWifi(const EspWifi &)=delete
hf_wifi_err_t Connect(uint32_t timeout_ms=0) noexcept override
Connect to a WiFi network (station mode)
Definition EspWifi.cpp:520
hf_wifi_err_t EnableWpa3Transition(bool enable)
Enable WPA3 transition mode (WPA2/WPA3 mixed)
hf_wifi_err_t GetMacAddress(uint8_t mac[6], uint8_t interface=0) const noexcept override
Get MAC address.
Definition EspWifi.cpp:919
hf_wifi_err_t StopSmartConfig()
Stop SmartConfig provisioning.
void * m_event_user_data
Definition EspWifi.h:380
hf_wifi_err_t Initialize(hf_wifi_mode_t mode) noexcept override
Initialize the WiFi subsystem.
Definition EspWifi.cpp:227
hf_wifi_err_t ConfigureRoaming(bool enable_11k, bool enable_11r, bool enable_11v)
Configure 802.11k/r/v roaming features.
hf_wifi_station_config_t m_sta_config
Definition EspWifi.h:366
hf_wifi_mode_t GetMode() const noexcept override
Get current WiFi operating mode.
Definition EspWifi.cpp:992
hf_wifi_err_t StopMesh()
Stop ESP-MESH networking.
hf_wifi_err_t ConvertEspError(esp_err_t esp_err) const
Convert ESP-IDF error to HardFOC error.
Definition EspWifi.cpp:1038
void handleWifiEvent(int32_t event_id, void *event_data)
Handle WiFi events internally.
Definition EspWifi.cpp:1136
std::atomic< bool > m_enabled
Definition EspWifi.h:361
std::atomic< bool > m_mesh_active
Definition EspWifi.h:399
hf_wifi_err_t SetTxPower(uint8_t power)
Set WiFi TX power.
Definition EspWifi.cpp:1330
hf_wifi_err_t SetChannel(uint8_t channel) noexcept override
Set WiFi channel.
Definition EspWifi.cpp:981
std::vector< hf_wifi_network_info_t > m_scan_results
Definition EspWifi.h:386
hf_wifi_err_t GetConnectionInfo(wifi_ap_record_t &info) const
Get detailed connection information.
hf_wifi_err_t SetMode(hf_wifi_mode_t mode) noexcept override
Set WiFi operating mode.
Definition EspWifi.cpp:453
hf_wifi_err_t StartAccessPoint() noexcept override
Start Access Point.
Definition EspWifi.cpp:594
hf_wifi_err_t PerformCalibration()
Perform WiFi calibration.
PlatformMutex m_event_mutex
Definition EspWifi.h:383
std::atomic< bool > m_scanning
Definition EspWifi.h:387
hf_wifi_err_t ConfigureAccessPoint(const hf_wifi_ap_config_t &config) noexcept override
Configure Access Point parameters.
Definition EspWifi.cpp:567
hf_wifi_err_t GetAdvancedConfig(EspWifiAdvancedConfig &config) const
Get current advanced configuration.
Definition EspWifi.cpp:1319
void NotifyEventCallback(hf_wifi_event_t event, void *event_data)
Notify user event callback.
hf_wifi_err_t UnregisterEventCallback() noexcept override
Unregister event callback.
Definition EspWifi.cpp:913
hf_wifi_err_t StartSmartConfig(smartconfig_type_t type=SC_TYPE_ESPTOUCH, uint32_t timeout_ms=60000)
Start SmartConfig provisioning.
uint8_t GetChannel() const noexcept override
Get WiFi channel.
Definition EspWifi.cpp:965
hf_wifi_err_t ConfigureStation(const hf_wifi_station_config_t &config) noexcept override
Configure station parameters.
Definition EspWifi.cpp:488
wifi_auth_mode_t ConvertToEspAuthMode(hf_wifi_security_t security) const
Convert HardFOC security to ESP-IDF auth mode.
Definition EspWifi.cpp:1259
static void wifiEventHandler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
Static WiFi event handler for ESP-IDF.
Definition EspWifi.cpp:1016
void * m_scan_user_data
Definition EspWifi.h:381
hf_wifi_err_t SetBandwidth(wifi_bandwidth_t bandwidth)
Set WiFi channel bandwidth.
Definition EspWifi.cpp:1359
bool IsScanning() const noexcept override
Check if scan is in progress.
Definition EspWifi.cpp:813
hf_wifi_err_t GetStatistics(wifi_pkt_rx_ctrl_t &stats) const
Get WiFi statistics.
hf_wifi_err_t ConfigureEnterprise(const std::string &username, const std::string &password, const std::string &ca_cert="", const std::string &client_cert="", const std::string &client_key="")
Configure WPA2/WPA3 Enterprise authentication.
int GetConnectedStationCount() const noexcept override
Get number of connected stations.
Definition EspWifi.cpp:668
bool ValidateApConfig(const hf_wifi_ap_config_t &config) const
Validate AP configuration parameters.
EspWifiAdvancedConfig m_advanced_config
Definition EspWifi.h:368
hf_wifi_err_t ApplyAdvancedConfig()
Apply advanced configuration settings.
hf_wifi_err_t StartMeshChild()
Start ESP-MESH as child node.
esp_event_handler_instance_t m_wifi_event_handler
Definition EspWifi.h:374
EspWifi(const EspWifiAdvancedConfig *advanced_config=nullptr)
Constructor with optional advanced configuration.
Definition EspWifi.cpp:206
PlatformMutex m_scan_mutex
Definition EspWifi.h:388
hf_wifi_err_t GetConnectedBssid(uint8_t bssid[6]) const noexcept override
Get connected network BSSID.
Definition EspWifi.cpp:839
std::atomic< bool > m_ap_active
Definition EspWifi.h:392
int8_t GetRssi() const noexcept override
Get signal strength (RSSI)
Definition EspWifi.cpp:1120
bool ValidateConfig(const hf_wifi_station_config_t &config) const
Validate configuration parameters.
std::atomic< hf_wifi_state_t > m_state
Definition EspWifi.h:363
esp_netif_t * m_sta_netif
Definition EspWifi.h:371
hf_wifi_event_callback_t m_event_callback
Definition EspWifi.h:378
std::queue< std::pair< hf_wifi_event_t, void * > > m_event_queue
Definition EspWifi.h:382
hf_wifi_state_t GetState() const noexcept override
Get current WiFi state.
Definition EspWifi.cpp:818
hf_wifi_power_save_t GetPowerSave() const noexcept override
Get current power save mode.
Definition EspWifi.cpp:882
hf_wifi_security_t ConvertFromEspAuthMode(wifi_auth_mode_t auth_mode) const
Convert ESP-IDF auth mode to HardFOC security.
Definition EspWifi.cpp:1287
hf_wifi_err_t SetPowerSave(hf_wifi_power_save_t mode) noexcept override
Set power save mode.
Definition EspWifi.cpp:856
hf_wifi_mode_t ConvertFromEspMode(wifi_mode_t mode) const
Convert ESP-IDF WiFi mode to HardFOC mode.
Definition EspWifi.cpp:1244
void UpdateState(hf_wifi_state_t new_state)
Update internal state.
PlatformMutex m_mutex
Definition EspWifi.h:359
std::string GetConnectedSsid() const noexcept override
Get connected network SSID.
Definition EspWifi.cpp:823
hf_wifi_err_t Deinitialize() noexcept override
Deinitialize the WiFi subsystem.
Definition EspWifi.cpp:360
std::atomic< bool > m_smartconfig_active
Definition EspWifi.h:397
std::atomic< int8_t > m_rssi
Definition EspWifi.h:393
hf_wifi_err_t DeinitNetif()
Deinitialize ESP-IDF network interface.
Definition EspWifi.cpp:1091
virtual ~EspWifi()
Destructor - ensures proper cleanup.
Definition EspWifi.cpp:223
std::atomic< uint8_t > m_channel
Definition EspWifi.h:394
hf_wifi_err_t StopAccessPoint() noexcept override
Stop Access Point.
Definition EspWifi.cpp:621
hf_wifi_err_t GetScanResults(std::vector< hf_wifi_network_info_t > &networks, uint16_t max_networks=0) noexcept override
Get scan results.
Definition EspWifi.cpp:736
std::atomic< bool > m_initialized
Definition EspWifi.h:360
EventGroupHandle_t m_event_group
Definition EspWifi.h:373
bool IsInitialized() const noexcept override
Check if WiFi is initialized.
Definition EspWifi.cpp:449
esp_event_handler_instance_t m_ip_event_handler
Definition EspWifi.h:375
wifi_bandwidth_t GetBandwidth() const
Get WiFi channel bandwidth.
Definition EspWifi.cpp:1370
hf_wifi_ap_config_t m_ap_config
Definition EspWifi.h:367
int8_t GetTxPower() const
Get WiFi TX power.
Definition EspWifi.cpp:1349
void handleSmartconfigEvent(int32_t event_id, void *event_data)
Handle SmartConfig events internally.
Definition EspWifi.cpp:1229
hf_wifi_err_t InitNetif()
Initialize ESP-IDF network interface.
std::atomic< bool > m_connected
Definition EspWifi.h:391
hf_wifi_err_t GetIpInfo(hf_wifi_ip_info_t &ip_info) const noexcept override
Get current IP information.
Definition EspWifi.cpp:546
Definition PlatformMutex.h:78
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
hf_wifi_security_t
WiFi security types.
Definition BaseWifi.h:119
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
ESP32-specific WiFi configuration extensions.
Definition EspWifi.h:65
uint8_t mesh_max_layer
Definition EspWifi.h:95
bool enable_power_save
Definition EspWifi.h:67
bool enable_wpa3_transition
Definition EspWifi.h:80
bool enable_11k
Definition EspWifi.h:82
bool enable_fast_connect
Definition EspWifi.h:78
std::string enterprise_client_cert
Definition EspWifi.h:90
smartconfig_type_t smartconfig_type
Definition EspWifi.h:100
uint16_t mesh_max_connection
Definition EspWifi.h:96
bool enable_pmf_required
Definition EspWifi.h:79
uint16_t listen_interval
Definition EspWifi.h:69
bool enable_mesh
Definition EspWifi.h:94
std::string enterprise_ca_cert
Definition EspWifi.h:89
std::string enterprise_password
Definition EspWifi.h:88
std::string enterprise_client_key
Definition EspWifi.h:91
wifi_ps_type_t power_save_type
Definition EspWifi.h:68
std::string enterprise_username
Definition EspWifi.h:87
bool enable_enterprise
Definition EspWifi.h:86
bool enable_ampdu_rx
Definition EspWifi.h:74
uint8_t tx_power
Definition EspWifi.h:72
bool enable_smartconfig
Definition EspWifi.h:99
bool enable_11r
Definition EspWifi.h:81
wifi_bandwidth_t bandwidth
Definition EspWifi.h:73
bool enable_11v
Definition EspWifi.h:83
bool enable_ampdu_tx
Definition EspWifi.h:75
WiFi Access Point configuration structure.
Definition BaseWifi.h:209
WiFi IP configuration structure.
Definition BaseWifi.h:224
WiFi station configuration structure.
Definition BaseWifi.h:193