void saveConfig(void) { eepromSavedParametersStorage.versionMajor = FIRMWARE_VERSION_MAJOR; eepromSavedParametersStorage.versionMinor = FIRMWARE_VERSION_MINOR; eepromSavedParametersStorage.checkSum = calculateCheckSum(); EEPROM.begin(sizeof(eepromSavedParametersStorage) + EEPROM_SAVED_PARAMETERS_ADDRESS); saveToEEPROM(EEPROM_SAVED_PARAMETERS_ADDRESS, (void *)&eepromSavedParametersStorage, sizeof(eepromSavedParametersStorage)); EEPROM.end(); DiagLogLegacy.print(F("[")); DiagLogLegacy.print(millis()); DiagLogLegacy.println(F("] Config saved to EEPROM.")); }
//the fault handler isn't a device per se and uses more memory than a device would normally be allocated so //it does not use PrefHandler void FaultHandler::loadFromEEPROM() { uint8_t validByte; memCache->Read(EE_FAULT_LOG, &validByte); if (validByte == 0xB2) //magic byte value for a valid fault cache { memCache->Read(EE_FAULT_LOG + EEFAULT_READPTR, &faultReadPointer); memCache->Read(EE_FAULT_LOG + EEFAULT_WRITEPTR, &faultWritePointer); memCache->Read(EE_FAULT_LOG + EEFAULT_RUNTIME, &globalTime); baseTime = globalTime; for (int i = 0; i < CFG_FAULT_HISTORY_SIZE; i++) { memCache->Read(EE_FAULT_LOG + EEFAULT_FAULTS_START + sizeof(FAULT) * i, &faultList[i], sizeof(FAULT)); } } else //reinitialize the fault cache storage { validByte = 0xB2; memCache->Write(EE_FAULT_LOG, validByte); memCache->Write(EE_FAULT_LOG + EEFAULT_READPTR, (uint16_t)0); memCache->Write(EE_FAULT_LOG + EEFAULT_WRITEPTR, (uint16_t)0); globalTime = baseTime = millis() / 100; memCache->Write(EE_FAULT_LOG + EEFAULT_RUNTIME, globalTime); FAULT tempFault; tempFault.ack = true; tempFault.device = 0xFFFF; tempFault.faultCode = 0xFFFF; tempFault.ongoing = false; tempFault.timeStamp = 0; for (int i = 0; i < CFG_FAULT_HISTORY_SIZE; i++) { faultList[i] = tempFault; } saveToEEPROM(); } }