Skip to content

Commit 82cda0e

Browse files
Thalleykartben
authored andcommitted
Bluetooth: Audio: Shell: Fix ad data returning -1
Several advertising data function could return -1 in case of errors, which could mess up the advertising data since they are intended to increment a counter. Instead of returning an error we use bt_shell_error to inform the user and then just return with no data changes, so that if any of them fails, the failing data is just omitted rather than causing major issues. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
1 parent 2effae5 commit 82cda0e

File tree

5 files changed

+31
-39
lines changed

5 files changed

+31
-39
lines changed

subsys/bluetooth/audio/shell/audio.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,17 @@
4040

4141
extern struct bt_csip_set_member_svc_inst *svc_inst;
4242

43-
ssize_t audio_ad_data_add(struct bt_data *data, const size_t data_size, const bool discoverable,
44-
const bool connectable);
45-
ssize_t audio_pa_data_add(struct bt_data *data_array, const size_t data_array_size);
46-
ssize_t csis_ad_data_add(struct bt_data *data, const size_t data_size, const bool discoverable);
43+
size_t audio_ad_data_add(struct bt_data *data, const size_t data_size, const bool discoverable,
44+
const bool connectable);
45+
size_t audio_pa_data_add(struct bt_data *data_array, const size_t data_array_size);
46+
size_t csis_ad_data_add(struct bt_data *data, const size_t data_size, const bool discoverable);
4747
size_t cap_acceptor_ad_data_add(struct bt_data data[], size_t data_size, bool discoverable);
4848
size_t bap_scan_delegator_ad_data_add(struct bt_data data[], size_t data_size);
4949
size_t gmap_ad_data_add(struct bt_data data[], size_t data_size);
5050
size_t pbp_ad_data_add(struct bt_data data[], size_t data_size);
51-
ssize_t cap_initiator_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
52-
const bool discoverable, const bool connectable);
53-
ssize_t cap_initiator_pa_data_add(struct bt_data *data_array, const size_t data_array_size);
51+
size_t cap_initiator_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
52+
const bool discoverable, const bool connectable);
53+
size_t cap_initiator_pa_data_add(struct bt_data *data_array, const size_t data_array_size);
5454

