# Zephyr Bluetooth Controller configuration options

# Copyright (c) 2020 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config BT_CTLR_DF_SUPPORT
	bool
	depends on !BT_CTLR_TIFS_HW
	select BT_CTLR_DF_CTE_TX_SUPPORT
	select BT_CTLR_DF_ANT_SWITCH_2US_SUPPORT
	select BT_CTLR_DF_ANT_SWITCH_1US_SUPPORT
	select BT_CTLR_DF_CTE_RX_SUPPORT
	select BT_CTLR_DF_CTE_RX_SAMPLE_1US_SUPPORT

config BT_CTLR_DF_CTE_TX_SUPPORT
	bool

config BT_CTLR_DF_CTE_RX_SUPPORT
	bool

config BT_CTLR_DF_CTE_RX_SAMPLE_1US_SUPPORT
	bool

config BT_CTLR_DF_ANT_SWITCH_2US_SUPPORT
	bool

config BT_CTLR_DF_ANT_SWITCH_1US_SUPPORT
	bool

config BT_CTLR_CTEINLINE_SUPPORT
	bool

menuconfig BT_CTLR_DF
	bool "LE Direction Finding [EXPERIMENTAL]"
	depends on BT_CTLR_DF_SUPPORT
	select EXPERIMENTAL
	help
	  Enable support for Bluetooth 5.1 Direction Finding

if BT_CTLR_DF

# Basic controller functionalities required for implementation of
# Bluetooth v5.1 Direction Finding

config BT_CTLR_DF_CTE_TX
	bool "Transmission of Constant Tone Extension"
	depends on BT_CTLR_DF_CTE_TX_SUPPORT
	default y
	help
	  Enable support for transmission of Constant Tone Extension in
	  controller.

config BT_CTLR_DF_CTE_RX_SAMPLE_1US
	bool "Reception of CTE with 1us sampling slots"
	depends on BT_CTLR_DF_CTE_RX_SAMPLE_1US_SUPPORT
	default y
	help
	  Enable reception of Constant Tone Extension. Process IQ sampling
	  during CTE reception with 1us sampling slots.
	  This sampling mode is optional for Direction Finding according to
	  Bluetooth v5.1.

config BT_CTLR_DF_ANT_SWITCH_1US
	bool "Support for 1us antenna switch slots"
	depends on BT_CTLR_DF_ANT_SWITCH_1US_SUPPORT
	default y
	help
	  Enable support for 1us antenna switching slots. This antenna switching
	  mode is optional for Direction Finding according to Bluetooth v5.1.

# Features related with Direction Finding
# BT Core spec 5.1, Vol 6, Part B, sec. 4.6 Feature Support

config BT_CTLR_DF_ANT_SWITCH_TX
	bool "Antenna switching during CTE transmission (AoD) feature"
	depends on BT_CTLR_DF_CTE_TX && BT_CTLR_DF_ANT_SWITCH_2US_SUPPORT
	default y
	help
	  Enable support for antenna switching during CTE transmission.
	  Also known as Angle of Departure mode.

config BT_CTLR_DF_ANT_SWITCH_RX
	bool "Antenna switching during CTE reception (AoA) feature"
	depends on BT_CTLR_DF_CTE_RX && BT_CTLR_DF_ANT_SWITCH_2US_SUPPORT
	default y
	help
	  Enable support for antenna switching during CTE reception.
	  Also known as Angle of Arrival mode.

config BT_CTLR_DF_CTE_RX
	bool "Reception of Constant Tone Extension feature"
	depends on BT_CTLR_DF_CTE_RX_SUPPORT
	select BT_CTLR_CONN_RSSI if BT_CONN
	default y
	help
	  Enable support for reception of Constant Tone Extension in controller.

config BT_CTLR_DF_CONN_CTE_REQ
	bool "Connection CTE Request feature"
	depends on BT_CTLR_DF_CONN_CTE_RX
	help
	  Enable support for Bluetooth v5.1 Connection CTE Request feature
	  in controller.

