# 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_SET_MEMBER
	bool "Coordinated Set Identification Profile Set Member support [EXPERIMENTAL]"
	imply BT_EXT_ADV if BT_PRIVACY
	select EXPERIMENTAL
	help
	  This option enables support for Coordinated Set Identification
	  Profile Set Member role and the Coordinated Set Identification
	  Service.

if BT_CSIP_SET_MEMBER

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

config BT_CSIP_SET_MEMBER_MAX_INSTANCE_COUNT
	int "Coordinated Set Identification Profle max service 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_SET_MEMBER
	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_SET_MEMBER

#################### 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 Set Coordinator debug"
	help
	  Use this option to enable Coordinated Set Identification Profile
	  Set Coordinator debug logs for the Bluetooth Audio functionality.

endif # BT_CSIP_SET_COORDINATOR

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