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

##################### 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"
	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"
	help
	  Use this option to enable Volume Control Profile debug logs for the
	  Bluetooth Audio functionality.

endif # BT_VCS_CLIENT
