# Bluetooth Audio - Microphone Input Control Service options
#
# Copyright (c) 2020 Bose Corporation
# Copyright (c) 2020-2021 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
#

##################### Microphone Input Control Service #####################

config BT_MICS
	bool "Microphone Input Control Service Support [EXPERIMENTAL]"
	default n
	select EXPERIMENTAL
	help
	  This option enables support for Microphone Input Control Service.

if BT_MICS

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

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

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

config BT_DEBUG_MICS
	bool "Microphone Input Control Service debug"
	help
	  Use this option to enable Microphone Input Control Service debug logs
	  for the Bluetooth Audio functionality.

endif # BT_MICS

##################### Microphone Control Profile Client #####################

config BT_MICS_CLIENT
	bool "Microphone Control Profile Support [EXPERIMENTAL]"
	select BT_GATT_CLIENT
	select BT_GATT_AUTO_DISCOVER_CCC
	select EXPERIMENTAL
	help
	  This option enables support for Microphone Control Profile.

if BT_MICS_CLIENT

config BT_MICS_CLIENT_MAX_AICS_INST
	int "Maximum number of Audio Input Control Service 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_MICS_CLIENT_AICS
	bool # Hidden
	default y if BT_MICS_CLIENT_MAX_AICS_INST > 0
	help
	  This hidden option makes it possible to easily check if AICS is
	  enabled for MICS client.

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

config BT_DEBUG_MICS_CLIENT
	bool "Microphone Control Profile debug"
	help
	  Use this option to enable Microphone Control Profile debug logs for
	  the Bluetooth Audio functionality.

endif # BT_MICS_CLIENT
