# Bluetooth Audio - Volume Offset Control Service options
#
# Copyright (c) 2020 Bose Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

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

config BT_VOCS_MAX_INSTANCE_COUNT
	int "Volume Offset Control Service max instance count [EXPERIMENTAL]"
	default 0
	range 0 15
	help
	  This option sets the maximum number of instances of Volume Offset
	  Control Services.

config BT_VOCS
	bool # hidden
	default y if BT_VOCS_MAX_INSTANCE_COUNT > 0
	select EXPERIMENTAL
	help
	  This hidden option enables support for Volume Control Service.

if BT_VOCS

config BT_VOCS_MAX_OUTPUT_DESCRIPTION_SIZE
	int "Volume Offset Control Service max output description size"
	default 32
	range 0 512
	help
	  This option sets the maximum output description size in octets.

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

config BT_DEBUG_VOCS
	bool "Volume Offset Control Service debug"
	help
	  Use this option to enable Volume Offset Control Service debug logs for
	  the Bluetooth Audio functionality.

endif # BT_VOCS

##################### Volume Offset Control Service Client #####################

config BT_VOCS_CLIENT_MAX_INSTANCE_COUNT
	int "Volume Offset Control Service client max instance count [EXPERIMENTAL]"
	default 0
	range 0 15
	help
	  This option sets the maximum number of instances of Volume Offset
	  Control Service clients.

config BT_VOCS_CLIENT
	bool # hidden
	default y if BT_VOCS_CLIENT_MAX_INSTANCE_COUNT > 0
	select EXPERIMENTAL
	help
	  This hidden option enables support for Volume Offset Control Service.


if BT_VOCS_CLIENT

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

config BT_DEBUG_VOCS_CLIENT
	bool "Volume Offset Control Service client debug"
	help
	  Use this option to enable Volume Offset Control Service client debug
	  logs for the Bluetooth Audio functionality.

endif # BT_VOCS_CLIENT
