# Kconfig - Bluetooth Controller configuration options
#
# Copyright (c) 2016-2017 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
#

comment "BLE Controller support"

config BT_CTLR
	bool "Bluetooth Controller"
	help
	  Enables support for SoC native controller implementations.

if BT_CTLR

choice
	prompt "Bluetooth Link Layer Selection"
	default BT_LL_SW
	help
	  Select the Bluetooth Link Layer to compile.

config BT_LL_SW
	bool "Software-based BLE Link Layer"
	select BT_RECV_IS_RX_THREAD
	select ENTROPY_GENERATOR
	select ENTROPY_NRF5_RNG if SOC_FAMILY_NRF
	select ENTROPY_NRF5_BIAS_CORRECTION if SOC_FAMILY_NRF
	help
	  Use Zephyr software BLE Link Layer implementation.

endchoice

comment "BLE Controller configuration"

config BT_CTLR_CRYPTO
	bool "Enable crypto functions in Controller"
	default y
	help
	  Use random number generation and AES encryption support functions
	  provided by the controller.

config BT_CTLR_RX_PRIO_STACK_SIZE
	# Hidden option for Controller's Co-Operative high priority Rx thread
	# stack size.
	int
	default 448

config BT_CTLR_RX_PRIO
	# Hidden option for Controller's Co-Operative high priority Rx thread
	# priority.
	int
	default 6

config BT_CTLR_FILTER
	# Hidden option to enable controller whitelist feature
	depends on BT_LL_SW
	bool
	default y

config BT_CTLR_HCI_VS_BUILD_INFO
	string "Zephyr HCI VS Build Info string"
	default ""
	depends on BT_HCI_VS_EXT
	help
	  User-defined string that will be returned by the Zephyr VS Read Build
	  Information command after the Zephyr version and build time. When
	  setting this to a value different from an empty string, a space
	  character is required at the beginning to separate it from the
	  already included information.

if BT_LL_SW
config BT_CTLR_DUP_FILTER_LEN
	int "Number of addresses in the scan duplicate filter"
	depends on BT_OBSERVER
	default 16
	help
	  Set the number of unique BLE addresses that can be filtered as
	  duplicates while scanning.

config BT_CTLR_RX_BUFFERS
	int "Number of Rx buffers"
	default 6 if BT_HCI_RAW
	default 1
	range 1 18
	help
	  Set the number of Rx PDUs to be buffered in the controller. In a 7.5ms
	  connection interval and 2M PHY, maximum 18 packets with L2CAP payload
	  size of 1 byte can be received.

config BT_CTLR_TX_BUFFERS
	int "Number of Tx buffers"
	default 7 if BT_HCI_RAW
	default 2
	range 1 19
	help
	  Set the number of Tx PDUs to be queued for transmission in the
	  controller. In a 7.5ms connection interval and 2M PHY, maximum 19
	  packets can be enqueued, with 18 packets with L2CAP payload size of 1
	  byte can be acknowledged.

config BT_CTLR_TX_BUFFER_SIZE
	int "Tx buffer size"
	range 27 16384
	default 27
	help
	  Size of the Tx buffers and the value returned in HCI LE Read Buffer
	  Size command response. If this size if greater than effective PDU size
	  then controller will perform fragmentation before transmitting on the
	  the packet on air.
	  Maximum is set to 16384 due to implementation limitations (use of
	  u16_t for size/length variables).

choice
	prompt "Tx Power"
	default BT_CTLR_TX_PWR_0
	help
	  Select the supported BLE Radio transmit power level in dBm.

config BT_CTLR_TX_PWR_PLUS_8
	bool "+8 dBm"
	depends on SOC_NRF52840

config BT_CTLR_TX_PWR_PLUS_7
	bool "+7 dBm"
	depends on SOC_NRF52840

config BT_CTLR_TX_PWR_PLUS_6
	bool "+6 dBm"
	depends on SOC_NRF52840

