device: Fix to report Paired event after services resolved in LE bond 28/319928/2 accepted/tizen/7.0/unified/20250220.162436
authorSohyeon Choi <shss.choi@samsung.com>
Tue, 18 Feb 2025 03:58:50 +0000 (12:58 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Thu, 20 Feb 2025 01:45:52 +0000 (10:45 +0900)
- 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 <shss.choi@samsung.com>
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
src/device.c
src/gatt-client.c

index a42999cef4f27df2c2e16dba30e8e0b03624cf38..36aff7ea8943d4abf1a8e5c3bbb09bd12eb76fc9 100644 (file)
@@ -1867,8 +1867,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;
        }
 
@@ -3539,6 +3539,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;
@@ -4080,6 +4083,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;
@@ -6214,7 +6223,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 */
@@ -9845,9 +9862,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;
index 4676a9b262761d3c1d6a311969066531f2923ee9..0ab1fa95ebf595d4f6bfd62f7a0e3dfbf4fb8c0f 100644 (file)
@@ -2736,8 +2736,6 @@ static gboolean check_all_chrcs_ready(gpointer user_data)
 
        count = 0;
 
-       device_close_le_bonding_io(client->device);
-
        return FALSE;
 }
 #endif