# 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
#

if BLUETOOTH

menu "Bluetooth Drivers"

if BLUETOOTH_STACK_HCI

comment "Bluetooth HCI Driver Options"

config BLUETOOTH_UART
	bool
	default n

choice
	prompt "Bluetooth HCI driver"
	default BLUETOOTH_H4

config	BLUETOOTH_H4
	bool "H:4 UART"
	select SERIAL
	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 SERIAL
	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.

# 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
	# Even if no driver is selected the following default is still
	# needed e.g. for unit tests.
	default 0
	default 0 if BLUETOOTH_H4
	default 1 if BLUETOOTH_H5

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

endif # BLUETOOTH_STACK_HCI

source "drivers/nble/Kconfig"

endmenu

endif # BLUETOOTH
