# Bluetooth Audio - Basic Audio Profile configuration options
#
# Copyright (c) 2020 Intel Corporation
# Copyright (c) 2022-2023 Nordic Semiconductor ASA

# SPDX-License-Identifier: Apache-2.0
#

config BT_BAP_UNICAST
	bool

config BT_BAP_UNICAST_SERVER
	bool "Bluetooth Unicast Audio Server Support"
	select BT_BAP_UNICAST
	depends on BT_GATT_DYNAMIC_DB
	depends on BT_GATT_CACHING
	depends on BT_PERIPHERAL
	depends on BT_ISO_PERIPHERAL
	depends on BT_ASCS
	depends on BT_PACS
	depends on BT_BONDABLE
	help
	  This option enables support for Bluetooth Unicast Audio Server
	  using Isochronous channels.

config BT_BAP_UNICAST_CLIENT
	bool "Bluetooth Unicast Audio Client Support"
	select BT_BAP_UNICAST
	select BT_GATT_CLIENT
	select BT_GATT_AUTO_DISCOVER_CCC
	select BT_GATT_AUTO_UPDATE_MTU
	depends on BT_CENTRAL
	depends on BT_ISO_CENTRAL
	depends on BT_BONDABLE
	help
	  This option enables support for Bluetooth Unicast Audio Client
	  using Isochronous channels.

config BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE
	int "Codec Specific Configuration Data Size"
	default 19
	range 0 $(UINT8_MAX)
	help
	  Number of octets to support for Codec Specific Configuration data.
	  The default value 19 matches the required fields for the LC3 codec.

config BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE
	int "Codec Specific Configuration Metadata Size"
	default 4
	range 0 $(UINT8_MAX)
	help
	  Number of octets to support for Codec Specific Configuration metadata.

config BT_BAP_BASS_MAX_SUBGROUPS
	int "Maximum number of subgroups supported for the BASS receive states"
	default 1
	range 1 24
	help
	  This option sets the maximum number of subgroups supported.
	  Due to limitations in advertising data, the maximum size of all subgroups are 249.
	  The minimum size of a subgroup is 10 octets.
	  So effectively there can be a maximum of 24 subgroups in a BASE.

config BT_AUDIO_CODEC_CAP_MAX_DATA_SIZE
	int "Codec Capabilities Data Size"
	default 19
	range 0 $(UINT8_MAX)
	help
	  Number of octets to support for Codec Specific Capabilities data.
	  The default value 19 matches the required fields for the LC3 codec.

config BT_AUDIO_CODEC_CAP_MAX_METADATA_SIZE
	int "Codec Capabilities Metadata Size"
	default 4
	range 0 $(UINT8_MAX)
	help
	  Number of octets to support for Codec Specific Capabilities metadata.

if BT_BAP_UNICAST_CLIENT
config BT_BAP_UNICAST_CLIENT_GROUP_COUNT
	int "Basic Audio Unicast Group count"
	depends on BT_BAP_UNICAST
	default BT_ISO_MAX_CIG
	range 1 BT_ISO_MAX_CIG
	help
	  This option sets the number of connected audio groups to support as
	  the unicast client.

config BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT
	int "Basic Audio Profile Unicast Group Connected Isochronous Stream (CIS) count"
	depends on BT_BAP_UNICAST_CLIENT_GROUP_COUNT > 0
	default 1
	range 1 BT_ISO_MAX_CHAN if BT_ISO_MAX_CHAN < 31
	range 1 31
	help
	  This option sets the maximum number of CIS per unicast group to support.
	  Since BAP streams are unidirectional, two BAP streams may use a single CIS, the number of
	  BAP audio streams per group may be up to twice of this value.

config BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT
	int "Basic Audio Profile ASE Sink count"
	default 2
	range 0 $(UINT8_MAX)
	help
	  This option enables caching a number of Audio Stream Endpoint Sink
	  instances for Basic Audio Profile on a per connection basis.

config BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT
	int "Basic Audio Profile ASE Source count"
	default 2
	range 0 $(UINT8_MAX)
	help
	  This option enables caching a number of Audio Stream Endpoint Source
	  instances for Basic Audio Profile on a per connection basis.

config BT_BAP_UNICAST_CLIENT_ASE_SNK
	def_bool BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT > 0
	select BT_AUDIO_TX

config BT_BAP_UNICAST_CLIENT_ASE_SRC
	def_bool BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT > 0
	select BT_AUDIO_RX

endif # BT_BAP_UNICAST_CLIENT

config BT_BAP_BROADCAST_SOURCE
	bool "Bluetooth Broadcast Source Audio Support"
	select BT_ISO_BROADCASTER
	select BT_AUDIO_TX
	help
	  This option enables support for Bluetooth Broadcast Source Audio using
	  Isochronous channels.
if BT_BAP_BROADCAST_SOURCE

config BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT
	int "Basic Audio Broadcast Source subgroup count"
	default 1
	range 1 BT_ISO_MAX_CHAN if BT_ISO_MAX_CHAN < 31
	range 1 31
	help
	  This option sets the maximum number of subgroups per broadcast source
	  to support.

