Skip to content

Commit 0e9a3e0

Browse files
Thalleykartben
authored andcommitted
tests: Bluetooth: Audio: Use ext adv for all connectable adv
Most specs require the use of extended advertising, and most tests used legacy advertising. Implement a common function to create and start an extended advertising set to reduce code duplication. Signed-off-by: Emil Gydesen <[email protected]>
1 parent 09d5b9d commit 0e9a3e0

21 files changed

+222
-367
lines changed

tests/bsim/bluetooth/audio/src/bap_broadcast_sink_test.c

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ static uint32_t broadcaster_broadcast_id;
5959
static struct audio_test_stream broadcast_sink_streams[CONFIG_BT_BAP_BROADCAST_SNK_STREAM_COUNT];
6060
static struct bt_bap_stream *streams[ARRAY_SIZE(broadcast_sink_streams)];
6161
static uint32_t requested_bis_sync;
62-
static struct bt_le_ext_adv *ext_adv;
6362
static const struct bt_bap_scan_delegator_recv_state *req_recv_state;
6463
static uint8_t recv_state_broadcast_code[BT_ISO_BROADCAST_CODE_SIZE];
6564

@@ -897,39 +896,6 @@ static void test_broadcast_delete_inval(void)
897896
}
898897
}
899898

900-
static void test_start_adv(void)
901-
{
902-
const struct bt_data ad[] = {
903-
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
904-
BT_DATA_BYTES(BT_DATA_UUID16_ALL, BT_UUID_16_ENCODE(BT_UUID_BASS_VAL),
905-
BT_UUID_16_ENCODE(BT_UUID_PACS_VAL)),
906-
BT_DATA_BYTES(BT_DATA_SVC_DATA16, BT_UUID_16_ENCODE(BT_UUID_BASS_VAL)),
907-
};
908-
int err;
909-
910-
/* Create a connectable advertising set */
911-
err = bt_le_ext_adv_create(BT_LE_EXT_ADV_CONN, NULL, &ext_adv);
912-
if (err != 0) {
913-
FAIL("Failed to create advertising set (err %d)\n", err);
914-
915-
return;
916-
}
917-
918-
err = bt_le_ext_adv_set_data(ext_adv, ad, ARRAY_SIZE(ad), NULL, 0);
919-
if (err != 0) {
920-
FAIL("Failed to set advertising data (err %d)\n", err);
921-
922-
return;
923-
}
924-
925-
err = bt_le_ext_adv_start(ext_adv, BT_LE_EXT_ADV_START_DEFAULT);
926-
if (err != 0) {
927-
FAIL("Failed to start advertising set (err %d)\n", err);
928-
929-
return;
930-
}
931-
}
932-
933899
static void test_common(void)
934900
{
935901
int err;
@@ -1144,6 +1110,7 @@ static void test_sink_encrypted_incorrect_code(void)
11441110

11451111
static void broadcast_sink_with_assistant(void)
11461112
{
1113+
struct bt_le_ext_adv *ext_adv;
11471114
int err;
11481115

11491116
err = init();
@@ -1152,7 +1119,7 @@ static void broadcast_sink_with_assistant(void)
11521119
return;
11531120
}
11541121

1155-
test_start_adv();
1122+
setup_connectable_adv(&ext_adv);
11561123
WAIT_FOR_FLAG(flag_connected);
11571124

11581125
printk("Waiting for PA sync request\n");
@@ -1200,6 +1167,7 @@ static void broadcast_sink_with_assistant(void)
12001167

12011168
static void broadcast_sink_with_assistant_incorrect_code(void)
12021169
{
1170+
struct bt_le_ext_adv *ext_adv;
12031171
int err;
12041172

12051173
err = init();
@@ -1208,7 +1176,7 @@ static void broadcast_sink_with_assistant_incorrect_code(void)
12081176
return;
12091177
}
12101178

1211-
test_start_adv();
1179+
setup_connectable_adv(&ext_adv);
12121180
WAIT_FOR_FLAG(flag_connected);
12131181

12141182
printk("Waiting for PA sync request\n");

tests/bsim/bluetooth/audio/src/bap_scan_delegator_test.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,7 @@ static void sync_all_broadcasts(void)
691691

692692
static int common_init(void)
693693
{
694+
struct bt_le_ext_adv *ext_adv;
694695
int err;
695696

696697
err = bt_enable(NULL);
@@ -709,13 +710,7 @@ static int common_init(void)
709710

710711
bt_le_per_adv_sync_cb_register(&pa_sync_cb);
711712

712-
err = bt_le_adv_start(BT_LE_ADV_CONN_FAST_1, ad, AD_SIZE, NULL, 0);
713-
if (err) {
714-
FAIL("Advertising failed to start (err %d)\n", err);
715-
return err;
716-
}
717-
718-
printk("Advertising successfully started\n");
713+
setup_connectable_adv(&ext_adv);
719714

720715
WAIT_FOR_FLAG(flag_connected);
721716

tests/bsim/bluetooth/audio/src/bap_unicast_server_test.c

Lines changed: 2 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -70,19 +70,6 @@ static struct audio_test_stream
7070
static const struct bt_bap_qos_cfg_pref qos_pref =
7171
BT_BAP_QOS_CFG_PREF(true, BT_GAP_LE_PHY_2M, 0x02, 10, 40000, 40000, 40000, 40000);
7272

73-
static uint8_t unicast_server_addata[] = {
74-
BT_UUID_16_ENCODE(BT_UUID_ASCS_VAL), /* ASCS UUID */
75-
BT_AUDIO_UNICAST_ANNOUNCEMENT_TARGETED, /* Target Announcement */
76-
BT_BYTES_LIST_LE16(PREF_CONTEXT),
77-
BT_BYTES_LIST_LE16(PREF_CONTEXT),
78-
0x00, /* Metadata length */
79-
};
80-
81-
static const struct bt_data unicast_server_ad[] = {
82-
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
83-
BT_DATA_BYTES(BT_DATA_UUID16_ALL, BT_UUID_16_ENCODE(BT_UUID_ASCS_VAL)),
84-
BT_DATA(BT_DATA_SVC_DATA16, unicast_server_addata, ARRAY_SIZE(unicast_server_addata)),
85-
};
8673
static struct bt_le_ext_adv *ext_adv;
8774

8875
CREATE_FLAG(flag_stream_configured);
@@ -460,26 +447,7 @@ static void init(void)
460447
&stream_ops);
461448
}
462449

