summaryrefslogtreecommitdiffstats
path: root/audio/manager.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2009-02-18 19:17:54 -0300
committerJohan Hedberg <johan.hedberg@nokia.com>2009-02-19 14:27:38 +0200
commitd048052453e0a8ea53061e68424f671df8c405a0 (patch)
treee66b94261ad103d0398e79eb914b4ca4a3e115b7 /audio/manager.c
parent2ecef94bcdd0324da979752352a286be85520059 (diff)
Make audio plugin to use BtIO API.
Diffstat (limited to 'audio/manager.c')
-rw-r--r--audio/manager.c96
1 files changed, 62 insertions, 34 deletions
diff --git a/audio/manager.c b/audio/manager.c
index 1c7c46b5..8ef04824 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -50,6 +50,7 @@
#include <gdbus.h>
#include "glib-helper.h"
+#include "btio.h"
#include "../src/manager.h"
#include "../src/adapter.h"
#include "../src/device.h"
@@ -423,21 +424,34 @@ static void auth_cb(DBusError *derr, void *user_data)
}
}
-static void ag_io_cb(GIOChannel *chan, int err, const bdaddr_t *src,
- const bdaddr_t *dst, gpointer data)
+static void ag_io_cb(GIOChannel *chan, GError *err, gpointer data)
{
- struct audio_adapter *adapter = data;
const char *server_uuid, *remote_uuid;
uint16_t svclass;
struct audio_device *device;
gboolean hfp_active;
+ bdaddr_t src, dst;
+ int perr;
+ GError *gerr = NULL;
+ uint8_t ch;
- if (err < 0) {
- error("accept: %s (%d)", strerror(-err), -err);
+ if (err) {
+ error("%s", err->message);
return;
}
- if (chan == adapter->hsp_ag_server) {
+ bt_io_get(chan, BT_IO_RFCOMM, &gerr,
+ BT_IO_OPT_SOURCE_BDADDR, &src,
+ BT_IO_OPT_DEST_BDADDR, &dst,
+ BT_IO_OPT_CHANNEL &ch,
+ BT_IO_OPT_INVALID);
+ if (gerr) {
+ error("%s", gerr->message);
+ g_clear_error(&gerr);
+ goto drop;
+ }
+
+ if (ch == DEFAULT_HS_AG_CHANNEL) {
hfp_active = FALSE;
server_uuid = HSP_AG_UUID;
remote_uuid = HSP_HS_UUID;
@@ -449,7 +463,7 @@ static void ag_io_cb(GIOChannel *chan, int err, const bdaddr_t *src,
svclass = HANDSFREE_SVCLASS_ID;
}
- device = manager_get_device(src, dst);
+ device = manager_get_device(&src, &dst);
if (!device)
goto drop;
@@ -478,10 +492,10 @@ static void ag_io_cb(GIOChannel *chan, int err, const bdaddr_t *src,
headset_set_state(device, HEADSET_STATE_CONNECT_IN_PROGRESS);
- err = btd_request_authorization(&device->src, &device->dst,
+ perr = btd_request_authorization(&device->src, &device->dst,
server_uuid, auth_cb, device);
- if (err < 0) {
- debug("Authorization denied: %s", strerror(-err));
+ if (perr < 0) {
+ debug("Authorization denied: %s", strerror(-perr));
headset_set_state(device, HEADSET_STATE_DISCONNECTED);
return;
}
@@ -490,11 +504,9 @@ static void ag_io_cb(GIOChannel *chan, int err, const bdaddr_t *src,
drop:
g_io_channel_close(chan);
- g_io_channel_unref(chan);
}
-static void hs_io_cb(GIOChannel *chan, int err, const bdaddr_t *src,
- const bdaddr_t *dst, void *data)
+static void hs_io_cb(GIOChannel *chan, GError *err, void *data)
{
/*Stub*/
return;
@@ -506,7 +518,8 @@ static int headset_server_init(struct audio_adapter *adapter)
sdp_record_t *record;
gboolean master = TRUE;
GError *err = NULL;
- uint32_t features, flags;
+ uint32_t features;
+ GIOChannel *io;
if (config) {
gboolean tmp;
@@ -520,16 +533,17 @@ static int headset_server_init(struct audio_adapter *adapter)
master = tmp;
}
- flags = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT;
-
- if (master)
- flags |= RFCOMM_LM_MASTER;
-
- adapter->hsp_ag_server = bt_rfcomm_listen(&adapter->src, chan, flags,
- ag_io_cb, adapter);
- if (!adapter->hsp_ag_server)
+ io = bt_io_listen(BT_IO_RFCOMM, ag_io_cb, NULL, adapter, NULL, &err,
+ BT_IO_OPT_SOURCE_BDADDR, &adapter->src,
+ BT_IO_OPT_CHANNEL, chan,
+ BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
+ BT_IO_OPT_MASTER, master,
+ BT_IO_OPT_INVALID);
+ if (!io)
goto failed;
+ adapter->hsp_ag_server = io;
+
record = hsp_ag_record(chan);
if (!record) {
error("Unable to allocate new service record");
@@ -550,11 +564,17 @@ static int headset_server_init(struct audio_adapter *adapter)
chan = DEFAULT_HF_AG_CHANNEL;
- adapter->hfp_ag_server = bt_rfcomm_listen(&adapter->src, chan, flags,
- ag_io_cb, adapter);
- if (!adapter->hfp_ag_server)
+ io = bt_io_listen(BT_IO_RFCOMM, ag_io_cb, NULL, adapter, NULL, &err,
+ BT_IO_OPT_SOURCE_BDADDR, &adapter->src,
+ BT_IO_OPT_CHANNEL, chan,
+ BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
+ BT_IO_OPT_MASTER, master,
+ BT_IO_OPT_INVALID);
+ if (!io)
goto failed;
+ adapter->hfp_ag_server = io;
+
record = hfp_ag_record(chan, features);
if (!record) {
error("Unable to allocate new service record");
@@ -571,12 +591,16 @@ static int headset_server_init(struct audio_adapter *adapter)
return 0;
failed:
+ error("%s", err->message);
+ g_clear_error(&err);
if (adapter->hsp_ag_server) {
+ g_io_channel_close(adapter->hsp_ag_server);
g_io_channel_unref(adapter->hsp_ag_server);
adapter->hsp_ag_server = NULL;
}
if (adapter->hfp_ag_server) {
+ g_io_channel_close(adapter->hfp_ag_server);
g_io_channel_unref(adapter->hfp_ag_server);
adapter->hfp_ag_server = NULL;
}
@@ -590,7 +614,7 @@ static int gateway_server_init(struct audio_adapter *adapter)
sdp_record_t *record;
gboolean master = TRUE;
GError *err = NULL;
- uint32_t flags;
+ GIOChannel *io;
if (config) {
gboolean tmp;
@@ -604,15 +628,19 @@ static int gateway_server_init(struct audio_adapter *adapter)
master = tmp;
}
- flags = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT;
-
- if (master)
- flags |= RFCOMM_LM_MASTER;
-
- adapter->hsp_hs_server = bt_rfcomm_listen(&adapter->src, chan, flags,
- hs_io_cb, adapter);
- if (!adapter->hsp_hs_server)
+ io = bt_io_listen(BT_IO_RFCOMM, hs_io_cb, NULL, adapter, NULL, &err,
+ BT_IO_OPT_SOURCE_BDADDR, &adapter->src,
+ BT_IO_OPT_CHANNEL, chan,
+ BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
+ BT_IO_OPT_MASTER, master,
+ BT_IO_OPT_INVALID);
+ if (!io) {
+ error("%s", err->message);
+ g_error_free(err);
return -1;
+ }
+
+ adapter->hsp_hs_server = io;
record = hsp_hs_record(chan);
if (!record) {