HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
EspTypes_WiFi.h
Go to the documentation of this file.
1
18#pragma once
19
20#include "EspTypes_Base.h"
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26#include "esp_event.h"
27#include "esp_mesh.h"
28#include "esp_netif.h"
29#include "esp_smartconfig.h"
30#include "esp_wifi.h"
31#include "esp_wifi_types.h"
32// WPS not available on ESP32-C6
33// #include "esp_wps.h"
34#include "lwip/ip_addr.h"
35
36#ifdef __cplusplus
37}
38#endif
39
40//==============================================================================
41// ESP32 WIFI CONSTANTS
42//==============================================================================
43
45static constexpr size_t HF_ESP_WIFI_SSID_MAX_LEN = 32;
46
48static constexpr size_t HF_ESP_WIFI_PASSWORD_MAX_LEN = 64;
49
51static constexpr uint16_t HF_ESP_WIFI_SCAN_MAX_RESULTS = 20;
52
55
58
60static constexpr uint16_t HF_ESP_WIFI_BEACON_INTERVAL_DEFAULT = 100;
61
63static constexpr uint8_t HF_ESP_WIFI_MAX_CONNECTIONS_DEFAULT = 4;
64
66static constexpr uint8_t HF_ESP_WIFI_CHANNEL_MIN = 1;
67static constexpr uint8_t HF_ESP_WIFI_CHANNEL_MAX = 14;
68
70static constexpr uint8_t HF_ESP_WIFI_TX_POWER_MIN = 0;
71static constexpr uint8_t HF_ESP_WIFI_TX_POWER_MAX = 20;
72
73//==============================================================================
74// ESP32 WIFI TYPE MAPPINGS
75//==============================================================================
76
80enum class hf_esp_wifi_auth_mode_t : uint8_t {
81 OPEN = WIFI_AUTH_OPEN,
82 WEP = WIFI_AUTH_WEP,
83 WPA_PSK = WIFI_AUTH_WPA_PSK,
84 WPA2_PSK = WIFI_AUTH_WPA2_PSK,
85 WPA_WPA2_PSK = WIFI_AUTH_WPA_WPA2_PSK,
86 WPA2_ENTERPRISE = WIFI_AUTH_WPA2_ENTERPRISE,
87 WPA3_PSK = WIFI_AUTH_WPA3_PSK,
88 WPA2_WPA3_PSK = WIFI_AUTH_WPA2_WPA3_PSK,
89 WAPI_PSK = WIFI_AUTH_WAPI_PSK
90};
91
95enum class hf_esp_wifi_mode_t : uint8_t {
96 NULL_MODE = WIFI_MODE_NULL,
97 STA = WIFI_MODE_STA,
98 AP = WIFI_MODE_AP,
99 APSTA = WIFI_MODE_APSTA
100};
101
105enum class hf_esp_wifi_power_save_t : uint8_t {
106 NONE = WIFI_PS_NONE,
107 MIN_MODEM = WIFI_PS_MIN_MODEM,
108 MAX_MODEM = WIFI_PS_MAX_MODEM
109};
110
114enum class hf_esp_wifi_bandwidth_t : uint8_t {
115 HT20 = WIFI_BW_HT20,
116 HT40 = WIFI_BW_HT40
117};
118
122enum class hf_esp_wifi_sort_method_t : uint8_t {
123 SIGNAL = WIFI_CONNECT_AP_BY_SIGNAL,
124 SECURITY = WIFI_CONNECT_AP_BY_SECURITY
125};
126
130enum class hf_esp_wifi_scan_method_t : uint8_t {
131 FAST = WIFI_FAST_SCAN,
132 ALL_CHANNEL = WIFI_ALL_CHANNEL_SCAN
133};
134
135//==============================================================================
136// ESP32 WIFI STRUCTURES
137//==============================================================================
138
143 uint32_t tx_packets;
144 uint32_t rx_packets;
145 uint32_t tx_bytes;
146 uint32_t rx_bytes;
147 uint32_t tx_errors;
148 uint32_t rx_errors;
149 uint32_t tx_retries;
150 uint32_t rx_missed;
151 int8_t noise_floor;
153};
154
161 uint32_t rf_cal_data[32];
162 uint32_t phy_cal_data[16];
163};
164
179
180//==============================================================================
181// ESP32 WIFI UTILITY FUNCTIONS
182//==============================================================================
183
184#ifdef __cplusplus
185
191inline wifi_auth_mode_t hfWifiSecurityToEspAuthMode(hf_wifi_security_t security) {
192 switch (security) {
194 return WIFI_AUTH_OPEN;
196 return WIFI_AUTH_WEP;
198 return WIFI_AUTH_WPA_PSK;
200 return WIFI_AUTH_WPA2_PSK;
202 return WIFI_AUTH_WPA_WPA2_PSK;
204 return WIFI_AUTH_WPA2_ENTERPRISE;
206 return WIFI_AUTH_WPA3_PSK;
208 return WIFI_AUTH_WPA2_WPA3_PSK;
210 return WIFI_AUTH_WAPI_PSK;
211 default:
212 return WIFI_AUTH_OPEN;
213 }
214}
215
221inline hf_wifi_security_t espAuthModeTohf_wifi_security_t(wifi_auth_mode_t auth_mode) {
222 switch (auth_mode) {
223 case WIFI_AUTH_OPEN:
225 case WIFI_AUTH_WEP:
227 case WIFI_AUTH_WPA_PSK:
229 case WIFI_AUTH_WPA2_PSK:
231 case WIFI_AUTH_WPA_WPA2_PSK:
233 case WIFI_AUTH_WPA2_ENTERPRISE:
235 case WIFI_AUTH_WPA3_PSK:
237 case WIFI_AUTH_WPA2_WPA3_PSK:
239 case WIFI_AUTH_WAPI_PSK:
241 default:
243 }
244}
245
251inline wifi_mode_t hfWifiModeToEspMode(hf_wifi_mode_t mode) {
252 switch (mode) {
254 return WIFI_MODE_STA;
256 return WIFI_MODE_AP;
258 return WIFI_MODE_APSTA;
260 return WIFI_MODE_NULL;
261 default:
262 return WIFI_MODE_NULL;
263 }
264}
265
271inline hf_wifi_mode_t espModeTohf_wifi_mode_t(wifi_mode_t mode) {
272 switch (mode) {
273 case WIFI_MODE_STA:
275 case WIFI_MODE_AP:
277 case WIFI_MODE_APSTA:
279 case WIFI_MODE_NULL:
281 default:
283 }
284}
285
291inline wifi_ps_type_t hfWifiPowerSaveToEspPowerSave(hf_wifi_power_save_t power_save) {
292 switch (power_save) {
294 return WIFI_PS_NONE;
296 return WIFI_PS_MIN_MODEM;
298 return WIFI_PS_MAX_MODEM;
299 default:
300 return WIFI_PS_NONE;
301 }
302}
303
309inline hf_wifi_power_save_t espPowerSaveTohf_wifi_power_save_t(wifi_ps_type_t power_save) {
310 switch (power_save) {
311 case WIFI_PS_NONE:
313 case WIFI_PS_MIN_MODEM:
315 case WIFI_PS_MAX_MODEM:
317 default:
319 }
320}
321
327inline hf_wifi_err_t espErrorToHfWifiError(esp_err_t esp_err) {
328 switch (esp_err) {
329 case ESP_OK:
331 case ESP_ERR_INVALID_ARG:
333 case ESP_ERR_INVALID_STATE:
335 case ESP_ERR_NO_MEM:
337 case ESP_ERR_TIMEOUT:
339 case ESP_ERR_WIFI_NOT_INIT:
341 case ESP_ERR_WIFI_NOT_STARTED:
343 case ESP_ERR_WIFI_CONN:
345 case ESP_ERR_WIFI_SSID:
347 case ESP_ERR_WIFI_PASSWORD:
349 case ESP_ERR_WIFI_TIMEOUT:
351 case ESP_ERR_WIFI_WAKE_FAIL:
353 case ESP_ERR_WIFI_WOULD_BLOCK:
355 default:
357 }
358}
359
365inline uint32_t lwipIpToUint32(const ip4_addr_t& ip_addr) {
366 return ip_addr.addr;
367}
368
374inline ip4_addr_t uint32ToLwipIp(uint32_t ip_uint32) {
375 ip4_addr_t ip_addr;
376 ip_addr.addr = ip_uint32;
377 return ip_addr;
378}
379
385inline bool isValidWifiChannel(uint8_t channel) {
386 return (channel >= HF_ESP_WIFI_CHANNEL_MIN && channel <= HF_ESP_WIFI_CHANNEL_MAX);
387}
388
394inline bool isValidWifiTxPower(uint8_t tx_power) {
395 return (tx_power >= HF_ESP_WIFI_TX_POWER_MIN && tx_power <= HF_ESP_WIFI_TX_POWER_MAX);
396}
397
403inline bool isValidSsid(const std::string& ssid) {
404 return (!ssid.empty() && ssid.length() <= HF_ESP_WIFI_SSID_MAX_LEN);
405}
406
413inline bool isValidWifiPassword(const std::string& password, hf_wifi_security_t security) {
415 return password.empty();
416 }
417
419 // WEP key length constants
420 static constexpr size_t WEP_KEY_64_BIT_ASCII = 5; // 64-bit WEP ASCII key
421 static constexpr size_t WEP_KEY_128_BIT_ASCII = 13; // 128-bit WEP ASCII key
422 static constexpr size_t WEP_KEY_128_BIT_HEX = 16; // 128-bit WEP hexadecimal key
423 static constexpr size_t WEP_KEY_152_BIT_ASCII = 29; // 152-bit WEP ASCII key
424
425 size_t len = password.length();
426 return (len == WEP_KEY_64_BIT_ASCII || len == WEP_KEY_128_BIT_ASCII ||
427 len == WEP_KEY_128_BIT_HEX || len == WEP_KEY_152_BIT_ASCII);
428 }
429
430 // WPA/WPA2/WPA3 passwords must be 8-63 characters
431 return (password.length() >= 8 && password.length() <= 63);
432}
433
439inline void espScanRecordToHfNetworkInfo(const wifi_ap_record_t& scan_record,
440 hf_wifi_network_info_t& network_info) {
441 network_info.ssid = std::string(reinterpret_cast<const char*>(scan_record.ssid));
442 std::memcpy(network_info.bssid, scan_record.bssid, 6);
443 network_info.security = espAuthModeTohf_wifi_security_t(scan_record.authmode);
444 network_info.rssi = scan_record.rssi;
445 network_info.channel = scan_record.primary;
446 network_info.hidden = (network_info.ssid.empty());
447}
448
454inline void hfStationConfigToEspConfig(const hf_wifi_station_config_t& hf_config,
455 wifi_sta_config_t& esp_config) {
456 std::memset(&esp_config, 0, sizeof(esp_config));
457
458 // Copy SSID
459 std::strncpy(reinterpret_cast<char*>(esp_config.ssid), hf_config.ssid.c_str(),
460 sizeof(esp_config.ssid) - 1);
461
462 // Copy password
463 std::strncpy(reinterpret_cast<char*>(esp_config.password), hf_config.password.c_str(),
464 sizeof(esp_config.password) - 1);
465
466 // Copy BSSID if set
467 if (hf_config.bssid_set) {
468 std::memcpy(esp_config.bssid, hf_config.bssid, 6);
469 esp_config.bssid_set = true;
470 }
471
472 // Set channel
473 esp_config.channel = hf_config.channel;
474
475 // Set scan method
476 esp_config.scan_method = static_cast<wifi_scan_method_t>(hf_config.scan_method);
477
478 // Set sort method
479 esp_config.sort_method = static_cast<wifi_sort_method_t>(hf_config.sort_method);
480
481 // Set thresholds
482 esp_config.threshold.rssi = hf_config.threshold_rssi;
483 esp_config.threshold.authmode = hfWifiSecurityToEspAuthMode(hf_config.threshold_authmode);
484}
485
491inline void hfApConfigToEspConfig(const hf_wifi_ap_config_t& hf_config,
492 wifi_ap_config_t& esp_config) {
493 std::memset(&esp_config, 0, sizeof(esp_config));
494
495 // Copy SSID
496 std::strncpy(reinterpret_cast<char*>(esp_config.ssid), hf_config.ssid.c_str(),
497 sizeof(esp_config.ssid) - 1);
498 esp_config.ssid_len = hf_config.ssid_len;
499
500 // Copy password
501 std::strncpy(reinterpret_cast<char*>(esp_config.password), hf_config.password.c_str(),
502 sizeof(esp_config.password) - 1);
503
504 // Set other parameters
505 esp_config.channel = hf_config.channel;
506 esp_config.authmode = hfWifiSecurityToEspAuthMode(hf_config.authmode);
507 esp_config.ssid_hidden = hf_config.ssid_hidden;
508 esp_config.max_connection = hf_config.max_connection;
509 esp_config.beacon_interval = hf_config.beacon_interval;
510}
511
512#endif // __cplusplus
hf_wifi_err_t
Definition BaseWifi.h:83
@ WIFI_ERR_INVALID_PASSWORD
@ WIFI_ERR_CONNECTION_FAILED
@ WIFI_ERR_NOT_INITIALIZED
ESP32 base type definitions for hardware abstraction.
static constexpr uint8_t HF_ESP_WIFI_CHANNEL_MAX
Definition EspTypes_WiFi.h:67
hf_esp_wifi_sort_method_t
ESP32-specific WiFi sort method.
Definition EspTypes_WiFi.h:122
static constexpr size_t HF_ESP_WIFI_PASSWORD_MAX_LEN
Maximum WiFi password length.
Definition EspTypes_WiFi.h:48
hf_esp_wifi_mode_t
ESP32-specific WiFi mode mapping.
Definition EspTypes_WiFi.h:95
static constexpr size_t HF_ESP_WIFI_SSID_MAX_LEN
Maximum WiFi SSID length.
Definition EspTypes_WiFi.h:45
static constexpr uint8_t HF_ESP_WIFI_TX_POWER_MAX
Definition EspTypes_WiFi.h:71
static constexpr uint8_t HF_ESP_WIFI_TX_POWER_MIN
WiFi TX power range (dBm)
Definition EspTypes_WiFi.h:70
static constexpr uint16_t HF_ESP_WIFI_SCAN_MAX_RESULTS
Maximum number of WiFi scan results.
Definition EspTypes_WiFi.h:51
static constexpr hf_timeout_ms_t HF_ESP_WIFI_CONNECT_TIMEOUT_DEFAULT
Default WiFi connection timeout.
Definition EspTypes_WiFi.h:54
static constexpr uint16_t HF_ESP_WIFI_BEACON_INTERVAL_DEFAULT
Default AP beacon interval.
Definition EspTypes_WiFi.h:60
hf_esp_wifi_bandwidth_t
ESP32-specific WiFi bandwidth mapping.
Definition EspTypes_WiFi.h:114
hf_esp_wifi_auth_mode_t
ESP32-specific WiFi authentication mode mapping.
Definition EspTypes_WiFi.h:80
hf_esp_wifi_scan_method_t
ESP32-specific WiFi scan method.
Definition EspTypes_WiFi.h:130
static constexpr uint8_t HF_ESP_WIFI_CHANNEL_MIN
WiFi channel range.
Definition EspTypes_WiFi.h:66
static constexpr hf_timeout_ms_t HF_ESP_WIFI_SCAN_TIMEOUT_DEFAULT
Default WiFi scan timeout.
Definition EspTypes_WiFi.h:57
hf_esp_wifi_power_save_t
ESP32-specific WiFi power save mode mapping.
Definition EspTypes_WiFi.h:105
static constexpr uint8_t HF_ESP_WIFI_MAX_CONNECTIONS_DEFAULT
Default AP maximum connections.
Definition EspTypes_WiFi.h:63
hf_time_t hf_timeout_ms_t
Timeout value in milliseconds.
Definition HardwareTypes.h:178
hf_wifi_mode_t
WiFi operating modes.
Definition BaseWifi.h:108
hf_wifi_security_t
WiFi security types.
Definition BaseWifi.h:119
hf_wifi_power_save_t
WiFi power save modes.
Definition BaseWifi.h:151
ESP32-specific WiFi calibration data.
Definition EspTypes_WiFi.h:158
bool rf_cal_valid
Definition EspTypes_WiFi.h:159
bool phy_cal_valid
Definition EspTypes_WiFi.h:160
uint32_t phy_cal_data[16]
Definition EspTypes_WiFi.h:162
uint32_t rf_cal_data[32]
Definition EspTypes_WiFi.h:161
ESP32-specific WiFi performance configuration.
Definition EspTypes_WiFi.h:168
uint16_t tx_ba_win
Definition EspTypes_WiFi.h:175
bool enable_ampdu_rx
Definition EspTypes_WiFi.h:169
bool enable_ampdu_tx
Definition EspTypes_WiFi.h:170
bool enable_csi
Definition EspTypes_WiFi.h:176
uint8_t ampdu_rx_num
Definition EspTypes_WiFi.h:171
uint8_t ampdu_tx_num
Definition EspTypes_WiFi.h:172
uint16_t rx_ba_win
Definition EspTypes_WiFi.h:174
bool enable_ftm
Definition EspTypes_WiFi.h:177
bool enable_amsdu
Definition EspTypes_WiFi.h:173
ESP32-specific WiFi statistics structure.
Definition EspTypes_WiFi.h:142
uint32_t rx_errors
Definition EspTypes_WiFi.h:148
uint32_t tx_packets
Definition EspTypes_WiFi.h:143
int8_t noise_floor
Definition EspTypes_WiFi.h:151
uint32_t rx_bytes
Definition EspTypes_WiFi.h:146
uint32_t rx_packets
Definition EspTypes_WiFi.h:144
uint32_t tx_retries
Definition EspTypes_WiFi.h:149
uint8_t channel_utilization
Definition EspTypes_WiFi.h:152
uint32_t tx_bytes
Definition EspTypes_WiFi.h:145
uint32_t rx_missed
Definition EspTypes_WiFi.h:150
uint32_t tx_errors
Definition EspTypes_WiFi.h:147
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 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