40 static bool storageInitDone;
42 enum class WearLevelingMode {
48 friend class StateStorageInterface;
49 static Storage *Instance();
50 static Config *ConfigInstance();
51 static void SetConfigInstance(
Config *instance);
52 static bool IsConfigStorageAvailable();
55 static bool SaveStateAllowed(uint32_t);
56 static void ScheduleSave(uint32_t delayMs);
57 static bool IsStateStorageValid();
58 static void LoadStateStorage();
59 static void WriteStateStorage();
61 static bool ReadState(
unsigned char *,
int);
62 static bool WriteState(
const unsigned char *,
int);
71 static bool RegisterSection(
int sectionId,
int offset,
int size,
72 bool addCrc,
bool addBackupCopy);
75 static bool ReadSection(
int sectionId,
unsigned char *data,
int size);
78 static bool WriteSection(
int sectionId,
const unsigned char *data,
int size);
80 static bool DeleteSection(
int sectionId);
82 explicit Storage(
unsigned int storageStartingOffset = 0,
83 unsigned int availableSize = 0,
84 enum WearLevelingMode = WearLevelingMode::OFF);
88 virtual void setStateSavePeriod(uint32_t periodMs);
90 virtual void deleteAll();
92 void enableChannelNumbers();
93 bool isAddChannelNumbersEnabled()
const;
97 virtual int readStorage(
unsigned int address,
100 bool logs =
true) = 0;
101 virtual int writeStorage(
unsigned int address,
102 const unsigned char *buf,
104 virtual void eraseSector(
unsigned int address,
int size);
105 virtual void commit() = 0;
107 virtual int updateStorage(
unsigned int,
const unsigned char *,
int);
109 virtual bool saveStateAllowed(uint32_t);
110 virtual void scheduleSave(uint32_t delayMs);
112 bool registerSection(
113 int sectionId,
int offset,
int size,
bool addCrc,
bool addBackupCopy);
114 bool readSection(
int sectionId,
unsigned char *data,
int size);
115 bool writeSection(
int sectionId,
const unsigned char *data,
int size);
116 bool deleteSection(
int sectionId);
118 static void WriteElementsState();
120 const uint32_t storageStartingOffset = 0;
121 const uint32_t availableSize = 0;
122 const enum WearLevelingMode wearLevelingMode = WearLevelingMode::OFF;
124 uint32_t saveStatePeriod = 1000;
125 uint32_t lastWriteTimestamp = 0;
128 StateStorageInterface *stateStorage =
nullptr;
130 static Storage *instance;
131 static Config *configInstance;
132 bool addChannelNumbers =
false;