Skip to content

Commit f242808

Browse files
committed
bluetooth: controller: Add experimental support for fsu and efs
Add in the required changes to be able to enable frame space update and extended feature set support to the controller. Signed-off-by: Sean Madigan <[email protected]>
1 parent 3ef45ca commit f242808

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed

subsys/bluetooth/controller/Kconfig

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ config BT_LL_SOFTDEVICE
4141
select BT_CTLR_LE_POWER_CONTROL_SUPPORT
4242
select BT_CTLR_LE_PATH_LOSS_MONITORING_SUPPORT
4343
select BT_CTLR_SUBRATING_SUPPORT
44+
select BT_CTLR_EXTENDED_FEAT_SET_SUPPORT
45+
select BT_CTLR_FRAME_SPACE_UPDATE_SUPPORT
4446
select BT_LL_SOFTDEVICE_HEADERS_INCLUDE
4547
select MRAM_LATENCY if (SOC_NRF54H20_CPURAD && !MPSL_PM_USE_MRAM_LATENCY_SERVICE)
4648
select MRAM_LATENCY_AUTO_REQ if (SOC_NRF54H20_CPURAD && !MPSL_PM_USE_MRAM_LATENCY_SERVICE)
@@ -319,6 +321,8 @@ choice BT_LL_SOFTDEVICE_VARIANT
319321
BT_CTLR_SDC_PAWR_SYNC || \
320322
BT_ISO || \
321323
BT_CTLR_CHANNEL_SOUNDING || \
324+
BT_CTLR_EXTENDED_FEAT_SET || \
325+
BT_CTLR_FRAME_SPACE_UPDATE || \
322326
SOC_COMPATIBLE_NRF5340_CPUNET || \
323327
SOC_NRF54H20_CPURAD || \
324328
(SOC_COMPATIBLE_NRF54LX && TRUSTED_EXECUTION_NONSECURE) || \
@@ -544,6 +548,12 @@ config BT_CTLR_SDC_CIS_SUBEVENT_LENGTH_US
544548
If this parameter is set to zero, the subevent length
545549
is chosen by the controller.
546550

551+
config BT_CTLR_EXTENDED_FEAT_SET
552+
select EXPERIMENTAL
553+
554+
config BT_CTLR_FRAME_SPACE_UPDATE
555+
select EXPERIMENTAL
556+
547557
config BT_CTLR_CHANNEL_SOUNDING
548558
bool "Channel Sounding support"
549559
help

subsys/bluetooth/controller/hci_driver.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,20 @@ BUILD_ASSERT(!IS_ENABLED(CONFIG_BT_PERIPHERAL) ||
198198
#define SDC_SYNC_TRANSFER_MEM_SIZE 0
199199
#endif
200200

201+
#if defined(CONFIG_BT_CTLR_FRAME_SPACE_UPDATE)
202+
#define SDC_FRAME_SPACE_UPDATE_MEM_SIZE \
203+
SDC_MEM_FRAME_SPACE_UPDATE(SDC_CENTRAL_COUNT + PERIPHERAL_COUNT)
204+
#else
205+
#define SDC_FRAME_SPACE_UPDATE_MEM_SIZE 0
206+
#endif
207+
208+
#if defined(CONFIG_BT_CTLR_EXTENDED_FEAT_SET)
209+
#define SDC_EXTENDED_FEAT_SET_MEM_SIZE \
210+
SDC_MEM_EXTENDED_FEATURE_SET(SDC_CENTRAL_COUNT + PERIPHERAL_COUNT)
211+
#else
212+
#define SDC_EXTENDED_FEAT_SET_MEM_SIZE 0
213+
#endif
214+
201215
#if defined(CONFIG_BT_CTLR_CONN_ISO)
202216
#define SDC_MEM_CIG SDC_MEM_PER_CIG(CONFIG_BT_CTLR_CONN_ISO_GROUPS)
203217
#define SDC_MEM_CIS \
@@ -278,6 +292,8 @@ BUILD_ASSERT(!IS_ENABLED(CONFIG_BT_PERIPHERAL) ||
278292
(SDC_LE_POWER_CONTROL_MEM_SIZE) + \
279293
(SDC_SUBRATING_MEM_SIZE) + \
280294
(SDC_SYNC_TRANSFER_MEM_SIZE) + \
295+
(SDC_FRAME_SPACE_UPDATE_MEM_SIZE) + \
296+
(SDC_EXTENDED_FEAT_SET_MEM_SIZE) + \
281297
(SDC_PERIODIC_ADV_MEM_SIZE) + \
282298
(SDC_PERIODIC_ADV_RSP_MEM_SIZE) + \
283299
(SDC_PERIODIC_SYNC_MEM_SIZE) + \
@@ -979,6 +995,28 @@ static int configure_supported_features(void)
979995
}
980996
}
981997

