for(const auto& sig : signals.diagnostic_messages)
{
+ diagnostic_manager_t& diag_m = conf.get_diagnostic_manager();
DiagnosticRequest* diag_req = conf.get_request_from_diagnostic_message(sig->get_name());
// If the requested diagnostic message isn't supported by the car then unsubcribe it
if(sig->get_supported() && subscribe)
{
float frequency = sig->get_frequency();
- subscribe = conf.get_diagnostic_manager().add_recurring_request(
+ subscribe = diag_m.add_recurring_request(
diag_req, sig->get_name().c_str(), false, sig->get_decoder(), sig->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
{
- conf.get_diagnostic_manager().cleanup_request(
- conf.get_diagnostic_manager().find_recurring_request(diag_req), true);
+ diag_m.cleanup_request(
+ diag_m.find_recurring_request(diag_req), true);
WARNING(binder_interface, "%s: signal: %s isn't supported. Canceling operation.", __FUNCTION__, sig->get_name().c_str());
return -1;
}
for(const auto& sig: signals.can_signals)
{
- ret = subscribe_unsubscribe_signal(request, subscribe, sig->get_name());
- if(ret <= 0)
- return ret;
+ if(conf.get_can_bus_manager().create_rx_filter(*sig) <= 0 &&
+ subscribe_unsubscribe_signal(request, subscribe, sig->get_name()) <=0 )
+ {
+ return -1;
+ }
rets++;
DEBUG(binder_interface, "%s: signal: %s subscribed", __FUNCTION__, sig->get_name().c_str());
}
return rets;
}
-static const std::vector<std::string> parse_signals_from_request(struct afb_req request, bool subscribe)
+static const std::vector<std::string> parse_args_from_request(struct afb_req request, bool subscribe)
{
int i, n;
std::vector<std::string> ret;
{
static void subscribe(struct afb_req request)
{
- std::vector<std::string> signals;
+ std::vector<std::string> args;
struct utils::signals_found sf;
int ok = 0, total = 0;
+ bool subscribe = true;
- signals = parse_signals_from_request(request, true);
+ args = parse_args_from_request(request, subscribe);
- for(const auto& sig: signals)
+ for(const auto& sig: args)
{
openxc_DynamicField search_key = build_DynamicField(sig);
sf = utils::signals_manager_t::instance().find_signals(search_key);
}
NOTICE(binder_interface, "%s: Subscribed/unsubscribe correctly to %d/%d signal(s).", __FUNCTION__, ok, total);
- if (ok)
+ if (ok > 0)
afb_req_success(request, NULL, NULL);
else
afb_req_fail(request, "error", NULL);
static void unsubscribe(struct afb_req request)
{
- parse_signals_from_request(request, false);
+ parse_args_from_request(request, false);
}
static const struct afb_verb_desc_v1 verbs[]=