config BT_CTLR_TX_PWR_PLUS_5
	bool "+5 dBm"
	depends on SOC_NRF52840

config BT_CTLR_TX_PWR_PLUS_4
	bool "+4 dBm"

config BT_CTLR_TX_PWR_PLUS_3
	bool "+3 dBm"
	depends on SOC_SERIES_NRF52X

config BT_CTLR_TX_PWR_PLUS_2
	bool "+2 dBm"
	depends on SOC_NRF52840

config BT_CTLR_TX_PWR_0
	bool "0 dBm"

config BT_CTLR_TX_PWR_MINUS_4
	bool "-4 dBm"

config BT_CTLR_TX_PWR_MINUS_8
	bool "-8 dBm"

config BT_CTLR_TX_PWR_MINUS_12
	bool "-12 dBm"

config BT_CTLR_TX_PWR_MINUS_16
	bool "-16 dBm"

config BT_CTLR_TX_PWR_MINUS_20
	bool "-20 dBm"

config BT_CTLR_TX_PWR_MINUS_30
	bool "-30 dBm"
	depends on SOC_SERIES_NRF51X

config BT_CTLR_TX_PWR_MINUS_40
	bool "-40 dBm"
	depends on SOC_SERIES_NRF52X

endchoice

config BT_CTLR_COMPANY_ID
	hex "Company Id"
	default 0x05F1
	range 0x0000 0xFFFF
	help
	  Set the Bluetooth Company Identifier that will be used in
	  the VERSION_IND PDU. The Linux Foundation's Company Identifier
	  (0x05F1) is the default value for this option although silicon vendors
	  and hardware manufacturers can set their own. The full list of
	  Bluetooth Company Identifiers can be found here:
	  https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers

config BT_CTLR_SUBVERSION_NUMBER
	hex "Subversion Number"
	default 0xFFFF
	range 0x0000 0xFFFF
	help
	  Set the Subversion Number that will be used in VERSION_IND PDU.

comment "BLE Controller features"

if BT_CONN

config BT_CTLR_LE_ENC
	bool "LE Encryption"
	depends on !BT_CTLR_DATA_LENGTH_CLEAR && !BT_CTLR_PHY_2M_NRF
	default y
	help
	  Enable support for Bluetooth v4.0 LE Encryption feature in the
	  Controller.

config BT_CTLR_CONN_PARAM_REQ
	bool "Connection Parameter Request"
	default y
	help
	  Enable support for Bluetooth v4.1 Connection Parameter Request feature
	  in the Controller.

config BT_CTLR_LE_PING
	bool "LE Ping"
	default y
	help
	  Enable support for Bluetooth v4.1 LE Ping feature in the Controller.

config BT_CTLR_PRIVACY
	bool "LE Controller-based Privacy"
	depends on !SOC_SERIES_NRF51X
	default y
	select BT_RPA
	help
	  Enable support for Bluetooth v4.2 LE Controller-based Privacy feature
	  in the Controller.

config BT_CTLR_RL_SIZE
	int "LE Controller-based Privacy Resolving List size"
	depends on BT_CTLR_PRIVACY
	default 8
	range 1 8 if SOC_FAMILY_NRF
	help
	  Set the size of the Resolving List for LE Controller-based Privacy.
	  On nRF5x-based controllers, the hardware imposes a limit of 8 devices.

config BT_CTLR_EXT_SCAN_FP
	bool "LE Extended Scanner Filter Policies"
	depends on BT_OBSERVER
	default y
	help
	  Enable support for Bluetooth v4.2 LE Extended Scanner Filter Policies
	  in the Controller.

config BT_CTLR_DATA_LENGTH
	bool "Data Length Update"
	default y if SOC_SERIES_NRF52X
	help
	  Enable support for Bluetooth v4.2 LE Data Length Update procedure in
	  the Controller.

