diff options
Diffstat (limited to 'src/can')
-rw-r--r-- | src/can/can-bus.cpp | 30 | ||||
-rw-r--r-- | src/can/can-bus.hpp | 5 | ||||
-rw-r--r-- | src/can/can-message-definition.cpp | 8 | ||||
-rw-r--r-- | src/can/can-message-definition.hpp | 7 | ||||
-rw-r--r-- | src/can/can-message.cpp | 2 |
5 files changed, 36 insertions, 16 deletions
diff --git a/src/can/can-bus.cpp b/src/can/can-bus.cpp index 69f08c5..7c6ae42 100644 --- a/src/can/can-bus.cpp +++ b/src/can/can-bus.cpp @@ -50,6 +50,8 @@ can_bus_t::can_bus_t(int conf_file) { } +std::map<std::string, std::shared_ptr<can_bus_dev_t>> can_bus_t::can_devices_; + /** * @brief Will make the decoding operation on a classic CAN message. It will not * handle CAN commands nor diagnostic messages that have their own method to get @@ -254,7 +256,7 @@ void can_bus_t::stop_threads() int can_bus_t::init_can_dev() { std::vector<std::string> devices_name; - int i; + int i = 0; size_t t; devices_name = read_conf(); @@ -262,20 +264,19 @@ int can_bus_t::init_can_dev() if (! devices_name.empty()) { t = devices_name.size(); - i=0; for(const auto& device : devices_name) { - can_devices_.push_back(std::make_shared<can_bus_dev_t>(device, i)); - if (can_devices_[i]->open() == 0) + can_bus_t::can_devices_[device] = std::make_shared<can_bus_dev_t>(device, i); + if (can_bus_t::can_devices_[device]->open() == 0) { DEBUG(binder_interface, "Start reading thread"); NOTICE(binder_interface, "%s device opened and reading", device.c_str()); - can_devices_[i]->start_reading(*this); + can_bus_t::can_devices_[device]->start_reading(*this); + i++; } else ERROR(binder_interface, "Can't open device %s", device.c_str()); - i++; } NOTICE(binder_interface, "Initialized %d/%d can bus device(s)", i, t); @@ -421,7 +422,20 @@ void can_bus_t::push_new_vehicle_message(const openxc_VehicleMessage& v_msg) * * @return map can_bus_dev_m_ map */ -const std::vector<std::shared_ptr<can_bus_dev_t>>& can_bus_t::get_can_devices() const +const std::map<std::string, std::shared_ptr<can_bus_dev_t>>& can_bus_t::get_can_devices() const +{ + return can_bus_t::can_devices_; +} + +/** +* @brief Return the shared pointer on the can_bus_dev_t initialized +* with device_name "bus" +* +* @param[in] bus - CAN bus device name to retrieve. +* +* @return A shared pointer on an object can_bus_dev_t +*/ +std::shared_ptr<can_bus_dev_t> can_bus_t::get_can_device(std::string bus) { - return can_devices_; + return can_bus_t::can_devices_[bus]; } diff --git a/src/can/can-bus.hpp b/src/can/can-bus.hpp index 97b683d..a51dfb1 100644 --- a/src/can/can-bus.hpp +++ b/src/can/can-bus.hpp @@ -68,7 +68,7 @@ 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 - std::vector<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 + 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 public: can_bus_t(int conf_file); @@ -91,5 +91,6 @@ public: openxc_VehicleMessage next_vehicle_message(); void push_new_vehicle_message(const openxc_VehicleMessage& v_msg); - const std::vector<std::shared_ptr<can_bus_dev_t>>& get_can_devices() const; + const std::map<std::string, std::shared_ptr<can_bus_dev_t>>& get_can_devices() const; + static std::shared_ptr<can_bus_dev_t> get_can_device(std::string bus); }; diff --git a/src/can/can-message-definition.cpp b/src/can/can-message-definition.cpp index 8272457..7aca19e 100644 --- a/src/can/can-message-definition.cpp +++ b/src/can/can-message-definition.cpp @@ -17,11 +17,15 @@ #include "can-message-definition.hpp" -can_message_definition_t::can_message_definition_t(uint8_t bus) +can_message_definition_t::can_message_definition_t(const std::string bus) : bus_{bus}, last_value_(CAN_MESSAGE_SIZE) {} -can_message_definition_t::can_message_definition_t(uint8_t bus, uint32_t id, can_message_format_t format, frequency_clock_t frequency_clock, bool force_send_changed) +can_message_definition_t::can_message_definition_t(const std::string bus, uint32_t id, frequency_clock_t frequency_clock, bool force_send_changed) +: bus_{bus}, id_{id}, frequency_clock_{frequency_clock}, force_send_changed_{force_send_changed}, last_value_(CAN_MESSAGE_SIZE) +{} + +can_message_definition_t::can_message_definition_t(const std::string bus, uint32_t id, can_message_format_t format, frequency_clock_t frequency_clock, bool force_send_changed) : bus_{bus}, id_{id}, format_{format}, frequency_clock_{frequency_clock}, force_send_changed_{force_send_changed}, last_value_(CAN_MESSAGE_SIZE) {} diff --git a/src/can/can-message-definition.hpp b/src/can/can-message-definition.hpp index 1c7199e..921b58a 100644 --- a/src/can/can-message-definition.hpp +++ b/src/can/can-message-definition.hpp @@ -35,7 +35,7 @@ class can_message_definition_t { private: - uint8_t bus_; /*!< bus_ - Address of CAN bus device. */ + std::string bus_; /*!< bus_ - Address of CAN bus device. */ uint32_t id_; /*!< id_ - The ID of the message.*/ can_message_format_t format_; /*!< format_ - the format of the message's ID.*/ frequency_clock_t frequency_clock_; /*!< clock_ - an optional frequency clock to control the output of this @@ -48,8 +48,9 @@ private: * needs to compare an incoming CAN message with the previous frame.*/ public: - can_message_definition_t(uint8_t bus); - can_message_definition_t(uint8_t bus, uint32_t id, can_message_format_t format, frequency_clock_t frequency_clock, bool force_send_changed); + can_message_definition_t(const std::string bus); + can_message_definition_t(const std::string bus, uint32_t id, frequency_clock_t frequency_clock, bool force_send_changed); + can_message_definition_t(const std::string bus, uint32_t id, can_message_format_t format, frequency_clock_t frequency_clock, bool force_send_changed); uint32_t get_id() const; }; diff --git a/src/can/can-message.cpp b/src/can/can-message.cpp index cc4adb4..6b40d91 100644 --- a/src/can/can-message.cpp +++ b/src/can/can-message.cpp @@ -170,7 +170,7 @@ can_message_t can_message_t::convert_from_canfd_frame(const struct canfd_frame& format = can_message_format_t::EXTENDED; else format = can_message_format_t::STANDARD; - + switch(format) { case can_message_format_t::STANDARD: |