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.
---
 plugins/bluez5.h        |  2 ++
 plugins/hfp_hf_bluez5.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 75 insertions(+), 1 deletion(-)

diff --git a/plugins/bluez5.h b/plugins/bluez5.h
index 99bf896..01ecfe8 100644
--- a/plugins/bluez5.h
+++ b/plugins/bluez5.h
@@ -20,6 +20,8 @@
  */
 
 #define        BLUEZ_SERVICE "org.bluez"
+#define BLUEZ_PROFILE_INTERFACE                BLUEZ_SERVICE ".Profile1"
+#define BLUEZ_ERROR_INTERFACE          BLUEZ_SERVICE ".Error"
 
 #define HFP_HS_UUID    "0000111e-0000-1000-8000-00805f9b34fb"
 
diff --git a/plugins/hfp_hf_bluez5.c b/plugins/hfp_hf_bluez5.c
index 0cd0d23..e024838 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);
 }
 
-- 
1.7.11.7

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to