config BT_CTLR_DATA_LENGTH_MAX
	int "Maximum data length supported"
	depends on BT_CTLR_DATA_LENGTH
	default 27
	range 27 251 if SOC_SERIES_NRF52X || BT_CTLR_DATA_LENGTH_CLEAR
	range 27 27
	help
	  Set the maximum data length of PDU supported in the Controller.

config BT_CTLR_PHY
	bool "PHY Update"
	default y if SOC_SERIES_NRF52X
	help
	  Enable support for Bluetooth 5.0 PHY Update Procedure in the
	  Controller.

endif # BT_CONN

config BT_CTLR_CHAN_SEL_2
	bool "Channel Selection Algorithm #2"
	default y
	help
	  Enable support for Bluetooth 5.0 LE Channel Selection Algorithm #2 in
	  the Controller.

config BT_CTLR_MIN_USED_CHAN
	bool "Minimum Number of Used Channels"
	default y
	help
	  Enable support for Bluetooth 5.0 Minimum Number of Used Channels
	  Procedure in the Controller.

config BT_CTLR_ADV_EXT
	bool "LE Advertising Extensions"
	select BT_CTLR_SCAN_REQ_NOTIFY
	select BT_CTLR_CHAN_SEL_2
	default y
	help
	  Enable support for Bluetooth 5.0 LE Advertising Extensions in the
	  Controller.

config BT_CTLR_DTM
	bool
	help
	  Enable support for Direct Test Mode in the Controller.

config BT_CTLR_DTM_HCI
	bool "Direct Test Mode over HCI"
	select BT_CTLR_DTM
	help
	  Enable support for Direct Test Mode over the HCI transport.

config BT_CTLR_ADVANCED_FEATURES
	bool "Show advanced features"
	help
	  Makes advanced features visible to controller developers.

menu "Advanced features"
	visible if BT_CTLR_ADVANCED_FEATURES

config BT_CTLR_DATA_LENGTH_CLEAR
	bool "Data Length Support (Cleartext only)"
	depends on BT_CTLR_DATA_LENGTH && SOC_SERIES_NRF51X
	help
	  Enable support for Bluetooth v4.2 LE Data Length Update procedure, up to
	  251 byte cleartext payloads in the Controller. Encrypted connections
	  are not supported.

if BT_CTLR_PHY

config BT_CTLR_PHY_2M
	bool "2Mbps PHY Support"
	depends on !SOC_SERIES_NRF51X || BT_CTLR_PHY_2M_NRF
	default y
	help
	  Enable support for Bluetooth 5.0 2Mbps PHY in the Controller.

config BT_CTLR_PHY_2M_NRF
	bool "2Mbps Nordic Semiconductor PHY Support (Cleartext only)"
	depends on SOC_SERIES_NRF51X
	select BT_CTLR_PHY_2M
	help
	  Enable support for Nordic Semiconductor proprietary 2Mbps PHY in the
	  Controller. Encrypted connections are not supported.

config BT_CTLR_PHY_CODED
	bool "Coded PHY Support"
	depends on SOC_NRF52840
	default y
	help
	  Enable support for Bluetooth 5.0 Coded PHY in the Controller.

endif # BT_CTLR_PHY

config BT_CTLR_WORKER_PRIO
	int "Radio and Ticker's Worker IRQ priority"
	range 0 3 if SOC_SERIES_NRF51X
	range 0 6 if SOC_SERIES_NRF52X
	default 0
	help
	  The interrupt priority for event preparation and radio IRQ. This value
	  shall be less than or equal to the Ticker's Job priority value.

config BT_CTLR_JOB_PRIO
	int "Ticker's JOB IRQ priority"
	range BT_CTLR_WORKER_PRIO 3 if SOC_SERIES_NRF51X
	range BT_CTLR_WORKER_PRIO 6 if SOC_SERIES_NRF52X
	default 0
	help
	  The interrupt priority for Ticker's Job (SWI4) IRQ. This value shall
	  be greater than or equal to the Ticker's Worker IRQ priority value.

