Skip to content

Commit b6909b4

Browse files
committed
Bluetooth: Audio: Shell: Store broadcast_id statically
Add a broadcast_id field in broadcast_source so that it can be lookup later, which is useful for doing broadcast assitant procedures on a local broadcast source. The broadcast ID is now created at the same time as the broadcast source(s), instead at the time of retriving the advertising data. Signed-off-by: Emil Gydesen <[email protected]>
1 parent 874b9a6 commit b6909b4

File tree

3 files changed

+30
-23
lines changed

3 files changed

+30
-23
lines changed

subsys/bluetooth/audio/shell/audio.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ struct broadcast_source {
177177
};
178178
struct bt_audio_codec_cfg codec_cfg;
179179
struct bt_bap_qos_cfg qos;
180+
uint32_t broadcast_id;
180181
};
181182

182183
struct broadcast_sink {

subsys/bluetooth/audio/shell/bap.c

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3210,6 +3210,7 @@ static int cmd_create_broadcast(const struct shell *sh, size_t argc,
32103210
struct bt_bap_broadcast_source_subgroup_param subgroup_param;
32113211
struct bt_bap_broadcast_source_param create_param = {0};
32123212
const struct named_lc3_preset *named_preset;
3213+
uint32_t broadcast_id = 0U;
32133214
int err;
32143215

32153216
if (default_source.bap_source != NULL) {
@@ -3268,6 +3269,15 @@ static int cmd_create_broadcast(const struct shell *sh, size_t argc,
32683269
}
32693270
}
32703271

3272+
err = bt_rand(&broadcast_id, BT_AUDIO_BROADCAST_ID_SIZE);
3273+
if (err != 0) {
3274+
bt_shell_error("Unable to generate broadcast ID: %d\n", err);
3275+
3276+
return -ENOEXEC;
3277+
}
3278+
3279+
shell_print(sh, "Generated broadcast_id 0x%06X", broadcast_id);
3280+
32713281
copy_broadcast_source_preset(&default_source, named_preset);
32723282

32733283
(void)memset(stream_params, 0, sizeof(stream_params));
@@ -3285,11 +3295,14 @@ static int cmd_create_broadcast(const struct shell *sh, size_t argc,
32853295
err = bt_bap_broadcast_source_create(&create_param, &default_source.bap_source);
32863296
if (err != 0) {
32873297
shell_error(sh, "Unable to create broadcast source: %d", err);
3298+
3299+
default_source.broadcast_id = BT_BAP_INVALID_BROADCAST_ID;
32883300
return err;
32893301
}
32903302

32913303
shell_print(sh, "Broadcast source created: preset %s",
32923304
named_preset->name);
3305+
default_source.broadcast_id = broadcast_id;
32933306

32943307
if (default_stream == NULL) {
32953308
default_stream = bap_stream_from_shell_stream(&broadcast_source_streams[0]);
@@ -3834,6 +3847,8 @@ static int cmd_init(const struct shell *sh, size_t argc, char *argv[])
38343847
bt_bap_stream_cb_register(
38353848
bap_stream_from_shell_stream(&broadcast_source_streams[i]), &stream_ops);
38363849
}
3850+
3851+
default_source.broadcast_id = BT_BAP_INVALID_BROADCAST_ID;
38373852
#endif /* CONFIG_BT_BAP_BROADCAST_SOURCE */
38383853

38393854
#if defined(CONFIG_LIBLC3)
@@ -4276,18 +4291,7 @@ static size_t nonconnectable_ad_data_add(struct bt_data *data_array, const size_
42764291
static uint8_t ad_bap_broadcast_announcement[5] = {
42774292
BT_UUID_16_ENCODE(BT_UUID_BROADCAST_AUDIO_VAL),
42784293
};
4279-
uint32_t broadcast_id;
4280-
int err;
4281-
4282-
err = bt_rand(&broadcast_id, BT_AUDIO_BROADCAST_ID_SIZE);
4283-
if (err != 0) {
4284-
bt_shell_error("Unable to generate broadcast ID: %d\n", err);
4285-
4286-
return 0;
4287-
}
4288-
bt_shell_print("Generated broadcast_id 0x%06X", broadcast_id);
4289-
4290-
sys_put_le24(broadcast_id, &ad_bap_broadcast_announcement[2]);
4294+
sys_put_le24(default_source.broadcast_id, &ad_bap_broadcast_announcement[2]);
42914295
data_array[ad_len].type = BT_DATA_SVC_DATA16;
42924296
data_array[ad_len].data_len = ARRAY_SIZE(ad_bap_broadcast_announcement);
42934297
data_array[ad_len].data = ad_bap_broadcast_announcement;

subsys/bluetooth/audio/shell/cap_initiator.c

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1311,6 +1311,7 @@ int cap_ac_broadcast(const struct shell *sh, size_t argc, char **argv,
13111311
BT_AUDIO_LOCATION_FRONT_LEFT)};
13121312
struct bt_cap_initiator_broadcast_subgroup_param subgroup_param = {0};
13131313
struct bt_cap_initiator_broadcast_create_param create_param = {0};
1314+
uint32_t broadcast_id = 0U;
13141315
struct bt_le_ext_adv *adv;
13151316
int err;
13161317

@@ -1325,6 +1326,15 @@ int cap_ac_broadcast(const struct shell *sh, size_t argc, char **argv,
13251326
return -ENOEXEC;
13261327
}
13271328

1329+
err = bt_rand(&broadcast_id, BT_AUDIO_BROADCAST_ID_SIZE);
1330+
if (err != 0) {
1331+
bt_shell_error("Unable to generate broadcast ID: %d\n", err);
1332+
1333+
return -ENOEXEC;
1334+
}
1335+
1336+
shell_print(sh, "Generated broadcast_id 0x%06X", broadcast_id);
1337+
13281338
copy_broadcast_source_preset(&default_source, &default_broadcast_source_preset);
13291339
default_source.qos.sdu *= param->chan_cnt;
13301340

@@ -1353,6 +1363,7 @@ int cap_ac_broadcast(const struct shell *sh, size_t argc, char **argv,
13531363
err = bt_cap_initiator_broadcast_audio_create(&create_param, &default_source.cap_source);
13541364
if (err != 0) {
13551365
shell_error(sh, "Failed to create broadcast source: %d", err);
1366+
13561367
return -ENOEXEC;
13571368
}
13581369

@@ -1365,6 +1376,7 @@ int cap_ac_broadcast(const struct shell *sh, size_t argc, char **argv,
13651376
"and update / set the base via `bt per-adv data`",
13661377
param->name);
13671378
default_source.is_cap = true;
1379+
default_source.broadcast_id = broadcast_id;
13681380

13691381
return 0;
13701382
}
@@ -1512,18 +1524,8 @@ static size_t nonconnectable_ad_data_add(struct bt_data *data_array, const size_
15121524
static uint8_t ad_cap_broadcast_announcement[5] = {
15131525
BT_UUID_16_ENCODE(BT_UUID_BROADCAST_AUDIO_VAL),
15141526
};
1515-
uint32_t broadcast_id;
1516-
int err;
1517-
1518-
err = bt_rand(&broadcast_id, BT_AUDIO_BROADCAST_ID_SIZE);
1519-
if (err) {
1520-
bt_shell_error("Unable to generate broadcast ID: %d\n", err);
1521-
1522-
return 0;
1523-
}
1524-
bt_shell_print("Generated broadcast_id 0x%06X", broadcast_id);
15251527

1526-
sys_put_le24(broadcast_id, &ad_cap_broadcast_announcement[2]);
1528+
sys_put_le24(default_source.broadcast_id, &ad_cap_broadcast_announcement[2]);
15271529
data_array[0].type = BT_DATA_SVC_DATA16;
15281530
data_array[0].data_len = ARRAY_SIZE(ad_cap_broadcast_announcement);
15291531
data_array[0].data = ad_cap_broadcast_announcement;

0 commit comments

Comments
 (0)