Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

Storage.cpp 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "Storage.h"
  2. #include <EEPROM.h>
  3. #include <Arduino.h>
  4. template <class T> int EEPROM_writeAnything(int ee, const T& value)
  5. {
  6. const byte* p = (const byte*)(const void*)&value;
  7. unsigned int i;
  8. for (i = 0; i < sizeof(value); i++)
  9. EEPROM.write(ee++, *p++);
  10. return i;
  11. }
  12. template <class T> int EEPROM_readAnything(int ee, T& value)
  13. {
  14. byte* p = (byte*)(void*)&value;
  15. unsigned int i;
  16. for (i = 0; i < sizeof(value); i++)
  17. *p++ = EEPROM.read(ee++);
  18. return i;
  19. }
  20. void Storage::load(AppCoreState& data)
  21. {
  22. uint8_t version;
  23. uint32_t index = 0;
  24. index += EEPROM_readAnything(index, version);
  25. if (version == 1)
  26. {
  27. index += EEPROM_readAnything(index, data.appState.water.setting);
  28. index += EEPROM_readAnything(index, data.appState.heater.setting);
  29. index += EEPROM_readAnything(index, data.appState.tempTrigger);
  30. }
  31. }
  32. void Storage::save(const AppCoreState& data)
  33. {
  34. uint32_t index = 0;
  35. index += EEPROM_writeAnything(index, (uint8_t)1);
  36. index += EEPROM_writeAnything(index, data.appState.water.setting);
  37. index += EEPROM_writeAnything(index, data.appState.heater.setting);
  38. index += EEPROM_writeAnything(index, data.appState.tempTrigger);
  39. }