{
}
+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
DEBUG(binder_interface, "Operator[] key string: %s, event valid? %d", sig.generic_name, afb_event_is_valid(s[std::string(sig.generic_name)]));
DEBUG(binder_interface, "Nb elt matched char: %d", (int)s.count(sig.generic_name));
DEBUG(binder_interface, "Nb elt matched string: %d", (int)s.count(std::string(sig.generic_name)));*/
- if( s.find(sig->get_generic_name()) != s.end() && afb_event_is_valid(s[sig->get_generic_name()]))
+ if( s.find(sig->get_name()) != s.end() && afb_event_is_valid(s[sig->get_name()]))
{
decoded_message = decoder_t::translateSignal(*sig, can_message, configuration_t::instance().get_can_signals());
new_can_message_cv_.wait(can_message_lock);
can_message = next_can_message();
- active_diagnostic_request_t* adr = configuration_t::instance().get_diagnostic_manager().is_diagnostic_response(can_message);
+ if(configuration_t::instance().get_diagnostic_manager().is_diagnostic_response(can_message))
if(adr != nullptr)
process_diagnostic_signals(adr, can_message);
else
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();
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);
*
* @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];
}