summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClaudio Takahasi <claudio.takahasi@openbossa.org>2013-01-16 10:31:31 -0300
committerDenis Kenzior <denkenz@gmail.com>2013-01-16 13:59:52 -0600
commit544726eb2e0af67498a014c9b6d29078eb8a5daa (patch)
tree7a244768ed1bd19d6cbc373d031f1820768417b5
parent8be7fa050da2a35283f07fa2cb859fb2d55c78ca (diff)
downloadofono-544726eb2e0af67498a014c9b6d29078eb8a5daa.tar.bz2
hfp_hf_bluez5: Add BlueZ Profile handler
This patch declares the external HFP Profile handler. It contains the initial implementation of the D-Bus Profile1 interface and methods responsible for handling Bluetooth connections.
-rw-r--r--plugins/hfp_hf_bluez5.c74
1 files changed, 73 insertions, 1 deletions
diff --git a/plugins/hfp_hf_bluez5.c b/plugins/hfp_hf_bluez5.c
index 0cd0d234..e0248384 100644
--- a/plugins/hfp_hf_bluez5.c
+++ b/plugins/hfp_hf_bluez5.c
@@ -26,6 +26,8 @@
#include <errno.h>
#include <glib.h>
+#include <gdbus.h>
+
#define OFONO_API_SUBJECT_TO_CHANGE
#include <ofono/modem.h>
#include <ofono/dbus.h>
@@ -88,6 +90,59 @@ static struct ofono_modem_driver hfp_driver = {
.post_sim = hfp_post_sim,
};
+static DBusMessage *profile_new_connection(DBusConnection *conn,
+ DBusMessage *msg, void *user_data)
+{
+ DBG("Profile handler NewConnection");
+
+ return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE
+ ".NotImplemented",
+ "Implementation not provided");
+}
+
+static DBusMessage *profile_release(DBusConnection *conn,
+ DBusMessage *msg, void *user_data)
+{
+ DBG("Profile handler Release");
+
+ return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE
+ ".NotImplemented",
+ "Implementation not provided");
+}
+
+static DBusMessage *profile_cancel(DBusConnection *conn,
+ DBusMessage *msg, void *user_data)
+{
+ DBG("Profile handler Cancel");
+
+ return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE
+ ".NotImplemented",
+ "Implementation not provided");
+}
+
+static DBusMessage *profile_disconnection(DBusConnection *conn,
+ DBusMessage *msg, void *user_data)
+{
+ DBG("Profile handler RequestDisconnection");
+
+ return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE
+ ".NotImplemented",
+ "Implementation not provided");
+}
+
+static const GDBusMethodTable profile_methods[] = {
+ { GDBUS_ASYNC_METHOD("NewConnection",
+ GDBUS_ARGS({ "device", "o"}, { "fd", "h"},
+ { "fd_properties", "a{sv}" }),
+ NULL, profile_new_connection) },
+ { GDBUS_METHOD("Release", NULL, NULL, profile_release) },
+ { GDBUS_METHOD("Cancel", NULL, NULL, profile_cancel) },
+ { GDBUS_METHOD("RequestDisconnection",
+ GDBUS_ARGS({"device", "o"}), NULL,
+ profile_disconnection) },
+ { }
+};
+
static int hfp_init(void)
{
DBusConnection *conn = ofono_dbus_get_connection();
@@ -96,13 +151,28 @@ static int hfp_init(void)
if (DBUS_TYPE_UNIX_FD < 0)
return -EBADF;
+ /* Registers External Profile handler */
+ if (!g_dbus_register_interface(conn, HFP_EXT_PROFILE_PATH,
+ BLUEZ_PROFILE_INTERFACE,
+ profile_methods, NULL,
+ NULL, NULL, NULL)) {
+ ofono_error("Register Profile interface failed: %s",
+ HFP_EXT_PROFILE_PATH);
+ return -EIO;
+ }
+
err = ofono_modem_driver_register(&hfp_driver);
- if (err < 0)
+ if (err < 0) {
+ g_dbus_unregister_interface(conn, HFP_EXT_PROFILE_PATH,
+ BLUEZ_PROFILE_INTERFACE);
return err;
+ }
err = bluetooth_register_profile(conn, HFP_HS_UUID, "hfp_hf",
HFP_EXT_PROFILE_PATH);
if (err < 0) {
+ g_dbus_unregister_interface(conn, HFP_EXT_PROFILE_PATH,
+ BLUEZ_PROFILE_INTERFACE);
ofono_modem_driver_unregister(&hfp_driver);
return err;
}
@@ -115,6 +185,8 @@ static void hfp_exit(void)
DBusConnection *conn = ofono_dbus_get_connection();
bluetooth_unregister_profile(conn, HFP_EXT_PROFILE_PATH);
+ g_dbus_unregister_interface(conn, HFP_EXT_PROFILE_PATH,
+ BLUEZ_PROFILE_INTERFACE);
ofono_modem_driver_unregister(&hfp_driver);
}