# Kconfig - Bluetooth LE driver configuration options

#
# Copyright (c) 2015 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
# Bluetooth options
#
menu "Bluetooth HCI Driver Options"
depends on BLUETOOTH

config BLUETOOTH_UART
	bool
	default n

choice
	prompt "Bluetooth HCI driver"
	depends on BLUETOOTH
	default BLUETOOTH_H4

config	BLUETOOTH_H4
	bool "H:4 UART"
	select UART_INTERRUPT_DRIVEN
	select BLUETOOTH_UART
	help
	  Bluetooth H:4 UART driver. Requires hardware flow control
	  lines to be available.

config BLUETOOTH_H5
	bool "H:5 UART [EXPERIMENTAL]"
	select UART_INTERRUPT_DRIVEN
	select BLUETOOTH_UART
	help
	  Bluetooth three-wire (H:5) UART driver. Implementation of HCI
	  Three-Wire UART Transport Layer.

config BLUETOOTH_NO_DRIVER
	bool "No default HCI driver"
	help
	  This is intended for unit tests where no internal driver
	  should be selected.

endchoice

config	BLUETOOTH_DEBUG_DRIVER
	bool "Bluetooth driver debug"
	depends on BLUETOOTH_DEBUG && BLUETOOTH_UART
	default n
	help
	  This option enables debug support for the chosen
	  Bluetooth HCI driver

config  BLUETOOTH_UART_ON_DEV_NAME
	string "Device Name of UART Device for Bluetooth"
	default "UART_0"
	depends on BLUETOOTH_UART
	help
	  This option specifies the name of UART device to be used
	  for Bluetooth.

config  BLUETOOTH_UART_IRQ
	int "IRQ of UART Device for Bluetooth"
	depends on BLUETOOTH_UART
	help
	  This option specifies the IRQ of UART device to be used
	  for Bluetooth.

config  BLUETOOTH_UART_IRQ_PRI
	int "IRQ Priority of UART Device for Bluetooth"
	depends on BLUETOOTH_UART
	help
	  This option specifies the IRQ priority of UART device to be used
	  for Bluetooth.

# Headroom that the driver needs for sending and receiving buffers.
# Add a new 'default' entry for each new driver.

# Needed headroom for outgoing buffers (to controller)
config BLUETOOTH_HCI_SEND_RESERVE
	int
	depends on BLUETOOTH
	default 0 if BLUETOOTH_H4
	default 1 if BLUETOOTH_H5
	# Even if no driver is selected the following default is still
	# needed e.g. for unit tests.
	default 0

# Needed headroom for incoming buffers (from controller)
config BLUETOOTH_HCI_RECV_RESERVE
	int
	depends on BLUETOOTH
	default 0 if BLUETOOTH_H4
	default 0 if BLUETOOTH_H5
	# Even if no driver is selected the following default is still
	# needed e.g. for unit tests.
	default 0

endmenu
