Skip to content

Commit 43ec9e4

Browse files
committed
tests: Bluetooth: Tester: Audio: Adds BRS
This commit adds API to tester to allow exposing of Broadcast Receive State. Signed-off-by: Omkar Kulkarni <[email protected]>
1 parent 0e7ad53 commit 43ec9e4

File tree

5 files changed

+87
-0
lines changed

5 files changed

+87
-0
lines changed

subsys/bluetooth/audio/bap_scan_delegator.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1620,6 +1620,7 @@ int bt_bap_scan_delegator_add_src(const struct bt_bap_scan_delegator_add_src_par
16201620
state->pa_sync_state = param->pa_state;
16211621
state->encrypt_state = param->encrypt_state;
16221622
state->num_subgroups = param->num_subgroups;
1623+
16231624
if (state->num_subgroups > 0U) {
16241625
(void)memcpy(state->subgroups, param->subgroups,
16251626
sizeof(state->subgroups));

tests/bluetooth/tester/src/audio/btp/btp_bap.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,20 @@ struct btp_bap_broadcast_source_setup_v2_rp {
202202
uint32_t gap_settings;
203203
} __packed;
204204

205+
#define BTP_BAP_SCAN_DELEGATOR_ADD_SRC 0x1a
206+
struct btp_bap_scan_delegator_add_src_cmd {
207+
bt_addr_le_t broadcaster_address;
208+
uint8_t advertiser_sid;
209+
uint8_t broadcast_id[BT_AUDIO_BROADCAST_ID_SIZE];
210+
uint8_t pa_sync_state;
211+
uint8_t big_encryption;
212+
uint8_t num_subgroups;
213+
uint8_t subgroups[];
214+
} __packed;
215+
struct btp_bap_scan_delegator_add_src_rp {
216+
uint8_t src_id;
217+
} __packed;
218+
205219
/* BAP events */
206220
#define BTP_BAP_EV_DISCOVERY_COMPLETED 0x80
207221
struct btp_bap_discovery_completed_ev {

tests/bluetooth/tester/src/audio/btp_bap.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,11 @@ static const struct btp_handler bap_handlers[] = {
474474
.expect_len = sizeof(struct btp_bap_send_past_cmd),
475475
.func = btp_bap_broadcast_assistant_send_past,
476476
},
477+
{
478+
.opcode = BTP_BAP_SCAN_DELEGATOR_ADD_SRC,
479+
.expect_len = BTP_HANDLER_LENGTH_VARIABLE,
480+
.func = btp_bap_scan_delegator_add_src,
481+
},
477482
#endif /* CONFIG_BT_BAP_BROADCAST_SOURCE || CONFIG_BT_BAP_BROADCAST_SINK */
478483
};
479484

tests/bluetooth/tester/src/audio/btp_bap_broadcast.c

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1833,6 +1833,71 @@ uint8_t btp_bap_broadcast_assistant_send_past(const void *cmd, uint16_t cmd_len,
18331833
return BTP_STATUS_SUCCESS;
18341834
}
18351835

1836+
uint8_t btp_bap_scan_delegator_add_src(const void *cmd, uint16_t cmd_len, void *rsp,
1837+
uint16_t *rsp_len)
1838+
{
1839+
const struct btp_bap_scan_delegator_add_src_cmd *cp = cmd;
1840+
struct btp_bap_scan_delegator_add_src_rp *rp = rsp;
1841+
struct bt_bap_scan_delegator_add_src_param param = {0};
1842+
struct net_buf_simple buf;
1843+
int err;
1844+
1845+
if (cmd_len < sizeof(*cp)) {
1846+
return BTP_STATUS_FAILED;
1847+
}
1848+
1849+
if (cp->num_subgroups > CONFIG_BT_BAP_BASS_MAX_SUBGROUPS) {
1850+
return BTP_STATUS_FAILED;
1851+
}
1852+
1853+
if (cp->big_encryption > BT_BAP_BIG_ENC_STATE_BAD_CODE) {
1854+
return BTP_STATUS_FAILED;
1855+
}
1856+
1857+
bt_addr_le_copy(&param.addr, &cp->broadcaster_address);
1858+
param.sid = cp->advertiser_sid;
1859+
param.pa_state = (enum bt_bap_pa_state)cp->pa_sync_state;
1860+
param.encrypt_state = (enum bt_bap_big_enc_state)cp->big_encryption;
1861+
param.broadcast_id = sys_get_le24(cp->broadcast_id);
1862+
param.num_subgroups = cp->num_subgroups;
1863+
1864+
net_buf_simple_init_with_data(&buf, (void *)cp->subgroups, cmd_len - sizeof(*cp));
1865+
1866+
for (uint8_t i = 0; i < param.num_subgroups; i++) {
1867+
struct bt_bap_bass_subgroup *subgroup = &param.subgroups[i];
1868+
1869+
/* If remaining data is less than the necessary subgroup fields, return failed */
1870+
if (buf.len < sizeof(subgroup->bis_sync) + sizeof(subgroup->metadata_len)) {
1871+
return BTP_STATUS_FAILED;
1872+
}
1873+
1874+
subgroup->bis_sync = net_buf_simple_pull_le32(&buf);
1875+
subgroup->metadata_len = net_buf_simple_pull_u8(&buf);
1876+
1877+
if (subgroup->metadata_len > sizeof(subgroup->metadata) ||
1878+
subgroup->metadata_len > buf.len) {
1879+
return BTP_STATUS_FAILED;
1880+
}
1881+
1882+
memcpy(subgroup->metadata, net_buf_simple_pull_mem(&buf, subgroup->metadata_len),
1883+
subgroup->metadata_len);
1884+
}
1885+
1886+
if (buf.len != 0U) {
1887+
return BTP_STATUS_FAILED;
1888+
}
1889+
1890+
err = bt_bap_scan_delegator_add_src(&param);
1891+
if (err < 0) {
1892+
return BTP_STATUS_VAL(err);
1893+
}
1894+
1895+
rp->src_id = (uint8_t)err;
1896+
*rsp_len = sizeof(*rp);
1897+
1898+
return BTP_STATUS_SUCCESS;
1899+
}
1900+
18361901
static bool broadcast_inited;
18371902

18381903
int btp_bap_broadcast_init(void)

tests/bluetooth/tester/src/audio/btp_bap_broadcast.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,5 @@ uint8_t btp_bap_broadcast_assistant_set_broadcast_code(const void *cmd, uint16_t
120120
void *rsp, uint16_t *rsp_len);
121121
uint8_t btp_bap_broadcast_assistant_send_past(const void *cmd, uint16_t cmd_len,
122122
void *rsp, uint16_t *rsp_len);
123+
uint8_t btp_bap_scan_delegator_add_src(const void *cmd, uint16_t cmd_len,
124+
void *rsp, uint16_t *rsp_len);

0 commit comments

Comments
 (0)