summaryrefslogtreecommitdiffstats
path: root/audio/headset.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/headset.c')
-rw-r--r--audio/headset.c52
1 files changed, 33 insertions, 19 deletions
diff --git a/audio/headset.c b/audio/headset.c
index 9fdabe4c..b83ce906 100644
--- a/audio/headset.c
+++ b/audio/headset.c
@@ -58,6 +58,7 @@
#include "telephony.h"
#include "headset.h"
#include "glib-helper.h"
+#include "btio.h"
#include "dbus-common.h"
#include "../src/adapter.h"
#include "../src/device.h"
@@ -509,16 +510,15 @@ static gboolean ring_timer_cb(gpointer data)
return TRUE;
}
-static void sco_connect_cb(GIOChannel *chan, int err, const bdaddr_t *src,
- const bdaddr_t *dst, gpointer user_data)
+static void sco_connect_cb(GIOChannel *chan, GError *err, gpointer user_data)
{
int sk;
struct audio_device *dev = user_data;
struct headset *hs = dev->headset;
struct pending_connect *p = hs->pending;
- if (err < 0) {
- error("connect(): %s (%d)", strerror(-err), -err);
+ if (err) {
+ error("%s", err->message);
if (p->msg)
error_connection_attempt_failed(dev->conn, p->msg, p->err);
@@ -564,17 +564,24 @@ static int sco_connect(struct audio_device *dev, headset_stream_cb_t cb,
void *user_data, unsigned int *cb_id)
{
struct headset *hs = dev->headset;
- int err;
+ GError *err = NULL;
+ GIOChannel *io;
if (hs->state != HEADSET_STATE_CONNECTED)
return -EINVAL;
- err = bt_sco_connect(&dev->src, &dev->dst, sco_connect_cb, dev);
- if (err < 0) {
- error("connect: %s (%d)", strerror(-err), -err);
- return err;
+ io = bt_io_connect(BT_IO_SCO, sco_connect_cb, dev, NULL, &err,
+ BT_IO_OPT_SOURCE_BDADDR, &dev->src,
+ BT_IO_OPT_DEST_BDADDR, &dev->dst,
+ BT_IO_OPT_INVALID);
+ if (!io) {
+ error("%s", err->message);
+ g_error_free(err);
+ return -EIO;
}
+ g_io_channel_unref(io);
+
headset_set_state(dev, HEADSET_STATE_PLAY_IN_PROGRESS);
pending_connect_init(hs, HEADSET_STATE_PLAYING);
@@ -1221,16 +1228,15 @@ static gboolean sco_cb(GIOChannel *chan, GIOCondition cond,
return FALSE;
}
-static void rfcomm_connect_cb(GIOChannel *chan, int err, const bdaddr_t *src,
- const bdaddr_t *dst, gpointer user_data)
+static void rfcomm_connect_cb(GIOChannel *chan, GError *err, gpointer user_data)
{
struct audio_device *dev = user_data;
struct headset *hs = dev->headset;
struct pending_connect *p = hs->pending;
char hs_address[18];
- if (err < 0) {
- error("connect(): %s (%d)", strerror(-err), -err);
+ if (err) {
+ error("%s", err->message);
goto failed;
}
@@ -1397,7 +1403,8 @@ static int rfcomm_connect(struct audio_device *dev, headset_stream_cb_t cb,
{
struct headset *hs = dev->headset;
char address[18];
- int err;
+ GError *err = NULL;
+ GIOChannel *io;
if (hs->rfcomm_ch < 0)
return get_records(dev, cb, user_data, cb_id);
@@ -1407,13 +1414,20 @@ static int rfcomm_connect(struct audio_device *dev, headset_stream_cb_t cb,
debug("%s: Connecting to %s channel %d", dev->path, address,
hs->rfcomm_ch);
- err = bt_rfcomm_connect(&dev->src, &dev->dst, hs->rfcomm_ch,
- rfcomm_connect_cb, dev);
- if (err < 0) {
- error("connect() failed: %s (%d)", strerror(-err), -err);
- return err;
+ io = bt_io_connect(BT_IO_RFCOMM, rfcomm_connect_cb, dev,
+ NULL, &err,
+ BT_IO_OPT_SOURCE_BDADDR, &dev->src,
+ BT_IO_OPT_DEST_BDADDR, &dev->dst,
+ BT_IO_OPT_CHANNEL, hs->rfcomm_ch,
+ BT_IO_OPT_INVALID);
+ if (!io) {
+ error("%s", err->message);
+ g_error_free(err);
+ return -EIO;
}
+ g_io_channel_unref(io);
+
headset_set_state(dev, HEADSET_STATE_CONNECT_IN_PROGRESS);
pending_connect_init(hs, HEADSET_STATE_CONNECTED);