5555
#if defined(CONFIG_BT_AUDIO)
5656
/* Must guard before including audio.h as audio.h uses Kconfigs guarded by

subsys/bluetooth/audio/shell/bap.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4224,8 +4224,7 @@ static int cmd_bap(const struct shell *sh, size_t argc, char **argv)
42244224

42254225
SHELL_CMD_ARG_REGISTER(bap, &bap_cmds, "Bluetooth BAP shell commands", cmd_bap, 1, 1);
42264226

4227-
static ssize_t connectable_ad_data_add(struct bt_data *data_array,
4228-
size_t data_array_size)
4227+
static size_t connectable_ad_data_add(struct bt_data *data_array, size_t data_array_size)
42294228
{
42304229
static const uint8_t ad_ext_uuid16[] = {
42314230
IF_ENABLED(CONFIG_BT_MICP_MIC_DEV, (BT_UUID_16_ENCODE(BT_UUID_MICS_VAL),))
@@ -4307,8 +4306,7 @@ static ssize_t connectable_ad_data_add(struct bt_data *data_array,
43074306
return ad_len;
43084307
}
43094308

4310-
static ssize_t nonconnectable_ad_data_add(struct bt_data *data_array,
4311-
const size_t data_array_size)
4309+
static size_t nonconnectable_ad_data_add(struct bt_data *data_array, const size_t data_array_size)
43124310
{
43134311
static const uint8_t ad_ext_uuid16[] = {
43144312
IF_ENABLED(CONFIG_BT_PACS, (BT_UUID_16_ENCODE(BT_UUID_PACS_VAL),))
@@ -4339,9 +4337,9 @@ static ssize_t nonconnectable_ad_data_add(struct bt_data *data_array,
43394337

43404338
err = bt_rand(&broadcast_id, BT_AUDIO_BROADCAST_ID_SIZE);
43414339
if (err != 0) {
4342-
printk("Unable to generate broadcast ID: %d\n", err);
4340+
bt_shell_error("Unable to generate broadcast ID: %d\n", err);
43434341

4344-
return -1;
4342+
return 0;
43454343
}
43464344

43474345
sys_put_le24(broadcast_id, &ad_bap_broadcast_announcement[2]);
@@ -4367,10 +4365,10 @@ static ssize_t nonconnectable_ad_data_add(struct bt_data *data_array,
43674365
return ad_len;
43684366
}
43694367

4370-
ssize_t audio_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
4371-
const bool discoverable, const bool connectable)
4368+
size_t audio_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
4369+
const bool discoverable, const bool connectable)
43724370
{
4373-
ssize_t ad_len = 0;
4371+
size_t ad_len = 0;
43744372

43754373
if (!discoverable) {
43764374
return 0;
@@ -4390,8 +4388,7 @@ ssize_t audio_ad_data_add(struct bt_data *data_array, const size_t data_array_si
43904388
return ad_len;
43914389
}
43924390

4393-
ssize_t audio_pa_data_add(struct bt_data *data_array,
4394-
const size_t data_array_size)
4391+
size_t audio_pa_data_add(struct bt_data *data_array, const size_t data_array_size)
43954392
{
43964393
size_t ad_len = 0;
43974394

@@ -4407,9 +4404,9 @@ ssize_t audio_pa_data_add(struct bt_data *data_array,
44074404

44084405
err = bt_bap_broadcast_source_get_base(default_source.bap_source, &base_buf);
44094406
if (err != 0) {
4410-
printk("Unable to get BASE: %d\n", err);
4407+
bt_shell_error("Unable to get BASE: %d\n", err);
44114408

4412-
return -1;
4409+
return 0;
44134410
}
44144411

44154412
data_array[ad_len].type = BT_DATA_SVC_DATA16;

subsys/bluetooth/audio/shell/cap_initiator.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,7 +1428,7 @@ SHELL_CMD_ARG_REGISTER(cap_initiator, &cap_initiator_cmds,
14281428
"Bluetooth CAP initiator shell commands",
14291429
cmd_cap_initiator, 1, 1);
14301430

1431-
static ssize_t nonconnectable_ad_data_add(struct bt_data *data_array, const size_t data_array_size)
1431+
static size_t nonconnectable_ad_data_add(struct bt_data *data_array, const size_t data_array_size)
14321432
{
14331433
#if defined(CONFIG_BT_BAP_BROADCAST_SOURCE)
14341434
if (default_source.cap_source != NULL && default_source.is_cap) {
@@ -1440,9 +1440,9 @@ static ssize_t nonconnectable_ad_data_add(struct bt_data *data_array, const size
14401440

14411441
err = bt_rand(&broadcast_id, BT_AUDIO_BROADCAST_ID_SIZE);
14421442
if (err) {
1443-
printk("Unable to generate broadcast ID: %d\n", err);
1443+
bt_shell_error("Unable to generate broadcast ID: %d\n", err);
14441444

1445-
return -1;
1445+
return 0;
14461446
}
14471447

14481448
sys_put_le24(broadcast_id, &ad_cap_broadcast_announcement[2]);
@@ -1457,8 +1457,8 @@ static ssize_t nonconnectable_ad_data_add(struct bt_data *data_array, const size
14571457
return 0;
14581458
}
14591459

1460-
ssize_t cap_initiator_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
1461-
const bool discoverable, const bool connectable)
1460+
size_t cap_initiator_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
1461+
const bool discoverable, const bool connectable)
14621462
{
14631463
if (!discoverable) {
14641464
return 0;
@@ -1471,7 +1471,7 @@ ssize_t cap_initiator_ad_data_add(struct bt_data *data_array, const size_t data_
14711471
return 0;
14721472
}
14731473

1474-
ssize_t cap_initiator_pa_data_add(struct bt_data *data_array, const size_t data_array_size)
1474+
size_t cap_initiator_pa_data_add(struct bt_data *data_array, const size_t data_array_size)
14751475
{
14761476
#if defined(CONFIG_BT_BAP_BROADCAST_SOURCE)
14771477
if (default_source.cap_source != NULL && default_source.is_cap) {
@@ -1485,9 +1485,9 @@ ssize_t cap_initiator_pa_data_add(struct bt_data *data_array, const size_t data_
14851485

14861486
err = bt_cap_initiator_broadcast_get_base(default_source.cap_source, &base_buf);
14871487
if (err != 0) {
1488-
printk("Unable to get BASE: %d\n", err);
1488+
bt_shell_error("Unable to get BASE: %d\n", err);
14891489

1490-
return -1;
1490+
return 0;
14911491
}
14921492

14931493
data_array[0].type = BT_DATA_SVC_DATA16;

subsys/bluetooth/audio/shell/csip_set_member.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,8 @@ SHELL_CMD_ARG_REGISTER(csip_set_member, &csip_set_member_cmds,
312312
"Bluetooth CSIP set member shell commands",
313313
cmd_csip_set_member, 1, 1);
314314

315-
ssize_t csis_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
316-
const bool discoverable)
315+
size_t csis_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
316+
const bool discoverable)
317317
{
318318
size_t ad_len = 0;
319319

@@ -333,7 +333,8 @@ ssize_t csis_ad_data_add(struct bt_data *data_array, const size_t data_array_siz
333333
err = bt_csip_set_member_generate_rsi(svc_inst, ad_rsi);
334334
if (err != 0) {
335335
bt_shell_error("Failed to generate RSI (err %d)", err);
336-
return err;
336+
337+
return 0;
337338
}
338339

339340
__ASSERT(data_array_size > ad_len, "No space for AD_RSI");

subsys/bluetooth/host/shell/bt.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1941,15 +1941,9 @@ static ssize_t ad_init(struct bt_data *data_array, const size_t data_array_size,
19411941

19421942
if (IS_ENABLED(CONFIG_BT_AUDIO) && IS_ENABLED(CONFIG_BT_EXT_ADV) && adv_ext) {
19431943
const bool connectable = atomic_test_bit(adv_options, SHELL_ADV_OPT_CONNECTABLE);
1944-
ssize_t audio_ad_len;
19451944

1946-
audio_ad_len = audio_ad_data_add(&data_array[ad_len], data_array_size - ad_len,
1947-
discoverable, connectable);
1948-
if (audio_ad_len < 0) {
1949-
return audio_ad_len;
1950-
}
1951-
1952-
ad_len += audio_ad_len;
1945+
ad_len += audio_ad_data_add(&data_array[ad_len], data_array_size - ad_len,
1946+
discoverable, connectable);
19531947
}
19541948

19551949
return ad_len;

0 commit comments

Comments
 (0)