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

#################### Coordinated Set Identification Service ####################

config BT_CSIS
	bool "Coordinated Set Identification Service Support [EXPERIMENTAL]"
	imply BT_EXT_ADV if BT_PRIVACY
	select EXPERIMENTAL
	help
	  This option enables support for Coordinated Set Identification
	  Service.

if BT_CSIS

config BT_CSIS_TEST_SAMPLE_DATA
	bool "Coordinated Set Identification Service Test Sample Data"
	help
	  Enable the use of the sample data defined by the CSIS spec SIRK.
	  This will use the sample SIRK, prand and LTK.

	  WARNING: This option enables anyone to track and decrypt the SIRK
	  (if encrypted) using public sample data.
	  Should not be used for production builds.

config BT_CSIS_ENC_SIRK_SUPPORT
	bool "Support for encrypted SIRK"
	default y
	help
	  Enables support encrypting the SIRK.

config BT_CSIS_MAX_INSTANCE_COUNT
	int "Coordinated Set Identification Service max instance count"
	default 1
	range 1 255
	help
	  This option sets the maximum number of instances of Coordinated Set
	  Identification Services. If the service is declared as primary service
	  then only a single instance is possible.

	  Enabling BT_CAP_ACCEPTOR_SET_MEMBER will take one of the allocated
	  instances.

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

config BT_DEBUG_CSIS
	bool "Coordinated Set Identification Service debug"
	help
	  Use this option to enable Coordinated Set Identification Service debug
	  logs for the Bluetooth Audio functionality.

endif # BT_CSIS

#################### Coordinated Set Identification Client ####################

config BT_CSIS_CLIENT
	bool "Coordinated Set Identification Profile Support [EXPERIMENTAL]"
	select BT_GATT_CLIENT
	select BT_GATT_AUTO_DISCOVER_CCC
	select EXPERIMENTAL
	help
	  This option enables support for Coordinated Set Identification
	  Profile.

if BT_CSIS_CLIENT

config BT_CSIS_CLIENT_TEST_SAMPLE_DATA
	bool "Coordinated Set Identification Service Test Sample Data"
	help
	  Enable the use of the sample data defined by the CSIS spec.
	  This will use the sample SIRK, prand and LTK.

	  WARNING: This option enables the client to use the sample data
	  to locate members and decrypt the SIRK, and thus won't work
	  with set members that are not using the sample data.
	  Should not be used for production builds.

config BT_CSIS_CLIENT_MAX_CSIS_INSTANCES
	int "Coordinated Set Identification Service Count"
	default 1
	range 1 3
	help
	  Sets the number of service instances, which corresponds to the number
	  of different sets the peer device may be in.

config BT_CSIS_CLIENT_ENC_SIRK_SUPPORT
	bool "Support for encrypted SIRK"
	default y
	help
	  Enables support encrypting the SIRK.

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

config BT_DEBUG_CSIS_CLIENT
	bool "Coordinated Set Identification Profile debug"
	help
	  Use this option to enable Coordinated Set Identification Profile debug
	  logs for the Bluetooth Audio functionality.

endif # BT_CSIS_CLIENT

config BT_DEBUG_CSIS_CRYPTO
	bool "Coordinated Set Identification Service crypto functions debug"
	depends on BT_CSIS_CLIENT || BT_CSIS
	help
	  Use this option to enable Coordinated Set Identification Service
	  crypto functions debug logs for the Bluetooth Audio functionality.