config BT_CTLR_DF_CONN_CTE_RSP
	bool "Connection CTE Response feature"
	depends on BT_CTLR_DF_CONN_CTE_TX
	help
	  Enable support for Bluetooth v5.1 Connection CTE Response feature
	  in controller.

config BT_CTLR_DF_ADV_CTE_TX
	bool "Connectionless CTE Transmitter feature"
	depends on BT_CTLR_DF_CTE_TX && BT_CTLR_ADV_PERIODIC
	select BT_CTLR_ADV_EXT_PDU_EXTRA_DATA_MEMORY
	default y
	help
	  Enable support for Bluetooth v5.1 Connectionless CTE Transmitter
	  feature in controller.

config BT_CTLR_DF_SCAN_CTE_RX
	bool "Connectionless CTE Receiver"
	depends on BT_CTLR_DF_CTE_RX && BT_CTLR_SYNC_PERIODIC
	default y
	help
	  Enable support for Bluetooth v5.1 connectionless CTE reception
	  in controller.

config BT_CTLR_DF_CONN_CTE_TX
	bool "Connection based CTE Transmitter"
	depends on BT_CTLR_DF_CTE_TX && BT_CONN
	default y
	help
	  Enable transmission of Constant Tone Extension in
	  direction finding connected mode.

config BT_CTLR_DF_CONN_CTE_RX
	bool "Connection based CTE Receiver"
	depends on BT_CTLR_DF_CTE_RX && BT_CONN
	default y
	help
	  Enable reception and sampling of Constant Tone Extension in direction
	  finding connected mode.

config BT_CTLR_DF_SAMPLE_CTE_FOR_PDU_WITH_BAD_CRC
	bool "Sampling of CTE for PDUs with bad CRC"
	depends on BT_CTLR_DF_SCAN_CTE_RX
	default y
	help
	  Enable support for sampling of CTE for PDUs that have bad CRC.

# Customization setting to manage memory usage footprint

config BT_CTLR_DF_MAX_ANT_SW_PATTERN_LEN
	int "Maximum length of antenna switch pattern"
	range 3 39 if SOC_COMPATIBLE_NRF
	range 2 75 if !SOC_COMPATIBLE_NRF
	default 12
	help
	  Defines maximum length of antenna switch pattern that controller
	  is able to store. For nRF5x-based controllers, the hardware imposes
	  the value is within range 3 to 40, where last value is maximum.
	  For general use cases Bluetooth Core 5.1 spec. required the value
	  to be within range 2 up to 75.

config BT_CTLR_DF_INIT_ANT_SEL_GPIOS
	bool "Initialization of GPIOs responsible for antenna switching"
	depends on BT_CTLR_DF_ANT_SWITCH_TX || BT_CTLR_DF_ANT_SWITCH_RX
	default y
	help
	  Enable implicit initialization of GPIOs responsible for antenna
	  switching during Radio initialization.
	  If this feature is not enabled, the Radio initialization procedure will
	  not initialize GPIOs pins selected to drive antenna switching.
	  In such case application is responsible for appropriate GPIOs
	  initialization.

config BT_CTLR_DF_PER_ADV_CTE_NUM_MAX
	int "Maximum number of transmitted PDUs with Constant Tone Extension in connectionless mode"
	depends on BT_CTLR_DF_ADV_CTE_TX && BT_CTLR_ADV_PDU_LINK
	range 1 16
	default 1
	help
	  Maximum supported number of PDUs, that have Constant Tone Extension, transmitted in single
	  periodic advertising chain. The range is taken from BT Core spec 5.1, Vol 4 Part E
	  section 7.8.82 HCI_LE_Set_Connectionless_IQ_Sampling_Enable Max_Sampled_CTEs parameter.

