summaryrefslogtreecommitdiffstats
path: root/audio/manager.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-10-09 15:00:09 +0200
committerJohan Hedberg <johan.hedberg@nokia.com>2008-10-09 15:13:28 +0200
commit17541956196b13ee083852fd4124cd8cfd0928a4 (patch)
treecc258c9f0ff98572036eea7879e79fb443053913 /audio/manager.c
parent548026e08bd9b83b3685d515a916e2cf674184f3 (diff)
Add mechanism for adding new UUIDs from the driver side
With this patch drivers can notify the core daemon that a device supports some UUID. This is useful in case we don't have a service record for a profile which the remote device initiates a connection for.
Diffstat (limited to 'audio/manager.c')
-rw-r--r--audio/manager.c51
1 files changed, 24 insertions, 27 deletions
diff --git a/audio/manager.c b/audio/manager.c
index bb7a457a..a73d7e0c 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -476,12 +476,12 @@ static void ag_io_cb(GIOChannel *chan, int err, const bdaddr_t *src,
svclass = HANDSFREE_SVCLASS_ID;
}
- device = manager_get_device(src, dst, NULL);
+ device = manager_get_device(src, dst);
if (!device)
goto drop;
if (!device->headset)
- device->headset = headset_init(device, svclass, remote_uuid);
+ btd_device_add_uuid(device->btd_dev, remote_uuid);
if (headset_get_state(device) > HEADSET_STATE_DISCONNECTED) {
debug("Refusing new connection since one already exists");
@@ -666,21 +666,18 @@ static int gateway_server_init(struct audio_adapter *adapter)
static int audio_probe(struct btd_device *device, GSList *uuids)
{
struct btd_adapter *adapter = device_get_adapter(device);
- const gchar *path = device_get_path(device);
bdaddr_t src, dst;
struct audio_device *audio_dev;
adapter_get_address(adapter, &src);
device_get_address(device, &dst);
- audio_dev = manager_get_device(&src, &dst, path);
+ audio_dev = manager_get_device(&src, &dst);
if (!audio_dev) {
debug("audio_probe: unable to get a device object");
return -1;
}
- audio_dev->btd_dev = device;
-
g_slist_foreach(uuids, (GFunc) handle_uuid, audio_dev);
return 0;
@@ -1048,44 +1045,44 @@ struct audio_device *manager_find_device(const bdaddr_t *bda, const char *interf
}
struct audio_device *manager_get_device(const bdaddr_t *src,
- const bdaddr_t *dst,
- const char *path)
+ const bdaddr_t *dst)
{
struct audio_device *dev;
+ struct btd_adapter *adapter;
+ struct btd_device *device;
+ char addr[18];
+ const char *path;
dev = manager_find_device(dst, NULL, FALSE);
if (dev)
return dev;
- if (!path) {
- struct btd_adapter *adapter;
- struct btd_device *device;
- char addr[18];
- ba2str(src, addr);
+ ba2str(src, addr);
- adapter = manager_find_adapter(src);
- if (!adapter) {
- error("Unable to get a btd_adapter object for %s",
- addr);
- return NULL;
- }
+ adapter = manager_find_adapter(src);
+ if (!adapter) {
+ error("Unable to get a btd_adapter object for %s",
+ addr);
+ return NULL;
+ }
- ba2str(dst, addr);
+ ba2str(dst, addr);
- device = adapter_get_device(connection, adapter, addr);
- if (!device) {
- error("Unable to get btd_device object for %s", addr);
- return NULL;
- }
-
- path = device_get_path(device);
+ device = adapter_get_device(connection, adapter, addr);
+ if (!device) {
+ error("Unable to get btd_device object for %s", addr);
+ return NULL;
}
+ path = device_get_path(device);
+
dev = device_register(connection, path, src, dst);
if (!dev)
return NULL;
+ dev->btd_dev = device;
+
devices = g_slist_append(devices, dev);
return dev;