#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(); igateSendsLoRaBeacons = data["other"]["igateSendsLoRaBeacons"].as(); igateRepeatsLoRaPackets = data["other"]["igateRepeatsLoRaPackets"].as(); rememberStationTime = data["other"]["rememberStationTime"].as(); sendBatteryVoltage = data["other"]["sendBatteryVoltage"].as(); externalVoltageMeasurement = data["other"]["externalVoltageMeasurement"].as(); externalVoltagePin = data["other"]["externalVoltagePin"].as(); 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(); aprs_is.reportingDistance = data["aprs_is"]["reportingDistance"].as(); loramodule.iGateFreq = data["lora"]["iGateFreq"].as(); loramodule.digirepeaterTxFreq = data["lora"]["digirepeaterTxFreq"].as(); loramodule.digirepeaterRxFreq = data["lora"]["digirepeaterRxFreq"].as(); loramodule.spreadingFactor = data["lora"]["spreadingFactor"].as(); loramodule.signalBandwidth = data["lora"]["signalBandwidth"].as(); loramodule.codingRate4 = data["lora"]["codingRate4"].as(); loramodule.power = data["lora"]["power"].as(); display.alwaysOn = data["display"]["alwaysOn"].as(); display.timeout = data["display"]["timeout"].as(); display.turn180 = data["display"]["turn180"].as(); syslog.active = data["syslog"]["active"].as(); syslog.server = data["syslog"]["server"].as(); syslog.port = data["syslog"]["port"].as(); bme.active = data["bme"]["active"].as(); ota.username = data["ota"]["username"].as(); ota.password = data["ota"]["password"].as(); 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); } } }