|
27 | 27 | #include "ESP8266WiFiMulti.h"
|
28 | 28 | #include <limits.h>
|
29 | 29 | #include <string.h>
|
| 30 | +#include <coredecls.h> |
30 | 31 |
|
31 | 32 | /**
|
32 | 33 | * @brief Print WiFi status
|
@@ -83,36 +84,25 @@ static void printWiFiStatus(wl_status_t status)
|
83 | 84 | static wl_status_t waitWiFiConnect(uint32_t connectTimeoutMs)
|
84 | 85 | {
|
85 | 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); |
86 | 91 |
|
87 |
| - // Set WiFi connect timeout |
88 |
| - using esp8266::polledTimeout::oneShotMs; |
89 |
| - oneShotMs connectTimeout(connectTimeoutMs); |
90 |
| - |
91 |
| - // Wait for WiFi status change or timeout |
92 |
| - do { |
93 |
| - // Refresh watchdog |
94 |
| - delay(0); |
95 |
| - |
96 |
| - // Get WiFi status |
97 |
| - status = WiFi.status(); |
98 |
| - |
99 |
| - // Check status |
100 |
| - if (status == WL_CONNECTED) { |
101 |
| - // Connected, print WiFi status |
102 |
| - printWiFiStatus(status); |
103 |
| - |
104 |
| - // Return WiFi status |
105 |
| - return status; |
106 |
| - } else if (status == WL_CONNECT_FAILED) { |
107 |
| - DEBUG_WIFI_MULTI("[WIFIM] Connect failed\n"); |
108 |
| - |
109 |
| - // Return WiFi connect failed |
110 |
| - return WL_CONNECT_FAILED; |
111 |
| - } |
112 |
| - } while (!connectTimeout); |
| 92 | + // Check status |
| 93 | + if (status == WL_CONNECTED) { |
| 94 | + // Connected, print WiFi status |
| 95 | + printWiFiStatus(status); |
113 | 96 |
|
114 |
| - 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 | + } |
115 | 104 |
|
| 105 | + // Return WiFi connect failed |
116 | 106 | return WL_CONNECT_FAILED;
|
117 | 107 | }
|
118 | 108 |
|
@@ -242,24 +232,16 @@ int8_t ESP8266WiFiMulti::startScan()
|
242 | 232 | // Start wifi scan in async mode
|
243 | 233 | WiFi.scanNetworks(true);
|
244 | 234 |
|
245 |
| - // Set WiFi scan timeout |
246 |
| - using esp8266::polledTimeout::oneShotMs; |
247 |
| - oneShotMs scanTimeout(WIFI_SCAN_TIMEOUT_MS); |
248 |
| - |
249 | 235 | // Wait for WiFi scan change or timeout
|
250 |
| - do { |
251 |
| - // Refresh watchdog |
252 |
| - delay(0); |
253 |
| - |
254 |
| - // Check scan timeout which may occur when scan does not report completion |
255 |
| - if (scanTimeout) { |
256 |
| - DEBUG_WIFI_MULTI("[WIFIM] Scan timeout\n"); |
257 |
| - return WIFI_SCAN_FAILED; |
258 |
| - } |
259 |
| - |
260 |
| - // Get scan result |
261 |
| - scanResult = WiFi.scanComplete(); |
262 |
| - } 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 | + } |
263 | 245 |
|
264 | 246 | // Print WiFi scan result
|
265 | 247 | printWiFiScan();
|
|
0 commit comments