diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2017-03-15 13:04:42 +0100 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2017-03-16 17:21:57 +0100 |
commit | 1d464d2a7380248b04c3e734ed5c6e84bbf53ddf (patch) | |
tree | c75ef10c1a45477f4597e4edd97d0a7fc16a4447 /src/can/can-bus.cpp | |
parent | 56c22348d3af944b68bc7395553b9f8b1a817ba6 (diff) |
Revert accessing CAN device with a map indexing on dev name
Main reason for that behavior revert is because of generator that rely
on CAN device name and so we have point on these object by specify the
device name.
Instead of shared pointer between objects, instead binding is based on
device name. With a device name you can get the shared pointer on it using
new static method from can_bus_t object.
Change-Id: I331e0ad8d03c88a15c697d12a9fce3699b0cd962
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'src/can/can-bus.cpp')
-rw-r--r-- | src/can/can-bus.cpp | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/can/can-bus.cpp b/src/can/can-bus.cpp index 69f08c5f..7c6ae429 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]; } |