# Bluetooth LE Advertising and Scanning configuration options

# Copyright (c) 2016 Intel Corporation
# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config BT_EXT_ADV
	bool "Extended Advertising and Scanning support [EXPERIMENTAL]"
	depends on !BT_CTLR || BT_CTLR_ADV_EXT_SUPPORT
	select EXPERIMENTAL
	help
	  Select this to enable Extended Advertising API support.
	  This enables support for advertising with multiple advertising sets,
	  extended advertising data, and advertising on LE Coded PHY.
	  It enables support for receiving extended advertising data as a
	  scanner, including support for advertising data over the LE coded PHY.
	  It enables establishing connections over LE Coded PHY.

if BT_EXT_ADV

config BT_EXT_ADV_LEGACY_SUPPORT
	bool "Support starting advertising through legacy commands"
	help
	  Select this to enable the use of the Legacy Advertising HCI commands.
	  This option should be used where the capabilities of the controller
	  is not known.
	  If this option is not enabled the controller must support the extended
	  advertising feature.

config BT_EXT_ADV_MAX_ADV_SET
	int "Maximum number of simultaneous advertising sets"
	range 1 64
	default 1
	help
	  Maximum number of simultaneous Bluetooth advertising sets
	  supported.

config BT_PER_ADV
	bool "Periodic Advertising and Scanning support"
	help
	  Select this to enable Periodic Advertising API support. This allows
	  the device to send advertising data periodically at deterministic
	  intervals. Scanners can synchronize to the periodic advertisements
	  to periodically get the data.

config BT_PER_ADV_SYNC
	bool "Periodic advertising sync support"
	depends on BT_OBSERVER
	help
	  Select this to enable Periodic Advertising Sync API support.
	  Syncing with a periodic advertiser allows the device to periodically
	  and deterministic receive data from that device in a connectionless
	  manner.

if BT_PER_ADV_SYNC

config BT_PER_ADV_SYNC_MAX
	int "Maximum number of simultaneous periodic advertising syncs"
	range 1 64
	default 1
	help
	  Maximum number of simultaneous periodic advertising syncs supported.

endif # BT_PER_ADV_SYNC
endif # BT_EXT_ADV
