diff --git a/src/knx/bau_systemB.cpp b/src/knx/bau_systemB.cpp index eb05f1b..86a4062 100644 --- a/src/knx/bau_systemB.cpp +++ b/src/knx/bau_systemB.cpp @@ -62,10 +62,6 @@ void BauSystemB::sendNextGroupTelegram() if(!configured()) return; - // TODO: get security flags from Security Interface Object for this group object - SecurityControl goSecurity; - goSecurity.dataSecurity = DataSecurity::none; - static uint16_t startIdx = 1; GroupObjectTableObject& table = _groupObjTable; @@ -82,6 +78,18 @@ void BauSystemB::sendNextGroupTelegram() if (!go.communicationEnable()) continue; + SecurityControl goSecurity; + // TODO: what do we do with it? + goSecurity.toolAccess; + +#ifdef USE_DATASECURE + // Get security flags from Security Interface Object for this group object + goSecurity.dataSecurity = _appLayer.getGoSecurityFlags(asap); + +#else + goSecurity.dataSecurity = DataSecurity::none; +#endif + if (flag == WriteRequest && go.transmitEnable()) { uint8_t* data = go.valueRef(); diff --git a/src/knx/secure_application_layer.cpp b/src/knx/secure_application_layer.cpp index 31abae7..93a137a 100644 --- a/src/knx/secure_application_layer.cpp +++ b/src/knx/secure_application_layer.cpp @@ -1275,3 +1275,8 @@ bool SecureApplicationLayer::isSyncService(APDU& secureApdu) return false; } + +DataSecurity SecureApplicationLayer::getGoSecurityFlags(uint16_t index) +{ + return _secIfObj.getGoSecurityFlags(index); +} diff --git a/src/knx/secure_application_layer.h b/src/knx/secure_application_layer.h index 2e7270e..98aeae1 100644 --- a/src/knx/secure_application_layer.h +++ b/src/knx/secure_application_layer.h @@ -35,6 +35,8 @@ class SecureApplicationLayer : public ApplicationLayer void getFailureCounters(uint8_t* data); uint8_t getFromFailureLogByIndex(uint8_t index, uint8_t* data, uint8_t maxDataLen); + DataSecurity getGoSecurityFlags(uint16_t index); + // from transport layer virtual void dataGroupIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu) override; virtual void dataGroupConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, diff --git a/src/knx/security_interface_object.cpp b/src/knx/security_interface_object.cpp index c985ff2..cc709d4 100644 --- a/src/knx/security_interface_object.cpp +++ b/src/knx/security_interface_object.cpp @@ -491,5 +491,12 @@ void SecurityInterfaceObject::setLastValidSequenceNumber(uint16_t deviceAddr, ui } } +DataSecurity SecurityInterfaceObject::getGoSecurityFlags(uint16_t index) +{ + // TODO + // PID_GO_SECURITY_FLAGS + return DataSecurity::none; +} + #endif diff --git a/src/knx/security_interface_object.h b/src/knx/security_interface_object.h index e56f519..31c0a16 100644 --- a/src/knx/security_interface_object.h +++ b/src/knx/security_interface_object.h @@ -4,6 +4,7 @@ #ifdef USE_DATASECURE #include "interface_object.h" +#include "knx_types.h" class SecureApplicationLayer; @@ -32,6 +33,8 @@ public: uint64_t getLastValidSequenceNumber(uint16_t deviceAddr); void setLastValidSequenceNumber(uint16_t deviceAddr, uint64_t seqNum); + DataSecurity getGoSecurityFlags(uint16_t index); + private: SecureApplicationLayer* _secAppLayer = nullptr;