# Kconfig - Bluetooth configuration options
#
# Copyright (c) 2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

menu "Bluetooth"

config BLUETOOTH
	bool "Bluetooth support"
	select NET_BUF
	help
	  This option enables Bluetooth support.

if BLUETOOTH

choice
	prompt "Bluetooth Stack Selection"
	default BLUETOOTH_HCI
	help
	  Select the Bluetooth stack to compile.

config BLUETOOTH_HCI
	bool "HCI-based"
	help
	  HCI-based stack with optional host & controller parts and an
	  HCI driver in between.

config BLUETOOTH_CUSTOM
	bool "Custom"
	help
	  Select a custom, non-HCI based stack. If you're not sure what
	  this is, you probably want the HCI-based stack instead.

endchoice

if BLUETOOTH_HCI

config BLUETOOTH_HCI_RAW
	bool "RAW HCI access"
	help
	  This option allows to access Bluetooth controller
	  from the application with the RAW HCI protocol.

config BLUETOOTH_PERIPHERAL
	bool "Peripheral Role support"
	select BLUETOOTH_CONN
	default y if BLUETOOTH_HCI_RAW
	help
	  Select this for LE Peripheral role support.

config BLUETOOTH_CENTRAL
	bool "Central Role support"
	select BLUETOOTH_CONN
	default y if BLUETOOTH_HCI_RAW
	help
	  Select this for LE Central role support.

menu "Broadcaster"
	visible if !BLUETOOTH_PERIPHERAL

config BLUETOOTH_BROADCASTER
	bool "Broadcaster Role support"
	default y if BLUETOOTH_PERIPHERAL
	default y if !BLUETOOTH_OBSERVER
	help
	  Select this for LE Broadcaster role support.

endmenu

menu "Observer"
	visible if !BLUETOOTH_CENTRAL

config BLUETOOTH_OBSERVER
	bool "Observer Role support"
	default y if BLUETOOTH_CENTRAL
	help
	  Select this for LE Observer role support.

endmenu

config BLUETOOTH_CONN
	# Virtual/hidden option
	bool

config BLUETOOTH_MAX_CONN
	int "Maximum number of simultaneous connections"
	depends on BLUETOOTH_CONN
	range 1 64
	default 1
	help
	  Maximum number of simultaneous Bluetooth connections
	  supported.

if BLUETOOTH_CONN
config BLUETOOTH_HCI_ACL_FLOW_CONTROL
	bool "Controller to Host ACL flow control support"
	default n
	# Enable if building a Host-only build
	default y if !BLUETOOTH_CONTROLLER
	# Enable if building a Controller-only build
	default y if BLUETOOTH_HCI_RAW
	select POLL
	help
	  Enable support for throttling ACL buffers from the controller
	  to the host. This is particularly useful when the host and
	  controller are on separate cores since it ensures that we do
	  not run out of incoming ACL buffers.
endif # BLUETOOTH_CONN

config BLUETOOTH_CONTROLLER_TO_HOST_UART_DEV_NAME
	string "Device Name of UART Device to an external Bluetooth Host"
	default "UART_0"
	depends on BLUETOOTH_HCI_RAW
	help
	  This option specifies the name of UART device to be used
	  to connect to an external Bluetooth Host when Zephyr is
	  acting as a Bluetooth Controller.

source "subsys/bluetooth/common/Kconfig"
source "subsys/bluetooth/host/Kconfig"
source "subsys/bluetooth/controller/Kconfig"
source "subsys/bluetooth/shell/Kconfig"
endif # BLUETOOTH_HCI

endif # BLUETOOTH

endmenu
