# Bluetooth Audio - Call control configuration options
#
# Copyright (c) 2020 Bose Corporation
# Copyright (c) 2020-2021 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
#

if BT_AUDIO

##################### Volume Control Service #####################

config BT_VCS
	bool "Volume Control Service Support [EXPERIMENTAL]"
	default n
	select EXPERIMENTAL
	help
	  This option enables support for Volume Control Service.

if BT_VCS
config BT_VCS_VOCS_INSTANCE_COUNT
	int "Volume Offset Control Service instance count"
	default 0
	range 0 BT_VOCS_MAX_INSTANCE_COUNT
	help
	  This option sets the number of instances of Volume Offset Control
	  Services.

config BT_VCS_VOCS
	bool # Hidden
	default y if BT_VCS_VOCS_INSTANCE_COUNT > 0
	help
	  This hidden option makes it possible to easily check if VOCS is
	  enabled for VCS.

config BT_VCS_AICS_INSTANCE_COUNT
	int "Audio Input Control Service instance count for VCS"
	default 0
	range 0 BT_AICS_MAX_INSTANCE_COUNT
	help
	  This option sets the number of instances of Audio Input Control
	  Services for VCS.

config BT_VCS_AICS
	bool # Hidden
	default y if BT_VCS_AICS_INSTANCE_COUNT > 0
	help
	  This hidden option makes it possible to easily check if AICS is
	  enabled for VCS.

############# DEBUG #############

config BT_DEBUG_VCS
	bool "Volume Control Service debug"
	depends on BT_AUDIO_DEBUG
	help
	  Use this option to enable Volume Control Service debug logs for the
	  Bluetooth Audio functionality.

endif # BT_VCS

##################### Volume Control Profile Client #####################

config BT_VCS_CLIENT
	bool "Volume Control Profile Support [EXPERIMENTAL]"
	select BT_GATT_CLIENT
	select BT_GATT_AUTO_DISCOVER_CCC
	select EXPERIMENTAL
	default n
	help
	  This option enables support for Volume Control Profile.

if BT_VCS_CLIENT

config BT_VCS_CLIENT_MAX_VOCS_INST
	int "Maximum number of VOCS instances to setup"
	default 0
	range 0 BT_VOCS_CLIENT_MAX_INSTANCE_COUNT
	help
	  Sets the maximum number of Volume Offset Control Service (VOCS)
	  instances to setup and use.

config BT_VCS_CLIENT_VOCS
	bool # Hidden
	default y if BT_VCS_CLIENT_MAX_VOCS_INST > 0
	help
	  This hidden option makes it possible to easily check if VOCS is
	  enabled for VCS client.

config BT_VCS_CLIENT_MAX_AICS_INST
	int "Maximum number of AICS instances to setup"
	default 0
	range 0 3
	help
	  Sets the maximum number of Audio Input Control Service (AICS)
	  instances to setup and use.

config BT_VCS_CLIENT_AICS
	bool # Hidden
	default y if BT_VCS_CLIENT_MAX_AICS_INST > 0
	help
	  This hidden option makes it possible to easily check if AICS is
	  enabled for VCS client.

############# DEBUG #############

config BT_DEBUG_VCS_CLIENT
	bool "Volume Control Profile debug"
	depends on BT_AUDIO_DEBUG
	help
	  Use this option to enable Volume Control Profile debug logs for the
	  Bluetooth Audio functionality.

endif # BT_VCS_CLIENT

endif # BT_AUDIO
