From d8c0b8cbecfd161746ba29d61605d77ad91f84f9 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 1 Feb 2023 22:16:02 +0200 Subject: [PATCH] added separate AP WiFi mode --- include/NetTransport.h | 1 + include/WebGUIAppMain.h | 1 + src/HTTPPostSystem.c | 9 +++++++++ src/HTTPPrintSystem.c | 9 +++++++++ src/WebGUIAppMain.c | 17 +++++++++++++++-- src/WiFiTransport.c | 6 +++++- src/mDNS.c | 21 +++++++++++---------- 7 files changed, 51 insertions(+), 13 deletions(-) diff --git a/include/NetTransport.h b/include/NetTransport.h index f24648e..6be1526 100644 --- a/include/NetTransport.h +++ b/include/NetTransport.h @@ -56,6 +56,7 @@ void StartTimeGet(void); void WiFiAPStart(void); void WiFiSTAStart(void); +void WiFiAPSTAStart(void); void WiFiScan(void); void EthStart(void); diff --git a/include/WebGUIAppMain.h b/include/WebGUIAppMain.h index 4d6c415..2cb26ea 100644 --- a/include/WebGUIAppMain.h +++ b/include/WebGUIAppMain.h @@ -132,6 +132,7 @@ #if CONFIG_WEBGUIAPP_WIFI_ENABLE struct { + uint8_t WiFiMode; esp_ip4_addr_t InfIPAddr; // IP address in infrastructure(INF) mode esp_ip4_addr_t InfMask; // network mask in INF mode esp_ip4_addr_t InfGateway; // gateway IP in INF mode diff --git a/src/HTTPPostSystem.c b/src/HTTPPostSystem.c index 20b9eda..a7c3a10 100644 --- a/src/HTTPPostSystem.c +++ b/src/HTTPPostSystem.c @@ -144,6 +144,15 @@ static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData) else if (!strcmp((const char*) tmp, (const char*) "2")) GetSysConf()->wifiSettings.Flags1.bIsAP = false; } + if (httpd_query_key_value(PostData, "wfmode", tmp, sizeof(tmp)) == ESP_OK) + { + if (!strcmp((const char*) tmp, (const char*) "sta")) + GetSysConf()->wifiSettings.WiFiMode = WIFI_MODE_STA; + else if (!strcmp((const char*) tmp, (const char*) "ap")) + GetSysConf()->wifiSettings.WiFiMode = WIFI_MODE_AP; + else if (!strcmp((const char*) tmp, (const char*) "apsta")) + GetSysConf()->wifiSettings.WiFiMode = WIFI_MODE_APSTA; + } /*AP section*/ httpd_query_key_value(PostData, "wfiap", GetSysConf()->wifiSettings.ApSSID, sizeof(GetSysConf()->wifiSettings.ApSSID)); diff --git a/src/HTTPPrintSystem.c b/src/HTTPPrintSystem.c index 8edb679..94ff5db 100644 --- a/src/HTTPPrintSystem.c +++ b/src/HTTPPrintSystem.c @@ -259,6 +259,14 @@ static void HTTPPrint_apn(char *VarData, void *arg) PrintCheckbox(VarData, arg, GetSysConf()->wifiSettings.Flags1.bIsAP); } +static void HTTPPrint_wfmode(char *VarData, void *arg) +{ + if ((*(uint8_t*) arg) == GetSysConf()->wifiSettings.WiFiMode) + snprintf(VarData, MAX_DYNVAR_LENGTH, "selected"); + else + snprintf(VarData, MAX_DYNVAR_LENGTH, " "); +} + static void HTTPPrint_ssidap(char *VarData, void *arg) { snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->wifiSettings.ApSSID); @@ -723,6 +731,7 @@ dyn_var_handler_t HANDLERS_ARRAY[] = { { "wfstat", sizeof("wfstat") - 1, &HTTPPrint_wfstat }, { "cln", sizeof("cln") - 1, &HTTPPrint_cln }, { "apn", sizeof("apn") - 1, &HTTPPrint_apn }, + { "wfmode", sizeof("wfmode") - 1, &HTTPPrint_wfmode }, { "ssidap", sizeof("ssidap") - 1, &HTTPPrint_ssidap }, { "wkeyap", sizeof("wkeyap") - 1, &HTTPPrint_wkeyap }, { "ipap", sizeof("ipap") - 1, &HTTPPrint_ipap }, diff --git a/src/WebGUIAppMain.c b/src/WebGUIAppMain.c index 849842e..b258284 100644 --- a/src/WebGUIAppMain.c +++ b/src/WebGUIAppMain.c @@ -149,6 +149,19 @@ esp_err_t WebGuiAppInit(void) /*Start WiFi connection*/ if (GetSysConf()->wifiSettings.Flags1.bIsWiFiEnabled) { + switch (GetSysConf()->wifiSettings.WiFiMode) + { + case WIFI_MODE_STA: + WiFiSTAStart(); + break; + case WIFI_MODE_AP: + WiFiAPStart(); + break; + case WIFI_MODE_APSTA: + WiFiAPSTAStart(); + break; + } + if (GetSysConf()->wifiSettings.Flags1.bIsAP) WiFiAPStart(); else @@ -177,6 +190,7 @@ esp_err_t WebGuiAppInit(void) //Network ready or network not available now, but maybe restore later StartTimeGet(); + mDNSServiceStart(); #if CONFIG_WEBGUIAPP_MQTT_ENABLE if (GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled @@ -187,8 +201,6 @@ esp_err_t WebGuiAppInit(void) #endif #endif - - return ESP_OK; } @@ -303,6 +315,7 @@ static void ResetSysConfig(SYS_CONFIG *Conf) esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_WIFI_IP_AP, (esp_ip4_addr_t*) &Conf->wifiSettings.ApIPAddr); Conf->wifiSettings.Flags1.bIsAP = true; + Conf->wifiSettings.WiFiMode = 3; //AP+STA mode memcpy(Conf->wifiSettings.ApSecurityKey, CONFIG_WEBGUIAPP_WIFI_KEY_AP, sizeof(CONFIG_WEBGUIAPP_WIFI_KEY_AP)); memcpy(Conf->wifiSettings.InfSSID, CONFIG_WEBGUIAPP_WIFI_SSID_STA, diff --git a/src/WiFiTransport.c b/src/WiFiTransport.c index a76c155..173dff3 100644 --- a/src/WiFiTransport.c +++ b/src/WiFiTransport.c @@ -488,10 +488,14 @@ static void wifi_init_apsta(void *pvParameter) void WiFiAPStart(void) { - //xTaskCreate(wifi_init_softap, "InitSoftAPTask", 1024 * 4, (void*) 0, 3, NULL); xTaskCreate(wifi_init_apsta, "InitSoftAPTask", 1024 * 4, (void*) 0, 3, NULL); } +void WiFiAPSTAStart(void) +{ + xTaskCreate(wifi_init_apsta, "InitSoftAPSTATask", 1024 * 4, (void*) 0, 3, NULL); +} + void WiFiSTAStart(void) { xTaskCreate(wifi_init_sta, "InitStationTask", 1024 * 4, (void*) 0, 3, NULL); diff --git a/src/mDNS.c b/src/mDNS.c index 8208d6a..0c35a98 100644 --- a/src/mDNS.c +++ b/src/mDNS.c @@ -24,6 +24,7 @@ #include "mdns.h" #include "webguiapp.h" #include "esp_log.h" +#include "netdb.h" static const char *TAG = "mDNS"; @@ -33,26 +34,26 @@ void mDNSServiceStart(void) { const char hostname[] = "test_host_name"; //initialize mDNS - ESP_ERROR_CHECK( mdns_init() ); + ESP_ERROR_CHECK(mdns_init()); //set mDNS hostname (required if you want to advertise services) - ESP_ERROR_CHECK( mdns_hostname_set(hostname) ); + ESP_ERROR_CHECK(mdns_hostname_set(hostname)); ESP_LOGI(TAG, "mdns hostname set to: [%s]", hostname); //set default mDNS instance name - ESP_ERROR_CHECK( mdns_instance_name_set("esp_32") ); + ESP_ERROR_CHECK(mdns_instance_name_set("esp_32")); //structure with TXT records mdns_txt_item_t serviceTxtData[3] = { - {"board", "esp32"}, - {"u", "user"}, - {"p", "password"} + { "board", "esp32" }, + { "u", "user" }, + { "p", "password" } }; //initialize service - ESP_ERROR_CHECK( mdns_service_add("ESP32-WebServer", "_http", "_tcp", 80, serviceTxtData, 3) ); - ESP_ERROR_CHECK( mdns_service_add("ESP32-WebServer1", "_http", "_tcp", 80, NULL, 0) ); + ESP_ERROR_CHECK(mdns_service_add("ESP32-WebServer", "_http", "_tcp", 80, serviceTxtData, 3)); + ESP_ERROR_CHECK(mdns_service_add("ESP32-WebServer1", "_http", "_tcp", 80, NULL, 0)); - ESP_ERROR_CHECK( mdns_service_txt_item_set("_http", "_tcp", "path", "/foobar") ); + ESP_ERROR_CHECK(mdns_service_txt_item_set("_http", "_tcp", "path", "/foobar")); - ESP_ERROR_CHECK( mdns_service_txt_item_set_with_explicit_value_len("_http", "_tcp", "u", "admin", strlen("admin")) ); + ESP_ERROR_CHECK(mdns_service_txt_item_set_with_explicit_value_len("_http", "_tcp", "u", "admin", strlen("admin"))); }