#include "Storage.h" #include "globals.h" #include #include template int EEPROM_writeAnything( int ee , const T& value ) { const byte* p = (const byte*) (const void*) &value; unsigned int i; for (i = 0; i < sizeof(value); i++) EEPROM.write(ee++, *p++); return i; } template int EEPROM_readAnything( int ee , T& value ) { byte* p = (byte*) (void*) &value; unsigned int i; for (i = 0; i < sizeof(value); i++) *p++ = EEPROM.read(ee++); return i; } void Storage::load() { uint8_t version; uint32_t index = 0; index += EEPROM_readAnything(index, version); if (version == 1) { index += load(index, g_appState.tanks[0]); index += load(index, g_appState.tanks[1]); } } uint32_t Storage::load( uint32_t index , BoilerTankState& tankState ) { uint32_t delta = 0; delta += EEPROM_readAnything(index + delta, tankState.setting); delta += EEPROM_readAnything(index + delta, tankState.tempTrigger); delta += EEPROM_readAnything(index + delta, tankState.mode); return delta; } void Storage::save() { uint32_t index = 0; index += EEPROM_writeAnything(index, (uint8_t) 1); index += save(index, g_appState.tanks[0]); index += save(index, g_appState.tanks[1]); } uint32_t Storage::save( uint32_t index , const BoilerTankState& tankState ) { uint32_t delta = 0; delta += EEPROM_writeAnything(index + delta, tankState.setting); delta += EEPROM_writeAnything(index + delta, tankState.tempTrigger); delta += EEPROM_writeAnything(index + delta, tankState.mode); return delta; }