From 8f05128deaec01a9a65b940d2073b9f2ab5c31f3 Mon Sep 17 00:00:00 2001 From: Matt Ranostay Date: Fri, 23 Nov 2018 14:24:18 -0800 Subject: binding: bluetooth: add default_adapter verb Allow setting of default adapter for use by other verbs within the binding. This allows to select an adapter on boards with more than one. Bug-AGL: SPEC-1630 Change-Id: Iec77b0abaa9f4c092dc5c827522efb1744953fce Signed-off-by: Matt Ranostay --- binding/bluetooth-api.c | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) (limited to 'binding/bluetooth-api.c') diff --git a/binding/bluetooth-api.c b/binding/bluetooth-api.c index 0000d9b..a1f37e8 100644 --- a/binding/bluetooth-api.c +++ b/binding/bluetooth-api.c @@ -43,7 +43,7 @@ */ static GThread *global_thread; -static struct bluetooth_state *bluetooth_get_userdata(afb_req_t request) { +struct bluetooth_state *bluetooth_get_userdata(afb_req_t request) { afb_api_t api = afb_req_get_api(request); return afb_api_get_userdata(api); } @@ -556,6 +556,7 @@ static int init(afb_api_t api) { struct init_data init_data, *id = &init_data; gint64 end_time; + int ret; memset(id, 0, sizeof(*id)); id->init_done = FALSE; @@ -564,6 +565,12 @@ static int init(afb_api_t api) g_cond_init(&id->cond); g_mutex_init(&id->mutex); + ret = afb_daemon_require_api("persistence", 1); + if (ret < 0) { + AFB_ERROR("Cannot request data persistence service"); + return ret; + } + global_thread = g_thread_new("agl-service-bluetooth", bluetooth_func, id); @@ -590,6 +597,8 @@ static int init(afb_api_t api) else AFB_INFO("bluetooth-binding operational"); + id->ns->default_adapter = get_default_adapter(id->api); + return id->rc; } @@ -683,7 +692,7 @@ static void bluetooth_state(afb_req_t request) json_object *jresp; const char *adapter = afb_req_value(request, "adapter"); - adapter = BLUEZ_ROOT_PATH(adapter ? adapter : BLUEZ_DEFAULT_ADAPTER); + adapter = BLUEZ_ROOT_PATH(adapter ? adapter : ns->default_adapter); jresp = adapter_properties(ns, &error, adapter); if (!jresp) { @@ -702,7 +711,7 @@ static void bluetooth_adapter(afb_req_t request) const char *adapter = afb_req_value(request, "adapter"); const char *scan, *discoverable, *powered, *filter; - adapter = BLUEZ_ROOT_PATH(adapter ? adapter : BLUEZ_DEFAULT_ADAPTER); + adapter = BLUEZ_ROOT_PATH(adapter ? adapter : ns->default_adapter); scan = afb_req_value(request, "discovery"); if (scan) { @@ -796,6 +805,27 @@ static void bluetooth_adapter(afb_req_t request) bluetooth_state(request); } +static void bluetooth_default_adapter(afb_req_t request) +{ + struct bluetooth_state *ns = bluetooth_get_userdata(request); + const char *adapter = afb_req_value(request, "adapter"); + json_object *jresp = json_object_new_object(); + + call_work_lock(ns); + if (adapter) { + set_default_adapter(afb_req_get_api(request), adapter); + + if (ns->default_adapter) + g_free(ns->default_adapter); + ns->default_adapter = g_strdup(adapter); + } + + json_object_object_add(jresp, "adapter", json_object_new_string(ns->default_adapter)); + call_work_unlock(ns); + + afb_req_success(request, jresp, "Bluetooth - default adapter"); +} + static void connect_service_callback(void *user_data, GVariant *result, GError **error) { @@ -1181,6 +1211,11 @@ static const struct afb_verb_v3 bluetooth_verbs[] = { .session = AFB_SESSION_NONE, .callback = bluetooth_adapter, .info = "Set adapter mode and retrieve properties" + }, { + .verb = "default_adapter", + .session = AFB_SESSION_NONE, + .callback = bluetooth_default_adapter, + .info = "Set default adapter for commands" }, { .verb = "connect", .session = AFB_SESSION_NONE, -- cgit 1.2.3-korg