Draft
Bluetooth: controller: CS LLL/HAL: use real nRF54L15 CSTONES/RTT registers#19
Conversation
Copilot
AI
changed the title
[WIP] Add LE Channel Sounding feature support to Zephyr Bluetooth Controller
Add LE Channel Sounding controller implementation
Jan 31, 2026
Copilot
AI
changed the title
Add LE Channel Sounding controller implementation
Add LE Channel Sounding control-plane support to the open-source Bluetooth controller
Jun 17, 2026
Copilot
AI
changed the title
Add LE Channel Sounding control-plane support to the open-source Bluetooth controller
Enable LE Channel Sounding control-plane in the open-source Bluetooth controller on nRF54L15 DK
Jun 17, 2026
Copilot
AI
changed the title
Enable LE Channel Sounding control-plane in the open-source Bluetooth controller on nRF54L15 DK
controller: implement LE Channel Sounding LLCP control-plane
Jun 18, 2026
cba5ea6 to
63c24f4
Compare
Copilot
AI
changed the title
controller: implement LE Channel Sounding LLCP control-plane
Bluetooth: Controller: Wire CS LLL init/reset hooks
Jun 19, 2026
Copilot
AI
changed the title
Bluetooth: Controller: Wire CS LLL init/reset hooks
nRF54L Channel Sounding: radio HAL, LLL radio events, and ULL scheduling
Jun 20, 2026
d518058 to
240ae50
Compare
Copilot
AI
changed the title
nRF54L Channel Sounding: radio HAL, LLL radio events, and ULL scheduling
Bluetooth: Controller: Implement Channel Sounding data plane
Jun 27, 2026
Copilot
AI
changed the title
Bluetooth: controller: implement CS message sequence per spec 6.3
Bluetooth: controller: fix LL_CS_CAPABILITIES PDU structure per spec
Jun 27, 2026
Copilot
AI
changed the title
Bluetooth: controller: fix LL_CS_CAPABILITIES PDU structure per spec
Bluetooth: controller: Correct Channel Sounding LL Control PDU structures
Jun 27, 2026
1a5edb1 to
826c18d
Compare
Copilot
AI
changed the title
Bluetooth: controller: Correct Channel Sounding LL Control PDU structures
Bluetooth: controller: CS terminate RSP handshake and ticker/mayfly scheduling
Jun 27, 2026
Copilot
AI
changed the title
Bluetooth: controller: CS terminate RSP handshake and ticker/mayfly scheduling
Bluetooth: controller: negotiate CS scheduling parameters
Jun 27, 2026
Copilot
AI
changed the title
Bluetooth: controller: negotiate CS scheduling parameters
Bluetooth: controller: implement Channel Sounding LLL radio event scheduling
Jun 27, 2026
Copilot
AI
changed the title
Bluetooth: controller: implement Channel Sounding LLL radio event scheduling
Bluetooth: controller: Pass correct access address to CS procedure start
Jun 27, 2026
Copilot
AI
changed the title
Bluetooth: controller: Pass correct access address to CS procedure start
Bluetooth: controller: Generate CS subevent results from LLL context
Jun 27, 2026
Copilot
AI
changed the title
Bluetooth: controller: Generate CS subevent results from LLL context
Channel Sounding: clean layered commit baseline
Jun 28, 2026
Copilot
AI
changed the title
Channel Sounding: clean layered commit baseline
Bluetooth: Controller: Restructure Channel Sounding into layered commits with LLL stubs
Jun 28, 2026
Add the HCI layer for Bluetooth Channel Sounding support including: - CS HCI command handlers (read capabilities, create config, enable procedures, security, FAE tables, test mode) - PDU structures for CS control PDUs per BT Core Spec v6.3 - CS feature flag definitions and Kconfig options - CS ticker IDs and node_rx_type enums in lll.h - CS ULL and LLL type headers (ull_cs_types.h, lll_cs.h) - CS connection data types in ull_conn_types.h - Include ordering fixups across ULL/LLCP files for new ull_cs_types.h dependency - Stub ull_cs.c providing ll_cs_* function implementations that return BT_HCI_ERR_CMD_DISALLOWED (replaced by real ULL in next commit)
Add the full ULL (Upper Link Layer) implementation for Channel Sounding: - ull_cs.c: CS configuration management, procedure parameter storage, CS event scheduling via ticker/mayfly, subevent step planning with channel filtering/shuffling, subevent result notification encoding - ull.c: CS init/reset hooks, CS node_rx dequeue/release handling, CS ticker node allocation, CS subevent result demux dispatch - ull_llcp.h: ull_cp_cs_* LLCP procedure entry point declarations - ull_llcp.c: ull_cp_cs_* wrappers that create and enqueue PROC_CS local procedure contexts - ull_llcp_internal.h: PROC_CS enum, llcp_cs_op enum, CS procedure context data struct Weak stubs are provided for ull_cp_cs_* (overridden by LLCP commit), lll_cs_init/reset/prepare (overridden by nrf LLL commit).
Add the LLCP (Link Layer Control Procedures) state machines for Channel Sounding: - ull_llcp_cs.c: local and remote CS procedure state machines handling CS_CAPABILITIES_REQ/RSP, CS_CONFIG_REQ/RSP, CS_SEC_REQ/RSP, CS_FAE_REQ/RSP, CS_REQ/RSP/IND, CS_TERMINATE_REQ/RSP exchanges - ull_llcp_internal.h: llcp_lp_cs_*/llcp_rp_cs_* function declarations for local/remote CS procedure entry points - ull_llcp_local.c: PROC_CS routing in rx/tx_ack/run dispatch - ull_llcp_remote.c: PROC_CS routing in rx/tx_ack/run dispatch and CS PDU type to procedure lookup table entries - CMakeLists.txt: add ull_llcp_cs.c to build Add unit tests for the Channel Sounding LLCP procedures: - tests/bluetooth/controller/ctrl_cs/: new test suite with tests for CS capabilities exchange, CS config create/remove, CS security enable, CS FAE table exchange, CS procedure enable/disable, and CS terminate flows for both local and remote initiated procedures - tests/bluetooth/controller/common/: helper_pdu.c/h additions for CS PDU verification helpers, helper_util.c additions for CS event generation - tests/bluetooth/controller/mock_ctrl/: mock stubs for CS-related symbols (ll.c, lll.c, ull_conn_iso.c, ull_peripheral.c, ull_peripheral_iso.c) - tests/bluetooth/controller/uut/CMakeLists.txt: add ull_llcp_cs.c to unit-under-test sources - test_cs_config_central_loc_remote / test_cs_config_periph_loc_remote: locally initiated config that is exchanged with the peer, verifying the transmitted LL_CS_CONFIG_REQ, the received LL_CS_CONFIG_RSP and the host CS Config Complete notification. - test_cs_config_central_rem / test_cs_config_periph_rem: peer initiated config, verifying the stored configuration parameters (including the role being flipped to reflector), the transmitted LL_CS_CONFIG_RSP and the host notification. Assisted-by: Claude:claude-opus-4.5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Channel Sounding radio HAL used entirely fictional register names (
NRF_RADIO->CS.MODE,CS.TONES,CS.PCTPTR, etc.) and MDK macros (RADIO_CS_MODE_MODE_Msk,RADIO_MODE_MODE_Ble_Cs) that do not exist in the Nordic MDK. The presence gate was always 0, making the hardware path dead code and forcing the emulation path on real silicon.Rewritten to use the actual nRF54L15 RADIO register layout verified against MDK revision
18da0cc.HAL presence gate
RADIO_CHANNELSOUNDING/RADIO_CSTONES_MODE_TPM_Msk(real MDK symbols) instead of non-existent macrosHAL API redesign (
radio_cs.h,radio_cs.c)radio_cs_mode_set(),radio_cs_tone_set(),radio_cs_antenna_set(),radio_cs_pct_buffer_set(),radio_cs_rtt_timestamp_get(),radio_cs_pct_get()NRF_RADIO->CSTONES.*andNRF_RADIO->RTT.*:radio_cs_cstones_config()— CSTONES.MODE TPM/TFM, NUMSAMPLES, DOWNSAMPLEradio_cs_rtt_config()— RTT.CONFIG EN/ROLE/NUMSEGMENTS/EFSDELAYradio_cs_rtt_segments_set()— RTT.SEGMENT01..67radio_cs_next_freq_set()— CSTONES.NEXTFREQUENCY for T_FCS PLL pre-tuneradio_cs_cstones_start()— TASKS_CSTONESSTARTradio_cs_pct16_get()— single-register PCT16 read (no DMA)radio_cs_cstones_end_clear()/is_set()— EVENTS_CSTONESENDLLL step sequencing (
lll_cs.c)isr_step→TASKS_CSTONESSTART→isr_cstones_end(EVENTS_CSTONESEND) → capture PCT16 → advance with NEXTFREQUENCY pre-tune!radio_cs_is_supported()— fabricated RTT/IQ for BabbleSim onlypct_scratchDMA buffer fromstruct lll_cs(real HW has no PCT EasyDMA)Channel shuffle (
ull_cs.c)Original prompt
This pull request was created from Copilot chat.
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.