From 0ce069fce2e28c2cda10fb8c210453c2a2fbd262 Mon Sep 17 00:00:00 2001 From: ilia-sheremet Date: Sat, 27 Jun 2015 17:40:53 +0200 Subject: [PATCH] uc_can_acceptance_filter_configurator.cpp formatting corrections and getNumFilters() extra check --- .../uc_can_acceptance_filter_configurator.cpp | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/libuavcan/src/transport/uc_can_acceptance_filter_configurator.cpp b/libuavcan/src/transport/uc_can_acceptance_filter_configurator.cpp index 0637f4dbbd..16fcb53a48 100644 --- a/libuavcan/src/transport/uc_can_acceptance_filter_configurator.cpp +++ b/libuavcan/src/transport/uc_can_acceptance_filter_configurator.cpp @@ -21,7 +21,7 @@ int16_t CanAcceptanceFilterConfigurator::loadInputConfiguration() CanFilterConfig service_resp_cfg; service_resp_cfg.id = ServiceRespFrameID; service_resp_cfg.mask = ServiceRespFrameMask; - if (multiset_configs_.emplace(service_resp_cfg) == NULL) + if (multiset_configs_.emplace(service_resp_cfg) == NULL) { return -ErrMemory; } @@ -34,9 +34,9 @@ int16_t CanAcceptanceFilterConfigurator::loadInputConfiguration() cfg.id |= static_cast(p->getDataTypeDescriptor().getKind()) << 8; cfg.mask = DefaultFilterMsgMask; if (multiset_configs_.emplace(cfg) == NULL) - { - return -ErrMemory; - } + { + return -ErrMemory; + } p = p->getNextListNode(); } @@ -48,9 +48,9 @@ int16_t CanAcceptanceFilterConfigurator::loadInputConfiguration() cfg.id |= static_cast(p1->getDataTypeDescriptor().getID().get()) << 17; cfg.mask = DefaultFilterServiceRequestMask; if (multiset_configs_.emplace(cfg) == NULL) - { - return -ErrMemory; - } + { + return -ErrMemory; + } p1 = p1->getNextListNode(); } @@ -75,6 +75,11 @@ int16_t CanAcceptanceFilterConfigurator::loadInputConfiguration() int16_t CanAcceptanceFilterConfigurator::computeConfiguration() { const uint16_t acceptance_filters_number = getNumFilters(); + if (acceptance_filters_number == 0) + { + UAVCAN_TRACE("CanAcceptanceFilter", "No HW filters available"); + return -ErrDriver; + } UAVCAN_ASSERT(multiset_configs_.getSize() != 0); while (acceptance_filters_number < multiset_configs_.getSize()) @@ -89,7 +94,7 @@ int16_t CanAcceptanceFilterConfigurator::computeConfiguration() for (uint16_t j_ind = static_cast(i_ind + 1); j_ind < multiset_array_size; j_ind++) { CanFilterConfig temp_config = mergeFilters(*multiset_configs_.getByIndex(i_ind), - *multiset_configs_.getByIndex(j_ind)); + *multiset_configs_.getByIndex(j_ind)); uint8_t rank = countBits(temp_config.mask); if (rank > best_rank) { @@ -180,7 +185,6 @@ int CanAcceptanceFilterConfigurator::configureFilters() uint16_t CanAcceptanceFilterConfigurator::getNumFilters() const { - static const uint16_t InvalidOut = 0xFFFF; uint16_t out = InvalidOut; ICanDriver& can_driver = node_.getDispatcher().getCanIOManager().getCanDriver(); @@ -205,7 +209,7 @@ uint16_t CanAcceptanceFilterConfigurator::getNumFilters() const return (out == InvalidOut) ? 0 : out; } -CanFilterConfig CanAcceptanceFilterConfigurator::mergeFilters(CanFilterConfig &a_, CanFilterConfig &b_) +CanFilterConfig CanAcceptanceFilterConfigurator::mergeFilters(CanFilterConfig& a_, CanFilterConfig& b_) { CanFilterConfig temp_arr; temp_arr.mask = a_.mask & b_.mask & ~(a_.id ^ b_.id);