From de7742a444b9d4159c8281a147fd435ae51c864f Mon Sep 17 00:00:00 2001 From: Nanosonde <2073569+nanosonde@users.noreply.github.com> Date: Wed, 15 Jul 2020 17:32:16 +0200 Subject: [PATCH] save work --- src/knx/router_object_filtertable.cpp | 21 ++++++++++++++++++++- src/knx/router_object_filtertable.h | 2 ++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/knx/router_object_filtertable.cpp b/src/knx/router_object_filtertable.cpp index 7e9d892..0d58c15 100644 --- a/src/knx/router_object_filtertable.cpp +++ b/src/knx/router_object_filtertable.cpp @@ -63,7 +63,7 @@ RouterObjectFilterTable::RouterObjectFilterTable(Memory& memory) obj->functionRouteTableControl(false, data, length, resultData, resultLength); }), - new DataProperty( PID_FILTER_TABLE_USE, false, PDT_BINARY_INFORMATION, 1, ReadLv3 | WriteLv0, (uint16_t) 0 ), // TODO + new DataProperty( PID_FILTER_TABLE_USE, true, PDT_BINARY_INFORMATION, 1, ReadLv3 | WriteLv0, (uint16_t) 0 ), // default: invalid filter table, do not use new FunctionProperty(this, PID_RF_ENABLE_SBC, // Command Callback of PID_RF_ENABLE_SBC @@ -395,3 +395,22 @@ void RouterObjectFilterTable::masterReset(EraseCode eraseCode, uint8_t channel) println("Factory reset of router object with filter table requested."); } } + +bool RouterObjectFilterTable::isGroupAddressInFilterTable(uint16_t groupAddress) +{ + uint8_t filterTableUse = 0x00; + if (property(PID_FILTER_TABLE_USE)->read(filterTableUse) == 0) + return false; + + if (filterTableUse != 0x00) + { + // octet_address = GA_value div 8 + // bit_position = GA_value mod 8 + uint16_t octetAddress = groupAddress / 8; + uint8_t bitPosition = groupAddress % 8; + + return (_data[octetAddress] & (1 << bitPosition)) == (1 << bitPosition); + } + + return false; +} diff --git a/src/knx/router_object_filtertable.h b/src/knx/router_object_filtertable.h index b3e3b72..5502f6a 100644 --- a/src/knx/router_object_filtertable.h +++ b/src/knx/router_object_filtertable.h @@ -12,6 +12,8 @@ class RouterObjectFilterTable: public RouterObject public: RouterObjectFilterTable(Memory& memory); + bool isGroupAddressInFilterTable(uint16_t groupAddress); + bool isRfSbcRoutingEnabled(); virtual void masterReset(EraseCode eraseCode, uint8_t channel) override;