1# Bluetooth ATT/GATT configuration options
2
3# Copyright (c) 2019 Intel Corporation
4# SPDX-License-Identifier: Apache-2.0
5
6menu "ATT and GATT Options"
7
8config BT_ATT_ENFORCE_FLOW
9	bool "Enforce strict flow control semantics for incoming PDUs"
10	default y if !(BOARD_QEMU_CORTEX_M3 || BOARD_QEMU_X86 || ARCH_POSIX)
11	help
12	  Enforce flow control rules on incoming PDUs, preventing a peer
13	  from sending new requests until a previous one has been responded
14	  or sending a new indication until a previous one has been
15	  confirmed. This may need to be disabled to avoid potential race
16	  conditions arising from a USB based HCI transport that splits
17	  HCI events and ACL data to separate endpoints.
18
19config BT_ATT_PREPARE_COUNT
20	int "Number of ATT prepare write buffers"
21	default 0
22	range 0 64
23	help
24	  Number of buffers available for ATT prepare write, setting
25	  this to 0 disables GATT long/reliable writes.
26
27config BT_ATT_RETRY_ON_SEC_ERR
28	bool "Automatic security elevation and retry on security errors"
29	default y
30	depends on BT_SMP
31	help
32	  If an ATT request fails due to insufficient security, the host will
33	  try to elevate the security level and retry the ATT request.
34
35config BT_EATT
36	bool "Enhanced ATT Bearers support [EXPERIMENTAL]"
37	depends on BT_L2CAP_ECRED
38	select EXPERIMENTAL
39	select BT_GATT_READ_MULT_VAR_LEN
40	help
41	  This option enables support for Enhanced ATT bearers support. When
42	  enabled additional L2CAP channels can be connected as bearers enabling
43	  multiple outstanding request.
44
45if BT_EATT
46
47config BT_EATT_MAX
48	int "Maximum number of Enhanced ATT bearers"
49	default 3
50	range 1 16
51
52	help
53	  Number of Enhanced ATT bearers available.
54
55
56config BT_EATT_AUTO_CONNECT
57	bool "Automatically connect EATT bearers when a link is established"
58	default y
59	help
60	  The device will try to connect BT_EATT_MAX enhanced ATT bearers when a
61	  connection to a peer is established.
62
63endif # BT_EATT
64
65config BT_GATT_AUTO_RESUBSCRIBE
66	bool "Automatic re-subscription to characteristics"
67	default y
68	imply BT_GATT_AUTO_SEC_REQ
69	depends on BT_GATT_CLIENT
70	help
71	  Quirk: upon re-establishing a bonded connection, assumes the remote
72	  forgot the CCC values and sets them again. If this behavior is not
73	  desired for a particular subscription, set the
74	  `BT_GATT_SUBSCRIBE_FLAG_NO_RESUB` flag.
75	  This also means that upon a reconnection, the application will get an
76	  unprompted call to its `subscribe` callback.
77
78config BT_GATT_AUTO_SEC_REQ
79	bool "Automatic security re-establishment request as a peripheral"
80	default y
81	depends on BT_SMP
82	help
83	  This option requests security re-establishment automatically whenever
84	  a reconnection to a GATT client is established and
85	  there are notifiable or indicatable characteristics for which security
86	  is required. This configuration option only applies to the peripheral
87	  role, which sends a Security Request for this purpose.
88	  When disabled, it is the application's responsibility to call
89	  bt_conn_set_security() to re-establish security prior to sending any
90	  notifications or indications on the characteristics that require
91	  security (unless the central does that first).
92	  This option has been introduced to avoid interoperability issues with
93	  commercially available central devices that react negatively to
94	  receiving a Security Request immediately after reconnection.
95
96config BT_GATT_SERVICE_CHANGED
97	bool "GATT Service Changed support"
98	default y
99	help
100	  This option enables support for the service changed characteristic.
101
102config BT_GATT_DYNAMIC_DB
103	bool "GATT dynamic database support"
104	depends on BT_GATT_SERVICE_CHANGED
105	help
106	  This option enables registering/unregistering services at runtime.
107
108config BT_GATT_CACHING
109	bool "GATT Caching support"
110	default y
111	depends on BT_GATT_SERVICE_CHANGED
112	select TINYCRYPT
113	select TINYCRYPT_AES
114	select TINYCRYPT_AES_CMAC
115	help
116	  This option enables support for GATT Caching. When enabled the stack
117	  will register Client Supported Features and Database Hash
118	  characteristics which can be used by clients to detect if anything has
119	  changed on the GATT database.
120
121if BT_GATT_CACHING
122
123config BT_GATT_NOTIFY_MULTIPLE
124	bool "GATT Notify Multiple Characteristic Values support"
125	depends on BT_GATT_CACHING
126	help
127	  This option enables support for the GATT Notify Multiple
128	  Characteristic Values procedure.
129
130if BT_GATT_NOTIFY_MULTIPLE
131
132config BT_GATT_NOTIFY_MULTIPLE_FLUSH_MS
133	int "Delay for batching multiple notifications in a single PDU."
134	default 1
135	range 0 4000
136	help
137	  Sets the time (in milliseconds) during which consecutive GATT
138	  notifications will be tentatively appended to form a single
139	  ATT_MULTIPLE_HANDLE_VALUE_NTF PDU.
140
141	  If set to 0, batching is disabled. Then, the only way to send
142	  ATT_MULTIPLE_HANDLE_VALUE_NTF PDUs is to use bt_gatt_notify_multiple.
143
144	  See the documentation of bt_gatt_notify() for more details.
145
146endif # BT_GATT_NOTIFY_MULTIPLE
147
148config BT_GATT_ENFORCE_CHANGE_UNAWARE
149	bool "GATT Enforce change-unaware state"
150	depends on BT_GATT_CACHING
151	help
152	  When enable this option blocks notification and indications to client
153	  to conform to the following statement from the Bluetooth 5.1
154	  specification:
155	  '...the server shall not send notifications and indications to such
156	  a client until it becomes change-aware."
157	  In case the service cannot deal with sudden errors (-EAGAIN) then it
158	  shall not use this option.
159
160endif # BT_GATT_CACHING
161
162config BT_GATT_ENFORCE_SUBSCRIPTION
163	bool "GATT Enforce characteristic subscription"
164	default y
165	help
166	  When enabled, this option will make the server block sending
167	  notifications and indications to a device which has not subscribed to
168	  the supplied characteristic.
169
170config BT_GATT_CLIENT
171	bool "GATT client support"
172	help
173	  This option enables support for the GATT Client role.
174
175config BT_GATT_READ_MULTIPLE
176	bool "GATT Read Multiple Characteristic Values support"
177	default y
178	help
179	  This option enables support for the GATT Read Multiple Characteristic
180	  Values procedure.
181
182config BT_GATT_READ_MULT_VAR_LEN
183	bool "GATT Read Multiple Variable Length Characteristic Values support"
184	default y
185	help
186	  This option enables support for the GATT Read Multiple Variable Length
187	  Characteristic Values procedure. Mandatory if EATT is enabled, optional
188	  otherwise (Core spec v5.3, Vol 3, Part G, Section 4.2, Table 4.1).
189
190config BT_GATT_AUTO_DISCOVER_CCC
191	bool "Support to automatic discover the CCC handles of characteristics"
192	depends on BT_GATT_CLIENT
193	help
194	  This option enables support for GATT to initiate discovery for CCC
195	  handles if the CCC handle is unknown by the application.
196
197config BT_GATT_AUTO_UPDATE_MTU
198	bool "Automatically send ATT MTU exchange request on connect"
199	depends on BT_GATT_CLIENT
200	help
201	  This option if enabled allows automatically sending request for ATT
202	  MTU exchange.
203
204config BT_GAP_AUTO_UPDATE_CONN_PARAMS
205	bool "Automatic Update of Connection Parameters"
206	default y
207	depends on BT_PERIPHERAL
208	help
209	  This option if enabled allows automatically sending request for connection
210	  parameters update after GAP recommended 5 seconds of connection as
211	  peripheral.
212
213config BT_GAP_PERIPHERAL_PREF_PARAMS
214	bool "Configure peripheral preferred connection parameters"
215	default y
216	depends on BT_PERIPHERAL
217	help
218	  This allows to configure peripheral preferred connection parameters.
219	  Enabling this option results in adding PPCP characteristic in GAP.
220	  If disabled it is up to application to set expected connection parameters.
221
222if BT_GAP_PERIPHERAL_PREF_PARAMS
223config BT_PERIPHERAL_PREF_MIN_INT
224	int "Peripheral preferred minimum connection interval in 1.25ms units"
225	default 24
226	range 6 65535
227	help
228	  Range 3200 to 65534 is invalid. 65535 represents no specific value.
229
230config BT_PERIPHERAL_PREF_MAX_INT
231	int "Peripheral preferred maximum connection interval in 1.25ms units"
232	default 40
233	range 6 65535
234	help
235	  Range 3200 to 65534 is invalid. 65535 represents no specific value.
236
237config BT_PERIPHERAL_PREF_LATENCY
238	int "Peripheral preferred peripheral latency in Connection Intervals"
239	default 0
240	range 0 499
241
242config BT_PERIPHERAL_PREF_TIMEOUT
243	int "Peripheral preferred supervision timeout in 10ms units"
244	default 42
245	range 10 65535
246	help
247	  It is up to user to provide valid timeout which pass required minimum
248	  value: in milliseconds it shall be larger than
249	  "(1+ Conn_Latency) * Conn_Interval_Max * 2"
250	  where Conn_Interval_Max is given in milliseconds.
251	  Range 3200 to 65534 is invalid. 65535 represents no specific value.
252endif # BT_GAP_PERIPHERAL_PREF_PARAMS
253
254config BT_DEVICE_NAME_GATT_WRITABLE
255	bool "Allow to write name by remote GATT clients"
256	depends on BT_DEVICE_NAME_DYNAMIC
257	default y
258	help
259	  Enabling this option allows remote GATT clients to write to device
260	  name GAP characteristic.
261
262if BT_DEVICE_NAME_GATT_WRITABLE
263config DEVICE_NAME_GATT_WRITABLE_ENCRYPT
264	bool "Encryption required to write name by remote GATT clients"
265	default y
266	help
267	  Enabling this option requires the connection to be encrypted to write
268	  to the device name GAP characteristic.
269
270
271config DEVICE_NAME_GATT_WRITABLE_AUTHEN
272	bool "Authentication required to write name by remote GATT clients"
273	help
274	  Enabling this option requires the connection to be encrypted and
275	  authenticated to write to the device name GAP characteristic.
276
277endif #BT_DEVICE_NAME_GATT_WRITABLE
278
279endmenu
280