463-
/* Create a connectable advertising set */
464-
err = bt_le_ext_adv_create(BT_LE_EXT_ADV_CONN, NULL, &ext_adv);
465-
if (err != 0) {
466-
FAIL("Failed to create advertising set (err %d)\n", err);
467-
return;
468-
}
469-
470-
err = bt_le_ext_adv_set_data(ext_adv, unicast_server_ad, ARRAY_SIZE(unicast_server_ad),
471-
NULL, 0);
472-
if (err != 0) {
473-
FAIL("Failed to set advertising data (err %d)\n", err);
474-
return;
475-
}
476-
477-
err = bt_le_ext_adv_start(ext_adv, BT_LE_EXT_ADV_START_DEFAULT);
478-
if (err != 0) {
479-
FAIL("Failed to start advertising set (err %d)\n", err);
480-
return;
481-
}
482-
printk("Advertising started\n");
450+
setup_connectable_adv(&ext_adv);
483451
}
484452

485453
static void test_main(void)
@@ -540,22 +508,7 @@ static void test_main_acl_disconnect(void)
540508
* bt_conn object is properly unref'ed by the stack
541509
*/
542510
for (size_t i = 0U; i < ARRAY_SIZE(dummy_ext_adv); i++) {
543-
const struct bt_le_adv_param param = BT_LE_ADV_PARAM_INIT(
544-
(BT_LE_ADV_OPT_EXT_ADV | BT_LE_ADV_OPT_CONN), BT_GAP_ADV_SLOW_INT_MAX,
545-
BT_GAP_ADV_SLOW_INT_MAX, NULL);
546-
int err;
547-
548-
err = bt_le_ext_adv_create(&param, NULL, &dummy_ext_adv[i]);
549-
if (err != 0) {
550-
FAIL("Failed to create advertising set[%zu] (err %d)\n", i, err);
551-
return;
552-
}
553-
554-
err = bt_le_ext_adv_start(dummy_ext_adv[i], BT_LE_EXT_ADV_START_DEFAULT);
555-
if (err != 0) {
556-
FAIL("Failed to start advertising set[%zu] (err %d)\n", i, err);
557-
return;
558-
}
511+
setup_connectable_adv(&dummy_ext_adv[i]);
559512
}
560513

