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

if BT_AUDIO

#####################  Broadcast Audio Scan Service #####################

config BT_BASS
	bool "Broadcast Audio Scan Service"
	select BT_OBSERVER
	select BT_EXT_ADV
	select BT_PER_ADV_SYNC
	select BT_ISO_SYNC_RECEIVER
	help
	  This option enables support for the Broadcast Audio Scan Service.

if BT_BASS

config BT_BASS_RECV_STATE_COUNT
	int "Broadcast Audio Scan Service Receive State Count"
	default 1
	range 1 3
	help
	  Sets the number of receive state characteristics present on the
	  server. Each characteristic may hold information to sync to a
	  periodic advertise or a broadcast isochronous stream.

config BT_BASS_MAX_METADATA_LEN
	int "Broadcast Audio Scan Service Maximum Metadata Length"
	default 32
	range 0 255
	help
	  The maximum metadata length support by the BASS server.

config BT_BASS_MAX_SUBGROUPS
	int "Broadcast Audio Scan Service Maximum Number of Subgroups support"
	default 1
	range 0 31
	help
	  The maximum number of BIS subgroups supported.

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

config BT_DEBUG_BASS
	bool "Broadcast Audio Scan Service debug"
	help
	  Use this option to enable Broadcast Audio Scan Service debug logs for
	  the Bluetooth Audio functionality.

endif # BT_BASS

##################### Broadcast Audio Scan Client #####################

config BT_BASS_CLIENT
	bool "Broadcast Audio Scan Service client"
	select BT_OBSERVER
	select BT_EXT_ADV
	select BT_PER_ADV_SYNC
	select BT_ISO_SYNC_RECEIVER
	select BT_GATT_CLIENT
	select BT_GATT_AUTO_DISCOVER_CCC
	select BT_GATT_AUTO_UPDATE_MTU
	help
	  This option enables support for the Broadcast Audio Scan Service
	  client.

if BT_BASS_CLIENT

config BT_BASS_CLIENT_RECV_STATE_COUNT
	int "Broadcast Audio Scan Service Client Max Receive State Count"
	default 1
	range 1 255
	help
	  Sets the number of maximum receive stat characteristics that will be
	  discovered and ready to use. Each characteristic may hold information
	  to sync to a periodic advertise or a broadcast isochronous stream.

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

config BT_DEBUG_BASS_CLIENT
	bool "Broadcast Audio Scan Service client debug"
	help
	  Use this option to enable Broadcast Audio Scan Service client
	  debug logs for the Bluetooth Audio functionality.

endif # BT_BASS_CLIENT

endif # BT_AUDIO
