diff --git a/examples/knx-demo/.gitignore b/examples/knx-demo/.gitignore new file mode 100644 index 0000000..89cc49c --- /dev/null +++ b/examples/knx-demo/.gitignore @@ -0,0 +1,5 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch diff --git a/src/knx/bau_systemB_device.cpp b/src/knx/bau_systemB_device.cpp index 872d677..a852d4f 100644 --- a/src/knx/bau_systemB_device.cpp +++ b/src/knx/bau_systemB_device.cpp @@ -49,6 +49,7 @@ void BauSystemBDevice::loop() #ifdef USE_DATASECURE _appLayer.loop(); #endif + _memory.loop(); } void BauSystemBDevice::sendNextGroupTelegram() diff --git a/src/knx/memory.cpp b/src/knx/memory.cpp index 23a737a..fe08a92 100644 --- a/src/knx/memory.cpp +++ b/src/knx/memory.cpp @@ -301,10 +301,15 @@ void Memory::freeMemory(uint8_t* ptr) removeFromUsedList(block); addToFreeList(block); + _saveTimeout = millis(); } void Memory::writeMemory(uint32_t relativeAddress, size_t size, uint8_t* data) { + if(_saveTimeout != 0) + { + _saveTimeout = millis(); + } _platform.writeNonVolatileMemory(relativeAddress, data, size); } @@ -541,3 +546,13 @@ VersionCheckCallback Memory::versionCheckCallback() { return _versionCheckCallback; } + +void Memory::loop() +{ + if(_saveTimeout != 0 && millis() - _saveTimeout > 5000) + { + println("saveMemory timeout"); + _saveTimeout = 0; + writeMemory(); + } +} \ No newline at end of file diff --git a/src/knx/memory.h b/src/knx/memory.h index 30ba9b1..0b0e983 100644 --- a/src/knx/memory.h +++ b/src/knx/memory.h @@ -46,6 +46,7 @@ class Memory void clearMemory(); void addSaveRestore(SaveRestore* obj); void addSaveRestore(TableObject* obj); + void loop(); uint8_t* allocMemory(size_t size); void freeMemory(uint8_t* ptr); @@ -82,4 +83,5 @@ class Memory MemoryBlock* _freeList = nullptr; MemoryBlock* _usedList = nullptr; uint16_t _metadataSize = 6 + LEN_HARDWARE_TYPE; // accounting for 3x pushWord and pushByteArray of length LEN_HARDWARE_TYPE + unsigned long _saveTimeout = 0; };