From baedf26d0eab714901cd0ec16f82fc95255c82f4 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 | 26 ++++++++++++++++++++++++++ libraries/WiFi/src/WiFiSTA.h | 4 ++++ 2 files changed, 30 insertions(+) diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index e62ac68b526..06425c00120 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -169,9 +169,35 @@ bool WiFiSTAClass::eraseAP(void) { */ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2) { + // handle Arduino ordering of parameters: ip, dns, gw, subnet + if (local_ip.type() == IPv4 && local_ip != INADDR_NONE && subnet[0] != 255) { + IPAddress tmp = dns1; + dns1 = gateway; + gateway = subnet; + subnet = (tmp != INADDR_NONE) ? tmp : IPAddress(255, 255, 255, 0); + } + return STA.config(local_ip, gateway, subnet, dns1, dns2); } +bool WiFiSTAClass::config(IPAddress local_ip, IPAddress dns) { + + if (local_ip == INADDR_NONE) { + return config(INADDR_NONE, INADDR_NONE, INADDR_NONE); + } + + if (local_ip.type() != IPv4) { + return false; + } + + 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 a85ef78344a..7318c8f97c6 100644 --- a/libraries/WiFi/src/WiFiSTA.h +++ b/libraries/WiFi/src/WiFiSTA.h @@ -112,8 +112,12 @@ class WiFiSTAClass } 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 bandwidth(wifi_bandwidth_t bandwidth);