changes for PR

- (old) version is again part of version check
- naming conventions
This commit is contained in:
Waldemar Porscha 2022-03-02 09:27:12 +01:00
parent 65a60fdb48
commit 5f7e9e2f98
4 changed files with 30 additions and 20 deletions

View File

@ -612,12 +612,12 @@ Memory& BauSystemB::memory()
return _memory; return _memory;
} }
void BauSystemB::addVersionCheckCallback(versionCheckCallback func) void BauSystemB::versionCheckCallback(VersionCheckCallback func)
{ {
_memory.addVersionCheckCallback(func); _memory.versionCheckCallback(func);
} }
versionCheckCallback BauSystemB::getVersionCheckCallback() VersionCheckCallback BauSystemB::versionCheckCallback()
{ {
return _memory.getVersionCheckCallback(); return _memory.versionCheckCallback();
} }

View File

@ -38,8 +38,8 @@ class BauSystemB : protected BusAccessUnit
void propertyValueWrite(ObjectType objectType, uint8_t objectInstance, uint8_t propertyId, void propertyValueWrite(ObjectType objectType, uint8_t objectInstance, uint8_t propertyId,
uint8_t& numberOfElements, uint16_t startIndex, uint8_t& numberOfElements, uint16_t startIndex,
uint8_t* data, uint32_t length) override; uint8_t* data, uint32_t length) override;
void addVersionCheckCallback(versionCheckCallback func); void versionCheckCallback(VersionCheckCallback func);
versionCheckCallback getVersionCheckCallback(); VersionCheckCallback versionCheckCallback();
protected: protected:
virtual ApplicationLayer& applicationLayer() = 0; virtual ApplicationLayer& applicationLayer() = 0;

View File

