diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/adapter.c | 19 | ||||
| -rw-r--r-- | src/manager.c | 5 | ||||
| -rw-r--r-- | src/manager.h | 1 | 
3 files changed, 25 insertions, 0 deletions
| diff --git a/src/adapter.c b/src/adapter.c index c2304e99..39d5f9c1 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -3246,10 +3246,29 @@ gboolean adapter_has_discov_sessions(struct btd_adapter *adapter)  	return TRUE;  } +static void probe_driver(gpointer data, gpointer user_data) +{ +	struct btd_adapter *adapter = data; +	struct btd_adapter_driver *driver = user_data; + +	if (!adapter->up) +		return; + +	driver->probe(adapter); +} +  int btd_register_adapter_driver(struct btd_adapter_driver *driver)  { +	GSList *adapters; +  	adapter_drivers = g_slist_append(adapter_drivers, driver); +	if (driver->probe == NULL) +		return 0; + +	adapters = manager_get_adapters(); +	g_slist_foreach(adapters, probe_driver, driver); +  	return 0;  } diff --git a/src/manager.c b/src/manager.c index 537582ac..49118ec7 100644 --- a/src/manager.c +++ b/src/manager.c @@ -346,6 +346,11 @@ struct btd_adapter *manager_find_adapter_by_id(int id)  	return match->data;  } +GSList *manager_get_adapters(void) +{ +	return adapters; +} +  static void manager_add_adapter(struct btd_adapter *adapter)  {  	const gchar *path = adapter_get_path(adapter); diff --git a/src/manager.h b/src/manager.h index a4c26313..f70bb524 100644 --- a/src/manager.h +++ b/src/manager.h @@ -30,6 +30,7 @@ void manager_cleanup(DBusConnection *conn, const char *path);  struct btd_adapter *manager_find_adapter(const bdaddr_t *sba);  struct btd_adapter *manager_find_adapter_by_path(const char *path);  struct btd_adapter *manager_find_adapter_by_id(int id); +GSList *manager_get_adapters(void);  int manager_register_adapter(int id);  int manager_unregister_adapter(int id);  int manager_start_adapter(int id); | 
