# 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_CSIP
	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_CSIP

config BT_CSIP_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_CSIP_ENC_SIRK_SUPPORT
	bool "Support for encrypted SIRK"
	default y
	help
	  Enables support encrypting the SIRK.

config BT_CSIP_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_CSIP
	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_CSIP

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

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

if BT_CSIP_SET_COORDINATOR

config BT_CSIP_SET_COORDINATOR_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_CSIP_SET_COORDINATOR_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_CSIP_SET_COORDINATOR_ENC_SIRK_SUPPORT
	bool "Support for encrypted SIRK"
	default y
	help
	  Enables support encrypting the SIRK.

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

config BT_DEBUG_CSIP_SET_COORDINATOR
	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_CSIP_SET_COORDINATOR

config BT_DEBUG_CSIP_CRYPTO
	bool "Coordinated Set Identification Profile crypto functions debug"
	depends on BT_CSIP_SET_COORDINATOR || BT_CSIP
	help
	  Use this option to enable Coordinated Set Identification Profile
	  crypto functions debug logs for the Bluetooth Audio functionality.
