diff options
Diffstat (limited to 'audio/headset.c')
-rw-r--r-- | audio/headset.c | 52 |
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); |