Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions samples/bluetooth/broadcaster_multiple/overlay-bt_ll_sw_split.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Increased to 4 gives one each of legacy, 2M, 1M and Coded PHY advertising sets
CONFIG_BT_EXT_ADV_MAX_ADV_SET=4

# Use Zephyr Bluetooth Low Energy Controller
CONFIG_BT_LL_SW_SPLIT=y

# Enable Coded PHY support in Zephyr Controller, if testing 4 advertising sets
CONFIG_BT_CTLR_PHY_CODED=y

# Zephyr Bluetooth LE Controller will need to use chain PDUs when AD data
# length > 191 bytes
# - 31 bytes will use 22 bytes for the default name in this sample plus 9 bytes
# for manufacturer data
# - 191 bytes will use 22 bytes for the default name in this sample plus 169
# bytes for manufacturer data
# - 277 bytes will use 22 bytes for the default name in this sample plus 255
# bytes for manufacturer data
CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=192

# Increase Advertising PDU buffers to number of advertising sets times the
# number of chain PDUs per advertising set when using Zephyr Bluetooth LE
# Controller
CONFIG_BT_CTLR_ADVANCED_FEATURES=y
CONFIG_BT_CTLR_ADV_RESERVE_MAX=n
CONFIG_BT_CTLR_ADV_DATA_BUF_MAX=6
CONFIG_BT_CTLR_ADV_DATA_CHAIN=y
21 changes: 4 additions & 17 deletions samples/bluetooth/broadcaster_multiple/prj.conf
Original file line number Diff line number Diff line change
@@ -1,23 +1,10 @@
CONFIG_BT=y
CONFIG_BT_BROADCASTER=y
CONFIG_BT_EXT_ADV=y
CONFIG_BT_EXT_ADV_MAX_ADV_SET=2
CONFIG_BT_DEVICE_NAME="Broadcaster Multiple"

CONFIG_LOG=y

# Zephyr Bluetooth LE Controller will need to use chain PDUs when AD data
# length > 191 bytes
# - 31 bytes will use 22 bytes for the default name in this sample plus 9 bytes
# for manufacturer data
# - 191 bytes will use 22 bytes for the default name in this sample plus 169
# bytes for manufacturer data
# - 277 bytes will use 22 bytes for the default name in this sample plus 255
# bytes for manufacturer data
# CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=192
# Require Bluetooth Advertising Extensions Feature
CONFIG_BT_EXT_ADV=y

# Increase Advertising PDU buffers to number of advertising sets times the
# number of chain PDUs per advertising set when using Zephyr Bluetooth LE
# Controller
# CONFIG_BT_CTLR_ADVANCED_FEATURES=y
# CONFIG_BT_CTLR_ADV_DATA_BUF_MAX=2
# Increased to 4 gives one each of legacy, 2M, 1M and Coded PHY advertising sets
CONFIG_BT_EXT_ADV_MAX_ADV_SET=2
16 changes: 13 additions & 3 deletions samples/bluetooth/broadcaster_multiple/sample.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
sample:
name: Bluetooth Multiple Extended Advertising Broadcaster
tests:
sample.bluetooth.multiple_broadcast:
sample.bluetooth.broadcaster_multiple:
harness: bluetooth
tags: bluetooth
platform_allow:
- qemu_cortex_m3
- qemu_x86
integration_platforms:
- qemu_cortex_m3
sample.bluetooth.broadcaster_multiple.bt_ll_sw_split:
harness: bluetooth
tags: bluetooth
extra_args:
- EXTRA_CONF_FILE=overlay-bt_ll_sw_split.conf
platform_allow:
- nrf51dk/nrf51822
- nrf52_bsim
- nrf52dk/nrf52832
tags: bluetooth
- nrf52840dk/nrf52840
integration_platforms:
- qemu_cortex_m3
- nrf52dk/nrf52832
- nrf52840dk/nrf52840
83 changes: 69 additions & 14 deletions samples/bluetooth/broadcaster_multiple/src/broadcaster_multiple.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,50 +54,105 @@
*/
static uint8_t mfg_data[BT_MFG_DATA_LEN] = { 0xFF, 0xFF, };

