In class mutex and condition variable except for subscribed_signals map
authorRomain Forlot <romain.forlot@iot.bzh>
Mon, 27 Feb 2017 20:29:07 +0000 (21:29 +0100)
committerRomain Forlot <romain.forlot@iot.bzh>
Mon, 27 Feb 2017 20:29:07 +0000 (21:29 +0100)
For now...

Change-Id: I133deb39fcd0660064b3b3c2a52f86ad37cb29c2
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
can_buses.json.example [deleted file]
src/can-signals.cpp
src/can-signals.hpp
src/can-utils.cpp
src/can-utils.hpp
src/can_decode_message.cpp
src/can_decode_message.hpp
src/can_event_push.cpp
src/can_reader.cpp
src/can_reader.hpp
src/low-can-binding.cpp

diff --git a/can_buses.json.example b/can_buses.json.example
deleted file mode 100644 (file)
index a6a3ed2..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-       "canbus": {
-               "dev_name": [ "can0",
-                                       "can1"
-               ]
-       }
-}
\ No newline at end of file
index 0a6a829..54c0342 100644 (file)
@@ -29,6 +29,18 @@ std::vector<std::vector<CanSignal>> SIGNALS {
        {}// message set: example
 };
 
+/**
+* @brief Mutex allowing safe manipulation on subscribed_signals map.
+* @desc To ensure that the map object isn't modified when we read it, you
+*  have to set this mutex before use subscribed_signals map object.
+*/
+std::mutex subscribed_signals_mutex;
+
+std::mutex& get_subscribed_signals_mutex()
+{
+       return subscribed_signals_mutex;
+}
+
 const std::vector<CanSignal> getSignals()
 {
        return SIGNALS[MESSAGE_SET_ID];
index fb77df5..c2eaea4 100644 (file)
 #pragma once
 
 #include <map>
+#include <mutex>
 #include <queue>
 #include <vector>
 #include <string>
 #include <thread>
 #include <linux/can.h>
-#include <mutex>
-#include <condition_variable>
 
 #include "timer.hpp"
 #include "openxc.pb.h"
@@ -48,12 +47,7 @@ extern "C"
  */
 static std::map<std::string, struct afb_event> subscribed_signals;
 
-/**
-* @brief Mutex allowing safe manipulation on subscribed_signals map.
-* @desc To ensure that the map object isn't modified when we read it, you
-*  have to set this mutex before use subscribed_signals map object.
-*/
-extern std::mutex subscribed_signals_mutex;
+std::mutex& get_subscribed_signals_mutex();
 
 /** Public: Return the currently active CAN configuration. */
 CanMessageSet* getActiveMessageSet();
index 0d52bbe..977d344 100644 (file)
@@ -258,6 +258,26 @@ std::vector<std::string> can_bus_t::read_conf()
        return ret;
 }
 
