From e7c77f80787def10ccaff73ea6d19ef36faba18c Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Fri, 26 Sep 2025 12:04:08 -0400 Subject: [PATCH] btdev: Fix advertisement state The LE Advertisement state shall be updated whenever an advertisement is disabled since if all advertisments sets are disabled it shall be reflected in le_adv_enable. --- emulator/btdev.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/emulator/btdev.c b/emulator/btdev.c index 67c932d53..1a0f9ef2d 100644 --- a/emulator/btdev.c +++ b/emulator/btdev.c @@ -4789,9 +4789,17 @@ static bool match_ext_adv_handle(const void *data, const void *match_data) return ext_adv->handle == handle; } +static bool match_ext_adv_enable(const void *data, const void *match_data) +{ + const struct le_ext_adv *ext_adv = data; + + return ext_adv->enable; +} + static void ext_adv_disable(void *data, void *user_data) { struct le_ext_adv *ext_adv = data; + struct btdev *btdev = ext_adv->dev; uint8_t handle = PTR_TO_UINT(user_data); if (handle && ext_adv->handle != handle) @@ -4807,6 +4815,13 @@ static void ext_adv_disable(void *data, void *user_data) } ext_adv->enable = 0x00; + + /* Consider le_adv_enable disabled if all advertising sets are + * disabled. + */ + ext_adv = queue_find(btdev->le_ext_adv, match_ext_adv_enable, NULL); + if (!ext_adv) + btdev->le_adv_enable = 0x00; } static bool ext_adv_is_connectable(struct le_ext_adv *ext_adv) -- 2.47.3