# Copyright (c) 2022 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

mainmenu "Bluetooth: Broadcast Audio Sink"

config SCAN_OFFLOAD
	bool "Whether to wait for a Broadcast Assistant"
	default y
	# enable PAST support if we can
	select BT_PER_ADV_SYNC_TRANSFER_RECEIVER if !BT_CTLR || BT_CTLR_SYNC_TRANSFER_RECEIVER_SUPPORT
	help
	  If set to true, the sample will start advertising connectable for
	  Broadcast Assistants.

config SCAN_SELF
	bool "Whether to scan for Broadcast Sources without Broadcast Assistant"
	default y
	help
	  If set to true, the sample will start scanning for Broadcast Sources
	  without waiting for a Broadcast Assistant to connect.

config SCAN_DELAY
	int "Delay before starting scan (in seconds)"
	range 0 255
	default 5
	depends on SCAN_SELF
	help
	  Time to advertise connectable for a Broadcast Assistant to connect
	  before starting scanning for Broadcast Sources.

config TARGET_BROADCAST_NAME
	string "Target Broadcast Device Name"
	default ""
	help
	  Name of target broadcast device. If not empty string, sink device
	  will only listen to the specified broadcast source. Not case sensitive.

config ENABLE_LC3
	bool "Enable the LC3 codec"
	# By default let's enable it in the platforms we know are capable of supporting it
	default y
	depends on (ARCH_POSIX || SOC_NRF5340_CPUAPP)
	select LIBLC3
	select FPU

config USE_USB_AUDIO_OUTPUT
	bool "Use USB Audio as output"
	depends on ENABLE_LC3
	select USB_DEVICE_STACK
	select USB_DEVICE_AUDIO
	select RING_BUFFER
	help
	  Enables USB audio as output as a USB peripheral. This does not support providing USB
	  audio to e.g. speakers that are also USB peripherals, but can be connected to e.g. a
	  phone or PC as a USB-in device (such as a USB microphone).
	  USB audio only supports a single audio channel.

config TARGET_BROADCAST_CHANNEL
	int "Broadcast Channel Audio Location to sync to"
	range 0 2
	default 1
	depends on USE_USB_AUDIO_OUTPUT
	help
	  Channel Audio Location to sync to. These corresponds to the bt_audio_location,
	  supporting mono, left and right channels

source "Kconfig.zephyr"
