# Bluetooth drivers configuration options

# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

comment "Bluetooth HCI Driver Options"

config BT_UART
	bool

choice BT_HCI_BUS_TYPE
	prompt "Bluetooth HCI driver"

config BT_H4
	bool "H:4 UART"
	select UART_INTERRUPT_DRIVEN
	select BT_UART
	depends on SERIAL
	help
	  Bluetooth H:4 UART driver. Requires hardware flow control
	  lines to be available.

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

config BT_RPMSG
	bool "HCI using RPMsg"
	select IPC_SERVICE
	select MBOX
	help
	  Bluetooth HCI driver for communication with another CPU
	  using RPMsg framework.

config BT_SPI
	bool "SPI HCI"
	depends on SPI
	help
	  Supports Bluetooth ICs using SPI as the communication protocol.
	  HCI packets are sent and received as single Byte transfers,
	  prepended after a known header.  Headers may vary per device, so
	  additional platform specific knowledge may need to be added as
	  devices are.

config BT_STM32_IPM
	bool "IPM HCI"
	select USE_STM32_HAL_CORTEX
	select HAS_STM32LIB
	help
	  TODO

config BT_USERCHAN
	bool "HCI User Channel based driver"
	depends on BOARD_NATIVE_POSIX
	help
	  This driver provides access to the local Linux host's Bluetooth
	  adapter using a User Channel HCI socket to the Linux kernel. It
	  is only intended to be used with the native POSIX build of Zephyr.
	  The Bluetooth adapter must be powered off in order for Zephyr to
	  be able to use it.

config BT_ESP32
	bool "ESP32 HCI driver"
	help
	  Espressif HCI bluetooth interface

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

endchoice

if BT_SPI

config BT_SPI_INIT_PRIORITY
	int "BT SPI init priority"
	default 75

config BT_BLUENRG_ACI
	bool "ACI message with with BlueNRG-based devices"
	help
	  Enable support for devices compatible with the BlueNRG Bluetooth
	  Stack. Current driver supports: ST BLUENRG-MS.

config BT_SPI_BLUENRG
	bool "Compatibility with BlueNRG-based devices"
	help
	  Enable support for devices compatible with the BlueNRG Bluetooth
	  Stack. Current driver supports: ST BLUENRG-MS.

endif # BT_SPI

config BT_STM32_IPM_RX_STACK_SIZE
	int "STM32 IPM stack size for RX thread"
	depends on BT_STM32_IPM
	default 512

config BT_DRIVER_QUIRK_NO_AUTO_DLE
	bool "Host auto-initiated Data Length Update quirk"
	depends on BT_AUTO_DATA_LEN_UPDATE
	default y if BT_RPMSG || BT_ESP32
	help
	  Enable the quirk wherein BT Host stack will auto-initiate Data Length
	  Update procedure for new connections for controllers that do not
	  auto-initiate the procedure if the default data length parameters are
	  not equal to the initial parameters.

	  This has to be enabled when the BLE controller connected is Zephyr
	  open source controller.

config BT_HCI_SETUP
	bool
	help
	  Enable the HCI vendor-specific Setup function.

	  This option has to be enabled when the BT Controller requires execution
	  of the vendor-specific commands sequence to initialize the BT Controller
	  before the BT Host executes a Reset sequence.

	  The user should generally avoid changing it via menuconfig or in
	  configuration files. This option are enabled by the vendor-specific
	  HCI extension, where the Setup function is implemented.