static const struct bt_data ad[] = {
static const struct bt_data ad_long[] = {
BT_DATA(BT_DATA_MANUFACTURER_DATA, mfg_data, sizeof(mfg_data)),
#if CONFIG_BT_CTLR_ADV_DATA_LEN_MAX > 255
BT_DATA(BT_DATA_MANUFACTURER_DATA, mfg_data, sizeof(mfg_data)),
#endif
BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1),
};

static const struct bt_data ad_short[] = {
BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1),
};

static struct bt_le_ext_adv *adv[CONFIG_BT_EXT_ADV_MAX_ADV_SET];

int broadcaster_multiple(void)
{
struct bt_le_adv_param adv_param = {
.id = BT_ID_DEFAULT,
.sid = 0U, /* Supply unique SID when creating advertising set */
.secondary_max_skip = 0U,
.options = BT_LE_ADV_OPT_EXT_ADV,
.interval_min = BT_GAP_ADV_FAST_INT_MIN_2,
.interval_max = BT_GAP_ADV_FAST_INT_MAX_2,
.peer = NULL,
};
int err;

/* Create Advertising Sets */
for (int index = 0; index < CONFIG_BT_EXT_ADV_MAX_ADV_SET; index++) {
struct bt_le_adv_param adv_param = {
.id = BT_ID_DEFAULT,
.sid = 0U, /* Supply unique SID when creating advertising set */
.secondary_max_skip = 0U,
.options = BT_LE_ADV_OPT_EXT_ADV,
.interval_min = BT_GAP_ADV_FAST_INT_MIN_2,
.interval_max = BT_GAP_ADV_FAST_INT_MAX_2,
.peer = NULL,
};
const struct adv_param_config {
uint32_t options;
const struct bt_data *ad;
size_t ad_size;
} param_config[] = {
/* Use 1M legacy PDU */
{.options = BT_LE_ADV_OPT_NONE,
.ad = ad_short,
.ad_size = ARRAY_SIZE(ad_short),
},
/* Use 2M auxiliary PDU */
{.options = BT_LE_ADV_OPT_EXT_ADV,
Comment on lines +91 to +97
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't look like it's following a correct indentation style, where the contents of a new { ... } block should always be indented by one more tab. If you did it like the following it should be correct, and not even add any new lines:

	{ /* Use 1M legacy PDU */
		.options = BT_LE_ADV_OPT_NONE,
		.ad = ad_short,
		.ad_size = ARRAY_SIZE(ad_short),
	},
	{ /* Use 2M auxiliary PDU */
		.options = BT_LE_ADV_OPT_EXT_ADV,
		...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, will fix this indentation.

.ad = ad_long,
.ad_size = ARRAY_SIZE(ad_long),
},
/* Use 1M auxiliary PDU */
{.options = BT_LE_ADV_OPT_EXT_ADV | BT_LE_ADV_OPT_NO_2M,
.ad = ad_long,
.ad_size = ARRAY_SIZE(ad_long),
},
/* Use Coded PHY */
{.options = BT_LE_ADV_OPT_EXT_ADV | BT_LE_ADV_OPT_CODED,
.ad = ad_long,
.ad_size = ARRAY_SIZE(ad_long),
},
};
const struct bt_data *ad;
size_t ad_size;

/* Use advertising set instance index as SID */
adv_param.sid = index;

/* Advertising set options, AD and AD array size */
const struct adv_param_config *config =
&param_config[index % ARRAY_SIZE(param_config)];

adv_param.options = config->options;
ad = config->ad;
ad_size = config->ad_size;

ext_adv_create_retry:
/* Create a non-connectable advertising set */
err = bt_le_ext_adv_create(&adv_param, NULL, &adv[index]);
if (err) {
printk("Failed to create advertising set %d (err %d)\n",
index, err);
/* Failed creating Coded PHY advertising set? */
if ((adv_param.options & BT_LE_ADV_OPT_CODED) != 0U) {
printk("Failed to create advertising set %d with Coded PHY "
"(err %d), retry without...\n", index, err);

/* Retry with non-Coded PHY advertising set */
adv_param.options &= ~BT_LE_ADV_OPT_CODED;

goto ext_adv_create_retry;
}

printk("Failed to create advertising set %d (err %d)\n", index, err);
return err;
}

/* Set extended advertising data */
err = bt_le_ext_adv_set_data(adv[index], ad, ARRAY_SIZE(ad),
NULL, 0);
err = bt_le_ext_adv_set_data(adv[index], ad, ad_size, NULL, 0);
if (err) {
printk("Failed to set advertising data for set %d "
"(err %d)\n", index, err);
return err;
}
}

/* Start Advertising Sets */
for (int index = 0; index < CONFIG_BT_EXT_ADV_MAX_ADV_SET; index++) {
/* Start extended advertising set */
err = bt_le_ext_adv_start(adv[index],
BT_LE_EXT_ADV_START_DEFAULT);
Expand Down
18 changes: 17 additions & 1 deletion samples/bluetooth/hci_ipc/nrf5340_cpunet_bis-bt_ll_sw_split.conf
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,24 @@ CONFIG_BT_CTLR_ADV_DATA_BUF_MAX=6

# Increase the below to receive interleaved advertising chains
CONFIG_BT_CTLR_SCAN_AUX_SET=3
CONFIG_BT_CTLR_LOW_LAT_ULL=y
# CONFIG_BT_CTLR_SCAN_AUX_USE_CHAINS=y
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=1
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=3

CONFIG_BT_CTLR_ADV_RESERVE_MAX=n
CONFIG_BT_CTLR_ADV_ISO_RESERVE_MAX=y
CONFIG_BT_CTLR_SCAN_AUX_SYNC_RESERVE_MIN=y
CONFIG_BT_CTLR_SYNC_PERIODIC_SKIP_ON_SCAN_AUX=n
CONFIG_BT_CTLR_SYNC_ISO_RESERVE_MAX=n
CONFIG_BT_CTLR_CENTRAL_RESERVE_MAX=n
CONFIG_BT_CTLR_PERIPHERAL_RESERVE_MAX=n
CONFIG_BT_CTLR_PERIPHERAL_ISO_RESERVE_MAX=n
CONFIG_BT_CTLR_EVENT_OVERHEAD_RESERVE_MAX=y
CONFIG_BT_CTLR_SLOT_RESERVATION_UPDATE=n
CONFIG_BT_CTLR_SCAN_UNRESERVED=y
CONFIG_BT_TICKER_NEXT_SLOT_GET_MATCH=y
CONFIG_BT_TICKER_EXT=y
CONFIG_BT_TICKER_EXT_SLOT_WINDOW_YIELD=y

# Control Procedure
CONFIG_BT_CTLR_LLCP_LOCAL_PROC_CTX_BUF_NUM=6
Expand All @@ -84,6 +96,8 @@ CONFIG_BT_CTLR_ADV_EXT=y
CONFIG_BT_CTLR_ADV_PERIODIC=y
CONFIG_BT_CTLR_SYNC_TRANSFER_SENDER=y
CONFIG_BT_CTLR_ADV_ISO=y
CONFIG_BT_CTLR_ADV_ISO_SEQUENTIAL=y
CONFIG_BT_CTLR_ADV_ISO_INTERLEAVED=y
CONFIG_BT_CTLR_ADV_ISO_SET=2
CONFIG_BT_CTLR_ADV_ISO_STREAM_COUNT=4
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
Expand All @@ -94,6 +108,8 @@ CONFIG_BT_CTLR_ADV_EXT=y
CONFIG_BT_CTLR_SYNC_PERIODIC=y
CONFIG_BT_CTLR_SYNC_TRANSFER_RECEIVER=y
CONFIG_BT_CTLR_SYNC_ISO=y
CONFIG_BT_CTLR_SYNC_ISO_SEQUENTIAL=y
CONFIG_BT_CTLR_SYNC_ISO_INTERLEAVED=y
CONFIG_BT_CTLR_SCAN_SYNC_ISO_SET=1
CONFIG_BT_CTLR_SYNC_ISO_STREAM_COUNT=2
CONFIG_BT_CTLR_SYNC_ISO_STREAM_MAX=2
Expand Down
11 changes: 8 additions & 3 deletions samples/bluetooth/hci_ipc/nrf5340_cpunet_cis-bt_ll_sw_split.conf
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ CONFIG_BT_ISO_MAX_CHAN=4
# is used in the context of IPC which falls into a "Newton's Cradle" effect
# where probably (CONFIG_BT_CTLR_ISO_TX_BUFFERS - CONFIG_BT_ISO_TX_BUF_COUNT)
# buffers get throttled. Hence, always have the value equal or greater.
CONFIG_BT_ISO_TX_BUF_COUNT=12
CONFIG_BT_ISO_TX_BUF_COUNT=6
CONFIG_BT_ISO_RX_BUF_COUNT=1

# Controller
Expand Down Expand Up @@ -66,11 +66,16 @@ CONFIG_BT_CTLR_ADV_DATA_BUF_MAX=6

# Increase the below to receive interleaved advertising chains
CONFIG_BT_CTLR_SCAN_AUX_SET=3
CONFIG_BT_CTLR_LOW_LAT_ULL=y
# CONFIG_BT_CTLR_SCAN_AUX_USE_CHAINS=y
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=1
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=3

CONFIG_BT_CTLR_ADV_RESERVE_MAX=n
CONFIG_BT_CTLR_SCAN_AUX_SYNC_RESERVE_MIN=y
CONFIG_BT_CTLR_SYNC_PERIODIC_SKIP_ON_SCAN_AUX=n
CONFIG_BT_CTLR_CENTRAL_RESERVE_MAX=n
CONFIG_BT_CTLR_PERIPHERAL_RESERVE_MAX=n
CONFIG_BT_CTLR_EVENT_OVERHEAD_RESERVE_MAX=y
CONFIG_BT_CTLR_SLOT_RESERVATION_UPDATE=n
CONFIG_BT_CTLR_SCAN_UNRESERVED=y
CONFIG_BT_TICKER_NEXT_SLOT_GET_MATCH=y
Expand All @@ -91,7 +96,7 @@ CONFIG_BT_CTLR_CONN_ISO_LOW_LATENCY_POLICY=y

# ISO Transmissions
CONFIG_BT_CTLR_ISOAL_SOURCES=2
CONFIG_BT_CTLR_ISO_TX_BUFFERS=12
CONFIG_BT_CTLR_ISO_TX_BUFFERS=6
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISO_TX_SDU_LEN_MAX=247

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ CONFIG_BT_CTLR_ADV_DATA_BUF_MAX=6
# Increase the below to receive interleaved advertising chains
CONFIG_BT_CTLR_SCAN_AUX_SET=1
# CONFIG_BT_CTLR_SCAN_AUX_USE_CHAINS=y
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=1
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=3

CONFIG_BT_CTLR_SCAN_UNRESERVED=y
CONFIG_BT_TICKER_NEXT_SLOT_GET_MATCH=y
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ CONFIG_BT_CTLR_ADV_DATA_BUF_MAX=6
CONFIG_BT_CTLR_SCAN_AUX_SET=3
CONFIG_BT_CTLR_LOW_LAT_ULL=y
# CONFIG_BT_CTLR_SCAN_AUX_USE_CHAINS=y
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=1
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=3

CONFIG_BT_CTLR_ADV_RESERVE_MAX=n
CONFIG_BT_CTLR_ADV_ISO_RESERVE_MAX=y
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ CONFIG_BT_LL_SW_SPLIT=y
CONFIG_BT_CTLR_ADV_PERIODIC=y
CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=191
CONFIG_BT_CTLR_ADV_ISO=y
CONFIG_BT_CTLR_ADV_ISO_SEQUENTIAL=y
CONFIG_BT_CTLR_ADV_ISO_INTERLEAVED=y
CONFIG_BT_CTLR_ADV_ISO_SET=2
CONFIG_BT_CTLR_ADV_ISO_STREAM_COUNT=4
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
Expand All @@ -45,3 +47,4 @@ CONFIG_BT_CTLR_ISO_TX_SDU_LEN_MAX=247

CONFIG_BT_CTLR_ADVANCED_FEATURES=y
CONFIG_BT_CTLR_ADV_RESERVE_MAX=n
CONFIG_BT_CTLR_ADV_ISO_RESERVE_MAX=y
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ CONFIG_BT_ISO_MAX_CHAN=2
# is used in the context of IPC which falls into a "Newton's Cradle" effect
# where probably (CONFIG_BT_CTLR_ISO_TX_BUFFERS - CONFIG_BT_ISO_TX_BUF_COUNT)
# buffers get throttled. Hence, always have the value equal or greater.
CONFIG_BT_ISO_TX_BUF_COUNT=12
CONFIG_BT_ISO_TX_BUF_COUNT=6
CONFIG_BT_ISO_RX_BUF_COUNT=1

# Controller
Expand All @@ -54,7 +54,7 @@ CONFIG_BT_CTLR_CONN_ISO_LOW_LATENCY_POLICY=y

# ISO Transmissions
CONFIG_BT_CTLR_ISOAL_SOURCES=2
CONFIG_BT_CTLR_ISO_TX_BUFFERS=12
CONFIG_BT_CTLR_ISO_TX_BUFFERS=6
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISO_TX_SDU_LEN_MAX=247

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ CONFIG_BT_ISO_MAX_CHAN=2
# is used in the context of IPC which falls into a "Newton's Cradle" effect
# where probably (CONFIG_BT_CTLR_ISO_TX_BUFFERS - CONFIG_BT_ISO_TX_BUF_COUNT)
# buffers get throttled. Hence, always have the value equal or greater.
CONFIG_BT_ISO_TX_BUF_COUNT=12
CONFIG_BT_ISO_TX_BUF_COUNT=6
CONFIG_BT_ISO_RX_BUF_COUNT=1

# Controller
Expand All @@ -54,7 +54,7 @@ CONFIG_BT_CTLR_CONN_ISO_LOW_LATENCY_POLICY=y

# ISO Transmissions
CONFIG_BT_CTLR_ISOAL_SOURCES=2
CONFIG_BT_CTLR_ISO_TX_BUFFERS=12
CONFIG_BT_CTLR_ISO_TX_BUFFERS=6
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
CONFIG_BT_CTLR_ISO_TX_SDU_LEN_MAX=247

Expand All @@ -64,3 +64,7 @@ CONFIG_BT_CTLR_ISO_RX_BUFFERS=4

CONFIG_BT_CTLR_ADVANCED_FEATURES=y
CONFIG_BT_CTLR_ADV_RESERVE_MAX=n
CONFIG_BT_CTLR_PERIPHERAL_RESERVE_MAX=n
CONFIG_BT_CTLR_PERIPHERAL_ISO_RESERVE_MAX=n
CONFIG_BT_CTLR_EVENT_OVERHEAD_RESERVE_MAX=y
CONFIG_BT_CTLR_SLOT_RESERVATION_UPDATE=n
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ CONFIG_BT_LL_SW_SPLIT=y
CONFIG_BT_CTLR_SYNC_PERIODIC=y
CONFIG_BT_CTLR_SCAN_DATA_LEN_MAX=191
CONFIG_BT_CTLR_SYNC_ISO=y
CONFIG_BT_CTLR_SYNC_ISO_SEQUENTIAL=y
CONFIG_BT_CTLR_SYNC_ISO_INTERLEAVED=y
CONFIG_BT_CTLR_SCAN_SYNC_ISO_SET=1
CONFIG_BT_CTLR_SYNC_ISO_STREAM_COUNT=2
CONFIG_BT_CTLR_SYNC_ISO_STREAM_MAX=2
Expand Down
2 changes: 1 addition & 1 deletion samples/bluetooth/hci_uart/overlay-all-bt_ll_sw_split.conf
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ CONFIG_BT_CTLR_ADV_DATA_BUF_MAX=6
# Increase the below to receive interleaved advertising chains
CONFIG_BT_CTLR_SCAN_AUX_SET=3
# CONFIG_BT_CTLR_SCAN_AUX_USE_CHAINS=y
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=1
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=3

CONFIG_BT_CTLR_ADV_RESERVE_MAX=n
CONFIG_BT_CTLR_ADV_ISO_RESERVE_MAX=y
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ CONFIG_BT_CTLR_ADV_DATA_BUF_MAX=6
# Increase the below to receive interleaved advertising chains
CONFIG_BT_CTLR_SCAN_AUX_SET=3
# CONFIG_BT_CTLR_SCAN_AUX_USE_CHAINS=y
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=1
# CONFIG_BT_CTLR_SCAN_AUX_CHAIN_COUNT=3

CONFIG_BT_CTLR_ADV_RESERVE_MAX=n
CONFIG_BT_CTLR_ADV_ISO_RESERVE_MAX=y
Expand Down
Loading
Loading