Added timeout to WiFiScan.cpp to prevent getting stuck at WIFI_SCAN_RUNNING #3197
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
If you start a scan for networks if the esp is connecting to an ap the scan request is aborted by the sdk without returning an error. See here espressif/esp-idf#3044 for reference.
In my case the scan routine is running in its own thread so i can't assume when the scanNetworks is triggered. If it gets triggered while the esp is connecting the connect has priority and the SYSTEM_EVENT_SCAN_DONE event is never triggered. In that particular case the WIFI_SCANNING_BIT is never cleared and you're not able to scan for networks without a reset.
To prevent that case i modified the WiFiScan.ccp to include a timeout mechanism to reset a failed scan. So I added a define SCAN_ERROR_DELAY with a value of 10000 for 10s as timeout and the parameter _scanStarted.
If the SYSTEM_EVENT_SCAN_DONE event is not fired within the SCAN_ERROR_DELAY the scanComplete method returns WIFI_SCAN_FAILED to indicate that the scan failed.