summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Porter <mporter@konsulko.com>2018-05-11 12:39:00 -0400
committerMatt Porter <mporter@konsulko.com>2018-05-11 19:07:54 -0400
commit8256ad1306337dc343683f5479e1a08764f1111a (patch)
tree13318aec71b664604017e2be4120a1256317a428
parente19585cbe8710549d9c21de2ac37afaa6c185907 (diff)
telephony-binding: add ofono manager calls to support async init
Add additional calls to manage runtime connection/disconnection of voice modem interfaces and querying if there's a valid modem present. Bug-AGL: SPEC-1433 Change-Id: I824bfe2ff383fca5516e8581e97278f7b3807364 Signed-off-by: Matt Porter <mporter@konsulko.com>
-rw-r--r--telephony-binding/gdbus/ofono_manager.c78
-rw-r--r--telephony-binding/gdbus/ofono_manager.h6
-rw-r--r--telephony-binding/gdbus/ofono_voicecallmanager.c6
-rw-r--r--telephony-binding/gdbus/ofono_voicecallmanager.h1
4 files changed, 87 insertions, 4 deletions
diff --git a/telephony-binding/gdbus/ofono_manager.c b/telephony-binding/gdbus/ofono_manager.c
index 49a2452..a77623d 100644
--- a/telephony-binding/gdbus/ofono_manager.c
+++ b/telephony-binding/gdbus/ofono_manager.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Konsulko Group
+ * Copyright (C) 2017-2018 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,24 +26,81 @@
struct ofono_manager_modem
{
+ const gchar *address;
const gchar *path;
const gchar *name;
const gchar *type;
gboolean powered;
gboolean online;
+ gboolean valid;
};
static OrgOfonoManager *manager;
static struct ofono_manager_modem default_modem;
-int ofono_manager_init()
+void ofono_manager_invalidate_default_modem()
+{
+ default_modem.valid = FALSE;
+}
+
+int ofono_manager_set_default_modem(const char *address)
{
GVariant *out_arg = NULL, *next, *value;
GError *error = NULL;
gchar *path, *key;
+ const gchar *name = NULL, *type = NULL, *serial = NULL;
+ gboolean powered = FALSE, online = FALSE;
+
GVariantIter *iter, *iter2 = NULL;
int ret = 0;
+ /* Fetch all visible modems */
+ org_ofono_manager_call_get_modems_sync(manager, &out_arg, NULL, &error);
+ if (error == NULL) {
+ g_variant_get(out_arg, "a(oa{sv})", &iter);
+ /* Iterate over each modem */
+ while ((next = g_variant_iter_next_value(iter))) {
+ g_variant_get(next, "(oa{sv})", &path, &iter2);
+ while (g_variant_iter_loop(iter2, "{sv}", &key, &value)) {
+ if (!strcmp(key, "Name"))
+ name = g_variant_get_string(value, NULL);
+ else if (!strcmp(key, "Online"))
+ online = g_variant_get_boolean(value);
+ else if (!strcmp(key, "Powered"))
+ powered = g_variant_get_boolean(value);
+ else if (!strcmp(key, "Serial"))
+ serial = g_variant_get_string(value, NULL);
+ else if (!strcmp(key, "Type"))
+ type = g_variant_get_string(value, NULL);
+ }
+ /* If the HFP modem matches the BT address, is powered, and online then set as default */
+ if (!strcmp(type, "hfp") && !strcmp(address, serial) && powered && online) {
+ default_modem.address = serial;
+ default_modem.path = path;
+ default_modem.name = name;
+ default_modem.type = type;
+ default_modem.powered = powered;
+ default_modem.online = online;
+ default_modem.valid = TRUE;
+ AFB_NOTICE("New modem: %s (%s)", name, address);
+ break;
+ }
+ }
+ } else {
+ ret = -1;
+ }
+
+ return ret;
+}
+
+int ofono_manager_init()
+{
+ GVariant *out_arg = NULL, *next, *value;
+ GError *error = NULL;
+ GVariantIter *iter, *iter2 = NULL;
+ gchar *path, *key;
+ int ret = 0;
+
if (manager) {
AFB_ERROR("Ofono Manager already initialized\n");
return -1;
@@ -85,6 +142,14 @@ int ofono_manager_init()
return ret;
}
+const gchar *ofono_manager_get_default_modem_address(void)
+{
+ if (!manager) {
+ AFB_ERROR("Ofono Manager not initialized\n");
+ }
+
+ return default_modem.address;
+}
const gchar *ofono_manager_get_default_modem_path(void)
{
@@ -130,3 +195,12 @@ gboolean ofono_manager_get_default_modem_online(void)
return default_modem.online;
}
+
+gboolean ofono_manager_get_default_modem_valid(void)
+{
+ if (!manager) {
+ AFB_ERROR("Ofono Manager not initialized\n");
+ }
+
+ return default_modem.valid;
+}
diff --git a/telephony-binding/gdbus/ofono_manager.h b/telephony-binding/gdbus/ofono_manager.h
index 9df9b3c..87e86ad 100644
--- a/telephony-binding/gdbus/ofono_manager.h
+++ b/telephony-binding/gdbus/ofono_manager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Konsulko Group
+ * Copyright (C) 2017-2018 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,8 +21,12 @@
#include <afb/afb-service-itf.h>
int ofono_manager_init(void);
+void ofono_manager_invalidate_default_modem(void);
+int ofono_manager_set_default_modem(const char *);
+const gchar *ofono_manager_get_default_modem_address(void);
const gchar *ofono_manager_get_default_modem_path(void);
const gchar *ofono_manager_get_default_modem_name(void);
const gchar *ofono_manager_get_default_modem_type(void);
gboolean ofono_manager_get_default_modem_powered(void);
gboolean ofono_manager_get_default_modem_online(void);
+gboolean ofono_manager_get_default_modem_valid(void);
diff --git a/telephony-binding/gdbus/ofono_voicecallmanager.c b/telephony-binding/gdbus/ofono_voicecallmanager.c
index 2356366..956bcba 100644
--- a/telephony-binding/gdbus/ofono_voicecallmanager.c
+++ b/telephony-binding/gdbus/ofono_voicecallmanager.c
@@ -55,7 +55,6 @@ static void call_removed(OrgOfonoVoiceCallManager *manager,
g_signal_emit_by_name(manager, "terminated-call", op);
}
-
const OrgOfonoVoiceCallManager
*ofono_voicecallmanager_init(const gchar *op,
void (*incoming_call)(OrgOfonoVoiceCallManager *manager,gchar *,gchar *),
@@ -124,6 +123,11 @@ const OrgOfonoVoiceCallManager
return manager;
}
+void ofono_voicecallmanager_free(OrgOfonoVoiceCallManager *vcm)
+{
+ g_object_unref(G_OBJECT(vcm));
+}
+
gchar *ofono_voicecallmanager_dial(OrgOfonoVoiceCallManager *manager,
const gchar *number,
const gchar *cid)
diff --git a/telephony-binding/gdbus/ofono_voicecallmanager.h b/telephony-binding/gdbus/ofono_voicecallmanager.h
index 7477e7c..81e4bb6 100644
--- a/telephony-binding/gdbus/ofono_voicecallmanager.h
+++ b/telephony-binding/gdbus/ofono_voicecallmanager.h
@@ -23,5 +23,6 @@ OrgOfonoVoiceCallManager
void(*)(OrgOfonoVoiceCallManager *, gchar *, gchar *),
void(*)(OrgOfonoVoiceCallManager *, gchar *, gchar *),
void(*)(OrgOfonoVoiceCallManager *, gchar *));
+void ofono_voicecallmanager_free(OrgOfonoVoiceCallManager *);
gchar *ofono_voicecallmanager_dial(OrgOfonoVoiceCallManager *, gchar *, gchar *);
void ofono_hangup_all(OrgOfonoVoiceCallManager *);