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.

78 regels
1.5 KiB

  1. #include "SdPositionsConfig.h"
  2. #include "SdCard.h"
  3. #include "Logging.h"
  4. #if BACKUP_ENABLE_SDCARD
  5. namespace config {
  6. #define CURRENT_LOGGER "config::backup::sd"
  7. namespace backup {
  8. namespace sd {
  9. SdPositionConfig_t value;
  10. File configFile;
  11. namespace details {
  12. void ensureOpened() {
  13. if (!configFile.isOpen()) {
  14. hardware::sdcard::filesystem.chdir();
  15. configFile.open(POSITIONS_CONFIG_FILENAME, O_RDWR | O_CREAT);
  16. }
  17. configFile.rewind();
  18. }
  19. void read() {
  20. #define CURRENT_LOGGER_FUNCTION "read"
  21. VERBOSE;
  22. ensureOpened();
  23. configFile.read((void*)&value, sizeof(value));
  24. if (value.seed != POSITIONS_CONFIG_SEED) reset();
  25. }
  26. void write() {
  27. #define CURRENT_LOGGER_FUNCTION "write"
  28. VERBOSE;
  29. ensureOpened();
  30. configFile.write((void*)&value, sizeof(value));
  31. }
  32. }
  33. SdPositionConfig_t get() {
  34. if (value.seed != POSITIONS_CONFIG_SEED) details::read();
  35. return value;
  36. }
  37. void set(SdPositionConfig_t config) {
  38. value = config;
  39. details::write();
  40. }
  41. void reset() {
  42. #define CURRENT_LOGGER_FUNCTION "reset"
  43. VERBOSE;
  44. SdPositionConfig_t config = {
  45. POSITIONS_CONFIG_SEED,
  46. POSITIONS_CONFIG_DEFAULT_SAVE_THRESHOLD,
  47. POSITIONS_CONFIG_DEFAULT_MAX_RECORDS_PER_FILE,
  48. 0xFFFF,
  49. 0,
  50. 0,
  51. 0
  52. };
  53. value = config;
  54. details::write();
  55. }
  56. }
  57. }
  58. }
  59. #endif