561514
bt_conn_cb_register(&conn_callbacks);

tests/bsim/bluetooth/audio/src/cap_acceptor_test.c

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,6 @@
5353

5454
extern enum bst_result_t bst_result;
5555

56-
#define SINK_CONTEXT \
57-
(BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED | BT_AUDIO_CONTEXT_TYPE_MEDIA | \
58-
BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL)
59-
#define SOURCE_CONTEXT (BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED | BT_AUDIO_CONTEXT_TYPE_NOTIFICATIONS)
60-
6156
CREATE_FLAG(flag_broadcaster_found);
6257
CREATE_FLAG(flag_broadcast_code);
6358
CREATE_FLAG(flag_base_received);
@@ -415,27 +410,6 @@ static struct bt_bap_scan_delegator_cb scan_delegator_cbs = {
415410
.broadcast_code = broadcast_code_cb,
416411
};
417412

418-
/* TODO: Expand with CAP service data */
419-
static const struct bt_data cap_acceptor_ad[] = {
420-
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
421-
BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1),
422-
BT_DATA_BYTES(BT_DATA_UUID16_SOME, BT_UUID_16_ENCODE(BT_UUID_ASCS_VAL),
423-
BT_UUID_16_ENCODE(BT_UUID_CAS_VAL)),
424-
BT_DATA_BYTES(BT_DATA_SVC_DATA16, BT_UUID_16_ENCODE(BT_UUID_CAS_VAL),
425-
BT_AUDIO_UNICAST_ANNOUNCEMENT_TARGETED),
426-
IF_ENABLED(CONFIG_BT_BAP_UNICAST_SERVER,
427-
(BT_DATA_BYTES(BT_DATA_SVC_DATA16,
428-
BT_UUID_16_ENCODE(BT_UUID_ASCS_VAL),
429-
BT_AUDIO_UNICAST_ANNOUNCEMENT_TARGETED,
430-
BT_BYTES_LIST_LE16(SINK_CONTEXT),
431-
BT_BYTES_LIST_LE16(SOURCE_CONTEXT),
432-
0x00, /* Metadata length */),
433-
))
434-
IF_ENABLED(CONFIG_BT_BAP_SCAN_DELEGATOR,
435-
(BT_DATA_BYTES(BT_DATA_SVC_DATA16, BT_UUID_16_ENCODE(BT_UUID_BASS_VAL)),
436-
))
437-
};
438-
439413
static struct bt_csip_set_member_svc_inst *csip_set_member;
440414

441415
static struct bt_bap_stream *unicast_stream_alloc(void)
@@ -636,32 +610,9 @@ static int set_supported_contexts(void)
636610

