From 68d889fc2ac063b89cddc09f755bf3a11c5cecda Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Mon, 27 Apr 2009 15:38:03 +0530 Subject: [PATCH 7/8] Adding btd_register_adapter_ops framework. --- plugins/hciops.c | 16 +++++++++++++++- src/adapter.c | 28 ++++++++++++++++++++++++++++ src/adapter.h | 8 ++++++++ 3 files changed, 51 insertions(+), 1 deletions(-) diff --git a/plugins/hciops.c b/plugins/hciops.c index 25f5171..26fa1dc 100644 --- a/plugins/hciops.c +++ b/plugins/hciops.c @@ -355,7 +355,7 @@ static gboolean io_stack_event(GIOChannel *chan, GIOCondition cond, return TRUE; } -static int hciops_init(void) +static int hci_init(void) { struct sockaddr_hci addr; struct hci_filter flt; @@ -413,8 +413,22 @@ static int hciops_init(void) return init_all_devices(sock); } +static void hci_cleanup(void) +{ +} + +static struct btd_adapter_ops hci_ops = { + .init = hci_init, + .cleanup = hci_cleanup, +}; + +static int hciops_init(void) +{ + return btd_register_adapter_ops(&hci_ops); +} static void hciops_exit(void) { + btd_adapter_cleanup_ops(&hci_ops); } BLUETOOTH_PLUGIN_DEFINE(hciops, VERSION, diff --git a/src/adapter.c b/src/adapter.c index 40c5ab0..c41b933 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -73,6 +73,7 @@ static DBusConnection *connection = NULL; static GSList *adapter_drivers = NULL; +static struct btd_adapter_ops *adapter_ops = NULL; struct session_req { struct btd_adapter *adapter; @@ -2905,6 +2906,33 @@ void btd_unregister_adapter_driver(struct btd_adapter_driver *driver) adapter_drivers = g_slist_remove(adapter_drivers, driver); } +int btd_register_adapter_ops(struct btd_adapter_ops *btd_adapter_ops) +{ + int err; + + /* Already registered */ + if (adapter_ops) + return 1; + + if (btd_adapter_ops->init == NULL) + return -1; + + err = btd_adapter_ops->init(); + if (err < 0) { + error("btd_register_adapter_ops failed:%s (%d)", strerror(-err), -err); + return -1; + } + + adapter_ops = btd_adapter_ops; + + return 0; +} + +void btd_adapter_cleanup_ops() +{ + adapter_ops->cleanup(); +} + static void agent_auth_cb(struct agent *agent, DBusError *derr, void *user_data) { diff --git a/src/adapter.h b/src/adapter.h index 8111d6f..4e4a3d2 100644 --- a/src/adapter.h +++ b/src/adapter.h @@ -147,3 +147,11 @@ const char *btd_adapter_any_request_path(void); void btd_adapter_any_release_path(void); gboolean adapter_is_pairable(struct btd_adapter *adapter); gboolean adapter_powering_down(struct btd_adapter *adapter); + +struct btd_adapter_ops { + int (*init)(); + void (*cleanup)(); +}; + +int btd_register_adapter_ops(struct btd_adapter_ops *btd_adapter_ops); +void btd_adapter_cleanup_ops(); -- 1.5.6.3