Be able to return index or can bus name.
authorRomain Forlot <romain.forlot@iot.bzh>
Tue, 16 May 2017 13:14:42 +0000 (15:14 +0200)
committerRomain Forlot <romain.forlot@iot.bzh>
Fri, 19 May 2017 09:36:43 +0000 (11:36 +0200)
Use a vector of string pair that map index on vector and pair map logical bus
name with linux device name.

Change-Id: I627e6f715f7466d835d8729e21d9e4198111c1fb
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
CAN-binder/low-can-binding/can/can-bus.hpp
CAN-binder/low-can-binding/utils/config-parser.cpp
CAN-binder/low-can-binding/utils/config-parser.hpp
CAN-binder/low-can-binding/utils/openxc-utils.cpp

index 759a70f..7fe6ebf 100644 (file)
@@ -69,12 +69,14 @@ private:
        std::mutex decoded_can_message_mutex_;  ///< mutex protecting the vehicle_message_q_ queue.
        std::queue <openxc_VehicleMessage> vehicle_message_q_; ///< queue that'll store openxc_VehicleMessage to pushed
 
-       static std::map<std::string, std::shared_ptr<can_bus_dev_t>> can_devices_; ///< Can device map containing all can_bus_dev_t objects initialized during init_can_dev function
-
+       std::vector<std::pair<std::string, std::string> > can_devices_;
 public:
        can_bus_t(utils::config_parser_t conf_file);
        can_bus_t(can_bus_t&&);
 
+       void set_can_devices();
+       int get_can_device_index(std::string bus_name) const;
+       const std::string get_can_device_name(std::string id_name) const;
 
        void start_threads();
        void stop_threads();
index 9c81afb..6f69916 100644 (file)
@@ -47,14 +47,14 @@ namespace utils
        /// have to test the returned value.
        ///
        /// @return A const vector with string of linux CAN devices.
-       const std::vector<std::string> config_parser_t::get_devices_name()
+       const std::vector<std::pair<std::string, std::string> > config_parser_t::get_devices_name()
        {
-               std::vector<std::string> devices_name;
+               std::vector<std::pair<std::string, std::string> > devices_name;
 
                std::map<std::string, std::string> bus_mapping = config_content_.get_keys("CANbus-mapping");
                for(const auto& busIt : bus_mapping )
                {
-                       devices_name.push_back(busIt.second);
+                       devices_name.push_back(std::make_pair(busIt.first, busIt.second));
                }
 
                return devices_name;
index 28a4341..ce032c9 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <string>
 #include <vector>
+#include <utility>
 #include "ini-config.hpp"
 
 namespace utils
@@ -36,6 +37,6 @@ namespace utils
                config_parser_t(std::string conf_file);
 
                bool check_conf();
-               const std::vector<std::string> get_devices_name();
+               const std::vector<std::pair<std::string, std::string> > get_devices_name();
        };
 }
index 2cf03e4..286b2f5 100644 (file)
@@ -40,9 +40,8 @@ openxc_VehicleMessage build_VehicleMessage(active_diagnostic_request_t* request,
        message.type = openxc_VehicleMessage_Type::openxc_VehicleMessage_Type_DIAGNOSTIC;
        message.has_diagnostic_response = true;
        message.diagnostic_response.has_bus = true;
-       message.diagnostic_response.bus = conf.get_can_bus_manager().get_can_device(
-                                                                                                                               conf.get_diagnostic_manager().get_can_bus())
-                                                                                                                               ->get_index();
+       message.diagnostic_response.bus = conf.get_can_bus_manager().get_can_device_index(
+                                                                                                                               conf.get_diagnostic_manager().get_can_bus());
        message.diagnostic_response.has_message_id = true;
 
        if(request->get_id() != OBD2_FUNCTIONAL_BROADCAST_ID)