Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

58 rader
1.2 KiB

  1. #include "Config.h"
  2. #include "Debug.h"
  3. #include "Hardware.h"
  4. #define LOGGER_NAME "Config"
  5. namespace config {
  6. Config value;
  7. namespace details {
  8. void read() {
  9. VERBOSE("read");
  10. hardware::i2c::eepromPowerOn();
  11. hardware::i2c::eeprom.readBlock(CONFIG_ADDR, value);
  12. if (!String(CONFIG_SEED).equals(value.seed)) reset();
  13. hardware::i2c::eepromPowerOff();
  14. }
  15. void write() {
  16. VERBOSE_FORMAT("write", "%s, %s, %d, %d", value.seed, value.version, value.firstEntry, value.lastEntry);
  17. hardware::i2c::eepromPowerOn();
  18. int written = hardware::i2c::eeprom.writeBlock(CONFIG_ADDR, value);
  19. hardware::i2c::eepromPowerOff();
  20. }
  21. }
  22. Config get() {
  23. if (value.seed[0] == '\0') details::read();
  24. VERBOSE_FORMAT("get", "%s, %s, %d, %d", value.seed, value.version, value.firstEntry, value.lastEntry);
  25. return value;
  26. }
  27. void set(Config config) {
  28. value = config;
  29. details::write();
  30. }
  31. void reset() {
  32. VERBOSE("reset");
  33. Config config = {
  34. CONFIG_SEED,
  35. VERSION,
  36. 0xFFFF,
  37. 0xFFFF
  38. };
  39. value = config;
  40. details::write();
  41. VERBOSE_FORMAT("reset", "value : %s, %s, %d, %d", value.seed, value.version, value.firstEntry, value.lastEntry);
  42. }
  43. }