From 3d36fa2b4c81cf444b7f07b538633c24dff2a619 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Wed, 2 Mar 2022 03:21:23 +0100 Subject: [PATCH] Better last sta error access --- src/espwifistack.cpp | 17 +++++++++++++++-- src/espwifistack.h | 10 ++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/espwifistack.cpp b/src/espwifistack.cpp index 81bc442..fba539e 100644 --- a/src/espwifistack.cpp +++ b/src/espwifistack.cpp @@ -121,6 +121,8 @@ wifi_ps_type_t _sleepEnabled = WIFI_PS_MIN_MODEM; std::atomic _sta_status{WiFiStaStatus::NO_SHIELD}; std::optional _wifiConnectFailFlag; uint8_t _wifiConnectFailCounter{}; + +std::optional _last_sta_error; std::string _last_sta_error_message; // scan @@ -146,6 +148,7 @@ const std::optional &lastStaSwitchedToConne const bool &esp_wifi_started{_esp_wifi_started}; const uint8_t &sta_error_count{_wifiConnectFailCounter}; const std::string &last_sta_error_message{_last_sta_error_message}; +const std::optional &last_sta_error{_last_sta_error}; const std::vector &pastConnectPlan{_pastConnectPlan}; const mac_t ¤tConnectPlanEntry{_currentConnectPlanEntry}; const std::vector &connectPlan{_connectPlan}; @@ -1319,10 +1322,20 @@ void wifi_event_callback(const config &config, const WifiEvent &event) const auto reason = event.wifi_sta_disconnected.reason; { + const mac_t bssid{event.wifi_sta_disconnected.bssid}; + const char * const reasonStr = reason2str(reason); + + _last_sta_error = StaError { + .ssid = std::string{ssid}, + .bssid = bssid, + .reason = reason, + .reasonStr = reasonStr + }; + auto msg = fmt::format("{} WIFI_STA_DISCONNECTED ssid=\"{}\" bssid={} reason={}({})", espchrono::millis_clock::now().time_since_epoch().count(), - ssid, toString(mac_t{event.wifi_sta_disconnected.bssid}), - reason, reason2str(reason)); + ssid, toString(bssid), + reason, reasonStr); ESP_LOGW(TAG, "%.*s", msg.size(), msg.data()); _last_sta_error_message += msg; _last_sta_error_message += '\n'; diff --git a/src/espwifistack.h b/src/espwifistack.h index 61c9428..b450188 100644 --- a/src/espwifistack.h +++ b/src/espwifistack.h @@ -50,6 +50,16 @@ extern const bool &esp_wifi_started; extern const uint8_t &sta_error_count; extern const std::string &last_sta_error_message; +struct StaError +{ + espchrono::millis_clock::time_point timestamp{espchrono::millis_clock::now()}; + std::string ssid; + mac_t bssid; + uint8_t reason; + const char *reasonStr; +}; +extern const std::optional &last_sta_error; + extern const std::vector &pastConnectPlan; extern const mac_t ¤tConnectPlanEntry; extern const std::vector &connectPlan;