998+
if (IS_ENABLED(CONFIG_BT_CTLR_FRAME_SPACE_UPDATE)) {
999+
if (IS_ENABLED(CONFIG_BT_CENTRAL)) {
1000+
err = sdc_support_frame_space_update_central();
1001+
if (err) {
1002+
return -ENOTSUP;
1003+
}
1004+
}
1005+
if (IS_ENABLED(CONFIG_BT_PERIPHERAL)) {
1006+
err = sdc_support_frame_space_update_peripheral();
1007+
if (err) {
1008+
return -ENOTSUP;
1009+
}
1010+
}
1011+
}
1012+
1013+
if (IS_ENABLED(CONFIG_BT_CTLR_EXTENDED_FEAT_SET)) {
1014+
err = sdc_support_extended_feature_set();
1015+
if (err) {
1016+
return -ENOTSUP;
1017+
}
1018+
}
1019+
9821020
if (IS_ENABLED(CONFIG_BT_CTLR_CHANNEL_SOUNDING_TEST)) {
9831021
err = sdc_support_channel_sounding_test();
9841022
if (err) {

subsys/bluetooth/controller/hci_internal.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ static bool command_generates_command_complete_event(uint16_t hci_opcode)
7575
case SDC_HCI_OPCODE_CMD_LE_CS_TEST_END:
7676
#endif /* CONFIG_BT_CTLR_CHANNEL_SOUNDING_TEST */
7777
#endif /* CONFIG_BT_CTLR_CHANNEL_SOUNDING */
78+
#if defined(CONFIG_BT_CTLR_EXTENDED_FEAT_SET)
79+
case SDC_HCI_OPCODE_CMD_LE_READ_ALL_REMOTE_FEATURES:
80+
#endif /* CONFIG_BT_CTLR_EXTENDED_FEAT_SET */
81+
#if defined(CONFIG_BT_CTLR_FRAME_SPACE_UPDATE)
82+
case SDC_HCI_OPCODE_CMD_LE_FRAME_SPACE_UPDATE:
83+
#endif /* CONFIG_BT_CTLR_FRAME_SPACE_UPDATE */
7884
return false;
7985
default:
8086
return true;
@@ -643,6 +649,13 @@ void hci_internal_supported_commands(sdc_hci_ip_supported_commands_t *cmds)
643649
cmds->hci_le_cs_set_procedure_parameters = 1;
644650
cmds->hci_le_cs_procedure_enable = 1;
645651
#endif /* CONFIG_BT_CTLR_CHANNEL_SOUNDING */
652+
#if defined(CONFIG_BT_CTLR_EXTENDED_FEAT_SET)
653+
cmds->hci_le_read_all_local_supported_features = 1;
654+
cmds->hci_le_read_all_remote_features = 1;
655+
#endif /* CONFIG_BT_CTLR_EXTENDED_FEAT_SET */
656+
#if defined(CONFIG_BT_CTLR_FRAME_SPACE_UPDATE)
657+
cmds->hci_le_frame_space_update = 1;
658+
#endif /* CONFIG_BT_CTLR_FRAME_SPACE_UPDATE */
646659
}
647660

648661
#if defined(CONFIG_BT_HCI_VS)
@@ -778,6 +791,10 @@ void hci_internal_le_supported_features(
778791
features->params.channel_sounding_tone_quality_indication = 1;
779792
#endif /* CONFIG_BT_CTLR_CHANNEL_SOUNDING */
780793

794+
#if defined(CONFIG_BT_CTLR_EXTENDED_FEAT_SET)
795+
features->params.ll_extended_feature_set = 1;
796+
#endif /* CONFIG_BT_CTLR_EXTENDED_FEAT_SET */
797+
781798
#if defined(CONFIG_BT_CTLR_SDC_LE_POWER_CLASS_1)
782799
features->params.le_Power_class_1 = 1;
783800
#endif /* CONFIG_BT_CTLR_SDC_LE_POWER_CLASS_1 */
@@ -1580,6 +1597,21 @@ static uint8_t le_controller_cmd_put(uint8_t const * const cmd,
15801597
#endif /* CONFIG_BT_CTLR_CHANNEL_SOUNDING_TEST */
15811598
#endif /* CONFIG_BT_CTLR_CHANNEL_SOUNDING */
15821599

1600+
#if defined(CONFIG_BT_CTLR_EXTENDED_FEAT_SET)
1601+
case SDC_HCI_OPCODE_CMD_LE_READ_ALL_REMOTE_FEATURES:
1602+
return sdc_hci_cmd_le_read_all_remote_features((void *)cmd_params);
1603+
case SDC_HCI_OPCODE_CMD_LE_READ_ALL_LOCAL_SUPPORTED_FEATURES:
1604+
*param_length_out +=
1605+
sizeof(sdc_hci_cmd_le_read_all_local_supported_features_return_t);
1606+
return sdc_hci_cmd_le_read_all_local_supported_features(
1607+
(void *)event_out_params);
1608+
#endif /* CONFIG_BT_CTLR_EXTENDED_FEAT_SET */
1609+
1610+
#if defined(CONFIG_BT_CTLR_FRAME_SPACE_UPDATE)
1611+
case SDC_HCI_OPCODE_CMD_LE_FRAME_SPACE_UPDATE:
1612+
return sdc_hci_cmd_le_frame_space_update((void *)cmd_params);
1613+
#endif /* CONFIG_BT_CTLR_FRAME_SPACE_UPDATE */
1614+
15831615
default:
15841616
return BT_HCI_ERR_UNKNOWN_CMD;
15851617
}

0 commit comments

Comments
 (0)