# 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
	select BT_SMP_SC_PAIR_ONLY
	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.

############### 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
	select BT_SMP_SC_PAIR_ONLY
	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.
