fix userdata saverestore (#133)

* * fix for save/restore of userdata

* change declaration of restore() in knx_facade.h to "const uint8_t* restore(const uint8_t* buffer)" to avoid calling default implementation in save_restore.h

* change typedefs to separate SaveCallback and RestoreCallback

* fix BME60 example, knx.setRestoreCallback() needs to use const uint8_t* as well

* fix commitToEeprom for ESP32

* trigger dirty flag for ESP32 to make sure data is committed
This commit is contained in:
OutOfSync1 2021-04-14 23:46:03 +02:00 committed by GitHub
parent 1343ed0b7d
commit 14162fb1a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 8 deletions

View File

@ -25,7 +25,7 @@
void checkIaqSensorStatus(void); void checkIaqSensorStatus(void);
void errLeds(void); void errLeds(void);
uint8_t* saveBme680State(uint8_t* buffer); uint8_t* saveBme680State(uint8_t* buffer);
uint8_t* loadBme680State(uint8_t* buffer); const uint8_t* loadBme680State(const uint8_t* buffer);
void triggerCallback(GroupObject& go); void triggerCallback(GroupObject& go);
void updateState(); void updateState();
@ -214,7 +214,7 @@ void errLeds(void)
delay(100); delay(100);
} }
uint8_t* loadBme680State(uint8_t* buffer) const uint8_t* loadBme680State(const uint8_t* buffer)
{ {
// Existing state in EEPROM // Existing state in EEPROM
Serial.println("Reading state from EEPROM"); Serial.println("Reading state from EEPROM");

View File

@ -104,6 +104,7 @@ uint8_t * Esp32Platform::getEepromBuffer(uint16_t size)
void Esp32Platform::commitToEeprom() void Esp32Platform::commitToEeprom()
{ {
EEPROM.getDataPtr(); // trigger dirty flag in EEPROM lib to make sure data will be written to flash
EEPROM.commit(); EEPROM.commit();
} }

View File

@ -40,7 +40,8 @@
#endif #endif
#endif #endif
typedef uint8_t* (*SaveRestoreCallback)(uint8_t* buffer); typedef const uint8_t* (*RestoreCallback)(const uint8_t* buffer);
typedef uint8_t* (*SaveCallback)(uint8_t* buffer);
typedef void (*IsrFunctionPtr)(); typedef void (*IsrFunctionPtr)();
template <class P, class B> class KnxFacade : private SaveRestore template <class P, class B> class KnxFacade : private SaveRestore
@ -266,12 +267,12 @@ template <class P, class B> class KnxFacade : private SaveRestore
_progButtonISRFuncPtr = progButtonISRFuncPtr; _progButtonISRFuncPtr = progButtonISRFuncPtr;
} }
void setSaveCallback(SaveRestoreCallback func) void setSaveCallback(SaveCallback func)
{ {
_saveCallback = func; _saveCallback = func;
} }
void setRestoreCallback(SaveRestoreCallback func) void setRestoreCallback(RestoreCallback func)
{ {
_restoreCallback = func; _restoreCallback = func;
} }
@ -336,8 +337,8 @@ template <class P, class B> class KnxFacade : private SaveRestore
uint32_t _ledPin = LED_BUILTIN; uint32_t _ledPin = LED_BUILTIN;
uint32_t _buttonPinInterruptOn = RISING; uint32_t _buttonPinInterruptOn = RISING;
uint32_t _buttonPin = 0; uint32_t _buttonPin = 0;
SaveRestoreCallback _saveCallback = 0; SaveCallback _saveCallback = 0;
SaveRestoreCallback _restoreCallback = 0; RestoreCallback _restoreCallback = 0;
volatile bool _toggleProgMode = false; volatile bool _toggleProgMode = false;
bool _progLedState = false; bool _progLedState = false;
uint16_t _saveSize = 0; uint16_t _saveSize = 0;
@ -351,7 +352,7 @@ template <class P, class B> class KnxFacade : private SaveRestore
return buffer; return buffer;
} }
uint8_t* restore(uint8_t* buffer) const uint8_t* restore(const uint8_t* buffer)
{ {
if (_restoreCallback != 0) if (_restoreCallback != 0)
return _restoreCallback(buffer); return _restoreCallback(buffer);