#include "CrossPointState.h" #include #include #include namespace { constexpr uint8_t STATE_FILE_VERSION = 3; constexpr char STATE_FILE[] = "/.crosspoint/state.bin"; } // namespace CrossPointState CrossPointState::instance; bool CrossPointState::saveToFile() const { FsFile outputFile; if (!SdMan.openFileForWrite("CPS", STATE_FILE, outputFile)) { return false; } serialization::writePod(outputFile, STATE_FILE_VERSION); serialization::writeString(outputFile, openEpubPath); serialization::writePod(outputFile, lastSleepImage); // Version 3: add cached book title and author serialization::writeString(outputFile, openBookTitle); serialization::writeString(outputFile, openBookAuthor); outputFile.close(); return true; } bool CrossPointState::loadFromFile() { FsFile inputFile; if (!SdMan.openFileForRead("CPS", STATE_FILE, inputFile)) { return false; } uint8_t version; serialization::readPod(inputFile, version); if (version > STATE_FILE_VERSION) { Serial.printf("[%lu] [CPS] Deserialization failed: Unknown version %u\n", millis(), version); inputFile.close(); return false; } serialization::readString(inputFile, openEpubPath); if (version >= 2) { serialization::readPod(inputFile, lastSleepImage); } else { lastSleepImage = 0; } // Version 3: read cached book title and author if (version >= 3) { serialization::readString(inputFile, openBookTitle); serialization::readString(inputFile, openBookAuthor); } else { openBookTitle.clear(); openBookAuthor.clear(); } inputFile.close(); return true; }