# 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]"
	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
	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
