Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7553880

Browse filesBrowse files
committed
fix(wifi_scan): Fix some edge cases where WiFi Scan may fail
1 parent e37435c commit 7553880
Copy full SHA for 7553880

File tree

1 file changed

+14
-19
lines changed
Filter options

1 file changed

+14
-19
lines changed

‎libraries/WiFi/src/WiFiScan.cpp

Copy file name to clipboardExpand all lines: libraries/WiFi/src/WiFiScan.cpp
+14-19Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,6 @@ int16_t
9292
}
9393
if (esp_wifi_scan_start(&config, false) == ESP_OK) {
9494
_scanStarted = millis();
95-
if (!_scanStarted) { //Prevent 0 from millis overflow
96-
++_scanStarted;
97-
}
9895

9996
WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT);
10097
WiFiGenericClass::setStatusBits(WIFI_SCANNING_BIT);
@@ -118,21 +115,20 @@ int16_t
118115
void WiFiScanClass::_scanDone() {
119116
esp_wifi_scan_get_ap_num(&(WiFiScanClass::_scanCount));
120117
if (WiFiScanClass::_scanResult) {
121-
delete[] reinterpret_cast<wifi_ap_record_t *>(WiFiScanClass::_scanResult);
122-
WiFiScanClass::_scanResult = nullptr;
118+
free(WiFiScanClass::_scanResult);
119+
WiFiScanClass::_scanResult = NULL;
123120
}
124121

125122
if (WiFiScanClass::_scanCount) {
126-
WiFiScanClass::_scanResult = new (std::nothrow) wifi_ap_record_t[WiFiScanClass::_scanCount];
123+
WiFiScanClass::_scanResult = calloc(WiFiScanClass::_scanCount, sizeof(wifi_ap_record_t));
127124
if (!WiFiScanClass::_scanResult) {
128125
WiFiScanClass::_scanCount = 0;
129126
} else if (esp_wifi_scan_get_ap_records(&(WiFiScanClass::_scanCount), (wifi_ap_record_t *)_scanResult) != ESP_OK) {
130-
delete[] reinterpret_cast<wifi_ap_record_t *>(WiFiScanClass::_scanResult);
131-
WiFiScanClass::_scanResult = nullptr;
127+
free(WiFiScanClass::_scanResult);
128+
WiFiScanClass::_scanResult = NULL;
132129
WiFiScanClass::_scanCount = 0;
133130
}
134131
}
135-
WiFiScanClass::_scanStarted = 0; //Reset after a scan is completed for normal behavior
136132
WiFiGenericClass::setStatusBits(WIFI_SCAN_DONE_BIT);
137133
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
138134
}
@@ -161,15 +157,13 @@ int16_t WiFiScanClass::scanComplete() {
161157
}
162158

163159
if (WiFiGenericClass::getStatusBits() & WIFI_SCANNING_BIT) {
160+
// Check if the delay expired, return WIFI_SCAN_FAILED in this case
161+
if ((millis() - WiFiScanClass::_scanStarted) > WiFiScanClass::_scanTimeout) {
162+
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
163+
return WIFI_SCAN_FAILED;
164+
}
164165
return WIFI_SCAN_RUNNING;
165166
}
166-
// last one to avoid time affecting Async mode
167-
if (WiFiScanClass::_scanStarted
168-
&& (millis() - WiFiScanClass::_scanStarted)
169-
> WiFiScanClass::_scanTimeout) { //Check is scan was started and if the delay expired, return WIFI_SCAN_FAILED in this case
170-
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
171-
return WIFI_SCAN_FAILED;
172-
}
173167

174168
return WIFI_SCAN_FAILED;
175169
}
@@ -179,11 +173,12 @@ int16_t WiFiScanClass::scanComplete() {
179173
*/
180174
void WiFiScanClass::scanDelete() {
181175
WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT);
176+
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
182177
if (WiFiScanClass::_scanResult) {
183-
delete[] reinterpret_cast<wifi_ap_record_t *>(WiFiScanClass::_scanResult);
184-
WiFiScanClass::_scanResult = nullptr;
185-
WiFiScanClass::_scanCount = 0;
178+
free(WiFiScanClass::_scanResult);
179+
WiFiScanClass::_scanResult = NULL;
186180
}
181+
WiFiScanClass::_scanCount = 0;
187182
}
188183

189184
/**

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.