diff -r 913eb9ca40b1 -r 86b275481021 main/task_wifi.c --- a/main/task_wifi.c Thu Oct 19 17:32:16 2023 +0200 +++ b/main/task_wifi.c Fri Oct 20 15:57:56 2023 +0200 @@ -13,24 +13,20 @@ SemaphoreHandle_t xSemaphoreWiFi = NULL; ///< Semaphore WiFi task. EventGroupHandle_t xEventGroupWifi; ///< Events WiFi task. -uint16_t ap_num = MAX_AP_NUM; ///< Scan counter. -wifi_ap_record_t *accessp_records; ///< [MAX_AP_NUM] records array with scan results. wifi_config_t *task_wifi_ConfigSTA = NULL; ///< Current STA configuration. WIFI_State *wifi_state = NULL; ///< Public state for other tasks. esp_netif_t *sta_netif = NULL; ///< Station interface -wifi_scan_config_t scan_config = { ///< WiFi scanner configuration. - .ssid = (uint8_t *)CONFIG_ESP_WIFI_SSID, - .bssid = 0, - .channel = 0, - .show_hidden = false -}; +//wifi_scan_config_t scan_config = { ///< WiFi scanner configuration. +// .ssid = (uint8_t *)CONFIG_ESP_WIFI_SSID, +// .bssid = 0, +// .channel = 0, +// .show_hidden = false +//}; -bool _wifi_ScanDone = false; ///< Scan ready -bool _wifi_BetterAP = false; ///< If better AP available. +bool System_TimeOk = false; ///< True if online and sntp sync. int8_t _wifi_RSSI = -127; ///< Latest RSSI level. -uint16_t _wifi_Scanned = 0; ///< Total scanned APs. extern char hostname[]; ///< Generated hostname @@ -38,8 +34,6 @@ const int TASK_WIFI_REQUEST_STA_DISCONNECT = BIT0; ///< When set, means a client requested to disconnect from currently connected AP. const int TASK_WIFI_REQUEST_STA_CONNECT = BIT1; ///< When set, means a client requested to connect to an access point. -const int TASK_WIFI_REQUEST_STA_SCAN = BIT2; ///< When set, means a client requested a AP scan. -const int TASK_WIFI_REQUEST_STA_STATUS = BIT3; ///< When set, means a client requested to update the connection status. const int TASK_WIFI_HAS_IP = BIT4; ///< Indicate that we have an IP address const int TASK_WIFI_STA_FAILED = BIT5; ///< Indicate that we could not get a connection to AP as station. @@ -66,25 +60,12 @@ -void status_WiFi(void) -{ - xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_STATUS); -} - - - void request_WiFi(void) { xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT); } -void scan_WiFi(void) -{ - xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_SCAN); -} - - void disconnect_WiFi(void) { xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT); @@ -114,38 +95,12 @@ { switch (event_id) { - case WIFI_EVENT_SCAN_DONE: - { - /* Get the results so the memory used is freed. */ - ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&ap_num, accessp_records)); - ESP_LOGI(TAG, "Event wifi Scane done, %d records", ap_num); - _wifi_BetterAP = false; - for (int i = 0; i < ap_num; i++) { - wifi_ap_record_t ap = accessp_records[i]; - ESP_LOGI(TAG, "AP:%d bssid:%02x:%02x:%02x:%02x:%02x:%02x ssid:%s ch:%d rssi:%d", - i, ap.bssid[0], ap.bssid[1], ap.bssid[2], ap.bssid[3], ap.bssid[4], ap.bssid[5], - ap.ssid, ap.primary, ap.rssi); - if (ap.rssi > CONFIG_ESP_WIFI_ROAMING_LEVEL && ap.rssi > (_wifi_RSSI + 3)) { - _wifi_BetterAP = true; - ESP_LOGI(TAG, "AP:%d is a better AP", i); - } - } - _wifi_Scanned = ap_num; - _wifi_ScanDone = true; - if (_wifi_BetterAP) { - ESP_LOGI(TAG, "Disconnect current AP"); - disconnect_WiFi(); - } - break; - } - case WIFI_EVENT_STA_START: { ESP_LOGI(TAG, "Event wifi START"); // Set the configured hostname for the dhcp client. ESP_ERROR_CHECK(esp_netif_set_hostname(sta_netif, hostname)); esp_wifi_connect(); - _wifi_BetterAP = false; break; } @@ -168,7 +123,6 @@ ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_CONNECTED"); } print_servers(); - _wifi_BetterAP = false; xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); break; @@ -188,7 +142,7 @@ } else { ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_DISCONNECTED"); } - _wifi_BetterAP = false; + System_TimeOk = false; xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED); xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED); break; @@ -236,6 +190,7 @@ } else { ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_LOST_IP"); } + System_TimeOk = false; break; case IP_EVENT_AP_STAIPASSIGNED: @@ -261,11 +216,12 @@ if (rc == SNTP_SYNC_STATUS_COMPLETED) { time(&now); localtime_r(&now, &timeinfo); -// System_TimeOk = true; + System_TimeOk = true; strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); ESP_LOGI(TAG, "NTP time is set: %s", strftime_buf); } else { ESP_LOGI(TAG, "NTP unknown time sync event rc=%d", rc); + System_TimeOk = false; } } @@ -314,7 +270,6 @@ /* * memory allocation of objects used by the task */ - accessp_records = (wifi_ap_record_t*)malloc(sizeof(wifi_ap_record_t) * MAX_AP_NUM); xSemaphoreWiFi = xSemaphoreCreateMutex(); wifi_state = malloc(sizeof(WIFI_State)); memset(wifi_state, 0x00, sizeof(WIFI_State)); @@ -331,14 +286,9 @@ .sta = { .ssid = CONFIG_ESP_WIFI_SSID, .password = CONFIG_ESP_WIFI_PASSWORD, -#if CONFIG_WIFI_ALL_CHANNEL_SCAN - .scan_method = WIFI_ALL_CHANNEL_SCAN, -#elif CONFIG_WIFI_FAST_SCAN .scan_method = WIFI_FAST_SCAN, -#endif .failure_retry_cnt = 3, .sort_method = WIFI_CONNECT_AP_BY_SIGNAL, - .threshold.rssi = CONFIG_ESP_FAST_SCAN_MINIMUM_SIGNAL, .threshold.authmode = WIFI_AUTH_WPA2_PSK, }, }; @@ -354,9 +304,7 @@ for(;;) { /* actions that can trigger: request a connection, a scan, or a disconnection */ - uxBits = xEventGroupWaitBits(xEventGroupWifi, - TASK_WIFI_REQUEST_STA_CONNECT | TASK_WIFI_REQUEST_STA_DISCONNECT | TASK_WIFI_REQUEST_STA_SCAN | TASK_WIFI_REQUEST_STA_STATUS, - pdFALSE, pdFALSE, portMAX_DELAY ); + uxBits = xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT | TASK_WIFI_REQUEST_STA_DISCONNECT, pdFALSE, pdFALSE, portMAX_DELAY ); if (uxBits & TASK_WIFI_REQUEST_STA_DISCONNECT) { /* @@ -383,37 +331,6 @@ xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_FAILED); } uxBits = xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED | TASK_WIFI_STA_FAILED, pdFALSE, pdFALSE, 5000 / portTICK_PERIOD_MS); - - } else if (uxBits & TASK_WIFI_REQUEST_STA_STATUS) { - /* - * Request WiFi update status, refresh the rssi. - */ - ESP_LOGD(TAG, "Request STA status"); - xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_STATUS); - wifi_ap_record_t ap_info; - esp_wifi_sta_get_ap_info(&ap_info); - ESP_LOGI(TAG, "Event STA status, ssid:%s, bssid:" MACSTR ", rssi: %d", ap_info.ssid, MAC2STR(ap_info.bssid), ap_info.rssi); - _wifi_RSSI = ap_info.rssi; - _wifi_BetterAP = false; - if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) { - wifi_state->STA_rssi = ap_info.rssi; - wifi_state->STA_channel = ap_info.primary; - snprintf(wifi_state->STA_bssid, 18, "%02x:%02x:%02x:%02x:%02x:%02x", - ap_info.bssid[0], ap_info.bssid[1], ap_info.bssid[2], ap_info.bssid[3], ap_info.bssid[4], ap_info.bssid[5]); - xSemaphoreGive(xSemaphoreWiFi); - } else { - ESP_LOGE(TAG, "lock error TASK_WIFI_REQUEST_STA_STATUS"); - } - - } else if (uxBits & TASK_WIFI_REQUEST_STA_SCAN) { - - ESP_LOGI(TAG, "Request STA scan"); - xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_SCAN); - /* safe guard against overflow */ - ap_num = MAX_AP_NUM; - _wifi_ScanDone = false; - _wifi_BetterAP = false; - ESP_ERROR_CHECK(esp_wifi_scan_start(&scan_config, false)); } } /* for(;;) */