No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

69 líneas
1.3 KiB

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