From bcfa8087eafcf4d96fc70eaa10afdce4dcfd3655 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Wed, 11 Dec 2019 22:22:01 +0000 Subject: Initial steering wheel event support Add initial basic support for next/previous events from signal composer, mapping them to seek forward/back. More work will be required to handle the issues around both mediaplayer and radio both being running and differentiating which should handle the events. Additionally, complete transition to binding version 3 to clean things up. Bug-AGL: SPEC-3046 Change-Id: I251fa461c96dba584a3fe0069bab4fd2e54701ad Signed-off-by: Scott Murray --- binding/CMakeLists.txt | 2 +- binding/radio-binding.c | 67 +++++++++++++++++++++++++++++++++++++++++++++--- conf.d/wgt/config.xml.in | 4 +++ 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/binding/CMakeLists.txt b/binding/CMakeLists.txt index 8f5b43a..75b30bf 100644 --- a/binding/CMakeLists.txt +++ b/binding/CMakeLists.txt @@ -1,6 +1,6 @@ ########################################################################### # Copyright 2015, 2016, 2017 IoT.bzh -# Copyright (C) 2018 Konsulko Group +# Copyright (C) 2018, 2019 Konsulko Group # # author: Fulup Ar Foll # contrib: Romain Forlot diff --git a/binding/radio-binding.c b/binding/radio-binding.c index 1dae5da..de89207 100644 --- a/binding/radio-binding.c +++ b/binding/radio-binding.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Konsulko Group + * Copyright (C) 2017, 2019 Konsulko Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,6 @@ #include #include #include - #include #include "radio_impl.h" @@ -37,6 +36,13 @@ static afb_event_t freq_event; static afb_event_t scan_event; static afb_event_t status_event; +static const char *signalcomposer_events[] = { + "event.media.next", + "event.media.previous", + "event.media.mode", + NULL, +}; + static void freq_callback(uint32_t frequency, void *data) { json_object *jresp = json_object_new_object(); @@ -502,7 +508,40 @@ static const afb_verb_t verbs[]= { { } }; -static int init() +static void onevent(afb_api_t api, const char *event, struct json_object *object) +{ + json_object *tmp = NULL; + const char *uid; + const char *value; + + json_object_object_get_ex(object, "uid", &tmp); + if (tmp == NULL) + return; + + uid = json_object_get_string(tmp); + if (strncmp(uid, "event.media.", 12)) + return; + + json_object_object_get_ex(object, "value", &tmp); + if (tmp == NULL) + return; + + value = json_object_get_string(tmp); + if (strncmp(value, "true", 4)) + return; + + if (!strcmp(uid, "event.media.next")) { + radio_impl_ops->scan_start(SCAN_FORWARD, scan_callback, NULL); + } else if (!strcmp(uid, "event.media.previous")) { + radio_impl_ops->scan_start(SCAN_BACKWARD, scan_callback, NULL); + } else if (!strcmp(uid, "event.media.mode")) { + // Do nothing ATM + } else { + AFB_WARNING("Unhandled signal-composer uid '%s'", uid); + } +} + +static int init(afb_api_t api) { // Look for RTL-SDR USB adapter radio_impl_ops = &rtlsdr_impl_ops; @@ -522,6 +561,26 @@ static int init() return rc; } + rc = afb_daemon_require_api("signal-composer", 1); + if (rc) { + AFB_WARNING("unable to initialize signal-composer binding"); + } else { + const char **tmp = signalcomposer_events; + json_object *args = json_object_new_object(); + json_object *signals = json_object_new_array(); + + while (*tmp) { + json_object_array_add(signals, json_object_new_string(*tmp++)); + } + json_object_object_add(args, "signal", signals); + if(json_object_array_length(signals)) { + afb_api_call_sync(api, "signal-composer", "subscribe", + args, NULL, NULL, NULL); + } else { + json_object_put(args); + } + } + // Initialize event structures freq_event = afb_daemon_make_event("frequency"); scan_event = afb_daemon_make_event("station_found"); @@ -533,6 +592,8 @@ static int init() const afb_binding_t afbBindingExport = { .info = "radio service", .api = "radio", + .specification = "Radio API", .verbs = verbs, + .onevent = onevent, .init = init, }; diff --git a/conf.d/wgt/config.xml.in b/conf.d/wgt/config.xml.in index 465f704..c98dce2 100644 --- a/conf.d/wgt/config.xml.in +++ b/conf.d/wgt/config.xml.in @@ -21,6 +21,10 @@ + + + + -- cgit 1.2.3-korg