# 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_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
