X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=low-can-binding%2Fdiagnostic%2Fdiagnostic-manager.cpp;h=f3c513c51bb47779ff8ad2d3da965a6a3d74f9a5;hb=db13354c18e888d04b776e584addb668d8614da4;hp=55e6108409a9b6e0ecfa0f96f1f5ec17c4d847f5;hpb=97a08a7e37835f0e8619d22c83243bee26a2bff2;p=apps%2Fagl-service-can-low-level.git diff --git a/low-can-binding/diagnostic/diagnostic-manager.cpp b/low-can-binding/diagnostic/diagnostic-manager.cpp index 55e61084..f3c513c5 100644 --- a/low-can-binding/diagnostic/diagnostic-manager.cpp +++ b/low-can-binding/diagnostic/diagnostic-manager.cpp @@ -56,16 +56,19 @@ diagnostic_manager_t::~diagnostic_manager_t() /// /// this will initialize DiagnosticShims and cancel all active requests /// if there are any. -bool diagnostic_manager_t::initialize() +bool diagnostic_manager_t::initialize(std::string diagnostic_bus) { - // Mandatory to set the bus before intialize shims. - bus_ = application_t::instance().get_diagnostic_bus(); - - init_diagnostic_shims(); - reset(); + if (! diagnostic_bus.empty()) + { + bus_ = diagnostic_bus; + init_diagnostic_shims(); + reset(); - initialized_ = true; - AFB_DEBUG("Diagnostic Manager initialized"); + AFB_DEBUG("Diagnostic Manager initialized"); + initialized_ = true; + return initialized_; + } + AFB_ERROR("Diagnostic Manager missing its bus name in the config"); return initialized_; } @@ -104,7 +107,7 @@ bool diagnostic_manager_t::shims_send(const uint32_t arbitration_id, const uint8 if(! tx_socket) tx_socket.open(dm.get_bus_device_name()); - struct utils::bcm_msg bcm_msg; + struct bcm_msg bcm_msg; struct can_frame cf; struct timeval freq = current_adr->get_frequency_clock().get_timeval_from_period(); @@ -123,7 +126,12 @@ bool diagnostic_manager_t::shims_send(const uint32_t arbitration_id, const uint8 bcm_msg.frames[0] = cf; - tx_socket << bcm_msg; + + can_message_t msg = can_message_t(); + + msg.set_bcm_msg(bcm_msg); + + tx_socket.write_message(msg); if(tx_socket) return true; return false; @@ -188,8 +196,6 @@ void diagnostic_manager_t::find_and_erase(active_diagnostic_request_t* entry, st void diagnostic_manager_t::cancel_request(active_diagnostic_request_t* entry) { entry->get_socket().close(); - if(entry->get_handle()) - delete(entry->get_handle()); delete entry; entry = nullptr; } @@ -253,7 +259,7 @@ active_diagnostic_request_t* diagnostic_manager_t::find_recurring_request(Diagno if(entry != nullptr) { if(diagnostic_request_equals(&entry->get_handle()->request, &request)) - {return entry;} + return entry; } } return nullptr; @@ -387,7 +393,7 @@ active_diagnostic_request_t* diagnostic_manager_t::add_recurring_request(Diagnos } } else - { AFB_DEBUG("Can't add request, one already exists with same key");} + AFB_DEBUG("Can't add request, one already exists with same key"); return entry; } @@ -406,9 +412,7 @@ openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_response(active_dia found_signals = utils::signals_manager_t::instance().find_signals(build_DynamicField((double) adr->get_pid())); if(adr->get_decoder() != nullptr) - { value = adr->get_decoder()(&response, value); - } if((response.success && adr->get_name().size()) > 0) { @@ -437,9 +441,7 @@ openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_response(active_dia } if(adr->get_callback() != nullptr) - { adr->get_callback()(adr, &response, value); - } // Reset the completed flag handle to make sure that it will be reprocessed the next time. adr->get_handle()->success = false; @@ -468,13 +470,13 @@ openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_response(active_dia /// @param[in] cm - A raw CAN message. /// /// @return A pointer to a filled openxc_VehicleMessage or a nullptr if nothing has been found. -openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_handle(active_diagnostic_request_t* entry, const can_message_t& cm) +openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_handle(active_diagnostic_request_t* entry, std::shared_ptr m) { - DiagnosticResponse response = diagnostic_receive_can_frame(&shims_, entry->get_handle(), cm.get_id(), cm.get_data(), cm.get_length()); + DiagnosticResponse response = diagnostic_receive_can_frame(&shims_, entry->get_handle(), m->get_id(), m->get_data(), (uint8_t)m->get_length()); if(response.completed && entry->get_handle()->completed) { if(entry->get_handle()->success) - return relay_diagnostic_response(entry, response, cm.get_timestamp()); + return relay_diagnostic_response(entry, response, m->get_timestamp()); } else if(!response.completed && response.multi_frame) { @@ -493,20 +495,20 @@ openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_handle(active_diagn /// @param[in] cm - Raw CAN message received /// /// @return VehicleMessage with decoded value. -openxc_VehicleMessage diagnostic_manager_t::find_and_decode_adr(const can_message_t& cm) +openxc_VehicleMessage diagnostic_manager_t::find_and_decode_adr(std::shared_ptr m) { openxc_VehicleMessage vehicle_message = build_VehicleMessage(); for ( auto entry : non_recurring_requests_) { - vehicle_message = relay_diagnostic_handle(entry, cm); + vehicle_message = relay_diagnostic_handle(entry, m); if (is_valid(vehicle_message)) return vehicle_message; } for ( auto entry : recurring_requests_) { - vehicle_message = relay_diagnostic_handle(entry, cm); + vehicle_message = relay_diagnostic_handle(entry, m); if (is_valid(vehicle_message)) return vehicle_message; } @@ -521,9 +523,12 @@ openxc_VehicleMessage diagnostic_manager_t::find_and_decode_adr(const can_messag /// @param[in] cm - CAN message received from the socket. /// /// @return True if the active diagnostic request match the response. -bool diagnostic_manager_t::is_diagnostic_response(const can_message_t& cm) +bool diagnostic_manager_t::is_diagnostic_response(std::shared_ptr m) { - if (cm.get_id() >= 0x7e8 && cm.get_id() <= 0x7ef) - return true; + if(m->get_id() & CAN_SFF_MASK || m->get_id() & CAN_EFF_MASK) + { + if (m->get_id() >= 0x7e8 && m->get_id() <= 0x7ef) + return true; + } return false; }