# Kconfig - Bluetooth common configuration options
#
# Copyright (c) 2017 Nordic Semiconductor ASA
# Copyright (c) 2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

if BLUETOOTH_HCI

config BLUETOOTH_RPA
	# Virtual/hidden option
	bool
	default n

config BLUETOOTH_DEBUG
	# Virtual/hidden option to make the conditions more intuitive
	bool

choice
	prompt "Bluetooth debug type"
	depends on BLUETOOTH
	default BLUETOOTH_DEBUG_NONE

config BLUETOOTH_DEBUG_NONE
	bool "No debug log"
	help
	  Select this to disable all Bluetooth debug logs.

config BLUETOOTH_DEBUG_LOG
	bool "Normal printf-style to console"
	select BLUETOOTH_DEBUG
	select PRINTK
	select SYS_LOG
	help
	  This option enables Bluetooth debug going to standard
	  serial console.

config BLUETOOTH_DEBUG_MONITOR
	bool "Monitor protocol over UART"
	select BLUETOOTH_DEBUG
	select PRINTK
	select CONSOLE_HAS_DRIVER
	help
	  Use a custom logging protocol over the console UART
	  instead of plain-text output. Requires a special application
	  on the host side that can decode this protocol. Currently
	  the 'btmon' tool from BlueZ is capable of doing this.

	  If the target board has two or more external UARTs it is
	  possible to keep using UART_CONSOLE together with this option,
	  however if there is only a single external UART then
	  UART_CONSOLE needs to be disabled (in which case printk/printf
	  will get encoded into the monitor protocol).

endchoice

if BLUETOOTH_DEBUG
config BLUETOOTH_DEBUG_COLOR
	bool "Use colored logs"
	depends on BLUETOOTH_DEBUG_LOG
	select SYS_LOG_SHOW_COLOR
	default y
	help
	  Use color in the logs. This requires an ANSI capable terminal.

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

config BLUETOOTH_DEBUG_HCI_DRIVER
	bool "Bluetooth HCI driver debug"
	depends on BLUETOOTH_DEBUG
	help
	  This option enables debug support for the active
	  Bluetooth HCI driver, including the Controller-side HCI layer
	  when included in the build.

config BLUETOOTH_DEBUG_RPA
	bool "Bluetooth Resolvable Private Address (RPA) debug"
	depends on BLUETOOTH_RPA
	help
	  This option enables debug support for the Bluetooth
	  Resolvable Private Address (RPA) generation and resolution.

endif #BLUETOOTH_DEBUG
endif # BLUETOOTH_HCI
