From 83400b1009ec0d62b5ba2805ed1d6189ed7b8678 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Tue, 29 Jan 2013 15:55:16 -0600 Subject: [PATCH] core: Allow Device1.Connect/Disconnect to control auto connection This patch makes it possible to disable the LE auto connections temporarily through Device1.Disconnect and re-enable them by calling Device1.Connect(). --- src/device.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/device.c b/src/device.c index 753e03a36..54a84464e 100644 --- a/src/device.c +++ b/src/device.c @@ -185,6 +185,7 @@ struct btd_device { gboolean blocked; gboolean bonded; gboolean auto_connect; + gboolean disable_auto_connect; gboolean general_connect; bool legacy; @@ -1025,6 +1026,13 @@ static DBusMessage *disconnect(DBusConnection *conn, DBusMessage *msg, if (!device->connected) return btd_error_not_connected(msg); + /* + * Disable connections through passive scanning until + * Device1.Connect is called + */ + if (device->auto_connect) + device->disable_auto_connect = TRUE; + device_request_disconnect(device, msg); return NULL; @@ -1220,6 +1228,8 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg, device_set_temporary(dev, FALSE); + dev->disable_auto_connect = FALSE; + err = device_connect_le(dev); if (err < 0) return btd_error_failed(msg, strerror(-err)); @@ -3487,6 +3497,9 @@ void device_set_auto_connect(struct btd_device *device, gboolean enable) bool device_get_auto_connect(struct btd_device *device) { + if (device->disable_auto_connect) + return false; + return device->auto_connect; } -- 2.47.3