From 1eddeb66e8254e2e15f17f3071cc92bab0a9704c Mon Sep 17 00:00:00 2001 From: Claudio Takahasi Date: Wed, 6 Jul 2011 18:23:42 -0300 Subject: [PATCH] Enable ATT re-connection If the link is lost and there is at least one connection callback registered the timer for ATT automatic connection shall be enabled. --- src/device.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c index 5f32e9118..1f452115b 100644 --- a/src/device.c +++ b/src/device.c @@ -1603,6 +1603,8 @@ static void attio_disconnected(gpointer data, gpointer user_data) attio->dcfunc(attio->user_data); } +static gboolean att_auto_connect(gpointer user_data); + static void attrib_destroyed(gpointer user_data) { struct btd_device *device = user_data; @@ -1610,6 +1612,11 @@ static void attrib_destroyed(gpointer user_data) device->attrib = NULL; g_slist_foreach(device->attios, attio_disconnected, NULL); + + if (device->attioid == 0 && device->attios != NULL) + device->attioid = g_timeout_add_seconds(AUTOCONNECT_INTERVAL, + att_auto_connect, + device); } static void primary_cb(GSList *services, guint8 status, gpointer user_data) @@ -1671,6 +1678,11 @@ static void att_connect_cb(GIOChannel *io, GError *gerr, gpointer user_data) return; } + if (device->attioid) { + g_source_remove(device->attioid); + device->attioid = 0; + } + device->attrib = g_attrib_new(io); g_attrib_set_destroy_function(device->attrib, attrib_destroyed, device); @@ -2559,7 +2571,7 @@ guint btd_device_add_attio_callback(struct btd_device *device, if (device->attrib && cfunc) cfunc(device->attrib, user_data); - if (device->attioid == 0) + if (device->attioid == 0 && device->attrib == NULL) device->attioid = g_timeout_add_seconds(AUTOCONNECT_INTERVAL, att_auto_connect, device); -- 2.47.3