config BT_BAP_BROADCAST_SRC_COUNT
	int "Basic Audio Broadcaster source count"
	default 1
	range 1 BT_ISO_MAX_BIG
	help
	  This option sets the number of broadcast sources to support.
	  One broadcast source can send multiple streams
	  (up to BT_BAP_BROADCAST_SRC_STREAM_COUNT per broadcast source).


config BT_BAP_BROADCAST_SRC_STREAM_COUNT
	int "Basic Audio Broadcast Source Stream count"
	default 1
	range 1 BT_ISO_MAX_CHAN if BT_ISO_MAX_CHAN < 31
	range 1 31
	help
	  This option sets the maximum number of streams per broadcast source
	  to support.

endif # BT_BAP_BROADCAST_SOURCE

config BT_BAP_BROADCAST_SINK
	bool "Bluetooth Broadcast Sink Audio Support"
	select BT_ISO_SYNC_RECEIVER
	select BT_AUDIO_RX
	select BT_PAC_SNK
	depends on BT_PERIPHERAL
	depends on BT_BAP_SCAN_DELEGATOR
	help
	  This option enables support for Bluetooth Broadcast Sink Audio using
	  Isochronous channels.

if BT_BAP_BROADCAST_SINK

config BT_BAP_BROADCAST_SNK_SUBGROUP_COUNT
	int "Basic Audio Profile Broadcast Sink subgroup count"
	default 1
	range 1 BT_ISO_MAX_CHAN if BT_ISO_MAX_CHAN < 31
	range 1 31
	help
	  This option sets the maximum number of subgroups per broadcast sink
	  to support.

config BT_BAP_BROADCAST_SNK_COUNT
	int "Basic Audio Broadcaster Sink count"
	default 1
	range 0 BT_ISO_MAX_BIG
	help
	  This option sets the number of broadcast sinks to support.
	  One broadcast sink can receive multiple streams
	  (up to BT_BAP_BROADCAST_SNK_STREAM_COUNT per broadcast sink).

config BT_BAP_BROADCAST_SNK_STREAM_COUNT
	int "Basic Audio Broadcast Sink Stream count"
	depends on BT_BAP_BROADCAST_SNK_COUNT > 0
	default 1
	range 1 BT_ISO_MAX_CHAN if BT_ISO_MAX_CHAN < 31
	range 1 31
	help
	  This option sets the maximum number of streams per broadcast sink
	  to support.

endif # BT_BAP_BROADCAST_SINK

config BT_BAP_SCAN_DELEGATOR
	bool "Basic Audio Profile Scan Delegator role support"
	select BT_EXT_ADV
	select BT_PER_ADV_SYNC
	select BT_ISO_SYNC_RECEIVER
	depends on BT_OBSERVER
	depends on BT_GATT_DYNAMIC_DB
	depends on BT_BONDABLE
	help
	  This option enables support for the Scan Delegator role and the
	  Broadcast Audio Scan Service (BASS).

if BT_BAP_SCAN_DELEGATOR

config BT_BAP_SCAN_DELEGATOR_RECV_STATE_COUNT
	int "Scan Delegator 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_BAP_SCAN_DELEGATOR_BUF_TIMEOUT
	int "Milliseconds of timeout when handle concurrent access to the long read ASE buffer"
	range 0 1000
	default 50
	help
	  The maximum number of milliseconds that the scan delegator implementation will wait
	  before rejecting a read or dropping a notification if the scan delegator state is
	  being accessed by another thread.

endif # BT_BAP_SCAN_DELEGATOR

config BT_BAP_BROADCAST_ASSISTANT
	bool "Basic Audio Profile Broadcast Assistant role support"
	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
	depends on BT_OBSERVER
	depends on BT_BONDABLE
	help
	  This option enables support for the Broadcast Assistant role.

if BT_BAP_BROADCAST_ASSISTANT

config BT_BAP_BROADCAST_ASSISTANT_RECV_STATE_COUNT
	int "Broadcast Assistant Max Receive State Count"
	default 1
	range 1 $(UINT8_MAX)
	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.

endif # BT_BAP_BROADCAST_ASSISTANT

config BT_BAP_DEBUG_STREAM_DATA
	bool "Bluetooth Audio Stream data debug"
	depends on BT_BAP_STREAM_LOG_LEVEL_DBG
	help
	  Use this option to enable Bluetooth Audio Stream data debug logs for
	  the Bluetooth Audio functionality. This will enable debug logs for all
	  audio data received and sent.

config BT_BAP_STREAM
	# Virtual/hidden option
	bool
	default y if BT_ASCS || BT_BAP_UNICAST_CLIENT || \
			BT_BAP_BROADCAST_SOURCE || BT_BAP_BROADCAST_SINK

config BT_BAP_DEBUG_STREAM_SEQ_NUM
	bool "Bluetooth Audio Stream sequence number debug"
	depends on BT_BAP_STREAM_LOG_LEVEL >= BT_BAP_STREAM_LOG_LEVEL_WRN
	default y
	help
	  Use this option to enable Bluetooth Audio Stream sequence number debugging logs for
	  the Bluetooth Audio functionality. This will provide a warning if the application
	  provides unexpected sequence numbers.

config BT_BAP_BASE
	def_bool BT_BAP_BROADCAST_SINK || BT_BAP_BROADCAST_ASSISTANT || BT_BAP_SCAN_DELEGATOR

rsource "Kconfig.pacs"
rsource "Kconfig.ascs"
