diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 0ef7522c..b07993bc 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -313,8 +313,12 @@ esp_err_t WiFiGenericClass::_eventCallback(void *arg, system_event_t *event) WiFiSTAClass::_setStatus(WL_DISCONNECTED); } else if(event->event_id == SYSTEM_EVENT_STA_STOP) { WiFiSTAClass::_setStatus(WL_NO_SHIELD); + } else if(event->event_id == SYSTEM_EVENT_STA_CONNECTED) { + WiFiSTAClass::_setStatus(WL_IDLE_STATUS); } else if(event->event_id == SYSTEM_EVENT_STA_GOT_IP) { - WiFiSTAClass::_setStatus(WL_CONNECTED); + if(WiFiSTAClass::status() == WL_IDLE_STATUS) { + WiFiSTAClass::_setStatus(WL_CONNECTED); + } } for(uint32_t i = 0; i < cbEventList.size(); i++) { diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index 48fa9746..6089e7a4 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -358,7 +358,7 @@ uint8_t WiFiSTAClass::waitForConnectResult() return WL_DISCONNECTED; } int i = 0; - while(status() >= WL_DISCONNECTED && i++ < 100) { + while((!status() || status() >= WL_DISCONNECTED) && i++ < 100) { delay(100); } return status(); diff --git a/libraries/WiFi/src/WiFiSTA.h b/libraries/WiFi/src/WiFiSTA.h index 2e1a8fba..a8137e09 100644 --- a/libraries/WiFi/src/WiFiSTA.h +++ b/libraries/WiFi/src/WiFiSTA.h @@ -72,7 +72,7 @@ public: bool setHostname(const char * hostname); // STA WiFi info - wl_status_t status(); + static wl_status_t status(); String SSID() const; String psk() const;