feat: enhance WifiHandler initialization with event handling and TCP/IP stack setup
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "wifi_handler.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_event.h"
|
||||
#include "esp_netif.h"
|
||||
#include "freertos/event_groups.h"
|
||||
#include "esp_log.h"
|
||||
#include "freertos/semphr.h"
|
||||
@@ -50,6 +51,8 @@ WifiHandler::~WifiHandler() {
|
||||
}
|
||||
vSemaphoreDelete(this->scan_mutex);
|
||||
vSemaphoreDelete(this->connection_mutex);
|
||||
esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &WifiHandler::wifi_event_handler);
|
||||
esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &WifiHandler::wifi_event_handler);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +61,47 @@ void WifiHandler::init() {
|
||||
ESP_LOGW(TAG, "Already initialized, skipping");
|
||||
return;
|
||||
}
|
||||
esp_err_t err;
|
||||
|
||||
// initialize TCP/IP stack and default event loop
|
||||
err = esp_netif_init();
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "esp_netif_init failed: %s", esp_err_to_name(err));
|
||||
return;
|
||||
}
|
||||
|
||||
err = esp_event_loop_create_default();
|
||||
if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) {
|
||||
ESP_LOGE(TAG, "esp_event_loop_create_default failed: %s", esp_err_to_name(err));
|
||||
return;
|
||||
}
|
||||
|
||||
// create default WiFi station
|
||||
esp_netif_create_default_wifi_sta();
|
||||
|
||||
// init WiFi driver
|
||||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||
err = esp_wifi_init(&cfg);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "esp_wifi_init failed: %s", esp_err_to_name(err));
|
||||
return;
|
||||
}
|
||||
|
||||
// register event handlers for WiFi and IP events
|
||||
esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &WifiHandler::wifi_event_handler, this);
|
||||
esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &WifiHandler::wifi_event_handler, this);
|
||||
|
||||
err = esp_wifi_set_mode(WIFI_MODE_STA);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "esp_wifi_set_mode failed: %s", esp_err_to_name(err));
|
||||
return;
|
||||
}
|
||||
|
||||
err = esp_wifi_start();
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "esp_wifi_start failed: %s", esp_err_to_name(err));
|
||||
return;
|
||||
}
|
||||
|
||||
// get WiFi credentials from KV storage if available
|
||||
char* ssid = nullptr;
|
||||
@@ -67,7 +110,7 @@ void WifiHandler::init() {
|
||||
|
||||
if (ssid && password) {
|
||||
ESP_LOGI(TAG, "Found stored WiFi credentials, connecting to SSID: %s", ssid);
|
||||
esp_err_t err = this->connect(ssid, password);
|
||||
err = this->connect(ssid, password);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to connect to stored WiFi credentials: %s", esp_err_to_name(err));
|
||||
}
|
||||
@@ -77,9 +120,7 @@ void WifiHandler::init() {
|
||||
|
||||
delete[] ssid;
|
||||
delete[] password;
|
||||
// TODO: setup WiFi event handlers
|
||||
// TODO: add auto-reconnect logic
|
||||
//
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user