fixed WiFi scan conflict with AP reconnect process

This commit is contained in:
Bogdan Pilyugin 2023-05-07 14:38:48 +02:00
parent abd7941e27
commit 832bd3e623

View File

@ -51,7 +51,7 @@ static bool isWiFiFail = false;
#define DEFAULT_SCAN_LIST_SIZE 20 #define DEFAULT_SCAN_LIST_SIZE 20
static wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE]; static wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE];
static bool isScanReady = false; static bool isScanExecuting = false;
wifi_ap_record_t* GetWiFiAPRecord(uint8_t n) wifi_ap_record_t* GetWiFiAPRecord(uint8_t n)
{ {
@ -522,7 +522,7 @@ static void WiFiControlTask(void *arg)
} }
if (isWiFiFail) if (isWiFiFail)
{ {
if (--reconnect_counter <= 0) if (--reconnect_counter <= 0 && !isScanExecuting)
{ {
ESP_LOGI(TAG, "WiFi STA started, reconnecting to AP..."); ESP_LOGI(TAG, "WiFi STA started, reconnecting to AP...");
esp_wifi_connect(); esp_wifi_connect();
@ -542,16 +542,20 @@ static void wifi_scan(void *arg)
uint16_t number = DEFAULT_SCAN_LIST_SIZE; uint16_t number = DEFAULT_SCAN_LIST_SIZE;
uint16_t ap_count = 0; uint16_t ap_count = 0;
memset(ap_info, 0, sizeof(ap_info)); memset(ap_info, 0, sizeof(ap_info));
esp_wifi_scan_start(NULL, true); while (esp_wifi_scan_start(NULL, true) == ESP_ERR_WIFI_STATE)
{
vTaskDelay(pdMS_TO_TICKS(2000));
}
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info)); ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count)); ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));
ESP_LOGI(TAG, "Total APs scanned = %u", ap_count); ESP_LOGI(TAG, "Total APs scanned = %u", ap_count);
isScanReady = true; isScanExecuting = false;
vTaskDelete(NULL); vTaskDelete(NULL);
} }
void WiFiScan(void) void WiFiScan(void)
{ {
isScanReady = false; isScanExecuting = true;
xTaskCreate(wifi_scan, "ScanWiFiTask", 1024 * 4, (void*) 0, 3, NULL); xTaskCreate(wifi_scan, "ScanWiFiTask", 1024 * 4, (void*) 0, 3, NULL);
} }