config BT_CTLR_DF_PER_SCAN_CTE_NUM_MAX
	int "Maximum number of received PDUs with Constant Tone Extension in connectionless mode"
	depends on BT_CTLR_DF_SCAN_CTE_RX
	range 1 16
	default 16
	help
	  Maximum supported number of PDUs, that have Constant Tone Extension, received in single
	  periodic advertising chain. The range is taken from BT Core spec 5.1, Vol 4 Part E
	  section 7.8.82 HCI_LE_Set_Connectionless_IQ_Sampling_Enable Max_Sampled_CTEs parameter.

config BT_CTLR_DF_SWITCH_OFFSET
	int "Antenna switch offset relative to end of CRC"
	depends on SOC_COMPATIBLE_NRF
	range -2048 2047
	default 0
	help
	  Offset of start of antenna switching after end of the CRC. It is a signed value in number
	  of 16M cycles. Decreasing the offset value beyond the trigger of the AoA/AoD procedure
	  will have no effect.

config BT_CTLR_DF_SAMPLE_OFFSET_PHY_1M_SAMPLING_1US
	int "CTE sampling offset relative for PHY 1M and 1US samples spacing"
	depends on SOC_COMPATIBLE_NRF
	range -2048 2047
	default 1
	help
	  Offset of sampling start from beginning of sampling slot. The value is a signed number
	  of 16M cycles relative. It is used when PHY is set to PHY 1M and sampling slot duration
	  is 1 us. Decreasing the offset beyond the trigger of the AoA/AoD procedure will have
	  no effect.

config BT_CTLR_DF_SAMPLE_OFFSET_PHY_2M_SAMPLING_1US
	int "CTE sampling offset relative for PHY 1M and 1US samples spacing"
	depends on SOC_COMPATIBLE_NRF
	range -2048 2047
	default 15
	help
	  Offset of sampling start from beginning of sampling slot. The value is a signed number
	  of 16M cycles relative. It is used when PHY is set to PHY 1M and sampling slot duration
	  is 1 us. Decreasing the offset beyond the trigger of the AoA/AoD procedure will have
	  no effect.


config BT_CTLR_DF_SAMPLE_OFFSET_PHY_1M_SAMPLING_2US
	int "CTE sampling offset relative for PHY 1M and 2US samples spacing"
	depends on SOC_COMPATIBLE_NRF
	range -2048 2047
	default 6
	help
	  Offset of sampling start from beginning of sampling slot. The value is a signed number
	  of 16M cycles relative. It is used when PHY is set to PHY 1M and sampling slot duration
	  is 2 us. Decreasing the offset beyond the trigger of the AoA/AoD procedure will have
	  no effect.

config BT_CTLR_DF_SAMPLE_OFFSET_PHY_2M_SAMPLING_2US
	int "CTE sampling offset relative for PHY 1M and 2US samples spacing"
	depends on SOC_COMPATIBLE_NRF
	range -2048 2047
	default 20
	help
	  Offset of sampling start from beginning of sampling slot. The value is a signed number
	  of 16M cycles relative. It is used when PHY is set to PHY 1M and sampling slot duration
	  is 2 us. Decreasing the offset beyond the trigger of the AoA/AoD procedure will have
	  no effect.

config BT_CTLR_DF_DEBUG_ENABLE
	bool "Bluetooth Direction Finding debug support enable"
	help
	  This option enables debug support for the Direction Finding
	  implementation in controller.

config BT_CTLR_DF_PHYEND_OFFSET_COMPENSATION_ENABLE
	bool
	depends on BT_CTLR_DF_CTE_RX && BT_CONN && (SOC_NRF52811 || SOC_NRF52820 || SOC_NRF52833 || SOC_NRF5340_CPUNET)
	default y
	help
	  SOCs nRF52811, nRF52820, nRF52833, nRF5340 generate PHYEND event delayed when
	  CTEINLINECTRLEN is enabled and received PDU does not have CTEInfo field. The option
	  enables workaround for the delay to maintain inter frame spacing (IFS) for connection
	  events.

endif # BT_CTLR_DF
