27
27
#include < limits.h>
28
28
#include < string.h>
29
29
30
- ESP8266WiFiMulti::ESP8266WiFiMulti () {
30
+ ESP8266WiFiMulti::ESP8266WiFiMulti () : connect_timeout_ms( 0 ) {
31
31
}
32
32
33
33
ESP8266WiFiMulti::~ESP8266WiFiMulti () {
@@ -116,22 +116,26 @@ void ESP8266WiFiMulti::selectBest(BestNetwork& best, int8_t scanResult) {
116
116
}
117
117
118
118
wl_status_t ESP8266WiFiMulti::connectLoop () {
119
- static const uint32_t connectTimeout = 5000 ; // 5s timeout
120
-
121
- auto startTime = millis ();
122
119
wl_status_t status = WiFi.status ();
123
120
// wait for connection, fail, or timeout
124
- while (status != WL_CONNECTED && status != WL_NO_SSID_AVAIL && status != WL_CONNECT_FAILED && (millis () - startTime) <= connectTimeout) {
125
- delay (10 );
126
- status = WiFi.status ();
121
+ if (status == WL_CONNECTED ||
122
+ status == WL_NO_SSID_AVAIL ||
123
+ status == WL_CONNECT_FAILED ||
124
+ (millis () > connect_timeout_ms))
125
+ {
126
+ handleConnectComplete (status);
127
+ connect_timeout_ms = 0 ;
127
128
}
128
129
129
- handleConnectComplete (status);
130
130
return status;
131
131
}
132
132
133
133
wl_status_t ESP8266WiFiMulti::run (void ) {
134
134
135
+ if (connect_timeout_ms != 0 ) {
136
+ return connectLoop ();
137
+ }
138
+
135
139
wl_status_t status = WiFi.status ();
136
140
if (status == WL_DISCONNECTED || status == WL_NO_SSID_AVAIL || status == WL_IDLE_STATUS || status == WL_CONNECT_FAILED) {
137
141
@@ -158,6 +162,8 @@ wl_status_t ESP8266WiFiMulti::run(void) {
158
162
}
159
163
160
164
if (scanResult > 0 ) {
165
+ static const uint32_t connectTimeout = 5000 ; // 5s timeout
166
+
161
167
// scan done, analyze
162
168
BestNetwork best;
163
169
@@ -177,8 +183,8 @@ wl_status_t ESP8266WiFiMulti::run(void) {
177
183
DEBUG_WIFI_MULTI (" [WIFI] Connecting BSSID: %02X:%02X:%02X:%02X:%02X:%02X SSID: %s Channel: %d (%d)\n " , best.BSSID [0 ], best.BSSID [1 ], best.BSSID [2 ], best.BSSID [3 ], best.BSSID [4 ], best.BSSID [5 ], best.Network .ssid , best.Channel , best.NetworkDb );
178
184
179
185
WiFi.begin (best.Network .ssid , best.Network .passphrase , best.Channel , best.BSSID );
186
+ connect_timeout_ms = millis () + connectTimeout;
180
187
181
- status = connectLoop ();
182
188
} else {
183
189
DEBUG_WIFI_MULTI (" [WIFI] no matching wifi found!\n " );
184
190
}
0 commit comments