Skip to content

Commit c9a1f20

Browse files
committed
monitor: Add proper decoding of TLV for BASE
This uses bt_bap_debug_{config, metadata} to decode the TLV entries found in Basic Audio Announcement: < HCI Command: LE Set Peri.. (0x08|0x003f) plen 41 Handle: 1 Operation: Complete ext advertising data (0x03) Data length: 0x26 Service Data: Basic Audio Announcement (0x1851) Presetation Delay: 10000 Number of Subgroups: 1 Subgroup #0: Number of BIS(s): 1 Codec: LC3 (0x06) Codec Specific Configuration: #0: len 0x02 type 0x01 Codec Specific Configuration: Sampling Frequency: 48 Khz (0x08) Codec Specific Configuration: bluez#1: len 0x02 type 0x02 Codec Specific Configuration: Frame Duration: 7.5 ms (0x00) Codec Specific Configuration: bluez#2: len 0x03 type 0x04 Codec Specific Configuration: Frame Length: 75 (0x004b) Metadata: #0: len 0x03 type 0x02 Metadata: Context: 0x0002 Metadata: Context Conversational (0x0002) BIS #0: Index: 1 Codec Specific Configuration: #0: len 0x05 type 0x03 Codec Specific Configuration: Location: 0x00000001 Codec Specific Configuration: Location: Front Left (0x00000001)
1 parent acaf8f8 commit c9a1f20

File tree

1 file changed

+19
-30
lines changed

1 file changed

+19
-30
lines changed

monitor/packet.c

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "src/shared/util.h"
3636
#include "src/shared/btsnoop.h"
3737
#include "src/shared/queue.h"
38+
#include "src/shared/bap-debug.h"
3839
#include "display.h"
3940
#include "bt.h"
4041
#include "ll.h"
@@ -3405,20 +3406,6 @@ static void print_uuid128_list(const char *label, const void *data,
34053406
}
34063407
}
34073408

3408-
static void *iov_pull(struct iovec *iov, size_t len)
3409-
{
3410-
void *data;
3411-
3412-
if (iov->iov_len < len)
3413-
return NULL;
3414-
3415-
data = iov->iov_base;
3416-
iov->iov_base += len;
3417-
iov->iov_len -= len;
3418-
3419-
return data;
3420-
}
3421-
34223409
static void print_ltv(const char *str, void *user_data)
34233410
{
34243411
const char *label = user_data;
@@ -3435,7 +3422,7 @@ static void print_base_annoucement(const uint8_t *data, uint8_t data_len)
34353422
iov.iov_base = (void *) data;
34363423
iov.iov_len = data_len;
34373424

3438-
base_data = iov_pull(&iov, sizeof(*base_data));
3425+
base_data = util_iov_pull_mem(&iov, sizeof(*base_data));
34393426
if (!base_data)
34403427
goto done;
34413428

@@ -3453,7 +3440,7 @@ static void print_base_annoucement(const uint8_t *data, uint8_t data_len)
34533440

34543441
print_field(" Subgroup #%u:", i);
34553442

3456-
subgroup = iov_pull(&iov, sizeof(*subgroup));
3443+
subgroup = util_iov_pull_mem(&iov, sizeof(*subgroup));
34573444
if (!subgroup)
34583445
goto done;
34593446

@@ -3470,51 +3457,53 @@ static void print_base_annoucement(const uint8_t *data, uint8_t data_len)
34703457
subgroup->codec.vid);
34713458
}
34723459

3473-
codec_cfg = iov_pull(&iov, sizeof(*codec_cfg));
3460+
codec_cfg = util_iov_pull_mem(&iov, sizeof(*codec_cfg));
34743461
if (!codec_cfg)
34753462
goto done;
34763463

3477-
if (!iov_pull(&iov, codec_cfg->len))
3464+
if (!util_iov_pull_mem(&iov, codec_cfg->len))
34783465
goto done;
34793466

34803467
label = " Codec Specific Configuration";
34813468

3482-
util_debug_ltv(codec_cfg->data, codec_cfg->len, NULL, 0,
3483-
print_ltv, (void *)label);
3469+
bt_bap_debug_config(codec_cfg->data, codec_cfg->len,
3470+
print_ltv, (void *)label);
34843471

3485-
metadata = iov_pull(&iov, sizeof(*metadata));
3472+
metadata = util_iov_pull_mem(&iov, sizeof(*metadata));
34863473
if (!metadata)
34873474
goto done;
34883475

3489-
if (!iov_pull(&iov, metadata->len))
3476+
if (!util_iov_pull(&iov, metadata->len))
34903477
goto done;
34913478

34923479
label = " Metadata";
34933480

3494-
util_debug_ltv(metadata->data, metadata->len, NULL, 0,
3495-
print_ltv, (void *)label);
3481+
bt_bap_debug_metadata(metadata->data, metadata->len,
3482+
print_ltv, (void *)label);
3483+
3484+
label = " Codec Specific Configuration";
34963485

34973486
/* Level 3 - BIS(s)*/
34983487
for (j = 0; j < subgroup->num_bis; j++) {
34993488
struct bt_hci_le_pa_base_bis *bis;
35003489

35013490
print_field(" BIS #%u:", j);
35023491

3503-
bis = iov_pull(&iov, sizeof(*bis));
3492+
bis = util_iov_pull_mem(&iov, sizeof(*bis));
35043493
if (!bis)
35053494
goto done;
35063495

35073496
print_field(" Index: %u", bis->index);
35083497

3509-
codec_cfg = iov_pull(&iov, sizeof(*codec_cfg));
3498+
codec_cfg = util_iov_pull_mem(&iov, sizeof(*codec_cfg));
35103499
if (!codec_cfg)
35113500
goto done;
35123501

3513-
if (!iov_pull(&iov, codec_cfg->len))
3502+
if (!util_iov_pull(&iov, codec_cfg->len))
35143503
goto done;
35153504

3516-
print_hex_field(" Codec Specific Configuration",
3517-
codec_cfg->data, codec_cfg->len);
3505+
bt_bap_debug_config(codec_cfg->data, codec_cfg->len,
3506+
print_ltv, (void *)label);
35183507
}
35193508
}
35203509

@@ -10443,7 +10432,7 @@ static void num_completed_packets_evt(struct timeval *tv, uint16_t index,
1044310432
const struct bt_hci_evt_num_completed_packets *evt = data;
1044410433
int i;
1044510434

10446-
iov_pull(&iov, 1);
10435+
util_iov_pull(&iov, 1);
1044710436

1044810437
print_field("Num handles: %d", evt->num_handles);
1044910438

0 commit comments

Comments
 (0)