diff --git a/emulator/bthost.c b/emulator/bthost.c
index f53b438..7ab4533 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
&cp, sizeof(cp));
}
-void bthost_set_ext_adv_params(struct bthost *bthost)
+void bthost_set_ext_adv_params(struct bthost *bthost, uint8_t sid)
{
const uint8_t interval_20ms[] = { 0x20, 0x00, 0x00 };
struct bt_hci_cmd_le_set_ext_adv_params cp;
cp.evt_properties = cpu_to_le16(0x0013);
memcpy(cp.min_interval, interval_20ms, sizeof(cp.min_interval));
memcpy(cp.max_interval, interval_20ms, sizeof(cp.max_interval));
+ cp.sid = sid;
send_command(bthost, BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
&cp, sizeof(cp));
}
diff --git a/emulator/bthost.h b/emulator/bthost.h
index db640da..456f631 100644
--- a/emulator/bthost.h
+++ b/emulator/bthost.h
void bthost_set_ext_adv_data(struct bthost *bthost, const uint8_t *data,
uint8_t len);
-void bthost_set_ext_adv_params(struct bthost *bthost);
+void bthost_set_ext_adv_params(struct bthost *bthost, uint8_t sid);
void bthost_set_ext_adv_enable(struct bthost *bthost, uint8_t enable);
void bthost_set_pa_params(struct bthost *bthost);
void bthost_set_pa_data(struct bthost *bthost, const uint8_t *data,
diff --git a/tools/iso-tester.c b/tools/iso-tester.c
index 7bc0eb1..725fd33 100644
--- a/tools/iso-tester.c
+++ b/tools/iso-tester.c
.base_len = sizeof(base_lc3_16_2_1),
};
+static const struct iso_client_data bcast_16_2_1_send_sid = {
+ .qos = QOS_OUT_16_2_1,
+ .expect_err = 0,
+ .send = &send_16_2_1,
+ .bcast = true,
+ .base = base_lc3_16_2_1,
+ .base_len = sizeof(base_lc3_16_2_1),
+ .sid = 0xff,
+};
+
+static const struct iso_client_data bcast_16_2_1_send_sid1 = {
+ .qos = QOS_OUT_16_2_1,
+ .expect_err = 0,
+ .send = &send_16_2_1,
+ .bcast = true,
+ .base = base_lc3_16_2_1,
+ .base_len = sizeof(base_lc3_16_2_1),
+ .sid = 0x01,
+};
+
static const struct iso_client_data bcast_16_2_1_recv = {
.qos = QOS_IN_16_2_1,
.expect_err = 0,
.sid = 0xff,
};
+static const struct iso_client_data bcast_16_2_1_recv_sid1 = {
+ .qos = QOS_IN_16_2_1,
+ .expect_err = 0,
+ .recv = &send_16_2_1,
+ .bcast = true,
+ .server = true,
+ .big = true,
+ .sid = 0x01,
+};
+
static const struct iso_client_data bcast_enc_16_2_1_recv = {
.qos = QOS_IN_ENC_16_2_1,
.expect_err = 0,
host = hciemu_client_host(client);
bthost_set_cmd_complete_cb(host, client_connectable_complete,
data);
- bthost_set_ext_adv_params(host);
+ bthost_set_ext_adv_params(host, isodata->sid != 0xff ?
+ isodata->sid : 0x00);
bthost_set_ext_adv_enable(host, 0x01);
if (!isodata)
static int create_iso_sock(struct test_data *data)
{
+ const struct iso_client_data *isodata = data->test_data;
const uint8_t *master_bdaddr;
- struct sockaddr_iso addr;
+ struct sockaddr_iso *addr;
int sk, err;
sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET | SOCK_NONBLOCK, BTPROTO_ISO);
return -ENODEV;
}
- memset(&addr, 0, sizeof(addr));
- addr.iso_family = AF_BLUETOOTH;
- bacpy(&addr.iso_bdaddr, (void *) master_bdaddr);
- addr.iso_bdaddr_type = BDADDR_LE_PUBLIC;
+ if (isodata->bcast && isodata->sid) {
+ addr = malloc(sizeof(*addr) + sizeof(*addr->iso_bc));
+ memset(addr, 0, sizeof(*addr) + sizeof(*addr->iso_bc));
+ addr->iso_family = AF_BLUETOOTH;
+ bacpy(&addr->iso_bdaddr, (void *) master_bdaddr);
+ addr->iso_bdaddr_type = BDADDR_LE_PUBLIC;
+ addr->iso_bc->bc_bdaddr_type = BDADDR_LE_PUBLIC;
+ addr->iso_bc->bc_sid = isodata->sid;
+ err = bind(sk, (struct sockaddr *) addr, sizeof(*addr) +
+ sizeof(*addr->iso_bc));
+ } else {
+ addr = malloc(sizeof(*addr));
+ memset(addr, 0, sizeof(*addr));
+ addr->iso_family = AF_BLUETOOTH;
+ bacpy(&addr->iso_bdaddr, (void *) master_bdaddr);
+ addr->iso_bdaddr_type = BDADDR_LE_PUBLIC;
+ err = bind(sk, (struct sockaddr *) addr, sizeof(addr));
+ }
- if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+ if (err < 0) {
err = -errno;
tester_warn("Can't bind socket: %s (%d)", strerror(errno),
errno);
tester_test_failed();
return FALSE;
}
+
+ tester_print("SID: 0x%02x", addr.bc.bc_sid);
}
len = sizeof(sk_err);
&bcast_1_1_16_2_1_send,
setup_powered,
test_bcast);
+ test_iso("ISO Broadcaster SID auto - Success", &bcast_16_2_1_send_sid,
+ setup_powered,
+ test_bcast);
+ test_iso("ISO Broadcaster SID 0x01 - Success", &bcast_16_2_1_send_sid1,
+ setup_powered,
+ test_bcast);
test_iso("ISO Broadcaster Receiver - Success", &bcast_16_2_1_recv,
setup_powered,
test_bcast_recv);
- test_iso("ISO Broadcaster Receiver SID 0xff - Success",
+ test_iso("ISO Broadcaster Receiver SID auto - Success",
&bcast_16_2_1_recv_sid,
setup_powered,
test_bcast_recv);
+ test_iso("ISO Broadcaster Receiver SID 0x01 - Success",
+ &bcast_16_2_1_recv_sid1,
+ setup_powered,
+ test_bcast_recv);
test_iso2("ISO Broadcaster Receiver2 - Success", &bcast_16_2_1_recv2,
setup_powered,
test_bcast_recv2);
diff --git a/tools/mesh-tester.c b/tools/mesh-tester.c
index d7b3b6f..848ccbe 100644
--- a/tools/mesh-tester.c
+++ b/tools/mesh-tester.c
if (data->hciemu_type == HCIEMU_TYPE_LE ||
test->client_enable_adv) {
if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
- bthost_set_ext_adv_params(bthost);
+ bthost_set_ext_adv_params(bthost, 0x00);
bthost_set_ext_adv_enable(bthost, 0x01);
} else
bthost_set_adv_enable(bthost, 0x01);
diff --git a/tools/mgmt-tester.c b/tools/mgmt-tester.c
index 030827c..a1d4815 100644
--- a/tools/mgmt-tester.c
+++ b/tools/mgmt-tester.c
if (data->hciemu_type == HCIEMU_TYPE_LE ||
test->client_enable_adv) {
if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
- bthost_set_ext_adv_params(bthost);
+ bthost_set_ext_adv_params(bthost, 0x00);
bthost_set_ext_adv_enable(bthost, 0x01);
} else
bthost_set_adv_enable(bthost, 0x01);
bthost_set_adv_enable(bthost, 0x01);
} else if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
- bthost_set_ext_adv_params(bthost);
+ bthost_set_ext_adv_params(bthost, 0x00);
if (test->set_adv)
bthost_set_ext_adv_data(bthost, test->adv_data,
test->adv_data_len);