# Bluetooth Audio - Common Audio Profile (CAP) options
#
# Copyright (c) 2022 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
#

config BT_CAP
	def_bool BT_CAP_ACCEPTOR || BT_CAP_INITIATOR

config BT_CAP_ACCEPTOR
	bool "Common Audio Profile Acceptor Role Support [EXPERIMENTAL]"
	depends on BT_AUDIO_UNICAST_SERVER || (BT_AUDIO_BROADCAST_SINK && BT_BAP_SCAN_DELEGATOR)
	select EXPERIMENTAL
	help
	  Enabling this will enable the CAP Acceptor role. This instantiates the
	  common audio service (CAS).

config BT_CAP_ACCEPTOR_SET_MEMBER
	bool "Common Audio Profile Acceptor Role Set Member support"
	depends on BT_CAP_ACCEPTOR
	depends on BT_CSIP_SET_MEMBER
	help
	  Enabling this will allow a CAP acceptor to be a set member.
	  Enabling this will require a manual register of the CAS service.
	  Enabling will take one of the allocated CSIS instances
	  (BT_CSIP_SET_MEMBER_MAX_INSTANCE_COUNT).

config BT_DEBUG_CAP_ACCEPTOR
	bool "Common Audio Profile debug"
	select DEPRECATED
	depends on BT_CAP_ACCEPTOR
	help
	  Use this option to enable CAP debug logs for the
	  Bluetooth Audio functionality.

module = BT_CAP_ACCEPTOR
legacy-debug-sym = BT_DEBUG_CAP_ACCEPTOR
module-str = "Common Audio Profile"
source "subsys/bluetooth/common/Kconfig.template.log_config_bt"

config BT_CAP_INITIATOR
	bool "Common Audio Profile Initiator Role Support [EXPERIMENTAL]"
	depends on (BT_AUDIO_UNICAST_CLIENT && BT_CSIP_SET_COORDINATOR) || BT_AUDIO_BROADCAST_SOURCE
	select EXPERIMENTAL
	help
	  Enabling this will enable the CAP Initiator role.

config BT_DEBUG_CAP_INITIATOR
	bool "Common Audio Profile Initiator debug"
	depends on BT_CAP_INITIATOR
	help
	  Use this option to enable CAP Initiator debug logs for the
	  Bluetooth Audio functionality.
