From 437e8cdf4f2f293659c37a36bff9194757aa3c07 Mon Sep 17 00:00:00 2001 From: Juraj Andrassy Date: Thu, 16 Nov 2023 19:37:41 +0100 Subject: [PATCH] WiFi.config handle Arduino parameters ordering and auto dns,gw,mask --- libraries/WiFi/src/WiFiSTA.cpp | 20 ++++++++++++++++++++ libraries/WiFi/src/WiFiSTA.h | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index 558feb5255a..ab3685889df 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -423,6 +423,13 @@ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subne if(!WiFi.enableSTA(true)) { return false; } + // handle Arduino ordering of parameters: ip, dns, gw, subnet + if (local_ip != INADDR_NONE && subnet[0] != 255) { + IPAddress tmp = dns1; + dns1 = gateway; + gateway = subnet; + subnet = (tmp != INADDR_NONE) ? tmp : IPAddress(255, 255, 255, 0); + } err = set_esp_interface_ip(ESP_IF_WIFI_STA, local_ip, gateway, subnet); if(err == ESP_OK){ err = set_esp_interface_dns(ESP_IF_WIFI_STA, dns1, dns2); @@ -431,6 +438,19 @@ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subne return err == ESP_OK; } +bool WiFiSTAClass::config(IPAddress local_ip, IPAddress dns) { + + if (local_ip == INADDR_NONE) + return config(INADDR_NONE, INADDR_NONE, INADDR_NONE); + + IPAddress gw(local_ip); + gw[3] = 1; + if (dns == INADDR_NONE) { + dns = gw; + } + return config(local_ip, gw, IPAddress(255, 255, 255, 0), dns); +} + /** * Change DNS server for static IP configuration * @param dns1 Static DNS server 1 diff --git a/libraries/WiFi/src/WiFiSTA.h b/libraries/WiFi/src/WiFiSTA.h index 3f224211a1e..817dd9c5832 100644 --- a/libraries/WiFi/src/WiFiSTA.h +++ b/libraries/WiFi/src/WiFiSTA.h @@ -55,7 +55,12 @@ class WiFiSTAClass wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true); wl_status_t begin(); + // also accepts Arduino ordering of parameters: ip, dns, gw, mask bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000); + + // two and one parameter version. 2nd parameter is DNS like in Arduino + bool config(IPAddress local_ip, IPAddress dns = (uint32_t)0x00000000); + bool setDNS(IPAddress dns1, IPAddress dns2 = (uint32_t)0x00000000); // sets DNS IP for all network interfaces bool reconnect();