X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=low-can-binding%2Fcan%2Fcan-bus.cpp;h=49a6b60a6cc3f0e31f3211f75fd87eecbfa9de50;hb=731624acf76d58e1847f797e15747ccc94c052f0;hp=d5ad485fe4e0b217e20ac6500e539c9871b4a6dd;hpb=4af423a2a09683acf0a9ad1e0a77bc45c2c843d9;p=apps%2Fagl-service-can-low-level.git diff --git a/low-can-binding/can/can-bus.cpp b/low-can-binding/can/can-bus.cpp index d5ad485f..49a6b60a 100644 --- a/low-can-binding/can/can-bus.cpp +++ b/low-can-binding/can/can-bus.cpp @@ -33,6 +33,16 @@ #include "../utils/signals.hpp" #include "../utils/openxc-utils.hpp" +/// @brief Class destructor +/// +/// @param[in] conf_file - Stop threads and unlock them to correctly finish them +/// even without any activity on the CAN bus. +can_bus_t::~can_bus_t() +{ + stop_threads(); + new_can_message_cv_.notify_one(); +} + /// @brief Class constructor /// /// @param[in] conf_file - handle to the json configuration file. @@ -40,10 +50,10 @@ can_bus_t::can_bus_t(utils::config_parser_t conf_file) : conf_file_{conf_file} {} -/// @brief Take a decoded message to determine if its value comply with the wanted -/// filtering values. +/// @brief Take a decoded message to determine if its value complies with the desired +/// filters. /// -/// @param[in] vehicle_message - A decoded message to analyze +/// @param[in] vehicle_message - The decoded message to be analyzed. /// @param[in] can_subscription - the subscription which will be notified depending /// on its filtering values. Filtering values are stored in the event_filtermember. /// @@ -53,10 +63,10 @@ bool can_bus_t::apply_filter(const openxc_VehicleMessage& vehicle_message, std:: bool send = false; if(is_valid(vehicle_message)) { - float min = std::isnan(can_subscription->get_min()) ? -INFINITY : can_subscription->get_min(); - float max = std::isnan(can_subscription->get_max()) ? INFINITY : can_subscription->get_max(); + float min = can_subscription->get_min(); + float max = can_subscription->get_max(); double value = get_numerical_from_DynamicField(vehicle_message); - send = (value < min && value > max) ? false : true; + send = (value < min || value > max) ? false : true; } return send; } @@ -91,7 +101,7 @@ void can_bus_t::process_can_signals(const can_message_t& can_message, std::map decoded_can_message_lock(decoded_can_message_mutex_); push_new_vehicle_message(subscription_id, vehicle_message); - AFB_DEBUG("%s CAN signals processed.", sig->get_name().c_str()); + AFB_DEBUG("%s CAN signals processed.", sig->get_name().c_str()); } } } @@ -158,8 +168,8 @@ void can_bus_t::can_decode_message() } can_message_lock.lock(); } - new_decoded_can_message_.notify_one(); - can_message_lock.unlock(); + new_decoded_can_message_.notify_one(); + can_message_lock.unlock(); } }