Skip to content

Commit 3d9f2d1

Browse files
Thalleykartben
authored andcommitted
tests: Bluetooth: ISO: Add validation of broadcast info
Add validation of the info the application can retrieve by calling bt_iso_chan_get_info. Signed-off-by: Emil Gydesen <[email protected]>
1 parent a5f9793 commit 3d9f2d1

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

include/zephyr/bluetooth/hci_types.h

+7
Original file line numberDiff line numberDiff line change
@@ -3403,6 +3403,13 @@ struct bt_hci_evt_le_cis_req {
34033403
uint8_t cis_id;
34043404
} __packed;
34053405

3406+
#define BT_HCI_LE_BIG_HANDLE_MIN 0x00U
3407+
#define BT_HCI_LE_BIG_HANDLE_MAX 0xEFU
3408+
#define BT_HCI_LE_BIG_SYNC_DELAY_MIN 0x000030U
3409+
#define BT_HCI_LE_BIG_SYNC_DELAY_MAX 0x7FFFFFU
3410+
#define BT_HCI_LE_TRANSPORT_LATENCY_BIG_MIN 0x000030U
3411+
#define BT_HCI_LE_TRANSPORT_LATENCY_BIG_MAX 0x7FFFFFU
3412+
34063413
#define BT_HCI_EVT_LE_BIG_COMPLETE 0x1b
34073414
struct bt_hci_evt_le_big_complete {
34083415
uint8_t status;

tests/bsim/bluetooth/host/iso/bis/src/bis_broadcaster.c

+36
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,46 @@ static void iso_connected_cb(struct bt_iso_chan *chan)
104104
.pid = BT_ISO_DATA_PATH_HCI,
105105
.format = BT_HCI_CODING_FORMAT_TRANSPARENT,
106106
};
107+
struct bt_iso_info info;
107108
int err;
108109

109110
LOG_INF("ISO Channel %p connected", chan);
110111

112+
err = bt_iso_chan_get_info(chan, &info);
113+
TEST_ASSERT(err == 0, "Failed to get BIS info: %d", err);
114+
115+
TEST_ASSERT(!info.can_recv);
116+
TEST_ASSERT(info.can_send);
117+
TEST_ASSERT(info.type == BT_ISO_CHAN_TYPE_BROADCASTER);
118+
TEST_ASSERT((BT_GAP_ISO_INTERVAL_TO_US(info.iso_interval) % SDU_INTERVAL_US) == 0U,
119+
"ISO interval %u (%u) shall be a multiple of the SDU interval %u",
120+
BT_GAP_ISO_INTERVAL_TO_US(info.iso_interval), info.iso_interval,
121+
SDU_INTERVAL_US);
122+
TEST_ASSERT(IN_RANGE(info.iso_interval, BT_ISO_ISO_INTERVAL_MIN, BT_ISO_ISO_INTERVAL_MAX),
123+
"Invalid ISO interval 0x%04x", info.iso_interval);
124+
TEST_ASSERT(IN_RANGE(info.max_subevent, BT_ISO_NSE_MIN, BT_ISO_NSE_MAX),
125+
"Invalid subevent number 0x%02x", info.max_subevent);
126+
TEST_ASSERT(IN_RANGE(info.broadcaster.sync_delay, BT_HCI_LE_BIG_SYNC_DELAY_MIN,
127+
BT_HCI_LE_BIG_SYNC_DELAY_MAX),
128+
"Invalid sync delay 0x%06x", info.broadcaster.sync_delay);
129+
TEST_ASSERT(IN_RANGE(info.broadcaster.latency, BT_HCI_LE_TRANSPORT_LATENCY_BIG_MIN,
130+
BT_HCI_LE_TRANSPORT_LATENCY_BIG_MAX),
131+
"Invalid transport latency 0x%06x", info.broadcaster.latency);
132+
TEST_ASSERT((info.broadcaster.pto % info.iso_interval) == 0U,
133+
"PTO in ms %u shall be a multiple of the ISO interval %u", info.broadcaster.pto,
134+
info.iso_interval);
135+
TEST_ASSERT(IN_RANGE((info.broadcaster.pto / info.iso_interval), BT_ISO_PTO_MIN,
136+
BT_ISO_PTO_MAX),
137+
"Invalid PTO 0x%x", (info.broadcaster.pto / info.iso_interval));
138+
TEST_ASSERT(info.broadcaster.phy == BT_GAP_LE_PHY_1M ||
139+
info.broadcaster.phy == BT_GAP_LE_PHY_2M ||
140+
info.broadcaster.phy == BT_GAP_LE_PHY_CODED,
141+
"Invalid PHY 0x%02x", info.broadcaster.phy);
142+
TEST_ASSERT(IN_RANGE(info.broadcaster.bn, BT_ISO_BN_MIN, BT_ISO_BN_MAX),
143+
"Invalid BN 0x%02x", info.broadcaster.bn);
144+
TEST_ASSERT(IN_RANGE(info.broadcaster.irc, BT_ISO_IRC_MIN, BT_ISO_IRC_MAX),
145+
"Invalid IRC 0x%02x", info.broadcaster.irc);
146+
111147
if (chan == default_chan) {
112148
seq_num = 0U;
113149

tests/bsim/bluetooth/host/iso/bis/src/bis_receiver.c

+25
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,35 @@ static void iso_connected(struct bt_iso_chan *chan)
8787
.pid = BT_ISO_DATA_PATH_HCI,
8888
.format = BT_HCI_CODING_FORMAT_TRANSPARENT,
8989
};
90+
struct bt_iso_info info;
9091
int err;
9192

