# Bluetooth ATT/GATT configuration options

# Copyright (c) 2019 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "ATT and GATT Options"

config BT_ATT_ENFORCE_FLOW
	bool "Enforce strict flow control semantics for incoming PDUs"
	default y if !(BOARD_QEMU_CORTEX_M3 || BOARD_QEMU_X86 || ARCH_POSIX)
	help
	  Enforce flow control rules on incoming PDUs, preventing a peer
	  from sending new requests until a previous one has been responded
	  or sending a new indication until a previous one has been
	  confirmed. This may need to be disabled to avoid potential race
	  conditions arising from a USB based HCI transport that splits
	  HCI events and ACL data to separate endpoints.

config BT_ATT_PREPARE_COUNT
	int "Number of ATT prepare write buffers"
	default 0
	range 0 64
	help
	  Number of buffers available for ATT prepare write, setting
	  this to 0 disables GATT long/reliable writes.

config BT_ATT_RETRY_ON_SEC_ERR
	bool "Automatic security elevation and retry on security errors"
	default y
	depends on BT_SMP
	help
	  If an ATT request fails due to insufficient security, the host will
	  try to elevate the security level and retry the ATT request.

config BT_EATT
	bool "Enhanced ATT Bearers support [EXPERIMENTAL]"
	depends on BT_L2CAP_ECRED
	select EXPERIMENTAL
	select BT_GATT_READ_MULT_VAR_LEN
	help
	  This option enables support for Enhanced ATT bearers support. When
	  enabled additional L2CAP channels can be connected as bearers enabling
	  multiple outstanding request.

if BT_EATT

config BT_EATT_MAX
	int "Maximum number of Enhanced ATT bearers"
	default 3
	range 1 16

	help
	  Number of Enhanced ATT bearers available.


config BT_EATT_AUTO_CONNECT
	bool "Automatically connect EATT bearers when a link is established"
	default y
	help
	  The device will try to connect BT_EATT_MAX enhanced ATT bearers when a
	  connection to a peer is established.

endif # BT_EATT

config BT_GATT_AUTO_SEC_REQ
	bool "Automatic security re-establishment request as a peripheral"
	default y
	depends on BT_SMP
	help
	  This option requests security re-establishment automatically whenever
	  a reconnection to a GATT client is established and
	  there are notifiable or indicatable characteristics for which security
	  is required. This configuration option only applies to the peripheral
	  role, which sends a Security Request for this purpose.
	  When disabled, it is the application's responsibility to call
	  bt_conn_set_security() to re-establish security prior to sending any
	  notifications or indications on the characteristics that require
	  security (unless the central does that first).
	  This option has been introduced to avoid interoperability issues with
	  commercially available central devices that react negatively to
	  receiving a Security Request immediately after reconnection.

config BT_GATT_SERVICE_CHANGED
	bool "GATT Service Changed support"
	default y
	help
	  This option enables support for the service changed characteristic.

config BT_GATT_DYNAMIC_DB
	bool "GATT dynamic database support"
	depends on BT_GATT_SERVICE_CHANGED
	help
	  This option enables registering/unregistering services at runtime.

config BT_GATT_CACHING
	bool "GATT Caching support"
	default y
	depends on BT_GATT_SERVICE_CHANGED
	select TINYCRYPT
	select TINYCRYPT_AES
	select TINYCRYPT_AES_CMAC
	help
	  This option enables support for GATT Caching. When enabled the stack
	  will register Client Supported Features and Database Hash
	  characteristics which can be used by clients to detect if anything has
	  changed on the GATT database.

if BT_GATT_CACHING

config BT_GATT_NOTIFY_MULTIPLE
	bool "GATT Notify Multiple Characteristic Values support"
	depends on BT_GATT_CACHING
	help
	  This option enables support for the GATT Notify Multiple
	  Characteristic Values procedure.

if BT_GATT_NOTIFY_MULTIPLE

config BT_GATT_NOTIFY_MULTIPLE_FLUSH_MS
	int "Delay for batching multiple notifications in a single PDU."
	default 1
	range 0 4000
	help
	  Sets the time (in milliseconds) during which consecutive GATT
	  notifications will be tentatively appended to form a single
	  ATT_MULTIPLE_HANDLE_VALUE_NTF PDU.

	  If set to 0, batching is disabled. Then, the only way to send
	  ATT_MULTIPLE_HANDLE_VALUE_NTF PDUs is to use bt_gatt_notify_multiple.

	  See the documentation of bt_gatt_notify() for more details.

endif # BT_GATT_NOTIFY_MULTIPLE

config BT_GATT_ENFORCE_CHANGE_UNAWARE
	bool "GATT Enforce change-unaware state"
	depends on BT_GATT_CACHING
	help
	  When enable this option blocks notification and indications to client
	  to conform to the following statement from the Bluetooth 5.1
	  specification:
	  '...the server shall not send notifications and indications to such
	  a client until it becomes change-aware."
	  In case the service cannot deal with sudden errors (-EAGAIN) then it
	  shall not use this option.

