summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/hfp_hf_bluez5.c51
1 files changed, 47 insertions, 4 deletions
diff --git a/plugins/hfp_hf_bluez5.c b/plugins/hfp_hf_bluez5.c
index e0248384..61e66690 100644
--- a/plugins/hfp_hf_bluez5.c
+++ b/plugins/hfp_hf_bluez5.c
@@ -42,6 +42,8 @@
#define HFP_EXT_PROFILE_PATH "/bluetooth/profile/hfp_hf"
+static GDBusClient *bluez = NULL;
+
static int hfp_probe(struct ofono_modem *modem)
{
DBG("modem: %p", modem);
@@ -143,6 +145,43 @@ static const GDBusMethodTable profile_methods[] = {
{ }
};
+static void connect_handler(DBusConnection *conn, void *user_data)
+{
+ DBG("Registering External Profile handler ...");
+
+ bluetooth_register_profile(conn, HFP_HS_UUID, "hfp_hf",
+ HFP_EXT_PROFILE_PATH);
+}
+
+static void proxy_added(GDBusProxy *proxy, void *user_data)
+{
+ const char *path;
+
+ path = g_dbus_proxy_get_path(proxy);
+
+ DBG("Device proxy: %s(%p)", path, proxy);
+}
+
+static void proxy_removed(GDBusProxy *proxy, void *user_data)
+{
+ const char *path;
+
+ path = g_dbus_proxy_get_path(proxy);
+
+ DBG("Device proxy: %s(%p)", path, proxy);
+}
+
+static void property_changed(GDBusProxy *proxy, const char *name,
+ DBusMessageIter *iter, void *user_data)
+{
+ const char *interface, *path;
+
+ interface = g_dbus_proxy_get_interface(proxy);
+ path = g_dbus_proxy_get_path(proxy);
+
+ DBG("path: %s interface: %s", path, interface);
+}
+
static int hfp_init(void)
{
DBusConnection *conn = ofono_dbus_get_connection();
@@ -168,15 +207,18 @@ static int hfp_init(void)
return err;
}
- err = bluetooth_register_profile(conn, HFP_HS_UUID, "hfp_hf",
- HFP_EXT_PROFILE_PATH);
- if (err < 0) {
+ bluez = g_dbus_client_new(conn, BLUEZ_SERVICE, BLUEZ_MANAGER_PATH);
+ if (bluez == NULL) {
g_dbus_unregister_interface(conn, HFP_EXT_PROFILE_PATH,
BLUEZ_PROFILE_INTERFACE);
ofono_modem_driver_unregister(&hfp_driver);
- return err;
+ return -ENOMEM;
}
+ g_dbus_client_set_connect_watch(bluez, connect_handler, NULL);
+ g_dbus_client_set_proxy_handlers(bluez, proxy_added, proxy_removed,
+ property_changed, NULL);
+
return 0;
}
@@ -188,6 +230,7 @@ static void hfp_exit(void)
g_dbus_unregister_interface(conn, HFP_EXT_PROFILE_PATH,
BLUEZ_PROFILE_INTERFACE);
ofono_modem_driver_unregister(&hfp_driver);
+ g_dbus_client_unref(bluez);
}
OFONO_PLUGIN_DEFINE(hfp_bluez5, "External Hands-Free Profile Plugin", VERSION,