# 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
	select BT_RECV_IS_RX_THREAD
	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
	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"
	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 "Enable 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 "Enable 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_RPMSG_NRF53
	bool "nRF53 configuration of RPMsg"
	default y if SOC_NRF5340_CPUAPP
	depends on BT_RPMSG
	select RPMSG_SERVICE
	help
	  Enable RPMsg configuration for nRF53. Two channels of the IPM driver
	  are used in the HCI driver: channel 0 for TX and channel 1 for RX.

if BT_RPMSG_NRF53

choice RPMSG_SERVICE_MODE
	default RPMSG_SERVICE_MODE_MASTER
endchoice

endif # BT_RPMSG_NRF53

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_NRF53 || 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.