637611
void test_start_adv(void)
638612
{
639-
int err;
640613
struct bt_le_ext_adv *ext_adv;
641614

642-
/* Create a connectable non-scannable advertising set */
643-
err = bt_le_ext_adv_create(BT_LE_EXT_ADV_CONN_CUSTOM, NULL, &ext_adv);
644-
if (err != 0) {
645-
FAIL("Failed to create advertising set (err %d)\n", err);
646-
647-
return;
648-
}
649-
650-
/* Add cap acceptor advertising data */
651-
err = bt_le_ext_adv_set_data(ext_adv, cap_acceptor_ad, ARRAY_SIZE(cap_acceptor_ad), NULL,
652-
0);
653-
if (err != 0) {
654-
FAIL("Failed to set advertising data (err %d)\n", err);
655-
656-
return;
657-
}
658-
659-
err = bt_le_ext_adv_start(ext_adv, BT_LE_EXT_ADV_START_DEFAULT);
660-
if (err != 0) {
661-
FAIL("Failed to start advertising set (err %d)\n", err);
662-
663-
return;
664-
}
615+
setup_connectable_adv(&ext_adv);
665616
}
666617

667618
static void set_available_contexts(void)

tests/bsim/bluetooth/audio/src/common.c

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Copyright (c) 2019 Bose Corporation
3-
* Copyright (c) 2020-2021 Nordic Semiconductor ASA
3+
* Copyright (c) 2020-2025 Nordic Semiconductor ASA
44
*
55
* SPDX-License-Identifier: Apache-2.0
66
*/
@@ -9,17 +9,24 @@
99
#include <stddef.h>
1010
#include <stdint.h>
1111

12+
#include <zephyr/autoconf.h>
1213
#include <zephyr/bluetooth/addr.h>
14+
#include <zephyr/bluetooth/audio/audio.h>
1315
#include <zephyr/bluetooth/audio/bap.h>
16+
#include <zephyr/bluetooth/audio/csip.h>
17+
#include <zephyr/bluetooth/audio/tmap.h>
1418
#include <zephyr/bluetooth/bluetooth.h>
19+
#include <zephyr/bluetooth/byteorder.h>
1520
#include <zephyr/bluetooth/conn.h>
1621
#include <zephyr/bluetooth/gap.h>
22+
#include <zephyr/bluetooth/uuid.h>
1723
#include <zephyr/kernel.h>
1824
#include <zephyr/net_buf.h>
1925
#include <zephyr/sys/__assert.h>
2026
#include <zephyr/sys/atomic_types.h>
2127
#include <zephyr/sys/printk.h>
2228
#include <zephyr/sys/util.h>
29+
#include <zephyr/sys/util_macro.h>
2330