@ -29,19 +29,22 @@ void Memory::readMemory()
_freeList = new MemoryBlock(flashStart + metadataBlockSize, flashSize - metadataBlockSize); _freeList = new MemoryBlock(flashStart + metadataBlockSize, flashSize - metadataBlockSize);
uint16_t version = 0;
const uint8_t* buffer = popWord(version, buffer);
uint16_t manufacturerId = 0; uint16_t manufacturerId = 0;
const uint8_t* buffer = popWord(manufacturerId, flashStart); buffer = popWord(manufacturerId, flashStart);
uint8_t hardwareType[LEN_HARDWARE_TYPE] = {0}; uint8_t hardwareType[LEN_HARDWARE_TYPE] = {0};
buffer = popByteArray(hardwareType, LEN_HARDWARE_TYPE, buffer); buffer = popByteArray(hardwareType, LEN_HARDWARE_TYPE, buffer);
uint16_t version = 0; uint16_t apiVersion = 0;
buffer = popWord(version, buffer); buffer = popWord(apiVersion, buffer);
VersionCheckResult versionCheck = FlashAllInvalid; VersionCheckResult versionCheck = FlashAllInvalid;
// first check correct format of deviceObject-API // first check correct format of deviceObject-API
if (_deviceObject.apiVersion == version) if (_deviceObject.apiVersion == apiVersion)
{ {
if (_versionCheckCallback != 0) { if (_versionCheckCallback != 0) {
versionCheck = _versionCheckCallback(manufacturerId, hardwareType); versionCheck = _versionCheckCallback(manufacturerId, hardwareType);
@ -50,9 +53,15 @@ void Memory::readMemory()
else if (_deviceObject.manufacturerId() == manufacturerId && else if (_deviceObject.manufacturerId() == manufacturerId &&
memcmp(_deviceObject.hardwareType(), hardwareType, LEN_HARDWARE_TYPE) == 0) memcmp(_deviceObject.hardwareType(), hardwareType, LEN_HARDWARE_TYPE) == 0)
{ {
if (_deviceObject.version() == version) {
versionCheck = FlashValid; versionCheck = FlashValid;
} }
else else
{
versionCheck = FlashTablesInvalid;
}
}
else
{ {
println("manufacturerId or hardwareType are different"); println("manufacturerId or hardwareType are different");
print("expexted manufacturerId: "); print("expexted manufacturerId: ");
@ -72,7 +81,7 @@ void Memory::readMemory()
print("expexted DataObject api version: "); print("expexted DataObject api version: ");
print(_deviceObject.apiVersion, HEX); print(_deviceObject.apiVersion, HEX);
print(", stored api version: "); print(", stored api version: ");
println(version, HEX); println(apiVersion, HEX);
} }
if (versionCheck == FlashAllInvalid) if (versionCheck == FlashAllInvalid)
@ -129,9 +138,10 @@ void Memory::writeMemory()
uint32_t flashPos = 0; uint32_t flashPos = 0;
uint8_t* bufferPos = buffer; uint8_t* bufferPos = buffer;
bufferPos = pushWord(_deviceObject.apiVersion, bufferPos);
bufferPos = pushWord(_deviceObject.manufacturerId(), bufferPos); bufferPos = pushWord(_deviceObject.manufacturerId(), bufferPos);
bufferPos = pushByteArray(_deviceObject.hardwareType(), LEN_HARDWARE_TYPE, bufferPos); bufferPos = pushByteArray(_deviceObject.hardwareType(), LEN_HARDWARE_TYPE, bufferPos);
bufferPos = pushWord(_deviceObject.apiVersion, bufferPos); bufferPos = pushWord(_deviceObject.version(), bufferPos);
flashPos = _platform.writeNonVolatileMemory(flashPos, buffer, bufferPos - buffer); flashPos = _platform.writeNonVolatileMemory(flashPos, buffer, bufferPos - buffer);
@ -478,12 +488,12 @@ void Memory::addNewUsedBlock(uint8_t* address, size_t size)
addToUsedList(newUsedBlock); addToUsedList(newUsedBlock);
} }
void Memory::addVersionCheckCallback(versionCheckCallback func) void Memory::versionCheckCallback(VersionCheckCallback func)
{ {
_versionCheckCallback = func; _versionCheckCallback = func;
} }
versionCheckCallback Memory::getVersionCheckCallback() VersionCheckCallback Memory::versionCheckCallback()
{ {
return _versionCheckCallback; return _versionCheckCallback;
} }

View File

@ -31,7 +31,7 @@ enum VersionCheckResult
FlashValid = 2 //!< Flash content is valid and will be used FlashValid = 2 //!< Flash content is valid and will be used
}; };
typedef VersionCheckResult (*versionCheckCallback)(uint16_t manufacturerId, uint8_t* hardwareType); typedef VersionCheckResult (*VersionCheckCallback)(uint16_t manufacturerId, uint8_t* hardwareType, uint16_t version);
class Memory class Memory
{ {
@ -50,8 +50,8 @@ public:
uint8_t* toAbsolute(uint32_t relativeAddress); uint8_t* toAbsolute(uint32_t relativeAddress);
uint32_t toRelative(uint8_t* absoluteAddress); uint32_t toRelative(uint8_t* absoluteAddress);
void addVersionCheckCallback(versionCheckCallback func); void versionCheckCallback(VersionCheckCallback func);
versionCheckCallback getVersionCheckCallback(); VersionCheckCallback versionCheckCallback();
private: private:
void removeFromFreeList(MemoryBlock* block); void removeFromFreeList(MemoryBlock* block);
@ -68,7 +68,7 @@ public:
uint8_t* eraseBlockEnd(uint32_t blockNum); uint8_t* eraseBlockEnd(uint32_t blockNum);
void saveBufferdEraseBlock(); void saveBufferdEraseBlock();
versionCheckCallback _versionCheckCallback = 0; VersionCheckCallback _versionCheckCallback = 0;
Platform& _platform; Platform& _platform;
DeviceObject& _deviceObject; DeviceObject& _deviceObject;
SaveRestore* _saveRestores[MAXSAVE] = {0}; SaveRestore* _saveRestores[MAXSAVE] = {0};
@ -77,5 +77,5 @@ public:
uint8_t _tableObjCount = 0; uint8_t _tableObjCount = 0;
MemoryBlock* _freeList = nullptr; MemoryBlock* _freeList = nullptr;
MemoryBlock* _usedList = nullptr; MemoryBlock* _usedList = nullptr;
uint16_t _metadataSize = 4 + LEN_HARDWARE_TYPE; // accounting for 2x pushWord and pushByteArray of length LEN_HARDWARE_TYPE uint16_t _metadataSize = 6 + LEN_HARDWARE_TYPE; // accounting for 3x pushWord and pushByteArray of length LEN_HARDWARE_TYPE
}; };