41 lines
1.4 KiB
Diff
41 lines
1.4 KiB
Diff
From 727cf85d5c710193df9b386b2a87afccbbc766ff Mon Sep 17 00:00:00 2001
|
|
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
|
|
Date: Fri, 12 Aug 2016 11:20:10 +0300
|
|
Subject: [PATCH 2/7] core/device: Fix not connecting services properly
|
|
|
|
Device.Connect shall check if the service discovery is pending or no
|
|
service have been connected yet before switching to LE otherwise these
|
|
services may never be connected.
|
|
|
|
Upstream-Status: Inappropriate [DEY specific]
|
|
---
|
|
src/device.c | 15 ++++++++++++---
|
|
1 file changed, 12 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/device.c b/src/device.c
|
|
index 7f40af44cd01..460a9980fc63 100644
|
|
--- a/src/device.c
|
|
+++ b/src/device.c
|
|
@@ -1779,9 +1779,18 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg,
|
|
struct btd_device *dev = user_data;
|
|
uint8_t bdaddr_type;
|
|
|
|
- if (dev->bredr_state.connected)
|
|
- bdaddr_type = dev->bdaddr_type;
|
|
- else if (dev->le_state.connected && dev->bredr)
|
|
+ if (dev->bredr_state.connected) {
|
|
+ /*
|
|
+ * Check if services have been resolved and there is at list
|
|
+ * one connected before switching to connect LE.
|
|
+ */
|
|
+ if (dev->bredr_state.svc_resolved &&
|
|
+ find_service_with_state(dev->services,
|
|
+ BTD_SERVICE_STATE_CONNECTED))
|
|
+ bdaddr_type = dev->bdaddr_type;
|
|
+ else
|
|
+ bdaddr_type = BDADDR_BREDR;
|
|
+ } else if (dev->le_state.connected && dev->bredr)
|
|
bdaddr_type = BDADDR_BREDR;
|
|
else
|
|
bdaddr_type = select_conn_bearer(dev);
|