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 05ddfb7215f..e3d0a9e0070 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 4a8145fcaeb..a2e8212c520 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; @@ -355,7 +355,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; } @@ -426,7 +426,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 06425c00120..1e7731bb930 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -177,7 +177,7 @@ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subne subnet = (tmp != INADDR_NONE) ? tmp : IPAddress(255, 255, 255, 0); } - return STA.config(local_ip, gateway, subnet, dns1, dns2); + return STA.begin() && STA.config(local_ip, gateway, subnet, dns1, dns2); } bool WiFiSTAClass::config(IPAddress local_ip, IPAddress dns) { @@ -205,10 +205,7 @@ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress dns) { */ 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); } /**