diff --git a/firmware/main/esp_expected.hpp b/firmware/main/esp_expected.hpp index ec5e3f4..015f89e 100644 --- a/firmware/main/esp_expected.hpp +++ b/firmware/main/esp_expected.hpp @@ -38,21 +38,21 @@ } template -auto unwrapOrAbort(Expected&& expected, const std::source_location location = std::source_location::current()) +decltype(auto) unwrapOrAbort(Expected&& expected, const std::source_location location = std::source_location::current()) { if (!expected.has_value()) abortWithError("Unwrapped an errored expected.", location); else - return expected.value(); + return std::forward(expected).value(); } template -auto unwrapOr(Expected&& expected, F&& f) +decltype(auto) unwrapOr(Expected&& expected, F&& f) { if (!expected.has_value()) std::invoke(std::forward(f), expected.error()); else - return expected.value(); + return std::forward(expected).value(); std::unreachable(); } diff --git a/firmware/main/wifi_provisioner.cpp b/firmware/main/wifi_provisioner.cpp index 93c434f..593e78f 100644 --- a/firmware/main/wifi_provisioner.cpp +++ b/firmware/main/wifi_provisioner.cpp @@ -25,7 +25,7 @@ extern const char index_end[] asm("_binary_index_html_end"); namespace { -const char* TAG = "wifi softAP"; +const char* TAG = "ParamProvisioner"; const char* NVS_IS_INITED = "_is_inited"; ssize_t indexHtmlLength() @@ -246,6 +246,15 @@ WifiProvisioner::~WifiProvisioner() { httpd_stop(http_server_); } + + if (esp_netif_) + { + esp_wifi_stop(); + esp_wifi_deinit(); + + esp_netif_destroy_default_wifi(esp_netif_); + esp_event_loop_delete_default(); + } } bool WifiProvisioner::parametersAreConfigured() @@ -375,7 +384,7 @@ std::expected WifiProvisioner::initializeWifiAp_() { TRY_ESP(esp_netif_init()); TRY_ESP(esp_event_loop_create_default()); - esp_netif_create_default_wifi_ap(); + esp_netif_ = esp_netif_create_default_wifi_ap(); wifi_init_config_t config = WIFI_INIT_CONFIG_DEFAULT(); TRY_ESP(esp_wifi_init(&config)); diff --git a/firmware/main/wifi_provisioner.hpp b/firmware/main/wifi_provisioner.hpp index 9551232..e384a6e 100644 --- a/firmware/main/wifi_provisioner.hpp +++ b/firmware/main/wifi_provisioner.hpp @@ -124,6 +124,7 @@ public: private: std::unique_ptr file_handle_; bool settings_initialized_ = false; + void* esp_netif_ = nullptr; httpd_handle_t http_server_ = nullptr; etl::vector params_; etl::delegate& params)> success_cb_;