Skip to content

Commit a04c3ca

Browse files
alexstanoev-nordicsean-madigan
authored andcommitted
bluetooth: controller: Support Shorter Connection Intervals commands
Add support for HCI commands related to Shorter Connection Intervals to the SoftDevice Controller HCI driver. hci_internal_supported_commands update will follow separately. SDC_HCI_OPCODE_CMD_LE_SET_HOST_FEATURE_V2 is used by SCI tests. Signed-off-by: Aleksandar Stanoev <aleksandar.stanoev@nordicsemi.no>
1 parent f002bc3 commit a04c3ca

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

subsys/bluetooth/controller/Kconfig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ config BT_LL_SOFTDEVICE
4343
select BT_CTLR_SUBRATING_SUPPORT
4444
select BT_CTLR_EXTENDED_FEAT_SET_SUPPORT
4545
select BT_CTLR_FRAME_SPACE_UPDATE_SUPPORT
46+
select BT_CTLR_SHORTER_CONNECTION_INTERVALS_SUPPORT
4647
select BT_LL_SOFTDEVICE_HEADERS_INCLUDE
4748
select MRAM_LATENCY if (SOC_NRF54H20_CPURAD && !MPSL_PM_USE_MRAM_LATENCY_SERVICE)
4849
select MRAM_LATENCY_AUTO_REQ if (SOC_NRF54H20_CPURAD && !MPSL_PM_USE_MRAM_LATENCY_SERVICE)
@@ -292,6 +293,19 @@ config BT_CTLR_DF_CONN_CTE_RSP
292293
config BT_CTLR_ADV_EXT_PDU_EXTRA_DATA_MEMORY
293294
bool
294295

296+
config BT_CTLR_SHORTER_CONNECTION_INTERVALS_SUPPORT
297+
bool
298+
299+
config BT_CTLR_SHORTER_CONNECTION_INTERVALS
300+
bool "Shorter Connection Intervals"
301+
depends on BT_CTLR_SHORTER_CONNECTION_INTERVALS_SUPPORT
302+
depends on BT_CTLR_EXTENDED_FEAT_SET
303+
depends on BT_CTLR_SUBRATING
304+
select BT_CTLR_SET_HOST_FEATURE
305+
help
306+
Enable support for Bluetooth 6.2 Shorter Connection Intervals
307+
in the controller.
308+
295309
choice BT_LL_SOFTDEVICE_VARIANT
296310
prompt "SoftDevice Controller variant"
297311
default BT_LL_SOFTDEVICE_MULTIROLE if ((BT_OBSERVER && BT_BROADCASTER) || \
@@ -310,6 +324,7 @@ choice BT_LL_SOFTDEVICE_VARIANT
310324
BT_CTLR_CHANNEL_SOUNDING || \
311325
BT_CTLR_EXTENDED_FEAT_SET || \
312326
BT_CTLR_FRAME_SPACE_UPDATE || \
327+
BT_CTLR_SHORTER_CONNECTION_INTERVALS || \
313328
SOC_COMPATIBLE_NRF5340_CPUNET || \
314329
(SOC_COMPATIBLE_NRF54LX && TRUSTED_EXECUTION_NONSECURE) || \
315330
SOC_SERIES_NRF71X)

