Files
crosspoint-reader/src/CrossPointSettings.cpp
T

76 lines
2.4 KiB
C++
Raw Normal View History

2025-12-15 13:16:46 +01:00
#include "CrossPointSettings.h"
#include <FsHelpers.h>
2025-12-15 13:16:46 +01:00
#include <HardwareSerial.h>
#include <SD.h>
#include <Serialization.h>
// Initialize the static instance
CrossPointSettings CrossPointSettings::instance;
namespace {
2025-12-15 13:16:46 +01:00
constexpr uint8_t SETTINGS_FILE_VERSION = 1;
2025-12-28 05:33:20 -05:00
// Increment this when adding new persisted settings fields
constexpr uint8_t SETTINGS_COUNT = 5;
constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin";
} // namespace
2025-12-15 13:16:46 +01:00
bool CrossPointSettings::saveToFile() const {
// Make sure the directory exists
SD.mkdir("/.crosspoint");
File outputFile;
if (!FsHelpers::openFileForWrite("CPS", SETTINGS_FILE, outputFile)) {
return false;
}
2025-12-15 13:16:46 +01:00
serialization::writePod(outputFile, SETTINGS_FILE_VERSION);
serialization::writePod(outputFile, SETTINGS_COUNT);
2025-12-21 18:42:06 +11:00
serialization::writePod(outputFile, sleepScreen);
2025-12-15 13:16:46 +01:00
serialization::writePod(outputFile, extraParagraphSpacing);
2025-12-19 13:37:34 +01:00
serialization::writePod(outputFile, shortPwrBtn);
serialization::writePod(outputFile, statusBar);
2025-12-28 05:33:20 -05:00
serialization::writePod(outputFile, orientation);
2025-12-15 13:16:46 +01:00
outputFile.close();
Serial.printf("[%lu] [CPS] Settings saved to file\n", millis());
return true;
}
bool CrossPointSettings::loadFromFile() {
File inputFile;
if (!FsHelpers::openFileForRead("CPS", SETTINGS_FILE, inputFile)) {
2025-12-15 13:16:46 +01:00
return false;
}
uint8_t version;
serialization::readPod(inputFile, version);
if (version != SETTINGS_FILE_VERSION) {
Serial.printf("[%lu] [CPS] Deserialization failed: Unknown version %u\n", millis(), version);
inputFile.close();
return false;
}
uint8_t fileSettingsCount = 0;
serialization::readPod(inputFile, fileSettingsCount);
2025-12-28 05:33:20 -05:00
// load settings that exist (support older files with fewer fields)
2025-12-19 13:37:34 +01:00
uint8_t settingsRead = 0;
do {
2025-12-21 18:42:06 +11:00
serialization::readPod(inputFile, sleepScreen);
2025-12-19 13:37:34 +01:00
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, extraParagraphSpacing);
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, shortPwrBtn);
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, statusBar);
if (++settingsRead >= fileSettingsCount) break;
2025-12-28 05:33:20 -05:00
serialization::readPod(inputFile, orientation);
if (++settingsRead >= fileSettingsCount) break;
2025-12-19 13:37:34 +01:00
} while (false);
2025-12-15 13:16:46 +01:00
inputFile.close();
Serial.printf("[%lu] [CPS] Settings loaded from file\n", millis());
return true;
}