# Zephyr Bluetooth Controller configuration options

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

# BT_CTLR_DF_SUPPORT is a wrapper for all DF features. It is referenced by Host
# to enable its DF related Kconfigs when build together with the Controller.
# It is required to enable it when Controller supports any DF related feature
# but particular features are selected individually.
config BT_CTLR_DF_SUPPORT
	bool

if BT_CTLR_DF_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

endif # BT_CTLR_DF_SUPPORT

menuconfig BT_CTLR_DF
	bool "LE Direction Finding"
	depends on BT_CTLR_DF_CTE_TX_SUPPORT || BT_CTLR_DF_CTE_RX_SUPPORT
	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 if BT_LL_SW_SPLIT
	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.

if BT_LL_SW_SPLIT

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 2 38 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 2 to 38, 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.

choice
	prompt "IQ samples 12 bit to 8 bit conversion approach"
	default BT_CTLR_DF_IQ_SAMPLES_CONVERT_2_BITS_SHIFT if !SOC_NRF5340_CPUNET
	default BT_CTLR_DF_IQ_SAMPLES_CONVERT_USE_8_LSB if SOC_NRF5340_CPUNET

config BT_CTLR_DF_IQ_SAMPLES_CONVERT_4_BITS_SHIFT
	bool "Conversion of IQ samples to 8 bits wide by 4 bits shift"
	depends on BT_CTLR_DF_SCAN_CTE_RX || BT_CTLR_DF_CONN_CTE_RX
	help
	  IQ samples provided by the Radio Direction Finding Extension are 12 bit wide. The
	  Bluetooth 5.3 Core Specification defines IQ samples to be 8 bits wide: Vol 4, Part E
	  sections 7.7.65.21 and 7.7.65.22. This config enables conversion of 12 bit IQ samples to
	  8 bits by ordinary right shift operation by 4 bits. That means there is loss in accuracy
	  since only the 8 MSB are used.

config BT_CTLR_DF_IQ_SAMPLES_CONVERT_2_BITS_SHIFT
	bool "Conversion of IQ samples to 8 bits wide by 2 bits shift"
	depends on BT_CTLR_DF_SCAN_CTE_RX || BT_CTLR_DF_CONN_CTE_RX
	help
	  IQ samples provided by the Radio Direction Finding Extension are 12 bit wide. The
	  Bluetooth 5.3 Core Specification defines IQ samples to be 8 bits wide: Vol 4, Part E
	  sections 7.7.65.21 and 7.7.65.22. This config enables conversion of 12 bit IQ samples to
	  8 bits by ordinary right shift operation by 2 bits and a cast to int8_t. That means there
	  is a loss in accuracy. This conversion may be used only if you are sure samples will not
	  saturate.

config BT_CTLR_DF_IQ_SAMPLES_CONVERT_USE_8_LSB
	bool "Conversion of IQ samples to 8 bits wide by use of 8 LSB"
	depends on SOC_NRF5340_CPUNET && (BT_CTLR_DF_SCAN_CTE_RX || BT_CTLR_DF_CONN_CTE_RX)
	help
	  IQ samples provided by the Radio Direction Finding Extension are 12 bit wide. The
	  Bluetooth 5.3 Core Specification defines IQ samples to be 8 bits wide: Vol 4, Part E
	  sections 7.7.65.21 and 7.7.65.22. This config enables conversion of 12 bit IQ samples to
	  8 bits by use of 8 least significant bits. This conversion may be used only if you are
	  sure actual samples are not greater than 8 bits. This prevents additional accuracy loss
	  due to shifting operation.

endchoice

# Vendor specifici extensions configuration

config BT_CTLR_DF_VS_CL_IQ_REPORT_16_BITS_IQ_SAMPLES
	bool "Use 16 bits signed integer IQ samples in connectionless IQ reports"
	depends on BT_CTLR_DF_SCAN_CTE_RX && BT_HCI_VS_EXT
	select BT_HCI_VS_EVT
	help
	  Direction Finging connectionless IQ reports provide a set of IQ samples collected during
	  sampling of CTE. Bluetooth 5.3 Core Specification defines IQ samples to be 8 bits signed
	  integer, see Vol 4, Part E section 7.7.65.21. This option enables a vendor specific
	  extenstion to HCI layer, so that connectionless IQ reports store samples in 16 bit signed
	  integer format.

config BT_CTLR_DF_VS_CONN_IQ_REPORT_16_BITS_IQ_SAMPLES
	bool "Use 16 bits signed integer IQ samples in connection IQ reports"
	depends on BT_CTLR_DF_CONN_CTE_RX && BT_HCI_VS_EXT
	select BT_HCI_VS_EVT
	help
	  Direction Finging connection IQ reports provide a set of IQ samples collected during
	  sampling of CTE. Bluetooth 5.3 Core Specification defines IQ samples to be 8 bits signed
	  integer, see Vol 4, Part E section 7.7.65.22. This option enables a vendor specific
	  extenstion to HCI layer, so that connection IQ reports store samples in 16 bit signed
	  integer format.

endif # BT_LL_SW_SPLIT

endif # BT_CTLR_DF
