From 80dc14fe6e41b6d6b7d7f988ce02b219fb621835 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Tue, 2 Apr 2024 11:28:31 +0300 Subject: [PATCH] Ensure that Static IP configuration for network interfaces is kept until STOP --- libraries/Ethernet/src/ETH.cpp | 2 +- libraries/Network/src/NetworkInterface.cpp | 6 +++--- libraries/Network/src/NetworkInterface.h | 1 + libraries/WiFi/src/STA.cpp | 6 +++--- libraries/WiFi/src/WiFiSTA.cpp | 7 ++----- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/libraries/Ethernet/src/ETH.cpp b/libraries/Ethernet/src/ETH.cpp index 440f0c43b3f..9c699bae751 100644 --- a/libraries/Ethernet/src/ETH.cpp +++ b/libraries/Ethernet/src/ETH.cpp @@ -107,7 +107,7 @@ void ETHClass::_onEthEvent(int32_t event_id, void* event_data){ } else if (event_id == ETHERNET_EVENT_STOP) { log_v("%s Stopped", desc()); arduino_event.event_id = ARDUINO_EVENT_ETH_STOP; - clearStatusBits(ESP_NETIF_STARTED_BIT | ESP_NETIF_CONNECTED_BIT | ESP_NETIF_HAS_IP_BIT | ESP_NETIF_HAS_LOCAL_IP6_BIT | ESP_NETIF_HAS_GLOBAL_IP6_BIT); + clearStatusBits(ESP_NETIF_STARTED_BIT | ESP_NETIF_CONNECTED_BIT | ESP_NETIF_HAS_IP_BIT | ESP_NETIF_HAS_LOCAL_IP6_BIT | ESP_NETIF_HAS_GLOBAL_IP6_BIT | ESP_NETIF_HAS_STATIC_IP_BIT); } if(arduino_event.event_id < ARDUINO_EVENT_MAX){ diff --git a/libraries/Network/src/NetworkInterface.cpp b/libraries/Network/src/NetworkInterface.cpp index bfed01ccca8..8ec1b5090a6 100644 --- a/libraries/Network/src/NetworkInterface.cpp +++ b/libraries/Network/src/NetworkInterface.cpp @@ -281,7 +281,7 @@ bool NetworkInterface::connected() const { } bool NetworkInterface::hasIP() const { - return (getStatusBits() & ESP_NETIF_HAS_IP_BIT) != 0; + return (getStatusBits() & (ESP_NETIF_HAS_IP_BIT | ESP_NETIF_HAS_STATIC_IP_BIT)) != 0; } bool NetworkInterface::hasLinkLocalIPv6() const { @@ -451,7 +451,7 @@ bool NetworkInterface::config(IPAddress local_ip, IPAddress gateway, IPAddress s return false; } - clearStatusBits(ESP_NETIF_HAS_IP_BIT); + clearStatusBits(ESP_NETIF_HAS_IP_BIT | ESP_NETIF_HAS_STATIC_IP_BIT); // Set IPv4, Netmask, Gateway err = esp_netif_set_ip_info(_esp_netif, &info); @@ -473,7 +473,7 @@ bool NetworkInterface::config(IPAddress local_ip, IPAddress gateway, IPAddress s return false; } } else { - setStatusBits(ESP_NETIF_HAS_IP_BIT); + setStatusBits(ESP_NETIF_HAS_STATIC_IP_BIT); } } diff --git a/libraries/Network/src/NetworkInterface.h b/libraries/Network/src/NetworkInterface.h index cda046ccc6d..462c77fe3ec 100644 --- a/libraries/Network/src/NetworkInterface.h +++ b/libraries/Network/src/NetworkInterface.h @@ -27,6 +27,7 @@ static const int ESP_NETIF_HAS_IP_BIT = BIT2; static const int ESP_NETIF_HAS_LOCAL_IP6_BIT = BIT3; static const int ESP_NETIF_HAS_GLOBAL_IP6_BIT = BIT4; static const int ESP_NETIF_WANT_IP6_BIT = BIT5; +static const int ESP_NETIF_HAS_STATIC_IP_BIT = BIT6; #define ESP_NETIF_ID_ETH ESP_NETIF_ID_ETH0 diff --git a/libraries/WiFi/src/STA.cpp b/libraries/WiFi/src/STA.cpp index 6003c4347a6..212c49b8845 100644 --- a/libraries/WiFi/src/STA.cpp +++ b/libraries/WiFi/src/STA.cpp @@ -213,7 +213,7 @@ void STAClass::_onStaEvent(int32_t event_id, void* event_data){ } else if (event_id == WIFI_EVENT_STA_STOP) { log_v("STA Stopped"); arduino_event.event_id = ARDUINO_EVENT_WIFI_STA_STOP; - clearStatusBits(ESP_NETIF_STARTED_BIT | ESP_NETIF_CONNECTED_BIT | ESP_NETIF_HAS_IP_BIT | ESP_NETIF_HAS_LOCAL_IP6_BIT | ESP_NETIF_HAS_GLOBAL_IP6_BIT); + clearStatusBits(ESP_NETIF_STARTED_BIT | ESP_NETIF_CONNECTED_BIT | ESP_NETIF_HAS_IP_BIT | ESP_NETIF_HAS_LOCAL_IP6_BIT | ESP_NETIF_HAS_GLOBAL_IP6_BIT | ESP_NETIF_HAS_STATIC_IP_BIT); } else if (event_id == WIFI_EVENT_STA_AUTHMODE_CHANGE) { #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_VERBOSE wifi_event_sta_authmode_change_t * event = (wifi_event_sta_authmode_change_t*)event_data; @@ -351,7 +351,7 @@ bool STAClass::connect(){ return false; } - if((getStatusBits() & ESP_NETIF_HAS_IP_BIT) == 0 && !config()){ + if((getStatusBits() & ESP_NETIF_HAS_STATIC_IP_BIT) == 0 && !config()){ log_e("STA failed to configure dynamic IP!"); return false; } @@ -422,7 +422,7 @@ bool STAClass::connect(const char* ssid, const char *passphrase, int32_t channel return false; } - if((getStatusBits() & ESP_NETIF_HAS_IP_BIT) == 0 && !config()){ + if((getStatusBits() & ESP_NETIF_HAS_STATIC_IP_BIT) == 0 && !config()){ log_e("STA failed to configure dynamic IP!"); return false; } diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index e62ac68b526..7c70cb5bd5f 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -169,7 +169,7 @@ bool WiFiSTAClass::eraseAP(void) { */ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2) { - return STA.config(local_ip, gateway, subnet, dns1, dns2); + return STA.begin() && STA.config(local_ip, gateway, subnet, dns1, dns2); } /** @@ -179,10 +179,7 @@ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subne */ bool WiFiSTAClass::setDNS(IPAddress dns1, IPAddress dns2) { - if(!STA.started()){ - return false; - } - return STA.dnsIP(0, dns1) && STA.dnsIP(1, dns2); + return STA.begin() && STA.dnsIP(0, dns1) && STA.dnsIP(1, dns2); } /**