@@ -84,36 +84,25 @@ static void printWiFiStatus(wl_status_t status)
84
84
static wl_status_t waitWiFiConnect (uint32_t connectTimeoutMs)
85
85
{
86
86
wl_status_t status;
87
+ // The final argument, intvl_ms, to esp_delay influences how frequently
88
+ // the scheduled recurrent functions (Schedule.h) are probed.
89
+ esp_delay (connectTimeoutMs,
90
+ [&status]() { status = WiFi.status (); return status != WL_CONNECTED && status != WL_CONNECT_FAILED; }, 0 );
87
91
88
- // Set WiFi connect timeout
89
- using esp8266::polledTimeout::oneShotMs;
90
- oneShotMs connectTimeout (connectTimeoutMs);
91
-
92
- // Wait for WiFi status change or timeout
93
- do {
94
- // Refresh watchdog
95
- esp_yield ();
96
-
97
- // Get WiFi status
98
- status = WiFi.status ();
99
-
100
- // Check status
101
- if (status == WL_CONNECTED) {
102
- // Connected, print WiFi status
103
- printWiFiStatus (status);
104
-
105
- // Return WiFi status
106
- return status;
107
- } else if (status == WL_CONNECT_FAILED) {
108
- DEBUG_WIFI_MULTI (" [WIFIM] Connect failed\n " );
109
-
110
- // Return WiFi connect failed
111
- return WL_CONNECT_FAILED;
112
- }
113
- } while (!connectTimeout);
92
+ // Check status
93
+ if (status == WL_CONNECTED) {
94
+ // Connected, print WiFi status
95
+ printWiFiStatus (status);
114
96
115
- DEBUG_WIFI_MULTI (" [WIFIM] Connect timeout\n " );
97
+ // Return WiFi status
98
+ return status;
99
+ } else if (status == WL_CONNECT_FAILED) {
100
+ DEBUG_WIFI_MULTI (" [WIFIM] Connect failed\n " );
101
+ } else {
102
+ DEBUG_WIFI_MULTI (" [WIFIM] Connect timeout\n " );
103
+ }
116
104
105
+ // Return WiFi connect failed
117
106
return WL_CONNECT_FAILED;
118
107
}
119
108
@@ -243,24 +232,16 @@ int8_t ESP8266WiFiMulti::startScan()
243
232
// Start wifi scan in async mode
244
233
WiFi.scanNetworks (true );
245
234
246
- // Set WiFi scan timeout
247
- using esp8266::polledTimeout::oneShotMs;
248
- oneShotMs scanTimeout (WIFI_SCAN_TIMEOUT_MS);
249
-
250
235
// Wait for WiFi scan change or timeout
251
- do {
252
- // Refresh watchdog
253
- esp_yield ();
254
-
255
- // Check scan timeout which may occur when scan does not report completion
256
- if (scanTimeout) {
257
- DEBUG_WIFI_MULTI (" [WIFIM] Scan timeout\n " );
258
- return WIFI_SCAN_FAILED;
259
- }
260
-
261
- // Get scan result
262
- scanResult = WiFi.scanComplete ();
263
- } while (scanResult < 0 );
236
+ // The final argument, intvl_ms, to esp_delay influences how frequently
237
+ // the scheduled recurrent functions (Schedule.h) are probed.
238
+ esp_delay (WIFI_SCAN_TIMEOUT_MS,
239
+ [&scanResult]() { scanResult = WiFi.scanComplete (); return scanResult < 0 ; }, 0 );
240
+ // Check for scan timeout which may occur when scan does not report completion
241
+ if (scanResult < 0 ) {
242
+ DEBUG_WIFI_MULTI (" [WIFIM] Scan timeout\n " );
243
+ return WIFI_SCAN_FAILED;
244
+ }
264
245
265
246
// Print WiFi scan result
266
247
printWiFiScan ();
0 commit comments