X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=low-can-binding%2Fbinding%2Flow-can-cb.cpp;h=79108a7bc7ed7ebb6006bdff88464abcd5e2263a;hb=43f70e386855be0af6ec90f32ed973505983993b;hp=25f25ccd37b5caa7ccfe59e0b91cde133026a7a8;hpb=cc869680dd9914a38025004982ba96ddf3bd3208;p=apps%2Fagl-service-can-low-level.git diff --git a/low-can-binding/binding/low-can-cb.cpp b/low-can-binding/binding/low-can-cb.cpp index 25f25ccd..79108a7b 100644 --- a/low-can-binding/binding/low-can-cb.cpp +++ b/low-can-binding/binding/low-can-cb.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -52,20 +53,16 @@ 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)) @@ -93,6 +96,10 @@ CtlSectionT ctlSections_[] = { .loadCB=PluginConfig, .handle=nullptr, .actions=nullptr}, + [2]={.key=nullptr , .uid=nullptr, .info=nullptr, .prefix=nullptr, + .loadCB=PluginConfig, + .handle=nullptr, + .actions=nullptr}, }; ///***************************************************************************** @@ -184,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 can_subscription; - auto it = std::find_if(s.begin(), s.end(), [&sig](std::pair > sub) + auto it = std::find_if(s.begin(), s.end(), [&sig](std::pair > sub) { return (! sub.second->get_diagnostic_message().empty()); }); @@ -522,7 +529,7 @@ static int send_message(message_t *message, const std::string& bus_name, uint32_ cd[bus_name]->set_signal(signal); - if(flags&BCM_PROTOCOL) + if(flags&CAN_PROTOCOL) return low_can_subscription_t::tx_send(*cd[bus_name], message, bus_name); #ifdef USE_FEATURE_ISOTP else if(flags&ISOTP_PROTOCOL) @@ -548,12 +555,12 @@ static void write_raw_frame(afb_req_t request, const std::string& bus_name, mess if( !sf.signals.empty() ) { AFB_DEBUG("ID WRITE RAW : %d", sf.signals.front()->get_message()->get_id()); - if(flags & BCM_PROTOCOL) + if(flags & CAN_PROTOCOL) { if(sf.signals.front()->get_message()->is_fd()) { AFB_DEBUG("CANFD_MAX_DLEN"); - message->set_flags(CAN_FD_FRAME); + message->set_flags(CAN_PROTOCOL_WITH_FD_FRAME); message->set_maxdlen(CANFD_MAX_DLEN); } else @@ -587,7 +594,7 @@ static void write_raw_frame(afb_req_t request, const std::string& bus_name, mess } else { - if(flags&BCM_PROTOCOL) + if(flags&CAN_PROTOCOL) afb_req_fail(request, "Invalid", "Frame BCM"); else if(flags&J1939_PROTOCOL) afb_req_fail(request, "Invalid", "Frame J1939"); @@ -627,7 +634,7 @@ static void write_frame(afb_req_t request, const std::string& bus_name, json_obj "can_data", &can_data)) { message = new can_message_t(0, id, length, false, 0, data, 0); - write_raw_frame(request, bus_name, message, can_data, BCM_PROTOCOL, event_filter); + write_raw_frame(request, bus_name, message, can_data, CAN_PROTOCOL, event_filter); } #ifdef USE_FEATURE_J1939 else if(!wrap_json_unpack(json_value, "{si, si, so !}", @@ -684,7 +691,7 @@ static void write_signal(afb_req_t request, const std::string& name, json_object else if(sig->get_message()->is_isotp()) flags = ISOTP_PROTOCOL; else - flags = BCM_PROTOCOL; + flags = CAN_PROTOCOL; // cfd = encoder_t::build_frame(sig, value); message_t *message = encoder_t::build_message(sig, value, false, false); @@ -861,8 +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();