subsys/bluetooth/controller/hci_driver.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,13 @@ BUILD_ASSERT(!IS_ENABLED(CONFIG_BT_PERIPHERAL) ||
204204
#define SDC_FRAME_SPACE_UPDATE_MEM_SIZE 0
205205
#endif
206206

207+
#if defined(CONFIG_BT_CTLR_SHORTER_CONNECTION_INTERVALS)
208+
#define SDC_SHORTER_CONNECTION_INTERVALS_MEM_SIZE \
209+
SDC_MEM_SHORTER_CONNECTION_INTERVALS(SDC_CENTRAL_COUNT + PERIPHERAL_COUNT)
210+
#else
211+
#define SDC_SHORTER_CONNECTION_INTERVALS_MEM_SIZE 0
212+
#endif
213+
207214
#if defined(CONFIG_BT_CTLR_EXTENDED_FEAT_SET)
208215
#define SDC_EXTENDED_FEAT_SET_MEM_SIZE \
209216
SDC_MEM_EXTENDED_FEATURE_SET(SDC_CENTRAL_COUNT + PERIPHERAL_COUNT, \
@@ -293,6 +300,7 @@ BUILD_ASSERT(!IS_ENABLED(CONFIG_BT_PERIPHERAL) ||
293300
(SDC_SUBRATING_MEM_SIZE) + \
294301
(SDC_SYNC_TRANSFER_MEM_SIZE) + \
295302
(SDC_FRAME_SPACE_UPDATE_MEM_SIZE) + \
303+
(SDC_SHORTER_CONNECTION_INTERVALS_MEM_SIZE) + \
296304
(SDC_EXTENDED_FEAT_SET_MEM_SIZE) + \
297305
(SDC_PERIODIC_ADV_MEM_SIZE) + \
298306
(SDC_PERIODIC_ADV_RSP_MEM_SIZE) + \
@@ -896,6 +904,15 @@ static void configure_supported_features(void)
896904
}
897905
}
898906

907+
if (IS_ENABLED(CONFIG_BT_CTLR_SHORTER_CONNECTION_INTERVALS)) {
908+
if (IS_ENABLED(CONFIG_BT_CENTRAL)) {
909+
sdc_support_shorter_connection_intervals_central();
910+
}
911+
if (IS_ENABLED(CONFIG_BT_PERIPHERAL)) {
912+
sdc_support_shorter_connection_intervals_peripheral();
913+
}
914+
}
915+
899916
if (IS_ENABLED(CONFIG_BT_CTLR_EXTENDED_FEAT_SET)) {
900917
sdc_support_extended_feature_set();
901918
}

subsys/bluetooth/controller/hci_internal.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ static bool command_generates_command_complete_event(uint16_t hci_opcode)
8181
#if defined(CONFIG_BT_CTLR_FRAME_SPACE_UPDATE)
8282
case SDC_HCI_OPCODE_CMD_LE_FRAME_SPACE_UPDATE:
8383
#endif /* CONFIG_BT_CTLR_FRAME_SPACE_UPDATE */
84+
#if defined(CONFIG_BT_CTLR_SHORTER_CONNECTION_INTERVALS)
85+
case SDC_HCI_OPCODE_CMD_LE_CONN_RATE_REQUEST:
86+
#endif /* CONFIG_BT_CTLR_SHORTER_CONNECTION_INTERVALS */
8487
return false;
8588
default:
8689
return true;
@@ -1405,6 +1408,9 @@ static uint8_t le_controller_cmd_put(uint8_t const * const cmd,
14051408
case SDC_HCI_OPCODE_CMD_LE_SET_HOST_FEATURE:
14061409
return sdc_hci_cmd_le_set_host_feature(
14071410
(sdc_hci_cmd_le_set_host_feature_t const *)cmd_params);
1411+
case SDC_HCI_OPCODE_CMD_LE_SET_HOST_FEATURE_V2:
1412+
return sdc_hci_cmd_le_set_host_feature_v2(
1413+
(sdc_hci_cmd_le_set_host_feature_v2_t const *)cmd_params);
14081414
#endif
14091415

14101416
#if defined(CONFIG_BT_CTLR_SDC_PAWR_ADV)
@@ -1499,6 +1505,29 @@ static uint8_t le_controller_cmd_put(uint8_t const * const cmd,
14991505
return sdc_hci_cmd_le_frame_space_update((void *)cmd_params);
15001506
#endif /* CONFIG_BT_CTLR_FRAME_SPACE_UPDATE */
15011507

1508+
#if defined(CONFIG_BT_CTLR_SHORTER_CONNECTION_INTERVALS)
1509+
case SDC_HCI_OPCODE_CMD_LE_CONN_RATE_REQUEST:
1510+
return sdc_hci_cmd_le_conn_rate_request((void *)cmd_params);
1511+
#if defined(CONFIG_BT_CENTRAL)
1512+
case SDC_HCI_OPCODE_CMD_LE_SET_DEFAULT_RATE_PARAMS:
1513+
return sdc_hci_cmd_le_set_default_rate_params((void *)cmd_params);
1514+
#endif /* CONFIG_BT_CENTRAL */
1515+
case SDC_HCI_OPCODE_CMD_LE_READ_MIN_SUPPORTED_CONN_INTERVAL: {
1516+
uint8_t status =
1517+
sdc_hci_cmd_le_read_min_supported_conn_interval((void *)event_out_params);
1518+
*param_length_out +=
1519+
sizeof(sdc_hci_cmd_le_read_min_supported_conn_interval_return_t);
1520+
if (status == BT_HCI_ERR_SUCCESS) {
1521+
*param_length_out +=
1522+
((sdc_hci_cmd_le_read_min_supported_conn_interval_return_t *)
1523+
event_out_params)
1524+
->num_groups *
1525+
sizeof(sdc_hci_le_read_min_supported_conn_interval_group_t);
1526+
}
1527+
return status;
1528+
}
1529+
#endif /* CONFIG_BT_CTLR_SHORTER_CONNECTION_INTERVALS */
1530+
15021531
default:
15031532
return BT_HCI_ERR_UNKNOWN_CMD;
15041533
}

0 commit comments

Comments
 (0)