@@ -18,6 +18,8 @@ WiFiSettingsService::WiFiSettingsService(AsyncWebServer* server, FS* fs, Securit
1818 WiFi.onEvent (
1919 std::bind (&WiFiSettingsService::onStationModeDisconnected, this , std::placeholders::_1, std::placeholders::_2),
2020 WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED);
21+ WiFi.onEvent (std::bind (&WiFiSettingsService::onStationModeStop, this , std::placeholders::_1, std::placeholders::_2),
22+ WiFiEvent_t::SYSTEM_EVENT_STA_STOP);
2123#elif defined(ESP8266)
2224 _onStationModeDisconnectedHandler = WiFi.onStationModeDisconnected (
2325 std::bind (&WiFiSettingsService::onStationModeDisconnected, this , std::placeholders::_1));
@@ -54,7 +56,8 @@ void WiFiSettingsService::readFromJsonObject(JsonObject& root) {
5456 // Turning off static ip config if we don't meet the minimum requirements
5557 // of ipAddress, gateway and subnet. This may change to static ip only
5658 // as sensible defaults can be assumed for gateway and subnet
57- if (_settings.staticIPConfig && (_settings.localIP == INADDR_NONE || _settings.gatewayIP == INADDR_NONE || _settings.subnetMask == INADDR_NONE)) {
59+ if (_settings.staticIPConfig &&
60+ (_settings.localIP == INADDR_NONE || _settings.gatewayIP == INADDR_NONE || _settings.subnetMask == INADDR_NONE)) {
5861 _settings.staticIPConfig = false ;
5962 }
6063}
@@ -79,11 +82,17 @@ void WiFiSettingsService::onConfigUpdated() {
7982}
8083
8184void WiFiSettingsService::reconfigureWiFiConnection () {
82- // disconnect and de-configure wifi
83- WiFi.disconnect (true );
84-
8585 // reset last connection attempt to force loop to reconnect immediately
8686 _lastConnectionAttempt = 0 ;
87+
88+ // disconnect and de-configure wifi
89+ #ifdef ESP32
90+ if (WiFi.disconnect (true )) {
91+ _stopping = true ;
92+ }
93+ #elif defined(ESP8266)
94+ WiFi.disconnect (true );
95+ #endif
8796}
8897
8998void WiFiSettingsService::readIP (JsonObject& root, String key, IPAddress& _ip) {
@@ -136,6 +145,12 @@ void WiFiSettingsService::manageSTA() {
136145void WiFiSettingsService::onStationModeDisconnected (WiFiEvent_t event, WiFiEventInfo_t info) {
137146 WiFi.disconnect (true );
138147}
148+ void WiFiSettingsService::onStationModeStop (WiFiEvent_t event, WiFiEventInfo_t info) {
149+ if (_stopping) {
150+ _lastConnectionAttempt = 0 ;
151+ _stopping = false ;
152+ }
153+ }
139154#elif defined(ESP8266)
140155void WiFiSettingsService::onStationModeDisconnected (const WiFiEventStationModeDisconnected& event) {
141156 WiFi.disconnect (true );
0 commit comments