# Bluetooth Audio - Published Audio Capabilities configuration options
#
# Copyright (c) 2022 Nordic Semiconductor ASA

# SPDX-License-Identifier: Apache-2.0
#

config BT_PACS
	bool "Published Audio Capabilities Service Support"
	select BT_SMP_SC_PAIR_ONLY
	help
	  This option enables support for Published Audio Capabilities Service.

if BT_PACS
config BT_PAC_SNK
	bool "Sink PAC Characteristic Support"
	default y if BT_ASCS
	help
	  This option enables support for Sink PAC Characteristic.

if BT_PAC_SNK
config BT_PACS_SNK_CONTEXT
	hex "Supported Sink Contexts"
	default 0x03ff
	range 0x0000 0x03ff
	help
	  The Supported Sink Contexts exposes the server’s support for
	  reception of audio data associated with specific Context Types:
	  0x0001: Unspecified
	  0x0002: Conversational
	  0x0004: Media
	  0x0008: Instructional
	  0x0010: AttentionSeeking
	  0x0020: ImmediateAlert
	  0x0040: ManMachine
	  0x0080: EmergencyAlert
	  0x0100: Ringtone
	  0x0200: TV

endif # BT_PACS_SNK

config BT_PAC_SRC
	bool "Source PAC Characteristic Support"
	default y if BT_ASCS
	default y
	help
	  This option enables support for Source PAC Characteristic.

if BT_PAC_SRC
config BT_PACS_SRC_CONTEXT
	hex "Supported Source Contexts"
	default 0x03ff
	range 0x0000 0x03ff
	help
	  The Supported Source Contexts exposes the server’s support for
	  transmission of audio data associated with specific Context Types:
	  0x0001: Unspecified
	  0x0002: Conversational
	  0x0004: Media
	  0x0008: Instructional
	  0x0010: AttentionSeeking
	  0x0020: ImmediateAlert
	  0x0040: ManMachine
	  0x0080: EmergencyAlert
	  0x0100: Ringtone
	  0x0200: TV

endif # BT_PAC_SRC
endif # BT_PACS
