X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fdiagnostic%2Fdiagnostic-manager.cpp;h=2c0a4d92b8a91af8371f43a1158f5d5b7d1ad914;hb=1ee222a7250896fc7f2e5fb1dc50a7466d81b741;hp=31fbf0b07b2730093da3ceab98987c274cf9d23f;hpb=7175a87b640b9920e666bce53f46002ac19d4c21;p=apps%2Fagl-service-can-low-level.git diff --git a/src/diagnostic/diagnostic-manager.cpp b/src/diagnostic/diagnostic-manager.cpp index 31fbf0b0..2c0a4d92 100644 --- a/src/diagnostic/diagnostic-manager.cpp +++ b/src/diagnostic/diagnostic-manager.cpp @@ -111,6 +111,7 @@ void diagnostic_manager_t::cleanup_request(active_diagnostic_request_t* entry, b find_and_erase(entry, recurring_requests_); if(force) cancel_request(entry); + DEBUG(binder_interface, "cleanup_request: Cancelling completed, recurring request: %s", request_string); } else { @@ -314,7 +315,7 @@ int diagnostic_manager_t::send_request(sd_event_source *s, uint64_t usec, void * return -1; } -openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_response(active_diagnostic_request_t* adr, const DiagnosticResponse& response) const +openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_response(active_diagnostic_request_t* adr, const DiagnosticResponse& response) { openxc_VehicleMessage message = build_VehicleMessage(); float value = (float)diagnostic_payload_to_integer(&response); @@ -338,6 +339,16 @@ openxc_VehicleMessage diagnostic_manager_t::relay_diagnostic_response(active_dia message = build_VehicleMessage(adr, response, value); } + // If not success but completed then the pid isn't supported + if(!response.success) + { + std::vector found_signals; + configuration_t::instance().find_diagnostic_messages( build_DynamicField(adr->get_name()), found_signals ); + found_signals.front()->set_supported(false); + cleanup_request(adr, true); + NOTICE(binder_interface, "relay_diagnostic_response: PID not supported or ill formed. Please unsubscribe from it. Error code : %d", response.negative_response_code); + } + if(adr->get_callback() != nullptr) { adr->get_callback()(adr, &response, value);