# 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"
	default n
	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"
	select BT_GATT_CLIENT
	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