endif # BT_GATT_CACHING

config BT_GATT_ENFORCE_SUBSCRIPTION
	bool "GATT Enforce characteristic subscription"
	default y
	help
	  When enabled, this option will make the server block sending
	  notifications and indications to a device which has not subscribed to
	  the supplied characteristic.

config BT_GATT_CLIENT
	bool "GATT client support"
	help
	  This option enables support for the GATT Client role.

config BT_GATT_READ_MULTIPLE
	bool "GATT Read Multiple Characteristic Values support"
	default y
	help
	  This option enables support for the GATT Read Multiple Characteristic
	  Values procedure.

config BT_GATT_READ_MULT_VAR_LEN
	bool "GATT Read Multiple Variable Length Characteristic Values support"
	default y
	help
	  This option enables support for the GATT Read Multiple Variable Length
	  Characteristic Values procedure. Mandatory if EATT is enabled, optional
	  otherwise (Core spec v5.3, Vol 3, Part G, Section 4.2, Table 4.1).

config BT_GATT_AUTO_DISCOVER_CCC
	bool "Support to automatic discover the CCC handles of characteristics"
	depends on BT_GATT_CLIENT
	help
	  This option enables support for GATT to initiate discovery for CCC
	  handles if the CCC handle is unknown by the application.

config BT_GATT_AUTO_UPDATE_MTU
	bool "Automatically send ATT MTU exchange request on connect"
	depends on BT_GATT_CLIENT
	help
	  This option if enabled allows automatically sending request for ATT
	  MTU exchange.

config BT_GAP_AUTO_UPDATE_CONN_PARAMS
	bool "Automatic Update of Connection Parameters"
	default y
	depends on BT_PERIPHERAL
	help
	  This option if enabled allows automatically sending request for connection
	  parameters update after GAP recommended 5 seconds of connection as
	  peripheral.

config BT_GAP_PERIPHERAL_PREF_PARAMS
	bool "Configure peripheral preferred connection parameters"
	default y
	depends on BT_PERIPHERAL
	help
	  This allows to configure peripheral preferred connection parameters.
	  Enabling this option results in adding PPCP characteristic in GAP.
	  If disabled it is up to application to set expected connection parameters.

if BT_GAP_PERIPHERAL_PREF_PARAMS
config BT_PERIPHERAL_PREF_MIN_INT
	int "Peripheral preferred minimum connection interval in 1.25ms units"
	default 24
	range 6 65535
	help
	  Range 3200 to 65534 is invalid. 65535 represents no specific value.

config BT_PERIPHERAL_PREF_MAX_INT
	int "Peripheral preferred maximum connection interval in 1.25ms units"
	default 40
	range 6 65535
	help
	  Range 3200 to 65534 is invalid. 65535 represents no specific value.

config BT_PERIPHERAL_PREF_LATENCY
	int "Peripheral preferred peripheral latency in Connection Intervals"
	default 0
	range 0 499

config BT_PERIPHERAL_PREF_TIMEOUT
	int "Peripheral preferred supervision timeout in 10ms units"
	default 42
	range 10 65535
	help
	  It is up to user to provide valid timeout which pass required minimum
	  value: in milliseconds it shall be larger than
	  "(1+ Conn_Latency) * Conn_Interval_Max * 2"
	  where Conn_Interval_Max is given in milliseconds.
	  Range 3200 to 65534 is invalid. 65535 represents no specific value.
endif # BT_GAP_PERIPHERAL_PREF_PARAMS

config BT_DEVICE_NAME_GATT_WRITABLE
	bool "Allow to write name by remote GATT clients"
	depends on BT_DEVICE_NAME_DYNAMIC
	default y
	help
	  Enabling this option allows remote GATT clients to write to device
	  name GAP characteristic.

if BT_DEVICE_NAME_GATT_WRITABLE
config DEVICE_NAME_GATT_WRITABLE_ENCRYPT
	bool "Encryption required to write name by remote GATT clients"
	default y
	help
	  Enabling this option requires the connection to be encrypted to write
	  to the device name GAP characteristic.


config DEVICE_NAME_GATT_WRITABLE_AUTHEN
	bool "Authentication required to write name by remote GATT clients"
	help
	  Enabling this option requires the connection to be encrypted and
	  authenticated to write to the device name GAP characteristic.

endif #BT_DEVICE_NAME_GATT_WRITABLE

if BT_DEBUG

config BT_DEBUG_ATT
	bool "Bluetooth Attribute Protocol (ATT) debug"
	help
	  This option enables debug support for the Bluetooth
	  Attribute Protocol (ATT).

config BT_DEBUG_GATT
	bool "Bluetooth Generic Attribute Profile (GATT) debug"
	help
	  This option enables debug support for the Bluetooth
	  Generic Attribute Profile (GATT).

endif # BT_DEBUG

endmenu
