14 static constexpr
auto kFunctionPropertyResultBufferMaxSize = 0xFF;
15 static constexpr
auto kRestartProcessTime = 3;
51 static constexpr uint8_t successCode = 0x00;
52 static constexpr uint8_t invalidEraseCode = 0x02;
58 println(
"Confirmed restart requested.");
65 println(
"ResetAP requested. Not implemented yet.");
72 println(
"ResetIA requested. Not implemented yet.");
79 println(
"ResetLinks requested. Not implemented yet.");
86 println(
"ResetParam requested. Not implemented yet.");
93 println(
"Factory reset requested. type: with IA");
100 println(
"Factory reset requested. type: without IA");
106 print(
"Unhandled erase code: ");
108 return invalidEraseCode;
115 if (descriptorType != 0)
116 descriptorType = 0x3f;
123 uint16_t memoryAddress, uint8_t* data)
125 print(
"Writing memory at: ");
126 print(memoryAddress, HEX);
135 print(
"Sending Read indication");
141 uint16_t memoryAddress, uint8_t* data)
157 print(
"Writing memory at: ");
158 print(memoryAddress, HEX);
170 uint16_t memoryAddress, uint8_t* data)
179 uint16_t memoryAddress, uint8_t* data)
185 uint16_t memoryAddress)
213 println(
"Basic restart requested");
229 println(
"Unhandled restart type.");
258 uint8_t propertyId, uint8_t propertyIndex)
260 uint8_t pid = propertyId;
261 bool writeEnable =
false;
263 uint16_t numberOfElements = 0;
271 writeEnable, type, numberOfElements, access);
275 uint16_t objectType, uint16_t objectInstance, uint16_t propertyId, uint8_t descriptionType, uint16_t propertyIndex)
277 uint8_t pid = propertyId;
278 uint8_t pidx = propertyIndex;
280 if (propertyId > 0xFF || propertyIndex > 0xFF)
282 println(
"BauSystemB::propertyExtDescriptionReadIndication: propertyId or Idx > 256 are not supported");
286 if (descriptionType != 0)
288 println(
"BauSystemB::propertyExtDescriptionReadIndication: only descriptionType 0 supported");
292 bool writeEnable =
false;
294 uint16_t numberOfElements = 0;
302 descriptionType, writeEnable, type, numberOfElements, access);
306 uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length)
317 uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length,
bool confirmed)
330 applicationLayer().
propertyValueExtWriteConResponse(
AckRequested, priority, hopType, asap, secCtrl, objectType, objectInstance, propertyId, numberOfElements, startIndex, returnCode);
335 uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex)
338 uint8_t elementCount = numberOfElements;
340 print(
"propertyValueReadIndication: ObjIdx ");
345 print(numberOfElements);
357 size = elementSize * numberOfElements;
359 size =
sizeof(uint16_t);
369 if (elementCount == 0)
373 startIndex, data, size);
377 uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex)
380 uint8_t elementCount = numberOfElements;
388 size = elementSize * numberOfElements;
390 size =
sizeof(uint16_t);
400 if (elementCount == 0)
404 startIndex, data, size);
408 uint8_t propertyId, uint8_t* data, uint8_t length)
410 uint8_t resultData[kFunctionPropertyResultBufferMaxSize];
411 uint8_t resultLength =
sizeof(resultData);
413 bool handled =
false;
427 if (
_functionProperty(objectIndex, propertyId, length, data, resultData, resultLength))
434 if (
_functionProperty(objectIndex, propertyId, length, data, resultData, resultLength))
444 uint8_t propertyId, uint8_t* data, uint8_t length)
446 uint8_t resultData[kFunctionPropertyResultBufferMaxSize];
447 uint8_t resultLength =
sizeof(resultData);
457 obj->
state((
PropertyID)propertyId, data, length, resultData, resultLength);
480 uint8_t propertyId, uint8_t* data, uint8_t length)
482 uint8_t resultData[kFunctionPropertyResultBufferMaxSize];
483 uint8_t resultLength = 1;
494 uint8_t reservedByte = data[0];
496 if (reservedByte != 0x00)
502 resultLength =
sizeof(resultData);
517 resultLength = count ? 2 : 1;
539 uint8_t propertyId, uint8_t* data, uint8_t length)
541 uint8_t resultData[kFunctionPropertyResultBufferMaxSize];
542 uint8_t resultLength =
sizeof(resultData);
553 uint8_t reservedByte = data[0];
555 if (reservedByte != 0x00)
561 resultLength =
sizeof(resultData);
562 obj->
state((
PropertyID)propertyId, data, length, resultData, resultLength);
571 resultLength = count ? 2 : 1;
600 uint8_t* knxSerialNumber)
615 uint8_t emptyDomainAddress[2] = {0x00};
690 uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength)
694 popByte(operand, testInfo + 1);
723 uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength,
bool status)
728 uint8_t& numberOfElements, uint16_t startIndex,
729 uint8_t** data, uint32_t& length)
732 uint8_t elementCount = numberOfElements;
741 size = elementSize * numberOfElements;
743 size =
sizeof(uint16_t);
745 *data =
new uint8_t [size];
754 numberOfElements = elementCount;
759 uint8_t& numberOfElements, uint16_t startIndex,
760 uint8_t* data, uint32_t length)
767 numberOfElements = 0;
void(* BeforeRestartCallback)(void)
bool(* FunctionPropertyCallback)(uint8_t objectIndex, uint8_t propertyId, uint8_t length, uint8_t *data, uint8_t *resultData, uint8_t &resultLength)
@ NM_Read_SerialNumber_By_PowerReset
@ NM_Read_SerialNumber_By_ProgrammingMode
@ NM_Read_SerialNumber_By_ManufacturerSpecific
@ NM_Read_SerialNumber_By_ExFactoryState
const uint8_t * popByte(uint8_t &b, const uint8_t *data)
void printHex(const char *suffix, const uint8_t *data, size_t length, bool newline)
uint8_t * pushWord(uint16_t w, uint8_t *data)
void propertyDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool writeEnable, uint8_t type, uint16_t maxNumberOfElements, uint8_t access)
void individualAddressReadResponse(AckType ack, HopCountType hopType, const SecurityControl &secCtrl)
void functionPropertyStateResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t *resultData, uint8_t resultLength)
void propertyValueExtReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint16_t objectType, uint8_t objectInstance, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t *data, uint8_t length)
void memoryExtReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, ReturnCodes code, uint8_t number, uint32_t memoryAddress, uint8_t *data)
void propertyExtDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint16_t objectType, uint16_t objectInstance, uint16_t propertyId, uint16_t propertyIndex, uint8_t descriptionType, bool writeEnable, uint8_t type, uint16_t maxNumberOfElements, uint8_t access)
void memoryExtWriteResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, ReturnCodes code, uint8_t number, uint32_t memoryAddress, uint8_t *memoryData)
void deviceDescriptorReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptorType, uint8_t *deviceDescriptor)
void memoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t *data)
void authorizeResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level)
void functionPropertyExtStateResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint16_t objectType, uint8_t objectInstance, uint16_t propertyId, uint8_t *resultData, uint8_t resultLength)
void deviceDescriptorReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptorType)
void propertyValueReadResponse(AckType ack, 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)
void systemNetworkParameterReadResponse(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType, uint16_t propertyId, uint8_t *testInfo, uint16_t testInfoLength, uint8_t *testResult, uint16_t testResultLength)
void memoryRouterReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t *data)
void IndividualAddressSerialNumberReadResponse(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t *domainAddress, const uint8_t *knxSerialNumber)
void restartRequest(AckType ack, Priority priority, HopCountType hopType, const SecurityControl &secCtrl)
void connectRequest(uint16_t destination, Priority priority)
void disconnectRequest(Priority priority)
void memoryRoutingTableReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t *data)
void userMemoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, uint8_t *memoryData)
void propertyValueExtWriteConResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint16_t objectType, uint8_t objectInstance, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t returnCode)
void restartResponse(AckType ack, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t errorCode, uint16_t processTime)
VersionCheckCallback versionCheckCallback()
void memoryExtWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, uint8_t *data) override
FunctionPropertyCallback functionPropertyStateCallback()
void individualAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t *knxSerialNumber) override
FunctionPropertyCallback functionPropertyCallback()
void propertyValueExtReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, ObjectType objectType, uint8_t objectInstance, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex) override
void memoryRouterReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t *data)
void addSaveRestore(SaveRestore *obj)
void memoryRouterWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t *data)
BeforeRestartCallback _beforeRestart
void propertyValueExtWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, ObjectType objectType, uint8_t objectInstance, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t *data, uint8_t length, bool confirmed)
void systemNetworkParameterReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType, uint16_t propertyId, uint8_t *testInfo, uint16_t testinfoLength) override
virtual void doMasterReset(EraseCode eraseCode, uint8_t channel)
void functionPropertyCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t *data, uint8_t length) override
void memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t *data) override
void individualAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t newIndividualAddress, uint8_t *knxSerialNumber) override
void memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress) override
void 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) override
void functionPropertyExtCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, ObjectType objectType, uint8_t objectInstance, uint8_t propertyId, uint8_t *data, uint8_t length) override
uint8_t checkmasterResetValidity(EraseCode eraseCode, uint8_t channel)
ApplicationProgramObject _appProgram
void systemNetworkParameterReadLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType, uint16_t propertyId, uint8_t *testInfo, uint16_t testInfoLength, bool status) override
void individualAddressReadIndication(HopCountType hopType, const SecurityControl &secCtrl) override
ApplicationProgramObject & parameters()
SecurityControl _restartSecurity
FunctionPropertyCallback _functionPropertyState
void memoryExtReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress) override
void propertyValueReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex) override
void propertyDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex) override
void propertyValueRead(ObjectType objectType, uint8_t objectInstance, uint8_t propertyId, uint8_t &numberOfElements, uint16_t startIndex, uint8_t **data, uint32_t &length) override
void restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, RestartType restartType, EraseCode eraseCode, uint8_t channel) override
RestartState _restartState
void authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint32_t key) override
void userMemoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, uint8_t *memoryData) override
void connectConfirm(uint16_t tsap) override
void memoryRoutingTableWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t *data)
void propertyExtDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint16_t objectType, uint16_t objectInstance, uint16_t propertyId, uint8_t descriptionType, uint16_t propertyIndex) override
void userMemoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress) override
BauSystemB(Platform &platform)
virtual InterfaceObject * getInterfaceObject(uint8_t idx)=0
void functionPropertyStateIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t *data, uint8_t length) override
void functionPropertyExtStateIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, ObjectType objectType, uint8_t objectInstance, uint8_t propertyId, uint8_t *data, uint8_t length) override
BeforeRestartCallback beforeRestartCallback()
void individualAddressWriteIndication(HopCountType hopType, const SecurityControl &secCtrl, uint16_t newaddress) override
bool restartRequest(uint16_t asap, const SecurityControl secCtrl)
void memoryRoutingTableReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t *data)
void propertyValueWrite(ObjectType objectType, uint8_t objectInstance, uint8_t propertyId, uint8_t &numberOfElements, uint16_t startIndex, uint8_t *data, uint32_t length) override
virtual ApplicationLayer & applicationLayer()=0
FunctionPropertyCallback _functionProperty
DeviceObject & deviceObject()
void deviceDescriptorReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptorType) override
uint16_t individualAddress()
This class represents and interface object.
const uint8_t * propertyData(PropertyID id)
void readPropertyDescription(uint8_t &propertyId, uint8_t &propertyIndex, bool &writeEnable, uint8_t &type, uint16_t &numberOfElements, uint8_t &access)
Read the Description of a property of the interface object.
virtual void masterReset(EraseCode eraseCode, uint8_t channel)
virtual void command(PropertyID id, uint8_t *data, uint8_t length, uint8_t *resultData, uint8_t &resultLength)
Call command of a function property of the interface object.
virtual void writeProperty(PropertyID id, uint16_t start, uint8_t *data, uint8_t &count)
Write property of the interface object.
virtual uint8_t propertySize(PropertyID id)
Gets the size of of property in bytes.
virtual void readProperty(PropertyID id, uint16_t start, uint8_t &count, uint8_t *data)
Read a property of the interface object.
virtual void state(PropertyID id, uint8_t *data, uint8_t length, uint8_t *resultData, uint8_t &resultLength)
Get state of a function property of the interface object.
Property * property(PropertyID id)
Gets property with PropertyID id if it exists and nullptr otherwise.
void versionCheckCallback(VersionCheckCallback func)
uint8_t * toAbsolute(uint32_t relativeAddress)
void addSaveRestore(SaveRestore *obj)
PropertyDataType Type() const
Interface for classes that can save and restore data from a buffer.
ObjectType
Enum for the type of an interface object.
@ OT_DEVICE
Device object.
@ NetworkLayerParameter
use NetworkLayer::hopCount as NPDU::hopCount
@ SystemPriority
Mainly used by ETS for device programming.
@ AckRequested
We want a DataLinkLayer acknowledgement.
VersionCheckResult(* VersionCheckCallback)(uint16_t manufacturerId, uint8_t *hardwareType, uint16_t version)
PropertyDataType
The data type of a property.
@ PDT_CONTROL
length: 1 read, 10 write