9293
LOG_INF("ISO Channel %p connected", chan);
9394

95+
err = bt_iso_chan_get_info(chan, &info);
96+
TEST_ASSERT(err == 0, "Failed to get BIS info: %d", err);
97+
98+
TEST_ASSERT(info.can_recv);
99+
TEST_ASSERT(!info.can_send);
100+
TEST_ASSERT(info.type == BT_ISO_CHAN_TYPE_SYNC_RECEIVER);
101+
TEST_ASSERT(IN_RANGE(info.iso_interval, BT_ISO_ISO_INTERVAL_MIN, BT_ISO_ISO_INTERVAL_MAX),
102+
"Invalid ISO interval 0x%04x", info.iso_interval);
103+
TEST_ASSERT(IN_RANGE(info.max_subevent, BT_ISO_NSE_MIN, BT_ISO_NSE_MAX),
104+
"Invalid subevent number 0x%02x", info.max_subevent);
105+
TEST_ASSERT(IN_RANGE(info.sync_receiver.latency, BT_HCI_LE_TRANSPORT_LATENCY_BIG_MIN,
106+
BT_HCI_LE_TRANSPORT_LATENCY_BIG_MAX),
107+
"Invalid transport latency 0x%06x", info.sync_receiver.latency);
108+
TEST_ASSERT((info.sync_receiver.pto % info.iso_interval) == 0U,
109+
"PTO in ms %u shall be a multiple of the ISO interval %u",
110+
info.sync_receiver.pto, info.iso_interval);
111+
TEST_ASSERT(IN_RANGE((info.sync_receiver.pto / info.iso_interval), BT_ISO_PTO_MIN,
112+
BT_ISO_PTO_MAX),
113+
"Invalid PTO 0x%x", (info.sync_receiver.pto / info.iso_interval));
114+
TEST_ASSERT(IN_RANGE(info.sync_receiver.bn, BT_ISO_BN_MIN, BT_ISO_BN_MAX),
115+
"Invalid BN 0x%02x", info.sync_receiver.bn);
116+
TEST_ASSERT(IN_RANGE(info.sync_receiver.irc, BT_ISO_IRC_MIN, BT_ISO_IRC_MAX),
117+
"Invalid IRC 0x%02x", info.sync_receiver.irc);
118+
94119
SET_FLAG(flag_iso_connected);
95120

96121
err = bt_iso_setup_data_path(chan, BT_HCI_DATAPATH_DIR_CTLR_TO_HOST, &hci_path);

0 commit comments

Comments
 (0)