# 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_BAP_UNICAST_SERVER || (BT_BAP_BROADCAST_SINK && BT_BAP_SCAN_DELEGATOR)
	depends on BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE >= 4
	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
	select BT_GATT_DYNAMIC_DB
	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_CAP_INITIATOR_UNICAST
	def_bool BT_CAP_INITIATOR && BT_BAP_UNICAST_CLIENT

config BT_CAP_INITIATOR
	bool "Common Audio Profile Initiator Role Support [EXPERIMENTAL]"
	depends on (BT_BAP_UNICAST_CLIENT && BT_CSIP_SET_COORDINATOR) || BT_BAP_BROADCAST_SOURCE
	depends on BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE >= 4
	select EXPERIMENTAL
	help
	  Enabling this will enable the CAP Initiator role.


config BT_CAP_COMMANDER
	bool "Common Audio Profile Initiator Role Support [EXPERIMENTAL]"
	depends on (BT_BAP_BROADCAST_ASSISTANT && BT_BAP_SCAN_DELEGATOR && BT_CSIP_SET_COORDINATOR) || \
		   (BT_BAP_SCAN_DELEGATOR && BT_CSIP_SET_COORDINATOR) || \
		   (BT_VCP_VOL_CTLR && BT_CSIP_SET_COORDINATOR) || \
		   (BT_MICP_MIC_CTLR && BT_CSIP_SET_COORDINATOR) || \
		   BT_TBS_CLIENT || \
		   BT_MCC
	select EXPERIMENTAL
	help
	  Enabling this will enable the CAP Initiator role.
