diff --git a/android/a2dp.c b/android/a2dp.c
index e778d56..9b168ed 100644
--- a/android/a2dp.c
+++ b/android/a2dp.c
#define L2CAP_PSM_AVDTP 0x19
#define SVC_HINT_CAPTURING 0x08
+#define IDLE_TIMEOUT 1
static GIOChannel *server = NULL;
static GSList *devices = NULL;
uint8_t state;
GIOChannel *io;
struct avdtp *session;
+ guint idle_id;
};
struct a2dp_setup {
static void a2dp_device_free(struct a2dp_device *dev)
{
+ if (dev->idle_id > 0)
+ g_source_remove(dev->idle_id);
+
if (dev->session)
avdtp_unref(dev->session);
setup->preset = preset;
setup->stream = stream;
setups = g_slist_append(setups, setup);
+
+ if (dev->idle_id > 0) {
+ g_source_remove(dev->idle_id);
+ dev->idle_id = 0;
+ }
}
static int select_configuration(struct a2dp_device *dev,
avdtp_shutdown(session);
}
+static gboolean idle_timeout(gpointer user_data)
+{
+ struct a2dp_device *dev = user_data;
+ int err;
+
+ dev->idle_id = 0;
+
+ err = avdtp_discover(dev->session, discover_cb, dev);
+ if (err == 0)
+ return FALSE;
+
+ error("avdtp_discover: %s", strerror(-err));
+ bt_a2dp_notify_state(dev, HAL_A2DP_STATE_DISCONNECTED);
+
+ return FALSE;
+}
+
static void signaling_connect_cb(GIOChannel *chan, GError *err,
gpointer user_data)
{
error("avdtp_discover: %s", strerror(-perr));
goto failed;
}
- }
+ } else /* Init idle timeout to discover */
+ dev->idle_id = g_timeout_add_seconds(IDLE_TIMEOUT, idle_timeout,
+ dev);
return;