summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Rymanowski <lukasz.rymanowski@tieto.com>2014-08-04 12:34:18 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2014-08-04 14:28:51 +0300
commitce60a906bd4f71b862345c25ac1549c429deda44 (patch)
tree350369d3eb8cbc6030ea8bff9247710506393e80
parent058e62bee26fc97be45080879d764e85ac6f530f (diff)
downloadbluez-ce60a906bd4f71b862345c25ac1549c429deda44.tar.gz
android/gatt: Use kernel auto connect feature if possible
-rw-r--r--android/gatt.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/android/gatt.c b/android/gatt.c
index 448bcb8e1..89748d223 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -1383,6 +1383,8 @@ static void connect_cb(GIOChannel *io, GError *gerr, gpointer user_data)
device_set_state(dev, DEVICE_CONNECTED);
+ bt_auto_connect_remove(&dev->bdaddr);
+
/* Send exchange mtu request as we assume being client and server */
/* TODO: Dont exchange mtu if no client apps */
send_exchange_mtu_request(dev);
@@ -1529,6 +1531,10 @@ static void le_device_found_handler(const bdaddr_t *addr, uint8_t addr_type,
sizeof(*ev) + ev->len, ev);
connect:
+ /* We use auto connect feature from kernel if possible */
+ if (bt_kernel_conn_control())
+ return;
+
dev = find_device_by_addr(addr);
if (!dev) {
if (!bonded)
@@ -1749,6 +1755,19 @@ static int connect_bredr(struct gatt_device *dev)
return 0;
}
+static bool auto_connect(struct gatt_device *dev)
+{
+ bool err;
+
+ err = bt_auto_connect_add(&dev->bdaddr);
+ if (!err)
+ return false;
+
+ device_set_state(dev, DEVICE_CONNECT_INIT);
+
+ return true;
+}
+
static bool trigger_connection(struct app_connection *connection)
{
bool ret;
@@ -1763,6 +1782,13 @@ static bool trigger_connection(struct app_connection *connection)
BDADDR_BREDR)
return connect_bredr(connection->device) == 0;
+ /*
+ * For LE devices use auto connect feature if possible
+ * Note: Connection state is handled inside auto_connect() func
+ */
+ if (bt_kernel_conn_control())
+ return auto_connect(connection->device);
+
/* Trigger discovery if not already started */
if (!scanning) {
if (!bt_le_discovery_start()) {
@@ -1771,6 +1797,7 @@ static bool trigger_connection(struct app_connection *connection)
break;
}
}
+
ret = true;
device_set_state(connection->device, DEVICE_CONNECT_INIT);
break;
@@ -6091,7 +6118,9 @@ static void connect_confirm(GIOChannel *io, void *user_data)
dev->bdaddr_type = dst_type;
} else {
- if (dev->state != DEVICE_DISCONNECTED) {
+ if ((dev->state != DEVICE_DISCONNECTED) &&
+ !(dev->state == DEVICE_CONNECT_INIT &&
+ bt_kernel_conn_control())) {
char addr[18];
ba2str(&dst, addr);