diff options
author | Luiz Augusto von Dentz <luiz.dentz@indt.org.br> | 2008-08-18 09:29:24 -0300 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.dentz@indt.org.br> | 2008-08-18 09:29:24 -0300 |
commit | 0dda767d09a31eb13976371730e4cfe5e437869e (patch) | |
tree | 205ec925d4f5902b192dfeefb885be1acc01ecc9 /src/adapter.c | |
parent | ab4a6c310beb4fc14308b8d042e290959d2d4950 (diff) |
Fix loading adapter drivers.
Diffstat (limited to 'src/adapter.c')
-rw-r--r-- | src/adapter.c | 26 |
1 files changed, 26 insertions, 0 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; |