diff --git a/data/is-cfg.json b/data/is-cfg.json index 3d536bb..736d44c 100644 --- a/data/is-cfg.json +++ b/data/is-cfg.json @@ -1,5 +1,13 @@ { "callsign": "NOCALL-10", + "network": { + "DHCP": true, + "staticIP": "192.0.2.100", + "subnet": "255.255.255.0", + "gateway": "192.0.2.1", + "dns1": "192.0.2.1", + "dns2": "192.0.2.2" + }, "wifi": { "AP": [ { diff --git a/platformio.ini b/platformio.ini index d0aa3c4..c955992 100644 --- a/platformio.ini +++ b/platformio.ini @@ -24,7 +24,7 @@ check_skip_packages = yes [env:lora_board] board = esp32doit-devkit-v1 -build_flags = -Werror -Wall -DCORE_DEBUG_LEVEL=5 +build_flags = -Werror -Wall [env:lora_board_debug] board = esp32doit-devkit-v1 diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index d6ede91..1eb69cc 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -18,7 +18,7 @@ #include "TaskWifi.h" #include "project_configuration.h" -#define VERSION "21.25.0" +#define VERSION "21.35.0" String create_lat_aprs(double lat); String create_long_aprs(double lng); diff --git a/src/TaskEth.cpp b/src/TaskEth.cpp index fdad5a2..c25120e 100644 --- a/src/TaskEth.cpp +++ b/src/TaskEth.cpp @@ -4,6 +4,7 @@ #include "Task.h" #include "TaskEth.h" +#include "project_configuration.h" volatile bool eth_connected = false; @@ -19,7 +20,13 @@ void WiFiEvent(WiFiEvent_t event) { logPrintI("WiFi MAC: "); logPrintI(WiFi.macAddress()); logPrintI(", IPv4: "); - logPrintlnI(WiFi.localIP().toString()); + logPrintI(WiFi.localIP().toString()); + logPrintI(", Gateway: "); + logPrintI(WiFi.gatewayIP().toString()); + logPrintI(", DNS1: "); + logPrintI(WiFi.dnsIP().toString()); + logPrintI(", DNS2: "); + logPrintlnI(WiFi.dnsIP(1).toString()); break; case SYSTEM_EVENT_STA_DISCONNECTED: logPrintlnW("WiFi Disconnected"); @@ -39,8 +46,12 @@ void WiFiEvent(WiFiEvent_t event) { logPrintI(ETH.macAddress()); logPrintI(", IPv4: "); logPrintI(ETH.localIP().toString()); - logPrintI(", DNS: "); + logPrintI(", Gateway: "); + logPrintI(ETH.gatewayIP().toString()); + logPrintI(", DNS1: "); logPrintI(ETH.dnsIP().toString()); + logPrintI(", DNS2: "); + logPrintI(ETH.dnsIP(1).toString()); if (ETH.fullDuplex()) { logPrintI(", FULL_DUPLEX"); } @@ -89,6 +100,10 @@ bool EthTask::setup(System &system) { delay(200); digitalWrite(ETH_NRST, 1); + if (!system.getUserConfig()->network.DHCP) { + ETH.config(system.getUserConfig()->network.staticIP, system.getUserConfig()->network.gateway, system.getUserConfig()->network.subnet, system.getUserConfig()->network.dns1, system.getUserConfig()->network.dns2); + } + ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK); return true; } diff --git a/src/TaskRouter.cpp b/src/TaskRouter.cpp index 210ed7e..ec8f485 100644 --- a/src/TaskRouter.cpp +++ b/src/TaskRouter.cpp @@ -64,7 +64,7 @@ bool RouterTask::loop(System &system) { String path = digiMsg->getPath(); // simple loop check - if (path.indexOf("WIDE1-1") >= 0 || path.indexOf(system.getUserConfig()->callsign) == -1) { + if (path.indexOf("WIDE1-1") >= 0 && path.indexOf(system.getUserConfig()->callsign) == -1) { // fixme digiMsg->setPath(system.getUserConfig()->callsign + "*"); diff --git a/src/TaskWifi.cpp b/src/TaskWifi.cpp index 408a0fd..6a0b54e 100644 --- a/src/TaskWifi.cpp +++ b/src/TaskWifi.cpp @@ -13,8 +13,19 @@ WifiTask::~WifiTask() { } bool WifiTask::setup(System &system) { + // Don't save WiFi configuration in flash + WiFi.persistent(false); + + // Set WiFi to station mode + WiFi.mode(WIFI_STA); + WiFi.onEvent(WiFiEvent); WiFi.setHostname(system.getUserConfig()->callsign.c_str()); + + if (!system.getUserConfig()->network.DHCP) { + WiFi.config(system.getUserConfig()->network.staticIP, system.getUserConfig()->network.gateway, system.getUserConfig()->network.subnet, system.getUserConfig()->network.dns1, system.getUserConfig()->network.dns2); + } + for (Configuration::Wifi::AP ap : system.getUserConfig()->wifi.APs) { logPrintD("Looking for AP: "); logPrintlnD(ap.SSID); diff --git a/src/project_configuration.cpp b/src/project_configuration.cpp index 4bce038..656d284 100644 --- a/src/project_configuration.cpp +++ b/src/project_configuration.cpp @@ -8,6 +8,15 @@ void ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocumen if (data.containsKey("callsign")) conf.callsign = data["callsign"].as(); + if (data.containsKey("network") && data["network"].containsKey("DHCP")) { + conf.network.DHCP = data["network"]["DHCP"]; + conf.network.staticIP.fromString(data["network"]["staticIP"].as()); + conf.network.subnet.fromString(data["network"]["subnet"].as()); + conf.network.gateway.fromString(data["network"]["gateway"].as()); + conf.network.dns1.fromString(data["network"]["dns1"].as()); + conf.network.dns2.fromString(data["network"]["dns2"].as()); + } + JsonArray aps = data["wifi"]["AP"].as(); for (JsonVariant v : aps) { Configuration::Wifi::AP ap; @@ -63,7 +72,17 @@ void ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocumen void ProjectConfigurationManagement::writeProjectConfiguration(Configuration &conf, DynamicJsonDocument &data) { data["callsign"] = conf.callsign; - JsonArray aps = data["wifi"].createNestedArray("AP"); + + if (!conf.network.DHCP) { + data["network"]["DHCP"] = conf.network.DHCP; + data["network"]["staticIP"] = conf.network.staticIP.toString(); + data["network"]["subnet"] = conf.network.subnet.toString(); + data["network"]["gateway"] = conf.network.gateway.toString(); + data["network"]["dns1"] = conf.network.dns1.toString(); + data["network"]["dns2"] = conf.network.dns2.toString(); + } + + JsonArray aps = data["wifi"].createNestedArray("AP"); for (Configuration::Wifi::AP ap : conf.wifi.APs) { JsonObject v = aps.createNestedObject(); v["SSID"] = ap.SSID; diff --git a/src/project_configuration.h b/src/project_configuration.h index e1e1686..b2ba0bc 100644 --- a/src/project_configuration.h +++ b/src/project_configuration.h @@ -6,6 +6,19 @@ class Configuration { public: + class Network { + public: + Network() : DHCP(true) { + } + + bool DHCP; + IPAddress staticIP; + IPAddress subnet; + IPAddress gateway; + IPAddress dns1; + IPAddress dns2; + }; + class Wifi { public: class AP { @@ -93,6 +106,7 @@ public: Configuration() : callsign("NOCALL-10"), board(""), ntpServer("pool.ntp.org"){}; String callsign; + Network network; Wifi wifi; Beacon beacon; APRS_IS aprs_is;