android/gatt: Use kernel auto connect feature if possible

This commit is contained in:
Lukasz Rymanowski 2014-08-04 12:34:18 +02:00 committed by Johan Hedberg
parent 058e62bee2
commit ce60a906bd

View File

@ -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);