#include "configuration.h" Configuration::Configuration(const String &filePath) { _filePath = filePath; 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(); wifiap.checkInterval = data["wifi"]["checkInterval"].as(); wifiAPs.push_back(wifiap); } callsign = data["callsign"].as(); stationMode = data["stationMode"].as(); iGateComment = data["iGateComment"].as(); digirepeaterComment = data["digirepeaterComment"].as(); beaconInterval = data["other"]["beaconInterval"].as(); rememberStationTime = data["other"]["rememberStationTime"].as(); statusAfterBoot = data["other"]["statusAfterBoot"].as(); defaultStatus = data["other"]["defaultStatus"].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.softwareName = data["aprs_is"]["softwareName"].as(); aprs_is.softwareVersion = data["aprs_is"]["softwareVersion"].as(); aprs_is.reportingDistance = data["aprs_is"]["reportingDistance"].as(); loramodule.frequencyTx = data["lora"]["frequencyTx"].as(); loramodule.frequencyRx = data["lora"]["frequencyRx"].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.keepLastPacketOnScreen = data["display"]["keepLastPacketOnScreen"].as(); display.timeout = data["display"]["timeout"].as(); configFile.close(); } void Configuration::validateConfigFile(String currentBeaconCallsign) { if (currentBeaconCallsign == "NOCALL-10") { Serial.println("Change Callsign in /data/wx_report_config.json"); while (true) { delay(1000); } } }