diff --git a/src/project_configuration.cpp b/src/project_configuration.cpp index 4bce038..4fe0d29 100644 --- a/src/project_configuration.cpp +++ b/src/project_configuration.cpp @@ -8,13 +8,31 @@ void ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocumen if (data.containsKey("callsign")) conf.callsign = data["callsign"].as(); + if (data.containsKey("eth") && data["eth"].containsKey("DHCP")) { + conf.eth.DHCP = data["eth"]["DHCP"]; + conf.eth.IP = data["eth"]["IP"].as(); + conf.eth.Netmask = data["eth"]["Netmask"].as(); + conf.eth.Gateway = data["eth"]["Gateway"].as(); + conf.eth.DNS1 = data["eth"]["DNS1"].as(); + conf.eth.DNS2 = data["eth"]["DNS2"].as(); + } + JsonArray aps = data["wifi"]["AP"].as(); for (JsonVariant v : aps) { Configuration::Wifi::AP ap; ap.SSID = v["SSID"].as(); ap.password = v["password"].as(); + if (v.containsKey("DHCP")) { + ap.DHCP = v["DHCP"]; + ap.IP = v["IP"].as(); + ap.Netmask = v["Netmask"].as(); + ap.Gateway = v["Gateway"].as(); + ap.DNS1 = v["DNS1"].as(); + ap.DNS2 = v["DNS2"].as(); + } conf.wifi.APs.push_back(ap); } + if (data.containsKey("beacon") && data["beacon"].containsKey("message")) conf.beacon.message = data["beacon"]["message"].as(); conf.beacon.positionLatitude = data["beacon"]["position"]["latitude"] | 0.0; @@ -63,12 +81,31 @@ void ProjectConfigurationManagement::readProjectConfiguration(DynamicJsonDocumen void ProjectConfigurationManagement::writeProjectConfiguration(Configuration &conf, DynamicJsonDocument &data) { data["callsign"] = conf.callsign; - JsonArray aps = data["wifi"].createNestedArray("AP"); + + if (conf.eth.DHCP == false) { + data["eth"]["DHCP"] = conf.eth.DHCP; + data["eth"]["IP"] = conf.eth.IP; + data["eth"]["Netmask"] = conf.eth.Netmask; + data["eth"]["Gateway"] = conf.eth.Gateway; + data["eth"]["DNS1"] = conf.eth.DNS1; + data["eth"]["DNS2"] = conf.eth.DNS2; + } + + JsonArray aps = data["wifi"].createNestedArray("AP"); for (Configuration::Wifi::AP ap : conf.wifi.APs) { JsonObject v = aps.createNestedObject(); v["SSID"] = ap.SSID; v["password"] = ap.password; + if (ap.DHCP == false) { + v["DHCP"] = ap.DHCP; + v["IP"] = ap.IP; + v["Netmask"] = ap.Netmask; + v["Gateway"] = ap.Gateway; + v["DNS1"] = ap.DNS1; + v["DNS2"] = ap.DNS2; + } } + data["beacon"]["message"] = conf.beacon.message; data["beacon"]["position"]["latitude"] = conf.beacon.positionLatitude; data["beacon"]["position"]["longitude"] = conf.beacon.positionLongitude; diff --git a/src/project_configuration.h b/src/project_configuration.h index e1e1686..7679501 100644 --- a/src/project_configuration.h +++ b/src/project_configuration.h @@ -6,12 +6,34 @@ class Configuration { public: + class ETH { + public: + ETH() : DHCP(true) { + } + + bool DHCP; + String IP; + String Netmask; + String Gateway; + String DNS1; + String DNS2; + }; + class Wifi { public: class AP { public: + AP() : DHCP(true) { + } + String SSID; String password; + bool DHCP; + String IP; + String Netmask; + String Gateway; + String DNS1; + String DNS2; }; Wifi() { @@ -93,6 +115,7 @@ public: Configuration() : callsign("NOCALL-10"), board(""), ntpServer("pool.ntp.org"){}; String callsign; + ETH eth; Wifi wifi; Beacon beacon; APRS_IS aprs_is;