summaryrefslogtreecommitdiffstats
path: root/src/can
diff options
context:
space:
mode:
Diffstat (limited to 'src/can')
-rw-r--r--src/can/can-bus.cpp30
-rw-r--r--src/can/can-bus.hpp5
-rw-r--r--src/can/can-message-definition.cpp8
-rw-r--r--src/can/can-message-definition.hpp7
-rw-r--r--src/can/can-message.cpp2
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: