mirror of git://git.sysmocom.de/ofono
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.
This commit is contained in:
parent
8be7fa050d
commit
544726eb2e
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue