summaryrefslogtreecommitdiffstats
path: root/audio/headset.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/headset.c')
-rw-r--r--audio/headset.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/audio/headset.c b/audio/headset.c
index edb323ee..38127a90 100644
--- a/audio/headset.c
+++ b/audio/headset.c
@@ -61,6 +61,9 @@
#define HEADSET_GAIN_SPEAKER 'S'
#define HEADSET_GAIN_MICROPHONE 'M'
+static char *str_state[] = {"DISCONNECTED", "CONNECTING", "CONNECTED",
+ "STREAM_STARTING", "STREAMING"};
+
struct pending_connect {
DBusMessage *msg;
GIOChannel *io;
@@ -453,14 +456,11 @@ static int sco_connect(struct device *device, struct pending_connect *c)
return -err;
}
- debug("SCO connect in progress");
c->io_id = g_io_add_watch(c->io,
G_IO_OUT | G_IO_NVAL | G_IO_ERR | G_IO_HUP,
(GIOFunc) sco_connect_cb, device);
- } else {
- debug("SCO connect succeeded with first try");
+ } else
do_callback = TRUE;
- }
headset_set_state(device, HEADSET_STATE_PLAY_IN_PROGRESS);
if (!g_slist_find(hs->pending, c))
@@ -508,7 +508,7 @@ static gboolean rfcomm_connect_cb(GIOChannel *chan, GIOCondition cond,
headset_set_state(device, HEADSET_STATE_CONNECTED);
- debug("Connected to %s", hs_address);
+ debug("%s: Connected to %s", device->path, hs_address);
g_io_add_watch(chan, G_IO_IN | G_IO_ERR | G_IO_HUP| G_IO_NVAL,
(GIOFunc) rfcomm_io_cb, device);
@@ -818,7 +818,8 @@ static int rfcomm_connect(struct device *device, struct pending_connect *c)
ba2str(&device->dst, address);
- debug("Connecting to %s channel %d", address, hs->rfcomm_ch);
+ debug("%s: Connecting to %s channel %d", device->path, address,
+ hs->rfcomm_ch);
sk = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
if (sk < 0) {
@@ -862,14 +863,10 @@ static int rfcomm_connect(struct device *device, struct pending_connect *c)
goto failed;
}
- debug("Connect in progress");
-
g_io_add_watch(c->io, G_IO_OUT | G_IO_NVAL,
(GIOFunc) rfcomm_connect_cb, device);
- } else {
- debug("Connect succeeded with first try");
+ } else
rfcomm_connect_cb(c->io, G_IO_OUT, device);
- }
return 0;
@@ -1280,6 +1277,9 @@ void headset_update(void *device, sdp_record_t *record, uint16_t svc)
{
struct headset *headset = ((struct device *) device)->headset;
+ if (!gateway_is_enabled(svc))
+ return;
+
switch (svc) {
case HANDSFREE_SVCLASS_ID:
if (headset->hfp_handle &&
@@ -1328,6 +1328,11 @@ struct headset *headset_init(void *device, sdp_record_t *record,
if (!record)
goto register_iface;
+ if (!gateway_is_enabled(svc)) {
+ g_free(hs);
+ return NULL;
+ }
+
switch (svc) {
case HANDSFREE_SVCLASS_ID:
hs->hfp_handle = record->handle;
@@ -1513,18 +1518,21 @@ void headset_set_state(void *device, headset_state_t state)
"Playing", DBUS_TYPE_INVALID);
if (hs->sp_gain >= 0) {
- snprintf(str, sizeof(str) - 1, "\r\n+VGS=%u\r\n", hs->sp_gain);
+ snprintf(str, sizeof(str) - 1, "\r\n+VGS=%u\r\n",
+ hs->sp_gain);
headset_send(hs, str);
}
if (hs->mic_gain >= 0) {
- snprintf(str, sizeof(str) - 1, "\r\n+VGM=%u\r\n", hs->sp_gain);
+ snprintf(str, sizeof(str) - 1, "\r\n+VGM=%u\r\n",
+ hs->sp_gain);
headset_send(hs, str);
}
break;
}
- debug("State changed %s: %d -> %d", dev->path, hs->state, state);
+ debug("State changed %s: %s -> %s", dev->path, str_state[hs->state],
+ str_state[state]);
hs->state = state;
}