From 9b79710cd90b6d2e61648226b1fe6d72026922cc Mon Sep 17 00:00:00 2001 From: Waldemar Porscha Date: Sun, 16 Oct 2022 17:35:09 +0200 Subject: [PATCH] Corrected BIN_SEARCH --- src/knx/address_table_object.cpp | 32 +++++----------------------- src/knx/association_table_object.cpp | 4 ++-- 2 files changed, 7 insertions(+), 29 deletions(-) diff --git a/src/knx/address_table_object.cpp b/src/knx/address_table_object.cpp index e789840..b5d6c93 100644 --- a/src/knx/address_table_object.cpp +++ b/src/knx/address_table_object.cpp @@ -38,11 +38,11 @@ uint16_t AddressTableObject::getTsap(uint16_t addr) { uint16_t size = entryCount(); #ifdef USE_BINSEARCH - addr = htons(addr); + addr = ntohs(addr); uint16_t low,high,i; - low = 0; - high = size-1; + low = 1; + high = size; while(low <= high) { @@ -77,30 +77,8 @@ const uint8_t* AddressTableObject::restore(const uint8_t* buffer) bool AddressTableObject::contains(uint16_t addr) { - uint16_t size = entryCount(); - #ifdef USE_BINSEARCH - addr = htons(addr); - - uint16_t low,high,i; - low = 0; - high = size-1; - - while(low <= high) - { - i = (low+high)/2; - if (_groupAddresses[i] == addr) - return true; - if(addr < _groupAddresses[i]) - high = i - 1; - else - low = i + 1 ; - } - #else - for (uint16_t i = 1; i <= size; i++) - if (ntohs(_groupAddresses[i]) == addr) - return true; - #endif - return false; + uint16_t foundTsap = getTsap(addr); + return (foundTsap > 0); } void AddressTableObject::beforeStateChange(LoadState& newState) diff --git a/src/knx/association_table_object.cpp b/src/knx/association_table_object.cpp index 13bcfc9..2afbc7b 100644 --- a/src/knx/association_table_object.cpp +++ b/src/knx/association_table_object.cpp @@ -65,9 +65,9 @@ int32_t AssociationTableObject::translateAsap(uint16_t asap) // search downwards to return the first occurence in the table while(getASAP(--i) == asap) ; - return getASAP(i+1); + return getTSAP(i+1); } - if(asap_i < asap) + if(asap_i > asap) high = i - 1; else low = i + 1 ;