From c68240348045998649949f2f47ad44c0e583a3c9 Mon Sep 17 00:00:00 2001 From: Sohyeon Choi Date: Tue, 18 Feb 2025 12:58:50 +0900 Subject: [PATCH] device: Fix to report Paired event after services resolved in LE bond - emit Paired after LE services resolving done in LE bond procedure. - do not set GATT connected status when the connection is for LE bond. Change-Id: I270f7042388eec718a398716a57c8b4cf73ca683 Signed-off-by: Sohyeon Choi Signed-off-by: Wootak Jung --- src/device.c | 34 +++++++++++++++++++++++++++++----- src/gatt-client.c | 2 -- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/device.c b/src/device.c index f8d3e5bd..712bdfff 100644 --- a/src/device.c +++ b/src/device.c @@ -1938,8 +1938,8 @@ void device_close_le_bonding_io(struct btd_device *device) return; } - if (!device->gatt_connected) { - DBG("GATT connection process is still ongoing"); + if (!device->le_state.svc_resolved) { + DBG("GATT service discovery process is still ongoing"); return; } @@ -3648,6 +3648,9 @@ static void device_svc_resolved(struct btd_device *dev, uint8_t browse_type, dev->eir_uuids = NULL; if (dev->pending_paired) { +#ifdef TIZEN_FEATURE_BLUEZ_MODIFY + DBG("service resolved. report it"); +#endif g_dbus_emit_property_changed(dbus_conn, dev->path, DEVICE_INTERFACE, "Paired"); dev->pending_paired = false; @@ -4290,6 +4293,12 @@ void device_set_gatt_connected(struct btd_device *device, gboolean connected) return; } + if (device->bonding_io) { + DBG("current gatt connection is for LE bond"); + device_close_le_bonding_io(device); + return; + } + if (device->gatt_connected == connected) { error("same state change for gatt_connected : %d", connected); return; @@ -6544,7 +6553,15 @@ next: load_services(device, uuids); /* Discovered services restored from storage */ +#ifndef TIZEN_FEATURE_BLUEZ_MODIFY device->bredr_state.svc_resolved = true; +#else + DBG("Discovered services restored from storage.. addr type (%d)", device->bdaddr_type); + if (device->bdaddr_type == BDADDR_BREDR) + device->bredr_state.svc_resolved = true; + else + device->le_state.svc_resolved = true; +#endif } /* Load device id */ @@ -9952,9 +9969,16 @@ void device_bonding_complete(struct btd_device *device, uint8_t bdaddr_type, DBG("Just overwrite Link key"); } else if (bdaddr_type == BDADDR_LE_RANDOM || bdaddr_type == BDADDR_LE_PUBLIC) { - DBG("Long Term Key has been changed. Report it"); - g_dbus_emit_property_changed(dbus_conn, device->path, - DEVICE_INTERFACE, "Paired"); + DBG("Long Term Key has been changed"); + if (device->le_state.svc_resolved) { + DBG("LE service resolved. Report it"); + g_dbus_emit_property_changed(dbus_conn, device->path, + DEVICE_INTERFACE, "Paired"); + device->pending_paired = false; + } else { + DBG("LE services not resolved yet. Wait"); + device->pending_paired = true; + } } #endif /* TIZEN_FEATURE_BLUEZ_MODIFY */ return; diff --git a/src/gatt-client.c b/src/gatt-client.c index d577e401..b14578a8 100644 --- a/src/gatt-client.c +++ b/src/gatt-client.c @@ -2725,8 +2725,6 @@ static gboolean check_all_chrcs_ready(gpointer user_data) count = 0; - device_close_le_bonding_io(client->device); - return FALSE; } #endif -- 2.34.1