123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include "Storage.h"
- #include "globals.h"
- #include <EEPROM.h>
- #include <Arduino.h>
-
- template<class T>
- 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<class T>
- 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;
- }
|