From aa0b1a0c10a6a18ef35f5da1ca598d3d83603546 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Fri, 12 Aug 2016 11:20:10 +0300 Subject: [PATCH] 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. --- src/device.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/device.c b/src/device.c index 6c6be92e9..c103bb2a6 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); -- 2.47.3