[PATCH BlueZ v2 2/2] advertising: Fix resetting NO_BREDR flag

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>

When setting BT_AD_FLAG_LIMITED it was actually overwriting
BT_AD_FLAG_NO_BREDR as well so this moves the logic of detecting if the
instance needs to set BT_AD_FLAG_NO_BREDR to set_flags so it is always
updated when attempting to set any flags.
---
 src/advertising.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/advertising.c b/src/advertising.c
index 4c91586c2..076d591b6 100644
--- a/src/advertising.c
+++ b/src/advertising.c
@@ -675,6 +675,13 @@ static bool set_flags(struct btd_adv_client *client, uint8_t flags)
 	if (!btd_adapter_get_bredr(client->manager->adapter))
 		flags |= BT_AD_FLAG_NO_BREDR;
 
+	/* Set BR/EDR Not Supported if adapter is not discoverable but the
+	 * instance is.
+	 */
+	if ((flags & (BT_AD_FLAG_GENERAL | BT_AD_FLAG_LIMITED)) &&
+			!btd_adapter_get_discoverable(client->manager->adapter))
+		flags |= BT_AD_FLAG_NO_BREDR;
+
 	if (!bt_ad_add_flags(client->data, &flags, 1))
 		return false;
 
@@ -697,12 +704,9 @@ static bool parse_discoverable(DBusMessageIter *iter,
 
 	dbus_message_iter_get_basic(iter, &discoverable);
 
-	if (discoverable) {
-		/* Set BR/EDR Not Supported if adapter is no discoverable */
-		if (!btd_adapter_get_discoverable(client->manager->adapter))
-			flags = BT_AD_FLAG_NO_BREDR;
-		flags |= BT_AD_FLAG_GENERAL;
-	} else
+	if (discoverable)
+		flags = BT_AD_FLAG_GENERAL;
+	else
 		flags = 0x00;
 
 	if (!set_flags(client , flags))
-- 
2.25.3




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux