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.

68 line
1.6 KiB

  1. #include "Config.h"
  2. #include "Debug.h"
  3. #include "Hardware.h"
  4. #define LOGGER_NAME "Config"
  5. namespace config {
  6. namespace main {
  7. config_t value;
  8. namespace details {
  9. void read() {
  10. VERBOSE("read");
  11. hardware::i2c::powerOn();
  12. hardware::i2c::eeprom.readBlock(CONFIG_ADDR, value);
  13. if (CONFIG_SEED != value.seed) reset(); //todo : reset network if seed for network is not right
  14. hardware::i2c::powerOff();
  15. VERBOSE_FORMAT("read", "%d, %s, %d, %d", value.seed, value.version, value.firstEntry, value.lastEntry);
  16. #if BACKUP_ENABLE_NETWORK
  17. VERBOSE_FORMAT("read", "%d, %d, %s, %s", value.network.saveThreshold, value.network.lastSavedEntry, value.network.apn, value.network.url);
  18. #endif
  19. }
  20. void write() {
  21. VERBOSE_FORMAT("write", "%d, %s, %d, %d", value.seed, value.version, value.firstEntry, value.lastEntry);
  22. #if BACKUP_ENABLE_NETWORK
  23. VERBOSE_FORMAT("write", "%d, %d, %s, %s", value.network.saveThreshold, value.network.lastSavedEntry, value.network.apn, value.network.url);
  24. #endif
  25. hardware::i2c::powerOn();
  26. int written = hardware::i2c::eeprom.writeBlock(CONFIG_ADDR, value);
  27. hardware::i2c::powerOff();
  28. }
  29. }
  30. void setup() {
  31. details::read();
  32. }
  33. void save() {
  34. details::write();
  35. }
  36. void reset() {
  37. VERBOSE("reset");
  38. config_t config = {
  39. CONFIG_SEED,
  40. VERSION,
  41. 0xFFFF,
  42. 0xFFFF,
  43. #if BACKUP_ENABLE_NETWORK
  44. {
  45. POSITIONS_CONFIG_NET_DEFAULT_SAVE_THRESHOLD,
  46. 0xFFFF,
  47. POSITIONS_CONFIG_NET_DEFAULT_APN,
  48. POSITIONS_CONFIG_NET_DEFAULT_URL,
  49. },
  50. #endif
  51. };
  52. value = config;
  53. save();
  54. }
  55. }
  56. }