config BT_CTLR_XTAL_ADVANCED
	bool "Advanced event preparation"
	default y
	help
	  Enables advanced event preparation offset ahead of radio tx/rx, taking
	  into account predictive processing time requirements in preparation to
	  the event, like control procedure handling and CPU execution speeds.
	  Crystal oscillator is retained between closely spaced consecutive
	  radio events to reduce the overall number of crystal settling current
	  consumptions.

	  This feature maximizes radio utilization in an average role event
	  timeslice when they are closely spaced by using a reduced offset
	  between preparation and radio event.

	  By disabling this feature, the controller will use a constant offset
	  between the preparation and radio event. The controller will toggle
	  crystal oscillator between two closely spaced radio events leading to
	  higher average current due to increased number of crystal settling
	  current consumptions.

config BT_CTLR_XTAL_THRESHOLD
	int "Crystal shutdown threshold in uS"
	depends on BT_CTLR_XTAL_ADVANCED
	default 1500
	help
	  Configure the optimal delta in micro seconds between two consecutive
	  radio events, event done to next preparation, below which (active
	  clock) crystal will be retained. This value is board dependent.

config BT_CTLR_SCHED_ADVANCED
	bool "Advanced scheduling"
	depends on (BT_MAX_CONN != 0)
	default y if !(BT_PERIPHERAL && !BT_CENTRAL)
	help
	  Enable non-overlapping placement of observer, initiator and master
	  roles in timespace. Uses window offset in connection updates and uses
	  connection parameter request in slave role to negotiate
	  non-overlapping placement with active master roles to avoid slave
	  roles drifting into active master roles in the local controller.

	  This feature maximizes the average data transmission amongst active
	  concurrent master and slave connections while other observer,
	  initiator, master or slave roles are active in the local controller.

	  Disabling this feature will lead to overlapping role in timespace
	  leading to skipped events amongst active roles.

config BT_CTLR_RADIO_ENABLE_FAST
	bool "Use tTXEN/RXEN,FAST ramp-up"
	depends on SOC_SERIES_NRF52X
	default y
	help
	  Enable use of fast radio ramp-up mode.

config BT_CTLR_TIFS_HW
	bool "H/w Accelerated tIFS Trx switching"
	depends on !BT_CTLR_RADIO_ENABLE_FAST
	default y
	help
	  Enable use of hardware accelerated tIFS Trx switching.

config BT_CTLR_SW_SWITCH_SINGLE_TIMER
	bool "Single TIMER tIFS Trx SW switching"
	depends on (!BT_CTLR_TIFS_HW) && SOC_SERIES_NRF52X
	help
	  Implement the tIFS Trx SW switch with the same TIMER
	  instance, as the one used for BLE event timing. Requires
	  SW switching be enabled. Using a single TIMER:
	  (+) frees up one TIMER instance
	  (+) removes jitter for HCTO implementation
	  (-) introduces drifting to the absolute time inside BLE
	  events, that increases linearly with the number of
	  packets exchanged in the event.

if BT_CONN

config BT_CTLR_FAST_ENC
	bool "Fast Encryption Setup"
	depends on BT_CTLR_LE_ENC
	help
	  Enable connection encryption setup in 3 connection intervals.
	  Peripheral will respond to Encryption Request with Encryption Response
	  in the same connection interval, and also, will respond with Start
	  Encryption Response PDU in the 3rd connection interval, hence
	  completing encryption setup in 3 connection intervals. Encrypted data
	  would be transmitted as fast as in 3rd connection interval from the
	  connection establishment.
	  Maximum CPU time in Radio ISR will increase if this feature is
	  selected.

config BT_CTLR_CONN_RSSI
	bool "Connection RSSI"
	help
	  Enable connection RSSI measurement.

endif # BT_CONN

config BT_CTLR_ADV_INDICATION
	bool "Advertisement indications"
	help
	  Generate events indicating on air advertisement events.

config BT_CTLR_SCAN_REQ_NOTIFY
	bool "Scan Request Notifications"
	help
	  Generate events notifying the on air scan requests received.