2431
#include "bs_cmd_line.h"
2532
#include "bs_dynargs.h"
@@ -37,9 +44,37 @@ atomic_t flag_disconnected;
3744
atomic_t flag_conn_updated;
3845
atomic_t flag_audio_received;
3946
volatile bt_security_t security_level;
40-
41-
const struct bt_data ad[AD_SIZE] = {
42-
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR))
47+
#if defined(CONFIG_BT_CSIP_SET_MEMBER)
48+
uint8_t csip_rsi[BT_CSIP_RSI_SIZE];
49+
#endif /* CONFIG_BT_CSIP_SET_MEMBER */
50+
51+
static const struct bt_data connectable_ad[] = {
52+
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
53+
BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1),
54+
BT_DATA_BYTES(BT_DATA_UUID16_SOME, BT_UUID_16_ENCODE(BT_UUID_ASCS_VAL),
55+
BT_UUID_16_ENCODE(BT_UUID_CAS_VAL)),
56+
BT_DATA_BYTES(BT_DATA_UUID16_ALL, BT_UUID_16_ENCODE(BT_UUID_BASS_VAL),
57+
BT_UUID_16_ENCODE(BT_UUID_PACS_VAL)),
58+
#if defined(CONFIG_BT_CAP_ACCEPTOR)
59+
BT_DATA_BYTES(BT_DATA_SVC_DATA16, BT_UUID_16_ENCODE(BT_UUID_CAS_VAL),
60+
BT_AUDIO_UNICAST_ANNOUNCEMENT_TARGETED),
61+
#endif /* CONFIG_BT_CAP_ACCEPTOR */
62+
#if defined(CONFIG_BT_BAP_UNICAST_SERVER)
63+
BT_DATA_BYTES(BT_DATA_SVC_DATA16, BT_UUID_16_ENCODE(BT_UUID_ASCS_VAL),
64+
BT_AUDIO_UNICAST_ANNOUNCEMENT_TARGETED, BT_BYTES_LIST_LE16(SINK_CONTEXT),
65+
BT_BYTES_LIST_LE16(SOURCE_CONTEXT), 0x00,
66+
/* Metadata length */),
67+
#endif /* CONFIG_BT_BAP_UNICAST_SERVER */
68+
#if defined(CONFIG_BT_BAP_SCAN_DELEGATOR)
69+
BT_DATA_BYTES(BT_DATA_SVC_DATA16, BT_UUID_16_ENCODE(BT_UUID_BASS_VAL)),
70+
#endif /* CONFIG_BT_BAP_SCAN_DELEGATOR */
71+
#if defined(CONFIG_BT_CSIP_SET_MEMBER)
72+
BT_DATA(BT_DATA_CSIS_RSI, csip_rsi, BT_CSIP_RSI_SIZE),
73+
#endif /* CONFIG_BT_CSIP_SET_MEMBER */
74+
#if defined(CONFIG_BT_TMAP)
75+
BT_DATA_BYTES(BT_DATA_SVC_DATA16, BT_UUID_16_ENCODE(BT_UUID_TMAS_VAL),
76+
BT_UUID_16_ENCODE(TMAP_ROLE_SUPPORTED)),
77+
#endif /* CONFIG_BT_TMAP */
4378
};
4479

4580
static void device_found(const struct bt_le_scan_recv_info *info, struct net_buf_simple *ad_buf)
@@ -51,8 +86,9 @@ static void device_found(const struct bt_le_scan_recv_info *info, struct net_buf
5186
return;
5287
}
5388

54-
/* We're only interested in connectable events */
55-
if ((info->adv_props & BT_GAP_ADV_PROP_CONNECTABLE) == 0) {
89+
/* We're only interested in extended advertising connectable events */
90+
if (((info->adv_props & BT_GAP_ADV_PROP_EXT_ADV) == 0U ||
91+
(info->adv_props & BT_GAP_ADV_PROP_CONNECTABLE) == 0U)) {
5692
return;
5793
}
5894

@@ -150,6 +186,38 @@ BT_CONN_CB_DEFINE(conn_callbacks) = {
150186
.security_changed = security_changed_cb,
151187
};
152188

189+
void setup_connectable_adv(struct bt_le_ext_adv **ext_adv)
190+
{
191+
int err;
192+
193+
/* Create a non-connectable advertising set */
194+
err = bt_le_ext_adv_create(BT_LE_EXT_ADV_CONN, NULL, ext_adv);
195+
if (err != 0) {
196+
FAIL("Unable to create extended advertising set: %d\n", err);
197+
return;
198+
}
199+
200+
err = bt_le_ext_adv_set_data(*ext_adv, connectable_ad, ARRAY_SIZE(connectable_ad), NULL, 0);
201+
if (err != 0) {
202+
FAIL("Unable to set extended advertising data: %d\n", err);
203+
204+
bt_le_ext_adv_delete(*ext_adv);
205+
206+
return;
207+
}
208+
209+
err = bt_le_ext_adv_start(*ext_adv, BT_LE_EXT_ADV_START_DEFAULT);
210+
if (err != 0) {
211+
FAIL("Failed to start advertising set (err %d)\n", err);
212+
213+
bt_le_ext_adv_delete(*ext_adv);
214+
215+
return;
216+
}
217+
218+
printk("Advertising started\n");
219+
}
220+
153221
void test_tick(bs_time_t HW_device_time)
154222
{
155223
if (bst_result != Passed) {

0 commit comments

Comments
 (0)