if BLUETOOTH_CONTROLLER

comment "BLE Controller configuration"

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

config BLUETOOTH_LL_SW
	bool "Use the software-based BLE Link Layer"
	help
	  Use Zephyr's software BLE Link Layer implementation.

endchoice

config BLUETOOTH_CONTROLLER_RX_BUFFERS
	prompt "Number of Rx buffers"
	int
	default 1
	default 6 if BLUETOOTH_HCI_RAW
	range 1 10
	help
	  Set the number of Rx PDUs to be buffered in the controller.

config BLUETOOTH_CONTROLLER_TX_BUFFERS
	prompt "Number of Tx buffers"
	int
	default 2
	default 7 if BLUETOOTH_HCI_RAW
	range 1 10
	help
	  Set the number of Tx PDUs to be queued for transmission
	  in the controller.

config BLUETOOTH_CONTROLLER_TX_BUFFER_SIZE
	prompt "Tx buffer size"
	int
	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
	  uint16_t for size/length variables).

config BLUETOOTH_CONTROLLER_RX_PRIO_STACK_SIZE
	int
	default 320

comment "BLE Controller features"

config BLUETOOTH_CONTROLLER_COMPANY_ID
	prompt "Company Id"
	hex
	default 0xFFFF
	range 0x0000 0xFFFF
	help
	  Set the Company Id that will be used in VERSION_IND PDU.

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

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

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

config BLUETOOTH_CONTROLLER_DATA_LENGTH_MAX
	prompt "Maximum data length supported"
	depends on BLUETOOTH_CONTROLLER_DATA_LENGTH
	int
	default 27
	range 27 251
	help
	  Set the maximum data length of PDU supported in the Controller.

config BLUETOOTH_CONTROLLER_FAST_ENC
	bool "Fast Encryption Setup"
	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 BLUETOOTH_CONTROLLER_CONN_RSSI
	bool "Connection RSSI"
	help
	  Enable connection RSSI measurement.

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

comment "BLE Controller debug configuration"

config BLUETOOTH_CONTROLLER_ASSERT_HANDLER
	bool "Bluetooth Controller Assertion Handler"
	depends on BLUETOOTH_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 BLUETOOTH_CONTROLLER_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 BLUETOOTH_CONTROLLER_DEBUG_PINS
	bool "Bluetooth Controller Debug Pins"
	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. When enabled, pins P0.16 to P0.25 are taken over exclusively
	  by the controller and cannot be used outside of it.

endif # BLUETOOTH_CONTROLLER
