diff --git a/src/adapter.c b/src/adapter.c
index f73c740..06ba78c 100644
--- a/src/adapter.c
+++ b/src/adapter.c
if (adapter->discovering)
return TRUE;
- /* TODO: call device connect callback */
+ device_att_connect(device);
return FALSE;
}
diff --git a/src/device.c b/src/device.c
index 77215f1..6be4dc3 100644
--- a/src/device.c
+++ b/src/device.c
#define DISCONNECT_TIMER 2
#define DISCOVERY_TIMER 2
-#define AUTO_CONNECTION_INTERVAL 5 /* Next connection attempt */
-
struct btd_disconnect_data {
guint id;
disconnect_watch watch;
attio->dcfunc(attio->user_data);
}
-static void att_connect_dispatched(gpointer user_data)
-{
- struct btd_device *device = user_data;
-
- device->auto_id = 0;
-}
-
-static gboolean att_connect(gpointer user_data);
-
static gboolean attrib_disconnected_cb(GIOChannel *io, GIOCondition cond,
gpointer user_data)
{
if (device->auto_connect == FALSE || err != ETIMEDOUT)
goto done;
- device->auto_id = g_timeout_add_seconds_full(G_PRIORITY_DEFAULT_IDLE,
- AUTO_CONNECTION_INTERVAL,
- att_connect, device,
- att_connect_dispatched);
+ adapter_connect_list_add(device_get_adapter(device), device);
done:
attio_cleanup(device);
if (device->auto_connect == FALSE)
return;
- device->auto_id = g_timeout_add_seconds_full(G_PRIORITY_DEFAULT_IDLE,
- AUTO_CONNECTION_INTERVAL,
- att_connect, device,
- att_connect_dispatched);
-
+ adapter_connect_list_add(device_get_adapter(device), device);
DBG("Enabling automatic connections");
}
g_slist_foreach(device->attios, attio_connected, device->attrib);
}
-static gboolean att_connect(gpointer user_data)
+gboolean device_att_connect(gpointer user_data)
{
struct btd_device *device = user_data;
struct btd_adapter *adapter = device->adapter;
DBG("temporary %d", temporary);
+ if (temporary)
+ adapter_connect_list_remove(device_get_adapter(device), device);
+
device->temporary = temporary;
}
void device_set_auto_connect(struct btd_device *device, gboolean enable)
{
+ struct btd_adapter *adapter = device_get_adapter(device);
char addr[18];
if (!device)
/* Disabling auto connect */
if (enable == FALSE) {
- if (device->auto_id)
- g_source_remove(device->auto_id);
+ adapter_connect_list_remove(adapter, device);
return;
}
- /* Enabling auto connect */
- if (device->auto_id != 0)
- return;
-
if (device->attrib) {
DBG("Already connected");
return;
if (device->attios == NULL && device->attios_offline == NULL)
return;
- device->auto_id = g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,
- att_connect, device,
- att_connect_dispatched);
+ /* Enabling auto connect */
+ adapter_connect_list_add(adapter, device);
}
static gboolean start_discovery(gpointer user_data)
device->attios = g_slist_append(device->attios, attio);
- if (device->auto_id == 0)
- device->auto_id = g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,
- att_connect, device,
- att_connect_dispatched);
+ adapter_connect_list_add(device_get_adapter(device), device);
return attio->id;
}
diff --git a/src/device.h b/src/device.h
index 9426ef8..0195a9a 100644
--- a/src/device.h
+++ b/src/device.h
void device_set_pnpid(struct btd_device *device, uint8_t vendor_id_src,
uint16_t vendor_id, uint16_t product_id,
uint16_t product_ver);
+gboolean device_att_connect(gpointer user_data);