+std::condition_variable& can_bus_t::get_new_can_message()
+{
+       return new_can_message_;
+}
+
+std::mutex& can_bus_t::get_can_message_mutex()
+{
+       return can_message_mutex_;
+}
+
+std::condition_variable& can_bus_t::get_new_decoded_can_message()
+{
+       return new_decoded_can_message_;
+}
+
+std::mutex& can_bus_t::get_decoded_can_message_mutex()
+{
+       return decoded_can_message_mutex_;
+}
+
 can_message_t can_bus_t::next_can_message()
 {
        can_message_t can_msg;
index 5938169..50d5eb9 100644 (file)
 
 #pragma once
 
+#include <mutex>
 #include <queue>
 #include <thread>
 #include <linux/can.h>
+#include <condition_variable>
 
 #include "timer.hpp"
 #include "openxc.pb.h"
@@ -225,9 +227,13 @@ class can_bus_t {
                std::thread th_pushing_; /*!<  thread that'll handle pushing decoded can frame to subscribers */
                bool is_pushing_; /*!< boolean member controling thread while loop*/
 
+               std::condition_variable new_can_message_;
+               std::mutex can_message_mutex_;
                bool has_can_message_; /*!< boolean members that control whether or not there is can_message into the queue */
                std::queue <can_message_t> can_message_q_; /*!< queue that'll store can_message_t to decoded */
 
+               std::condition_variable new_decoded_can_message_;
+               std::mutex decoded_can_message_mutex_;
                bool has_vehicle_message_; /*!< boolean members that control whether or not there is openxc_VehicleMessage into the queue */
                std::queue <openxc_VehicleMessage> vehicle_message_q_; /*!< queue that'll store openxc_VehicleMessage to pushed */
 
@@ -245,15 +251,20 @@ class can_bus_t {
                 * the configuration file passed in the constructor.
                 */
                int init_can_dev();
-               
+
                /**
                 * @brief read the conf_file_ and will parse json objects
                 * in it searching for canbus objects devices name.
                 *
                 * @return Vector of can bus device name string.
                 */
-                std::vector<std::string> read_conf();
+               std::vector<std::string> read_conf();
                
+               std::condition_variable& get_new_can_message();
+               std::mutex& get_can_message_mutex();
+               std::condition_variable& get_new_decoded_can_message();
+               std::mutex& get_decoded_can_message_mutex();
+
                /**
                 * @brief Will initialize threads that will decode
                 *  and push subscribed events.
@@ -341,7 +352,7 @@ class can_bus_dev_t {
                int can_socket_; /*!< socket handler for the can device */
                bool is_fdmode_on_; /*!< boolean telling if whether or not the can socket use fdmode. */
                struct sockaddr_can txAddress_; /*!< internal member using to bind to the socket */
-
+               
                std::thread th_reading_; /*!< Thread handling read the socket can device filling can_message_q_ queue of can_bus_t */
                bool is_running_; /*!< boolean telling whether or not reading is running or not */
 
index c311e98..ed518f1 100644 (file)
@@ -38,8 +38,8 @@ void can_decode_message(can_bus_t &can_bus)
        while(can_bus.is_decoding())
        {
                {
-                       std::unique_lock<std::mutex> can_message_lock(can_message_mutex);
-                       new_can_message.wait(can_message_lock);
+                       std::unique_lock<std::mutex> can_message_lock(can_bus.get_can_message_mutex());
+                       can_bus.get_new_can_message().wait(can_message_lock);
                        can_message = can_bus.next_can_message();
                }
 
@@ -51,7 +51,7 @@ void can_decode_message(can_bus_t &can_bus)
                for(auto& sig : signals)
                {
                        {
-                               std::lock_guard<std::mutex> subscribed_signals_lock(subscribed_signals_mutex);
+                               std::lock_guard<std::mutex> subscribed_signals_lock(get_subscribed_signals_mutex());
                                std::map<std::string, struct afb_event> subscribed_signals = get_subscribed_signals();
                                const auto& it_event = subscribed_signals.find(sig.genericName);
                                
@@ -63,10 +63,10 @@ void can_decode_message(can_bus_t &can_bus)
                                        openxc_SimpleMessage s_message = build_SimpleMessage(sig.genericName, decoded_message);
                                        vehicle_message = build_VehicleMessage_with_SimpleMessage(openxc_DynamicField_Type::openxc_DynamicField_Type_NUM, s_message);
 
-                                       std::lock_guard<std::mutex> decoded_can_message_lock(decoded_can_message_mutex);
+                                       std::lock_guard<std::mutex> decoded_can_message_lock(can_bus.get_decoded_can_message_mutex());
                                        can_bus.push_new_vehicle_message(vehicle_message);
                                }
-                               new_decoded_can_message.notify_one();
+                               can_bus.get_new_decoded_can_message().notify_one();
                        }
                }
        }
index 73ea2ef..e597241 100644 (file)
@@ -17,9 +17,3 @@
  */
 
 #pragma once
-
-#include <mutex>
-#include <condition_variable>
-
-extern std::condition_variable new_decoded_can_message;
-extern std::mutex decoded_can_message_mutex;
\ No newline at end of file
index fc403ee..b371973 100644 (file)
@@ -33,15 +33,15 @@ void can_event_push(can_bus_t& can_bus)
        while(can_bus.is_pushing())
        {
                {
-                       std::unique_lock<std::mutex> decoded_can_message_lock(decoded_can_message_mutex);
-                       new_decoded_can_message.wait(decoded_can_message_lock);
+                       std::unique_lock<std::mutex> decoded_can_message_lock(can_bus.get_decoded_can_message_mutex());
+                       can_bus.get_new_decoded_can_message().wait(decoded_can_message_lock);
                        v_message = can_bus.next_vehicle_message();
                }
 
                s_message = get_simple_message(v_message);
 
                {
-                       std::lock_guard<std::mutex> subscribed_signals_lock(subscribed_signals_mutex);
+                       std::lock_guard<std::mutex> subscribed_signals_lock(get_subscribed_signals_mutex());
                        std::map<std::string, struct afb_event> subscribed_signals = get_subscribed_signals();
                        const auto& it_event = subscribed_signals.find(s_message.name);
                        if(it_event != subscribed_signals.end() && afb_event_is_valid(it_event->second))
index 7ae981b..4706d92 100644 (file)
@@ -30,9 +30,9 @@ void can_reader(can_bus_dev_t &can_bus_dev, can_bus_t& can_bus)
                can_message.convert_from_canfd_frame(can_bus_dev.read());
 
                {
-                       std::lock_guard<std::mutex> can_message_lock(can_message_mutex);
+                       std::lock_guard<std::mutex> can_message_lock(can_bus.get_can_message_mutex());
                        can_bus.push_new_can_message(can_message);
                }
-               new_can_message.notify_one();
+               can_bus.get_new_can_message().notify_one();
        }
 }
\ No newline at end of file
index 3d73103..e597241 100644 (file)
@@ -17,9 +17,3 @@
  */
 
 #pragma once
-
-#include <mutex>
-#include <condition_variable>
-
-extern std::condition_variable new_can_message;
-extern std::mutex can_message_mutex;
\ No newline at end of file
index be2d373..cae86f5 100644 (file)
@@ -77,7 +77,7 @@ static int subscribe_unsubscribe_signal(struct afb_req request, bool subscribe,
 {
        int ret;
 
-       std::lock_guard<std::mutex> subscribed_signals_lock(subscribed_signals_mutex);
+       std::lock_guard<std::mutex> subscribed_signals_lock(get_subscribed_signals_mutex());
        auto ss_i = subscribed_signals.find(sig.genericName);
        if (ss_i != subscribed_signals.end() && !afb_event_is_valid(ss_i->second))
        {