mirror of
https://github.com/thelsing/knx.git
synced 2025-08-13 13:46:20 +02:00
update facade save,restore methods
This commit is contained in:
parent
6cf2011e58
commit
dee066e0e3
@ -19,7 +19,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void buttonUp();
|
void buttonUp();
|
||||||
typedef void (*saveRestoreCallback)(uint8_t* buffer);
|
typedef void (*saveRestoreCallback)(uint8_t* buffer, uint32_t* size);
|
||||||
|
|
||||||
template <class P, class B> class KnxFacade : private SaveRestore
|
template <class P, class B> class KnxFacade : private SaveRestore
|
||||||
{
|
{
|
||||||
@ -290,15 +290,42 @@ template <class P, class B> class KnxFacade : private SaveRestore
|
|||||||
|
|
||||||
void save()
|
void save()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (_saveCallback != 0)
|
if (_saveCallback != 0)
|
||||||
_saveCallback(NULL);
|
{
|
||||||
|
uint8_t* buffer = NULL;
|
||||||
|
uint32_t size=0;
|
||||||
|
_saveCallback(buffer, &size);
|
||||||
|
if(buffer != NULL){
|
||||||
|
_platformPtr->freeNVMemory(_ID);
|
||||||
|
uint8_t* addr = _platformPtr->allocNVMemory(size+4, _ID);
|
||||||
|
|
||||||
|
//write size
|
||||||
|
_platformPtr->pushNVMemoryByte(((uint8_t*)&size)[0], &addr);
|
||||||
|
_platformPtr->pushNVMemoryByte(((uint8_t*)&size)[1], &addr);
|
||||||
|
_platformPtr->pushNVMemoryByte(((uint8_t*)&size)[2], &addr);
|
||||||
|
_platformPtr->pushNVMemoryByte(((uint8_t*)&size)[3], &addr);
|
||||||
|
for(uint32_t i=0;i<size;i++){
|
||||||
|
_platformPtr->pushNVMemoryByte(buffer[i], &addr);
|
||||||
|
}
|
||||||
|
delete[] buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void restore(uint8_t* startAddr)
|
void restore(uint8_t* startAddr)
|
||||||
{
|
{
|
||||||
|
uint32_t size=0;
|
||||||
|
|
||||||
|
//read size
|
||||||
|
((uint8_t*)&size)[0] = _platformPtr->popNVMemoryByte(&startAddr);
|
||||||
|
((uint8_t*)&size)[1] = _platformPtr->popNVMemoryByte(&startAddr);
|
||||||
|
((uint8_t*)&size)[2] = _platformPtr->popNVMemoryByte(&startAddr);
|
||||||
|
((uint8_t*)&size)[3] = _platformPtr->popNVMemoryByte(&startAddr);
|
||||||
|
|
||||||
if (_restoreCallback != 0)
|
if (_restoreCallback != 0)
|
||||||
_restoreCallback(startAddr);
|
_restoreCallback(startAddr, &size);
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user