You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Storage.cpp 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "Storage.h"
  2. #include "globals.h"
  3. #include <EEPROM.h>
  4. #include <Arduino.h>
  5. template<class T>
  6. int EEPROM_writeAnything(
  7. int ee
  8. , const T& value
  9. )
  10. {
  11. const byte* p = (const byte*) (const void*) &value;
  12. unsigned int i;
  13. for (i = 0; i < sizeof(value); i++)
  14. EEPROM.write(ee++, *p++);
  15. return i;
  16. }
  17. template<class T>
  18. int EEPROM_readAnything(
  19. int ee
  20. , T& value
  21. )
  22. {
  23. byte* p = (byte*) (void*) &value;
  24. unsigned int i;
  25. for (i = 0; i < sizeof(value); i++)
  26. *p++ = EEPROM.read(ee++);
  27. return i;
  28. }
  29. void Storage::load()
  30. {
  31. uint8_t version;
  32. uint32_t index = 0;
  33. index += EEPROM_readAnything(index, version);
  34. if (version == 1)
  35. {
  36. index += load(index, g_appState.tanks[0]);
  37. index += load(index, g_appState.tanks[1]);
  38. }
  39. }
  40. uint32_t Storage::load(
  41. uint32_t index
  42. , BoilerTankState& tankState
  43. )
  44. {
  45. uint32_t delta = 0;
  46. delta += EEPROM_readAnything(index + delta, tankState.setting);
  47. delta += EEPROM_readAnything(index + delta, tankState.tempTrigger);
  48. delta += EEPROM_readAnything(index + delta, tankState.mode);
  49. return delta;
  50. }
  51. void Storage::save()
  52. {
  53. uint32_t index = 0;
  54. index += EEPROM_writeAnything(index, (uint8_t) 1);
  55. index += save(index, g_appState.tanks[0]);
  56. index += save(index, g_appState.tanks[1]);
  57. }
  58. uint32_t Storage::save(
  59. uint32_t index
  60. , const BoilerTankState& tankState
  61. )
  62. {
  63. uint32_t delta = 0;
  64. delta += EEPROM_writeAnything(index + delta, tankState.setting);
  65. delta += EEPROM_writeAnything(index + delta, tankState.tempTrigger);
  66. delta += EEPROM_writeAnything(index + delta, tankState.mode);
  67. return delta;
  68. }