* [PATCH BlueZ v2 1/2] advertising: add property with advertisement Instance
2026-05-31 10:17 [PATCH BlueZ v2 0/2] advertising: add property with advertisement Instance Michal Dzik
@ 2026-05-31 10:17 ` Michal Dzik
2026-05-31 11:33 ` bluez.test.bot
2026-05-31 10:17 ` [PATCH BlueZ v2 2/2] client: add advertisement instance support Michal Dzik
2026-06-01 13:50 ` [PATCH BlueZ v2 0/2] advertising: add property with advertisement Instance patchwork-bot+bluetooth
2 siblings, 1 reply; 5+ messages in thread
From: Michal Dzik @ 2026-05-31 10:17 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Michal Dzik
Instance is an internal value, but it must be exposed to client app if
client app wants to use a advertisement in BAP broadcast.
---
doc/org.bluez.LEAdvertisement.rst | 6 ++++++
src/advertising.c | 13 ++++++++++++-
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/doc/org.bluez.LEAdvertisement.rst b/doc/org.bluez.LEAdvertisement.rst
index aae80f08f..dbfc5f0bc 100644
--- a/doc/org.bluez.LEAdvertisement.rst
+++ b/doc/org.bluez.LEAdvertisement.rst
@@ -235,3 +235,9 @@ The provided value is used only if the "CanSetTxPower" feature is enabled on the
**org.bluez.LEAdvertisingManager(5)**.
Values must be in range [-127 to +20], where units are in dBm.
+
+byte Instance [read-write, optional]
+``````````````````````````````````````
+
+Instance of the advertisement. Set by bluetoothd after advertisement is registered with
+**org.bluez.LEAdvertisingManager(5)**.
diff --git a/src/advertising.c b/src/advertising.c
index 8970e65f7..c8b00a887 100644
--- a/src/advertising.c
+++ b/src/advertising.c
@@ -1390,8 +1390,19 @@ static void add_client_complete(struct btd_adv_client *client, uint8_t status)
queue_remove(client->manager->clients, client);
g_idle_add(client_free_idle_cb, client);
- } else
+ } else {
+ DBusMessageIter iter;
+
+ /* Check if the attribute has the Instance property */
+ if (g_dbus_proxy_get_property(client->proxy, "Instance",
+ &iter)) {
+ g_dbus_proxy_set_property_basic(client->proxy,
+ "Instance", DBUS_TYPE_BYTE, &client->instance,
+ NULL, NULL, NULL);
+ }
+
reply = dbus_message_new_method_return(client->reg);
+ }
g_dbus_send_message(btd_get_dbus_connection(), reply);
dbus_message_unref(client->reg);
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH BlueZ v2 2/2] client: add advertisement instance support
2026-05-31 10:17 [PATCH BlueZ v2 0/2] advertising: add property with advertisement Instance Michal Dzik
2026-05-31 10:17 ` [PATCH BlueZ v2 1/2] " Michal Dzik
@ 2026-05-31 10:17 ` Michal Dzik
2026-06-01 13:50 ` [PATCH BlueZ v2 0/2] advertising: add property with advertisement Instance patchwork-bot+bluetooth
2 siblings, 0 replies; 5+ messages in thread
From: Michal Dzik @ 2026-05-31 10:17 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Michal Dzik
---
client/advertising.c | 38 ++++++++++++++++++++++++++++++++++++++
client/advertising.h | 1 +
client/main.c | 7 +++++++
3 files changed, 46 insertions(+)
diff --git a/client/advertising.c b/client/advertising.c
index 5ca391635..a64d1895a 100644
--- a/client/advertising.c
+++ b/client/advertising.c
@@ -67,6 +67,7 @@ static struct ad {
uint16_t duration;
uint16_t timeout;
uint16_t discoverable_to;
+ uint8_t instance;
char **uuids[AD_TYPE_COUNT];
size_t uuids_len[AD_TYPE_COUNT];
char **solicit[AD_TYPE_COUNT];
@@ -233,6 +234,9 @@ static void print_ad(void)
if (ad.min_interval)
bt_shell_printf("Interval: %u-%u msec\n", ad.min_interval,
ad.max_interval);
+
+ if (ad.instance)
+ bt_shell_printf("Instance: %u\n", ad.instance);
}
static void register_reply(DBusMessage *message, void *user_data)
@@ -640,6 +644,32 @@ static gboolean get_secondary(const GDBusPropertyTable *property,
return TRUE;
}
+static gboolean get_instance(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *user_data)
+{
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE, &ad.instance);
+
+ return TRUE;
+}
+
+static void set_instance(const GDBusPropertyTable *property,
+ DBusMessageIter *iter,
+ GDBusPendingPropertySet id, void *user_data)
+{
+ uint8_t value;
+
+ if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_BYTE) {
+ g_dbus_pending_property_error(id,
+ "org.bluez.Error.InvalidArguments",
+ "Invalid argument type");
+ return;
+ }
+
+ dbus_message_iter_get_basic(iter, &value);
+ ad.instance = value;
+ g_dbus_pending_property_success(id);
+}
+
static gboolean min_interval_exists(const GDBusPropertyTable *property,
void *data)
{
@@ -700,6 +730,7 @@ static const GDBusPropertyTable ad_props[] = {
{ "MinInterval", "u", get_min_interval, NULL, min_interval_exists },
{ "MaxInterval", "u", get_max_interval, NULL, max_interval_exists },
{ "SecondaryChannel", "s", get_secondary, NULL, secondary_exists },
+ { "Instance", "y", get_instance, set_instance, NULL },
{ }
};
@@ -1446,3 +1477,10 @@ void ad_advertise_rsi(DBusConnection *conn, dbus_bool_t *value)
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
}
+
+void ad_advertise_instance(void)
+{
+ bt_shell_printf("Instance: %u\n", ad.instance);
+
+ return bt_shell_noninteractive_quit(EXIT_SUCCESS);
+}
diff --git a/client/advertising.h b/client/advertising.h
index 8c3fd041b..89d95d67e 100644
--- a/client/advertising.h
+++ b/client/advertising.h
@@ -42,3 +42,4 @@ void ad_advertise_discoverable_timeout(DBusConnection *conn, long int *value);
void ad_advertise_secondary(DBusConnection *conn, const char *value);
void ad_advertise_interval(DBusConnection *conn, uint32_t *min, uint32_t *max);
void ad_advertise_rsi(DBusConnection *conn, dbus_bool_t *value);
+void ad_advertise_instance(void);
diff --git a/client/main.c b/client/main.c
index 6fb399277..9d9ac8b14 100644
--- a/client/main.c
+++ b/client/main.c
@@ -3206,6 +3206,11 @@ static void cmd_advertise_rsi(int argc, char *argv[])
ad_advertise_rsi(dbus_conn, &value);
}
+static void cmd_advertise_instance(int argc, char *argv[])
+{
+ ad_advertise_instance();
+}
+
static void ad_clear_uuids(void)
{
ad_disable_uuids(dbus_conn, AD_TYPE_AD);
@@ -3705,6 +3710,8 @@ static const struct bt_shell_menu advertise_menu = {
"Set/Get advertise interval range" },
{ "rsi", "[on/off]", cmd_advertise_rsi,
"Show/Enable/Disable RSI to be advertised", NULL },
+ { "instance", NULL, cmd_advertise_instance,
+ "Show advertisement instance number" },
{ "clear", "[uuids/service/manufacturer/config-name...]", cmd_ad_clear,
"Clear advertise config" },
{ } },
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread