decoder/encoder: typo
[apps/agl-service-can-low-level.git] / low-can-binding / binding / low-can-cb.cpp
index d1325d3..79108a7 100644 (file)
@@ -24,6 +24,7 @@
 #include <mutex>
 #include <vector>
 #include <thread>
+#include <algorithm>
 #include <wrap-json.h>
 #include <systemd/sd-event.h>
 #include <ctl-config.h>
 int config_low_can(afb_api_t apiHandle, CtlSectionT *section, json_object *json_obj)
 {
        AFB_DEBUG("Config %s", json_object_to_json_string(json_obj));
-       CtlConfigT *ctrlConfig;
-
-       ctrlConfig = (CtlConfigT *) afb_api_get_userdata(apiHandle);
-       if(! ctrlConfig)
-               return -1;
+       CtlConfigT *ctrlConfig = (CtlConfigT *) afb_api_get_userdata(apiHandle);
+       int active_message_set = 0;
+       json_object *dev_mapping = nullptr;
+       const char *diagnotic_bus = nullptr;
 
-       if(! ctrlConfig->external)
+       if(! ctrlConfig || ! ctrlConfig->external)
                return -1;
 
        application_t *application = (application_t*) ctrlConfig->external;
 
-       int active_message_set;
-       const char *diagnotic_bus = nullptr;
-
        if(wrap_json_unpack(json_obj, "{si, ss}",
                              "active_message_set", &active_message_set,
                              "diagnostic_bus", &diagnotic_bus))
@@ -73,6 +70,12 @@ int config_low_can(afb_api_t apiHandle, CtlSectionT *section, json_object *json_
 
        application->set_active_message_set((uint8_t)active_message_set);
 
+       if(wrap_json_unpack(json_obj, "{so}",
+                           "dev-mapping", &dev_mapping))
+               return -1;
+
+       application->get_can_bus_manager().set_can_devices(dev_mapping);
+
        /// Initialize Diagnostic manager that will handle obd2 requests.
        /// We pass by default the first CAN bus device to its Initialization.
        if(! application_t::instance().get_diagnostic_manager().initialize(diagnotic_bus))
@@ -188,7 +191,7 @@ static int subscribe_unsubscribe_diagnostic_messages(afb_req_t request,
                event_filter.frequency = event_filter.frequency == 0 ? sig->get_frequency() : event_filter.frequency;
                std::shared_ptr<low_can_subscription_t> can_subscription;
 
-               auto it =  std::find_if(s.begin(), s.end(), [&sig](std::pair<int, std::shared_ptr<low_can_subscription_t> > sub)
+               auto it = std::find_if(s.begin(), s.end(), [&sig](std::pair<int, std::shared_ptr<low_can_subscription_t> > sub)
                {
                        return (! sub.second->get_diagnostic_message().empty());
                });
@@ -865,7 +868,6 @@ int init_binding(afb_api_t api)
                return -1;
        }
 
-       can_bus_manager.set_can_devices();
        can_bus_manager.start_threads();
        utils::signals_manager_t& sm = utils::signals_manager_t::instance();