Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

71 lignes
1.3 KiB

  1. #include "SdPositionsConfig.h"
  2. #include "SdCard.h"
  3. #include "Debug.h"
  4. #define LOGGER_NAME "Config::backup::sd"
  5. #if BACKUP_ENABLE_SDCARD
  6. namespace config {
  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. VERBOSE("read");
  21. ensureOpened();
  22. configFile.read((void*)&value, sizeof(value));
  23. if (value.seed != POSITIONS_CONFIG_SEED) reset();
  24. }
  25. void write() {
  26. VERBOSE("write");
  27. ensureOpened();
  28. configFile.write((void*)&value, sizeof(value));
  29. }
  30. }
  31. SdPositionConfig_t get() {
  32. if (value.seed != POSITIONS_CONFIG_SEED) details::read();
  33. return value;
  34. }
  35. void set(SdPositionConfig_t config) {
  36. value = config;
  37. details::write();
  38. }
  39. void reset() {
  40. VERBOSE("reset");
  41. SdPositionConfig_t config = {
  42. POSITIONS_CONFIG_SEED,
  43. POSITIONS_CONFIG_DEFAULT_SAVE_THRESHOLD,
  44. POSITIONS_CONFIG_DEFAULT_MAX_RECORDS_PER_FILE,
  45. 0xFFFF,
  46. 0,
  47. 0,
  48. 0
  49. };
  50. value = config;
  51. details::write();
  52. }
  53. }
  54. }
  55. }
  56. #endif