+ int ret;
+ if (active_diagnostic_request_t::is_diagnostic_signal(sig))
+ {
+ std::vector<diagnostic_message_t*> found;
+ configuration_t::instance().find_diagnostic_messages(build_DynamicField(sig), found);
+ DiagnosticRequest* diag_req = new DiagnosticRequest(found.front()->build_diagnostic_request());
+
+ // If the requested diagnostic message isn't supported by the car then unssubcribe.
+ // no matter what we want, worse case will be a fail unsubscription but at least we don't
+ // poll a PID for nothing.
+ if(found.front()->get_supported())
+ subscribe = false;
+ if(subscribe)
+ {
+ float frequency = found.front()->get_frequency();
+ configuration_t::instance().get_diagnostic_manager().add_recurring_request(
+ diag_req, sig.c_str(), false, found.front()->get_decoder(), found.front()->get_callback(), (float)frequency);
+ //TODO: Adding callback requesting ignition status: diag_req, sig.c_str(), false, diagnostic_message_t::decode_obd2_response, diagnostic_message_t::check_ignition_status, frequency);
+ }
+ else
+ {
+ configuration_t::instance().get_diagnostic_manager().cleanup_request(
+ configuration_t::instance().get_diagnostic_manager().find_recurring_request(diag_req), true);
+ }
+ }