summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Tyszkowski <jakub.tyszkowski@tieto.com>2014-11-06 10:30:38 +0100
committerSzymon Janc <szymon.janc@tieto.com>2014-11-09 20:40:44 +0100
commite06725834c5282fe393fb24ece7a0aaf4000517d (patch)
treea93af7f9308565c01bb9b7010430a0ba5951b3a8
parent7ad8f2d33ecf88c5e18d529dc6b8da69fbf55cb8 (diff)
downloadbluez-e06725834c5282fe393fb24ece7a0aaf4000517d.tar.gz
android/gatt: Use proper identity address for auto connect
We should behave the same as when we connect using active scan.
-rw-r--r--android/gatt.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/android/gatt.c b/android/gatt.c
index 8b6810c71..2fad5ee58 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -584,8 +584,24 @@ static void device_set_state(struct gatt_device *dev, uint32_t state)
static bool auto_connect_le(struct gatt_device *dev)
{
/* For LE devices use auto connect feature if possible */
- if (bt_kernel_conn_control())
- return bt_auto_connect_add(&dev->bdaddr);
+ if (bt_kernel_conn_control()) {
+ const bdaddr_t *bdaddr;
+
+ /*
+ * If address type is random it might be that IRK was received
+ * and random is just for faking Android Framework. ID address
+ * should be used for connection if present.
+ */
+ if (dev->bdaddr_type == BDADDR_LE_RANDOM) {
+ bdaddr = bt_get_id_addr(&dev->bdaddr, NULL);
+ if (!bdaddr)
+ return -EINVAL;
+ } else {
+ bdaddr = &dev->bdaddr;
+ }
+
+ return bt_auto_connect_add(bdaddr);
+ }
/* Trigger discovery if not already started */
if (!scanning) {