From 0dda767d09a31eb13976371730e4cfe5e437869e Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 18 Aug 2008 09:29:24 -0300 Subject: Fix loading adapter drivers. --- src/adapter.c | 26 ++++++++++++++++++++++++++ src/manager.c | 17 ----------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index d2ca9636..70adab21 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -63,6 +63,7 @@ #include "glib-helper.h" #include "logging.h" #include "agent.h" +#include "driver.h" #define NUM_ELEMENTS(table) (sizeof(table)/sizeof(const char *)) @@ -2215,6 +2216,17 @@ static void load_devices(struct adapter *adapter) textfile_foreach(filename, create_stored_device_from_linkkeys, adapter); } +static void load_drivers(struct adapter *adapter) +{ + GSList *l; + + for (l = btd_get_adapter_drivers(); l; l = l->next) { + struct btd_adapter_driver *driver = l->data; + + if (driver->probe) + driver->probe(adapter); + } +} static void adapter_up(struct adapter *adapter, int dd) { @@ -2259,6 +2271,7 @@ static void adapter_up(struct adapter *adapter, int dd) ADAPTER_INTERFACE, "Mode", DBUS_TYPE_STRING, &mode); + load_drivers(adapter); load_devices(adapter); } @@ -2419,6 +2432,17 @@ static void reply_pending_requests(struct adapter *adapter) } } +static void unload_drivers(struct adapter *adapter) +{ + GSList *l; + + for (l = btd_get_adapter_drivers(); l; l = l->next) { + struct btd_adapter_driver *driver = l->data; + + if (driver->remove) + driver->remove(adapter); + } +} int adapter_stop(struct adapter *adapter) { @@ -2481,6 +2505,8 @@ int adapter_stop(struct adapter *adapter) adapter->pinq_idle = 0; adapter->state = DISCOVER_TYPE_NONE; + unload_drivers(adapter); + info("Adapter %s has been disabled", adapter->path); return 0; diff --git a/src/manager.c b/src/manager.c index 51fb6011..9b7e4439 100644 --- a/src/manager.c +++ b/src/manager.c @@ -59,7 +59,6 @@ #include "oui.h" #include "agent.h" #include "device.h" -#include "driver.h" #include "manager.h" @@ -443,18 +442,10 @@ static void manager_remove_adapter(struct adapter *adapter) int manager_register_adapter(int id) { struct adapter *adapter = adapter_create(connection, id); - GSList *l = btd_get_adapter_drivers(); if (!adapter) return -1; - for (; l; l = l->next) { - struct btd_adapter_driver *driver = l->data; - - if (driver->probe) - driver->probe(adapter); - } - manager_add_adapter(adapter); return 0; @@ -464,7 +455,6 @@ int manager_unregister_adapter(int id) { struct adapter *adapter; const gchar *path; - GSList *l = btd_get_adapter_drivers(); adapter = manager_find_adapter_by_id(id); if (!adapter) @@ -474,13 +464,6 @@ int manager_unregister_adapter(int id) info("Unregister path: %s", path); - for (; l; l = l->next) { - struct btd_adapter_driver *driver = l->data; - - if (driver->remove) - driver->remove(adapter); - } - adapter_stop(adapter); manager_remove_adapter(adapter); -- cgit