#include #include #include "configuration.h" #include "display.h" Configuration::Configuration() { _filePath = "/igate_conf.json"; if (!SPIFFS.begin(false)) { Serial.println("SPIFFS Mount Failed"); return; } readFile(SPIFFS, _filePath.c_str()); } void Configuration::readFile(fs::FS &fs, const char *fileName) { StaticJsonDocument<1536> data; File configFile = fs.open(fileName, "r"); DeserializationError error = deserializeJson(data, configFile); if (error) { Serial.println("Failed to read file, using default configuration"); } JsonArray WiFiArray = data["wifi"]["AP"]; for (int i = 0; i < WiFiArray.size(); i++) { WiFi_AP wifiap; wifiap.ssid = WiFiArray[i]["ssid"].as(); wifiap.password = WiFiArray[i]["password"].as(); wifiap.latitude = WiFiArray[i]["latitude"].as(); wifiap.longitude = WiFiArray[i]["longitude"].as(); wifiAPs.push_back(wifiap); } callsign = data["callsign"].as(); stationMode = data["stationMode"].as(); iGateComment = data["iGateComment"].as(); beaconInterval = data["other"]["beaconInterval"].as() | 15; rememberStationTime = data["other"]["rememberStationTime"].as() | 30; digi.comment = data["digi"]["comment"].as(); digi.latitude = data["digi"]["latitude"].as(); digi.longitude = data["digi"]["longitude"].as(); aprs_is.passcode = data["aprs_is"]["passcode"].as(); aprs_is.server = data["aprs_is"]["server"].as(); aprs_is.port = data["aprs_is"]["port"].as() | 14580; aprs_is.reportingDistance = data["aprs_is"]["reportingDistance"].as() | 30; loramodule.iGateFreq = data["lora"]["iGateFreq"].as() | 433775000; loramodule.digirepeaterTxFreq = data["lora"]["digirepeaterTxFreq"].as() | 433775000; loramodule.digirepeaterRxFreq = data["lora"]["digirepeaterRxFreq"].as() | 433900000; loramodule.spreadingFactor = data["lora"]["spreadingFactor"].as() | 12; loramodule.signalBandwidth = data["lora"]["signalBandwidth"].as() | 125000; loramodule.codingRate4 = data["lora"]["codingRate4"].as() | 5; loramodule.power = data["lora"]["power"].as() | 20; display.alwaysOn = data["display"]["alwaysOn"].as() | true; display.timeout = data["display"]["timeout"].as() | 4; display.turn180 = data["display"]["turn180"].as() | false; syslog.active = data["syslog"]["active"].as() | false; syslog.server = data["syslog"]["server"].as(); syslog.port = data["syslog"]["port"].as(); bme.active = data["bme"]["active"].as() | false; configFile.close(); } void Configuration::validateConfigFile(String currentBeaconCallsign) { if (currentBeaconCallsign == "NOCALL-10") { Serial.println("Change Callsign in /data/igate_conf.json"); show_display("------- ERROR -------", "Change your settings", "on 'igate_conf.json'", "--> File System image", 0); while (true) { delay(1000); } } }