config BT_CTLR_SCAN_REQ_RSSI
	bool "Measure Scan Request RSSI"
	depends on BT_CTLR_SCAN_REQ_NOTIFY
	help
	  Measure RSSI of the on air scan requests received.

endmenu

comment "BLE Controller hardware configuration"

menuconfig BT_CTLR_GPIO_PA
	bool "Power Amplifier GPIO interface"
	depends on !SOC_SERIES_NRF51X
	help
	  Enable GPIO interface to a Power Amplifier. This allows hardware
	  designs using PA to let the Controller toggle their state based on
	  radio activity.

if BT_CTLR_GPIO_PA

config BT_CTLR_GPIO_PA_PIN
	int "Power Amplifier GPIO pin number"
	help
	  GPIO Pin number connected to a Power Amplifier.

config BT_CTLR_GPIO_PA_POL_INV
	bool "Inverted polarity for the PA pin"
	help
	  Enable inverted polarity (active low) for the PA pin.

config BT_CTLR_GPIO_PA_OFFSET
	int "Time from PA ON to Tx ready"
	default 5
	range 0 10
	help
	  Time before Tx ready to turn on PA.

endif # BT_CTLR_GPIO_PA

menuconfig BT_CTLR_GPIO_LNA
	bool "Low Noise Amplifier GPIO interface"
	depends on !SOC_SERIES_NRF51X
	help
	  Enable GPIO interface to a Low Noise Amplifier. This allows hardware
	  designs using LNAs to let the Controller toggle their state based on
	  radio activity.

if BT_CTLR_GPIO_LNA

config BT_CTLR_GPIO_LNA_PIN
	int "Low Noise Amplifier GPIO pin number"
	help
	  GPIO Pin number connected to a Low Noise Amplifier.

config BT_CTLR_GPIO_LNA_POL_INV
	bool "Inverted polarity for the LNA pin"
	help
	  Enable inverted polarity (active low) for the LNA pin.

config BT_CTLR_GPIO_LNA_OFFSET
	int "Time from LNA ON to Rx ready"
	default 5
	range 0 10
	help
	  Time before Rx ready to turn on LNA.

endif # BT_CTLR_GPIO_LNA

config BT_CTLR_PA_LNA_GPIOTE_CHAN
	# Hidden "nRF5 GPIO PA/LNA GPIOTE Channel"
	int
	depends on SOC_FAMILY_NRF && (BT_CTLR_GPIO_PA || BT_CTLR_GPIO_LNA)
	default 3 if PWM_NRF5_SW
	default 0
	help
	  Select the nRF5 GPIOTE channel to use for PA/LNA GPIO feature.

comment "BLE Controller debug configuration"

config BT_CTLR_ASSERT_HANDLER
	bool "Bluetooth Controller Assertion Handler"
	depends on BT_HCI_RAW
	help
	  This option enables an application-defined sink for the
	  controller assertion mechanism. This must be defined in
	  application code as void \"bt_controller_assert_handle(char \*, int)\"
	  and will be invoked whenever the controller code encounters
	  an unrecoverable error.

config BT_CTLR_PROFILE_ISR
	bool "Profile radio ISR"
	help
	  Turn on measurement of radio ISR latency, CPU usage and generation of
	  controller event with these profiling data. The controller event
	  contains current, minimum and maximum ISR entry latencies; and
	  current, minimum and maximum ISR CPU use in micro-seconds.

config BT_CTLR_DEBUG_PINS
	bool "Bluetooth Controller Debug Pins"
	depends on BOARD_NRF51_PCA10028 || BOARD_NRF52_PCA10040 || BOARD_NRF52810_PCA10040 || BOARD_NRF52840_PCA10056
	help
	  Turn on debug GPIO toggling for the BLE Controller. This is useful
	  when debugging with a logic analyzer or profiling certain sections of
	  the code.

endif # BT_LL_SW

endif # BT_CTLR
