summaryrefslogtreecommitdiffstats
path: root/audio/manager.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2007-06-27 17:03:07 +0000
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2007-06-27 17:03:07 +0000
commit2a2c204cd0e4bcf0a603ba72be9a50203a817b54 (patch)
tree89877d800ecb1051ce27440c34524ec7cad1a961 /audio/manager.c
parentc205cc889023e733e56365e82dfbaad2d2b46942 (diff)
Make storage to also save rfcomm channel, minor fixes to alsa plugin and fixes for service shutdown.
Diffstat (limited to 'audio/manager.c')
-rw-r--r--audio/manager.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/audio/manager.c b/audio/manager.c
index 0ea8a99b..8ca57100 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -31,7 +31,6 @@
#include <errno.h>
#include <unistd.h>
#include <stdint.h>
-#include <assert.h>
#include <sys/stat.h>
#include <dirent.h>
#include <ctype.h>
@@ -187,7 +186,7 @@ static void handle_record(sdp_record_t *record, struct device *device)
headset_update(device, record, uuid16);
else
device->headset = headset_init(device,
- record, uuid16);
+ record, uuid16, -1);
break;
case HEADSET_AGW_SVCLASS_ID:
debug("Found Headset AG record");
@@ -198,7 +197,7 @@ static void handle_record(sdp_record_t *record, struct device *device)
headset_update(device, record, uuid16);
else
device->headset = headset_init(device,
- record, uuid16);
+ record, uuid16, -1);
break;
case HANDSFREE_AGW_SVCLASS_ID:
debug("Found Handsfree AG record");
@@ -638,7 +637,7 @@ struct device *manager_device_connected(bdaddr_t *bda)
}
if (!device->headset)
- device->headset = headset_init(device, NULL, 0);
+ device->headset = headset_init(device, NULL, 0, -1);
if (!device->headset)
return NULL;
@@ -1102,8 +1101,15 @@ static void parse_stored_devices(char *key, char *value, void *data)
if (!device)
return;
- if (strcmp(value, "headset") == 0)
- device->headset = headset_init(device, NULL, 0);
+ if (strncmp(value, "headset", strlen("headset")) == 0) {
+ int channel = -1;
+ char *ptr;
+
+ if ((ptr = strchr(value, '#')))
+ channel = strtol(ptr+1, NULL, 10);
+
+ device->headset = headset_init(device, NULL, 0, channel);
+ }
add_device(device);
}
@@ -1167,10 +1173,21 @@ static void register_stored(void)
closedir(dir);
}
+static void manager_unregister(DBusConnection *conn, void *data)
+{
+ info("Unregistered manager path");
+
+ if (devices) {
+ g_slist_foreach(devices, (GFunc)remove_device, NULL);
+ g_slist_free(devices);
+ devices = NULL;
+ }
+}
+
int audio_init(DBusConnection *conn)
{
if (!dbus_connection_create_object_path(conn, AUDIO_MANAGER_PATH,
- NULL, NULL)) {
+ NULL, manager_unregister)) {
error("D-Bus failed to register %s path", AUDIO_MANAGER_PATH);
return -1;
}
@@ -1197,9 +1214,7 @@ int audio_init(DBusConnection *conn)
void audio_exit(void)
{
- g_slist_foreach(devices, (GFunc) remove_device, NULL);
- g_slist_free(devices);
- devices = NULL;
+ dbus_connection_destroy_object_path(connection, AUDIO_MANAGER_PATH);
dbus_connection_unref(connection);