X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=CAN-binder%2Flow-can-binding%2Fdiagnostic%2Fdiagnostic-manager.cpp;h=935767a87284f71b78d44127dc737942d9146880;hb=4f1b1d088afe8eb9a5b75287429104e4175e97e7;hp=8a55365ecba702ca6e8f085ed9a867d3636124a8;hpb=c59a57338a488cc451482f1180fe672e7d5c9179;p=apps%2Fagl-service-can-low-level.git diff --git a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp index 8a55365e..935767a8 100644 --- a/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp +++ b/CAN-binder/low-can-binding/diagnostic/diagnostic-manager.cpp @@ -49,6 +49,7 @@ bool diagnostic_manager_t::initialize() bus_ = configuration_t::instance().get_diagnostic_bus(); init_diagnostic_shims(); + event_source_ = nullptr; reset(); initialized_ = true; @@ -456,15 +457,28 @@ active_diagnostic_request_t* diagnostic_manager_t::add_recurring_request(Diagnos { // TODO: implement Acceptance Filter //if(updateRequiredAcceptanceFilters(bus, request)) { - active_diagnostic_request_t* entry = new active_diagnostic_request_t(bus_, request, name, + entry = new active_diagnostic_request_t(bus_, request, name, wait_for_multiple_responses, decoder, callback, frequencyHz); recurring_requests_.push_back(entry); entry->set_handle(shims_, request); if(add_rx_filter(OBD2_FUNCTIONAL_BROADCAST_ID) < 0) - { recurring_requests_.pop_back(); } + { recurring_requests_.pop_back(); } else - { start_diagnostic_request(&shims_, entry->get_handle()); } + { + start_diagnostic_request(&shims_, entry->get_handle()); + if(event_source_ == nullptr && sd_event_add_io(afb_daemon_get_event_loop(binder_interface->daemon), + &event_source_, + socket_.socket(), + EPOLLIN, + read_diagnostic_message, + nullptr) < 0) + { + cleanup_request(entry, true); + WARNING(binder_interface, "%s: signal: %s isn't supported. Canceling operation.", __FUNCTION__, entry->get_name().c_str()); + return entry; + } + } } else { @@ -473,7 +487,7 @@ active_diagnostic_request_t* diagnostic_manager_t::add_recurring_request(Diagnos } } else - { DEBUG(binder_interface, "%s: Can't add request, one already exists with same key", __FUNCTION__);} + { DEBUG(binder_interface, "%s: Can't add request, one already exists with same key", __FUNCTION__);} return entry; }