X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=low-can-binding%2Fcan%2Fcan-bus.cpp;h=e798618d05a84ae0fade53009de1194ce9cf253b;hb=82b45e3de8c92816c8080178224c5bd4be60a091;hp=d773ad35975a5e4b75b5aaa6ae13fa564b2687bd;hpb=2eb313e5330dbfa1b6eab146b3698d8ffe054347;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 d773ad35..e798618d 100644 --- a/low-can-binding/can/can-bus.cpp +++ b/low-can-binding/can/can-bus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015, 2016 "IoT.bzh" + * Copyright (C) 2015, 2018 "IoT.bzh" * Author "Romain Forlot" * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -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. @@ -77,12 +87,12 @@ void can_bus_t::process_can_signals(const can_message_t& can_message, std::map sig = s[subscription_id]; - if( s.find(subscription_id) != s.end() && afb_event_is_valid(s[subscription_id]->get_event())) { bool send = true; + // First we have to found which can_signal_t it is + std::shared_ptr sig = s[subscription_id]; + decoded_message = decoder_t::translate_signal(*sig->get_can_signal(), can_message, &send); openxc_SimpleMessage s_message = build_SimpleMessage(sig->get_name(), decoded_message); vehicle_message = build_VehicleMessage(s_message, can_message.get_timestamp()); @@ -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(); } }