# Bluetooth Audio configuration options

#
# Copyright (c) 2020 Intel Corporation
# Copyright (c) 2022 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig BT_AUDIO
	bool "Bluetooth Audio support [EXPERIMENTAL]"
	select EXPERIMENTAL
	help
	  This option enables Bluetooth Audio support. The specific
	  features that are available may depend on other features
	  that have been enabled in the stack, such as Periodic
	  Advertisement for Broadcast and L2CAP Dynamic Channel
	  for Unicast.

if BT_AUDIO

config BT_AUDIO_RX
	bool
	help
	  This hidden option is enabled when any of the profiles/services
	  enables support for receiving of audio data.

config BT_AUDIO_TX
	bool
	help
	  This hidden option is enabled when any of the profiles/services
	  enables support for transmitting of audio data.

config BT_AUDIO_NOTIFY_RETRY_DELAY
	int "Delay for notification sending retried attempt in 1.25 ms units"
	range 6 3200
	default 20
	help
	  This option sets the time in 1.25 ms units before the stack will
	  retry to send notification that failed due to lack of TX buffers
	  available.

config BT_CCID
	bool
	help
	  This hidden option is enabled when any of the content control
	  features are enabled.

rsource "Kconfig.bap"
rsource "Kconfig.vocs"
rsource "Kconfig.aics"
rsource "Kconfig.vcp"
rsource "Kconfig.micp"
rsource "Kconfig.csip"
rsource "Kconfig.tbs"
rsource "Kconfig.mcs"
rsource "Kconfig.bass"
rsource "Kconfig.has"
rsource "Kconfig.mpl"
rsource "Kconfig.mctl"
rsource "Kconfig.cap"
rsource "Kconfig.tmap"
rsource "Kconfig.gmap"
rsource "Kconfig.pbp"

module = BT_AUDIO
module-str = "Bluetooth Audio"
source "subsys/logging/Kconfig.template.log_config"

endif # BT_AUDIO
