diff --git a/src/espwifistack.cpp b/src/espwifistack.cpp index a7a0e25..afd5375 100644 --- a/src/espwifistack.cpp +++ b/src/espwifistack.cpp @@ -41,6 +41,9 @@ std::optional lastStatus; WiFiState _wifiState; +std::optional _lastStaSwitchedFromConnected; +std::optional _lastStaSwitchedToConnected; + std::optional lastScanStarted; espchrono::millis_clock::time_point _lastConnect; @@ -105,6 +108,8 @@ std::vector connectPlan; const WiFiState &wifiStateMachineState{_wifiState}; cpputils::Signal<> scanResultChanged{}; +const std::optional &lastStaSwitchedFromConnected{_lastStaSwitchedFromConnected}; +const std::optional &lastStaSwitchedToConnected{_lastStaSwitchedToConnected}; namespace { @@ -495,8 +500,14 @@ esp_err_t goe_wifi_set_ap_config(const config &config, const std::string &ssid, void set_sta_status(WiFiStaStatus status) { - ESP_LOGI(TAG, "%s", toString(status).c_str()); - _sta_status = status; + WiFiStaStatus oldStatus = _sta_status.exchange(status); + + ESP_LOGI(TAG, "%s (from %s)", toString(status).c_str(), toString(oldStatus).c_str()); + + if (oldStatus == WiFiStaStatus::WL_CONNECTED && status != WiFiStaStatus::WL_CONNECTED) + _lastStaSwitchedFromConnected = espchrono::millis_clock::now(); + else if (oldStatus != WiFiStaStatus::WL_CONNECTED && status == WiFiStaStatus::WL_CONNECTED) + _lastStaSwitchedToConnected = espchrono::millis_clock::now(); } void goe_wifi_scan_done() diff --git a/src/espwifistack.h b/src/espwifistack.h index c1db7a8..0543682 100644 --- a/src/espwifistack.h +++ b/src/espwifistack.h @@ -3,6 +3,7 @@ // system includes #include #include +#include // esp-idf includes #include @@ -32,6 +33,9 @@ extern const WiFiState &wifiStateMachineState; extern cpputils::Signal<> scanResultChanged; +extern const std::optional &lastStaSwitchedFromConnected; +extern const std::optional &lastStaSwitchedToConnected; + //! Call once at startup void init(const config &config);