diff --git a/extras/arduino-core-tests b/extras/arduino-core-tests index cd3675f3..1464f46c 160000 --- a/extras/arduino-core-tests +++ b/extras/arduino-core-tests @@ -1 +1 @@ -Subproject commit cd3675f346ad2605c5d0efc0f15421b3f3cc54d6 +Subproject commit 1464f46c9200f5726e4047bc2f70a72d432f6efc diff --git a/libraries/WiFi/src/WiFi.cpp b/libraries/WiFi/src/WiFi.cpp index 2d813efd..b7967161 100644 --- a/libraries/WiFi/src/WiFi.cpp +++ b/libraries/WiFi/src/WiFi.cpp @@ -337,15 +337,22 @@ int8_t WiFiClass::scanNetworks() { wifi_assert_raise_ret(_last_error, 0); } + /* Reset scan results before starting new scan */ + scan_results.status = CY_WCM_SCAN_INCOMPLETE; + scan_results.result_count = 0; + cy_rslt_t ret = cy_wcm_start_scan(WiFiClass::wcm_scan_cb, (void *)&scan_results, NULL); wcm_assert_raise_ret(ret, WIFI_ERROR_SCAN_FAILED, 0); - constexpr uint16_t timeout = 1000; /* 1000 times by 10 ms delay = 10 seconds */ + constexpr uint16_t scan_timeout_ms = 1000; /* 1000 times by 10 ms delay = 10 seconds */ uint16_t timer = 0; - while (scan_results.status == CY_WCM_SCAN_INCOMPLETE && timer < timeout) { + while (scan_results.status == CY_WCM_SCAN_INCOMPLETE && timer < scan_timeout_ms) { delay(10); timer++; } + /* Stop scan after completion or timeout */ + ret = cy_wcm_stop_scan(); + wcm_assert_raise_ret(ret, WIFI_ERROR_SCAN_FAILED, 0); /* Deinitialize if it was not already assigned as access point or station. */ @@ -625,13 +632,13 @@ wl_auth_mode WiFiClass::convertEncryptType(cy_wcm_security_t wcm_sec) { } return sec_type; } + /* Callback function for scanNetworks() method. After each scan result, the scan callback is executed.*/ void WiFiClass::wcm_scan_cb(cy_wcm_scan_result_t *result_ptr, void *user_data, cy_wcm_scan_status_t status) { scan_results_t *scan_user_data = (scan_results_t *)user_data; /* Stop after if more results than the maximum are available */ - if (scan_user_data->result_count > CY_MAX_SCAN_RESULTS) { - cy_wcm_stop_scan(); + if (scan_user_data->result_count >= CY_MAX_SCAN_RESULTS) { scan_user_data->status = CY_WCM_SCAN_COMPLETE; return; }