device: Fix to report Paired event after services resolved in LE bond 30/320630/1 accepted/tizen/unified/20250306.045605 accepted/tizen/unified/x/20250306.064053
authorSohyeon Choi <shss.choi@samsung.com>
Tue, 18 Feb 2025 03:58:50 +0000 (12:58 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Wed, 5 Mar 2025 05:23:34 +0000 (14:23 +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 f8d3e5bdc15fe4510334a389cb39943df3ba5809..712bdfff8c4f9f9621165eae07b53347e8f66458 100644 (file)
@@ -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;
index d577e4010fe8314baf56e8c559f2e9a5792e8ade..b14578a8ddfddebbe64ececd3abe26822410bada 100644 (file)
@@ -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