From: Claudio Takahasi Date: Tue, 4 Oct 2011 18:30:46 +0000 (-0300) Subject: Add set auto connect in device X-Git-Tag: android-x86-4.4-r3~14065 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=64e1a59a8917f25d6b6eda8e83438d91087b823e;p=android-x86%2Fexternal-bluetooth-bluez.git Add set auto connect in device Skeleton of automatic connections driven by platform/user event. Two layers will manage connections: Profiles can request on demand connections registering ATTIO connection callbacks(one attempt) for a given device and platform/user action can trigger automatic connections for devices with ATTIO callbacks registered. --- diff --git a/src/adapter.c b/src/adapter.c index b3622cbd9..605a9f2fb 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -3417,6 +3417,23 @@ int btd_adapter_switch_offline(struct btd_adapter *adapter) return 0; } +static void set_auto_connect(gpointer data, gpointer user_data) +{ + struct btd_device *device = data; + + device_set_auto_connect(device, TRUE); +} + +void btd_adapter_enable_auto_connect(struct btd_adapter *adapter) +{ + if (!adapter->up) + return; + + DBG("Enabling automatic connections"); + + g_slist_foreach(adapter->devices, set_auto_connect, NULL); +} + void btd_adapter_register_pin_cb(struct btd_adapter *adapter, btd_adapter_pin_cb_t cb) { diff --git a/src/adapter.h b/src/adapter.h index 7ef0af062..d30e82a56 100644 --- a/src/adapter.h +++ b/src/adapter.h @@ -163,6 +163,7 @@ gboolean adapter_powering_down(struct btd_adapter *adapter); int btd_adapter_restore_powered(struct btd_adapter *adapter); int btd_adapter_switch_online(struct btd_adapter *adapter); int btd_adapter_switch_offline(struct btd_adapter *adapter); +void btd_adapter_enable_auto_connect(struct btd_adapter *adapter); typedef ssize_t (*btd_adapter_pin_cb_t) (struct btd_adapter *adapter, struct btd_device *dev, char *out); diff --git a/src/device.c b/src/device.c index 393d27646..5243797f0 100644 --- a/src/device.c +++ b/src/device.c @@ -151,6 +151,7 @@ struct btd_device { gboolean paired; gboolean blocked; gboolean bonded; + gboolean auto_connect; gboolean authorizing; gint ref; @@ -2005,6 +2006,20 @@ void device_set_bonded(struct btd_device *device, gboolean bonded) device->bonded = bonded; } +void device_set_auto_connect(struct btd_device *device, gboolean enable) +{ + char addr[18]; + + if (!device) + return; + + ba2str(&device->bdaddr, addr); + + DBG("%s auto connect: %d", addr, enable); + + device->auto_connect = enable; +} + void device_set_type(struct btd_device *device, device_type_t type) { if (!device) diff --git a/src/device.h b/src/device.h index 2e17a83e6..1ea5ce420 100644 --- a/src/device.h +++ b/src/device.h @@ -77,6 +77,7 @@ void device_set_paired(struct btd_device *device, gboolean paired); void device_set_temporary(struct btd_device *device, gboolean temporary); void device_set_type(struct btd_device *device, device_type_t type); void device_set_bonded(struct btd_device *device, gboolean bonded); +void device_set_auto_connect(struct btd_device *device, gboolean enable); gboolean device_is_connected(struct btd_device *device); DBusMessage *device_create_bonding(struct btd_device *device, DBusConnection *conn, DBusMessage *msg,