From 82a2328571205dd3f11ab67560d0ca032b262bac Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 28 Jan 2023 10:22:05 +0200 Subject: [PATCH] wifi web interface scan implemented --- include/NetTransport.h | 2 ++ src/HTTPPostSystem.c | 8 ++++++++ src/HTTPPrintSystem.c | 21 +++++++++++++-------- src/WiFiTransport.c | 33 ++++++++++++++++++++++----------- 4 files changed, 45 insertions(+), 19 deletions(-) diff --git a/include/NetTransport.h b/include/NetTransport.h index f93cf7e..16b4ed5 100644 --- a/include/NetTransport.h +++ b/include/NetTransport.h @@ -50,6 +50,8 @@ QueueHandle_t MQTT1MessagesQueueHandle; QueueHandle_t MQTT2MessagesQueueHandle; EventGroupHandle_t transport_event_group; +wifi_ap_record_t* GetWiFiAPRecord(uint8_t n); + void StartTimeGet(void); void WiFiAPStart(void); diff --git a/src/HTTPPostSystem.c b/src/HTTPPostSystem.c index 51f7400..582213e 100644 --- a/src/HTTPPostSystem.c +++ b/src/HTTPPostSystem.c @@ -216,6 +216,14 @@ static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData) } #endif + if (httpd_query_key_value(PostData, "wifisc", tmp, 4) == ESP_OK) + { + if (!strcmp(tmp, (const char*) "prs")) + { + WiFiScan(); + } + } + if (httpd_query_key_value(PostData, "save", tmp, 5) == ESP_OK || httpd_query_key_value(PostData, "apply", tmp, 5) == ESP_OK) { diff --git a/src/HTTPPrintSystem.c b/src/HTTPPrintSystem.c index 0098d0c..4d94fee 100644 --- a/src/HTTPPrintSystem.c +++ b/src/HTTPPrintSystem.c @@ -182,15 +182,14 @@ static void HTTPPrint_fver(char *VarData, void *arg) static void HTTPPrint_fverav(char *VarData, void *arg) { - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetAvailVersion()); + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetAvailVersion()); } static void HTTPPrint_updstat(char *VarData, void *arg) { - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetUpdateStatus()); + snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetUpdateStatus()); } - static void HTTPPrint_idfver(char *VarData, void *arg) { esp_app_desc_t cur_app_info; @@ -347,6 +346,15 @@ static void HTTPPrint_apmacadr(char *VarData, void *arg) { PrintMACFromInterface(VarData, arg, GetAPNetifAdapter()); } +static void HTTPPrint_wifisc(char *VarData, void *arg) +{ + wifi_ap_record_t *R = GetWiFiAPRecord(*(uint8_t*) (arg)); + if (!R) + return; + snprintf(VarData, MAX_DYNVAR_LENGTH, "{\"ssid\":\"%s\",\"rssi\":%i,\"ch\":%d}", R->ssid, R->rssi, + R->primary); +} + #endif #if CONFIG_WEBGUIAPP_ETHERNET_ENABLE @@ -481,7 +489,6 @@ void HTTPPrint_gsmmac(char *VarData, void *arg) } #endif - #ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE /*LORAWAN settings*/ void HTTPPrint_lren(char *VarData, void *arg) @@ -639,7 +646,7 @@ static void HTTPPrint_hide_mqtt2(char *VarData, void *arg) #if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 snprintf(VarData, MAX_DYNVAR_LENGTH, " "); #else - snprintf(VarData, MAX_DYNVAR_LENGTH, "hide"); + snprintf(VarData, MAX_DYNVAR_LENGTH, "hide"); #endif } @@ -695,7 +702,6 @@ dyn_var_handler_t HANDLERS_ARRAY[] = { { "fverav", sizeof("fverav") - 1, &HTTPPrint_fverav }, { "updstat", sizeof("updstat") - 1, &HTTPPrint_updstat }, - { "idfver", sizeof("idfver") - 1, &HTTPPrint_idfver }, { "builddate", sizeof("builddate") - 1, &HTTPPrint_builddate }, { "serial", sizeof("serial") - 1, &HTTPPrint_serial }, @@ -730,6 +736,7 @@ dyn_var_handler_t HANDLERS_ARRAY[] = { { "dns3", sizeof("dns3") - 1, &HTTPPrint_dns3 }, { "macadr", sizeof("macadr") - 1, &HTTPPrint_macadr }, { "apmacadr", sizeof("apmacadr") - 1, &HTTPPrint_apmacadr }, + { "wifisc", sizeof("wifisc") - 1, &HTTPPrint_wifisc }, #endif #if CONFIG_WEBGUIAPP_ETHERNET_ENABLE @@ -746,8 +753,6 @@ dyn_var_handler_t HANDLERS_ARRAY[] = { { "emacadr", sizeof("emacadr") - 1, &HTTPPrint_emacadr }, #endif - - #if CONFIG_WEBGUIAPP_GPRS_ENABLE /*GSM modem*/ { "gsmen", sizeof("gsmen") - 1, &HTTPPrint_gsmen }, diff --git a/src/WiFiTransport.c b/src/WiFiTransport.c index 7b7fa1a..a76c155 100644 --- a/src/WiFiTransport.c +++ b/src/WiFiTransport.c @@ -48,6 +48,19 @@ static EventGroupHandle_t s_wifi_event_group; static int s_retry_num = 0; static bool isWiFiGotIp = false; +#define DEFAULT_SCAN_LIST_SIZE 20 +static wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE]; +static bool isScanReady = false; + +wifi_ap_record_t* GetWiFiAPRecord(uint8_t n) +{ + if (n < DEFAULT_SCAN_LIST_SIZE) + { + return &ap_info[n]; + } + return NULL; +} + esp_netif_t* GetSTANetifAdapter(void) { return sta_netif; @@ -484,23 +497,21 @@ void WiFiSTAStart(void) xTaskCreate(wifi_init_sta, "InitStationTask", 1024 * 4, (void*) 0, 3, NULL); } -#define DEFAULT_SCAN_LIST_SIZE 20 - -void WiFiScan(void) +static void wifi_scan(void *arg) { uint16_t number = DEFAULT_SCAN_LIST_SIZE; - wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE]; uint16_t ap_count = 0; memset(ap_info, 0, sizeof(ap_info)); - esp_wifi_scan_start(NULL, true); ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info)); ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count)); ESP_LOGI(TAG, "Total APs scanned = %u", ap_count); - for (int i = 0; (i < DEFAULT_SCAN_LIST_SIZE) && (i < ap_count); i++) - { - ESP_LOGI(TAG, "SSID \t\t%s", ap_info[i].ssid); - ESP_LOGI(TAG, "RSSI \t\t%d", ap_info[i].rssi); - ESP_LOGI(TAG, "Channel \t\t%d\n", ap_info[i].primary); - } + isScanReady = true; + vTaskDelete(NULL); +} + +void WiFiScan(void) +{ + isScanReady = false; + xTaskCreate(wifi_scan, "ScanWiFiTask", 1024 * 4, (void*) 0, 3, NULL); }