mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2025-01-15 16:03:23 +08:00
android/gatt: Use kernel auto connect feature if possible
This commit is contained in:
parent
058e62bee2
commit
ce60a906bd
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user