From e1c0629819cb1ce0b3ed66cf397191022e35b445 Mon Sep 17 00:00:00 2001 From: SirSydom Date: Wed, 9 Feb 2022 23:57:53 +0100 Subject: [PATCH] fixed memoryread and crash while loading KOs (+debugstuff) --- src/knx/bau_systemB.cpp | 21 +++++++++++++++++++-- src/knx/bau_systemB.h | 2 ++ src/knx/group_object_table_object.cpp | 4 ++-- src/knx/memory.cpp | 5 +++++ src/knx/memory.h | 1 + src/knx/network_layer_device.cpp | 1 + 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/knx/bau_systemB.cpp b/src/knx/bau_systemB.cpp index e36656e..f6795ec 100644 --- a/src/knx/bau_systemB.cpp +++ b/src/knx/bau_systemB.cpp @@ -112,9 +112,15 @@ void BauSystemB::memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t memoryAddress, uint8_t * data) { _memory.writeMemory(memoryAddress, number, data); - + Serial.println("memoryWriteIndication"); if (_deviceObj.verifyMode()) - memoryReadIndication(priority, hopType, asap, secCtrl, number, memoryAddress); + memoryReadIndicationP(priority, hopType, asap, secCtrl, number, memoryAddress, data); +} + +void BauSystemB::memoryReadIndicationP(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, + uint16_t memoryAddress, uint8_t * data) +{ + applicationLayer().memoryReadResponse(AckRequested, priority, hopType, asap, secCtrl, number, memoryAddress, data); } void BauSystemB::memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, @@ -206,6 +212,12 @@ void BauSystemB::propertyDescriptionReadIndication(Priority priority, HopCountTy void BauSystemB::propertyValueWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length) { + Serial.print("propertyValueWriteIndication: "); + Serial.println(propertyId); + if(propertyId == 5 && objectIndex == 3) + { + Serial.println("gotcha"); + } InterfaceObject* obj = getInterfaceObject(objectIndex); if(obj) obj->writeProperty((PropertyID)propertyId, startIndex, data, numberOfElements); @@ -246,6 +258,11 @@ void BauSystemB::propertyValueReadIndication(Priority priority, HopCountType hop else elementCount = 0; + if(objectIndex == 1 && propertyId == 27) + { + Serial.print(" "); + } + uint8_t data[size]; if(obj) obj->readProperty((PropertyID)propertyId, startIndex, elementCount, data); diff --git a/src/knx/bau_systemB.h b/src/knx/bau_systemB.h index 290f839..515623b 100644 --- a/src/knx/bau_systemB.h +++ b/src/knx/bau_systemB.h @@ -48,6 +48,8 @@ class BauSystemB : protected BusAccessUnit uint16_t memoryAddress, uint8_t* data) override; void memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress) override; + void memoryReadIndicationP(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, + uint16_t memoryAddress, uint8_t * data); void memoryExtWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, uint8_t* data) override; void memoryExtReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, diff --git a/src/knx/group_object_table_object.cpp b/src/knx/group_object_table_object.cpp index b610404..a01350c 100644 --- a/src/knx/group_object_table_object.cpp +++ b/src/knx/group_object_table_object.cpp @@ -82,11 +82,11 @@ void GroupObjectTableObject::beforeStateChange(LoadState& newState) _tableData = (uint16_t*)data(); - if (!initGroupObjects()) + /*if (!initGroupObjects()) { newState = LS_ERROR; TableObject::errorCode(E_SOFTWARE_FAULT); - } + }*/ } bool GroupObjectTableObject::initGroupObjects() diff --git a/src/knx/memory.cpp b/src/knx/memory.cpp index 2f1d544..1948461 100644 --- a/src/knx/memory.cpp +++ b/src/knx/memory.cpp @@ -146,6 +146,11 @@ void Memory::writeMemory() _platform.commitNonVolatileMemory(); } +void Memory::saveMemory() +{ + _platform.commitNonVolatileMemory(); +} + void Memory::addSaveRestore(SaveRestore* obj) { if (_saveCount >= MAXSAVE - 1) diff --git a/src/knx/memory.h b/src/knx/memory.h index 4cc10b8..75c4480 100644 --- a/src/knx/memory.h +++ b/src/knx/memory.h @@ -31,6 +31,7 @@ public: virtual ~Memory(); void readMemory(); void writeMemory(); + void saveMemory(); void addSaveRestore(SaveRestore* obj); void addSaveRestore(TableObject* obj); diff --git a/src/knx/network_layer_device.cpp b/src/knx/network_layer_device.cpp index 53e6266..5880a74 100644 --- a/src/knx/network_layer_device.cpp +++ b/src/knx/network_layer_device.cpp @@ -82,6 +82,7 @@ void NetworkLayerDevice::dataIndication(AckType ack, AddressType addrType, uint1 return; _transportLayer.dataIndividualIndication(destination, hopType, priority, source, npdu.tpdu()); + Serial.println("NL:dI"); return; }