blob: 8bec5ba90d5d886369990b222537f8237d420e61 [file] [log] [blame]
# Bluetooth common configuration options
# Copyright (c) 2017 Nordic Semiconductor ASA
# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
menu "Bluetooth buffer configuration"
config BT_BUF_ACL_TX_SIZE
int "Maximum supported ACL size for outgoing data"
range 27 $(UINT16_MAX)
default 37 if BT_MESH_GATT
default 27
help
Maximum supported ACL size of data packets sent from the Host to the
Controller. This value does not include the HCI ACL header.
In a combined build this value will be set in both the Host and the
Controller.
In a Host-only build the Host will read the maximum ACL size supported
by the Controller and use the smallest value supported by both the
Host and the Controller.
The Host supports sending of larger L2CAP PDUs than the ACL size and
will fragment L2CAP PDUs into ACL data packets.
The Controller will return this value in the HCI LE Read Buffer
Size command response. If this size if greater than effective Link
Layer transmission size then the Controller will perform
fragmentation before transmitting the packet(s) on air.
If this value is less than the effective Link Layer transmission size
then this will restrict the maximum Link Layer transmission size.
config BT_BUF_ACL_TX_COUNT
int "Number of outgoing ACL data buffers"
default 7 if BT_HCI_RAW
default 4 if BT_MESH_GATT
default 3
range 1 $(UINT8_MAX)
help
Number of outgoing ACL data buffers sent from the Host to the
Controller. This determines the maximum amount of data packets the
Host can have queued in the Controller before waiting for the
to notify the Host that more packets can be queued with the Number of
Completed Packets event.
The buffers are shared between all of the connections and the Host
determines how to divide the buffers between the connections.
The Controller will return this value in the HCI LE Read Buffer Size
command response.
config BT_BUF_ACL_RX_SIZE
int "Maximum supported ACL size for incoming data"
default 200 if BT_CLASSIC
default 70 if BT_EATT
default 69 if BT_SMP
default 37 if BT_MESH_GATT
default 27
range 70 $(UINT16_MAX) if BT_EATT
range 69 $(UINT16_MAX) if BT_SMP
range 27 $(UINT16_MAX)
help
Maximum support ACL size of data packets sent from the Controller to
the Host. This value does not include the HCI ACL header.
In a combined Host and Controller build, both the
Host and the Controller will use this value for buffer sizes, making
Controller to Host flow control not strictly necessary.
In a Host only build with Controller to Host flow control enabled
the Host will inform the Controller about the maximum ACL data size it
can send by setting this value in the Host Buffer Size command.
If Controller to Host flow control is not enabled then the Controller
can assume the Host has to receive and process ACL data faster than
the controller can produce it.
In a Controller only build this will determine the maximum ACL size
that the Controller will send to the Host.
config BT_BUF_ACL_RX_COUNT
int "Number of incoming ACL data buffers"
default 6
range 2 256
help
Number or incoming ACL data buffers sent from the Controller to the
Host.
In a combined Host and Controller build the buffers are shared and
therefore Controller to Host flow control is not needed.
In a Host only build with Controller to Host flow control enabled
the Host will inform the Controller about the maximum number of
buffers by setting this value in the Host Buffer Size command.
When Controller to Host flow control is not enabled the Controller
can assume that the Host has infinite amount of buffers.
For both configurations, there is an additional requirement that is
enforced by a build-time check: BT_BUF_ACL_RX_COUNT needs to be at
least one greater than BT_MAX_CONN.
config BT_BUF_EVT_RX_SIZE
int "Maximum supported HCI Event buffer length"
default $(UINT8_MAX) if (BT_EXT_ADV && BT_OBSERVER) || BT_PER_ADV_SYNC || BT_DF_CONNECTION_CTE_RX || BT_CLASSIC || BT_CHANNEL_SOUNDING
# LE Read Supported Commands command complete event.
default 68
range 68 $(UINT8_MAX)
range 78 $(UINT8_MAX) if BT_CHANNEL_SOUNDING
help
Maximum supported HCI event buffer size. This value does not include
the HCI Event header.
This value is used by both the Host and the Controller for buffer
sizes that include HCI events. It should be set according to the
expected HCI events that can be generated from the configuration.
If the subset of possible HCI events is unknown, this should be set to
the maximum of 255.
config BT_BUF_EVT_RX_COUNT
int "Number of HCI Event buffers"
default 20 if (BT_MESH && !(BT_BUF_EVT_DISCARDABLE_COUNT > 0))
default 10
range 2 $(UINT8_MAX)
help
Number of buffers available for incoming HCI events from the
Controller.
config BT_BUF_EVT_DISCARDABLE_SIZE
int "Maximum supported discardable HCI Event buffer length"
range 43 $(UINT8_MAX) if !BT_EXT_ADV
range 58 $(UINT8_MAX) if BT_EXT_ADV
# LE Extended Advertising Report event
default $(UINT8_MAX) if BT_CLASSIC
# Le Advertising Report event
default 43 if !BT_EXT_ADV
default 58 if BT_EXT_ADV
help
Maximum support discardable HCI event size of buffers in the separate
discardable event buffer pool. This value does not include the
HCI Event header.
The minimum size is set based on the Advertising Report. Setting
the buffer size different than BT_BUF_EVT_RX_SIZE can save memory.
config BT_BUF_EVT_DISCARDABLE_COUNT
int "Number of discardable HCI Event buffers"
range 1 $(UINT8_MAX)
default 20 if BT_MESH
default 3
depends on !BT_HCI_RAW
help
Number of buffers in a separate buffer pool for events which
the HCI driver considers discardable. Examples of such events
could be e.g. Advertising Reports. The benefit of having such
a pool is that the if there is a heavy inflow of such events
it will not cause the allocation for other critical events to
block and may even eliminate deadlocks in some cases.
config BT_BUF_CMD_TX_SIZE
int "Maximum support HCI Command buffer length"
default $(UINT8_MAX) if (BT_EXT_ADV || BT_CLASSIC || BT_ISO_CENTRAL)
# LE Set Connection CTE Receive Parameters. Value required to store max allowed number
# of antenna ids for platforms other than Nordic.
default 83 if (!BT_EXT_ADV && !BT_CLASSIC && BT_CTLR_DF && BT_CTLR_DF_CONN_CTE_REQ && !SOC_COMPATIBLE_NRF)
# LE Generate DHKey v2 command
default 65
range 65 $(UINT8_MAX)
help
Maximum data size for each HCI Command buffer. This value does not
include the HCI Command header.
This value is used by both the Host and the Controller for buffer
sizes that include HCI commands. It should be set according to the
expected HCI commands that can be sent from the configuration.
If the subset of possible HCI commands is unknown, this should be set
to the maximum of 255.
config BT_BUF_CMD_TX_COUNT
int "Number of HCI command buffers"
default 2
range 2 64
help
Number of buffers available for outgoing HCI commands from the Host.
endmenu
# Workaround to have commas on function arguments
ZEPHYR_BT_HCI := zephyr,bt-hci
config BT_HAS_HCI_VS
bool
default $(dt_chosen_bool_prop,$(ZEPHYR_BT_HCI),bt-hci-vs-ext)
help
This option is set by the Bluetooth controller to indicate support
for the Zephyr HCI Vendor-Specific Commands and Event.
config BT_HCI_VS
bool "Zephyr HCI Vendor-Specific Commands"
depends on BT_HAS_HCI_VS || !BT_CTLR
default y if BT_HAS_HCI_VS
help
Enable support for the Zephyr HCI Vendor-Specific Commands in the
Host and/or Controller. This enables Set Version Information,
Supported Commands, Supported Features vendor commands.
config BT_HCI_VS_FATAL_ERROR
bool "Allow vendor specific HCI event Zephyr Fatal Error"
depends on BT_HCI_VS
help
Enable emitting HCI Vendor-Specific events for system and Controller
errors that are unrecoverable.
config BT_HCI_VS_EXT_DETECT
bool "Use heuristics to guess HCI vendor extensions support in advance"
depends on BT_HCI_VS && !BT_CTLR
default y if BOARD_QEMU_X86 || BOARD_QEMU_CORTEX_M3 || BOARD_NATIVE_POSIX || BOARD_NATIVE_SIM
help
Use some heuristics to try to guess in advance whether the controller
supports the HCI vendor extensions in advance, in order to prevent
sending vendor commands to controller which may interpret them in
completely different ways.
config BT_HCI_MESH_EXT
bool "Mesh HCI Command support"
depends on BT_BROADCASTER && BT_OBSERVER && !BT_LL_SW_SPLIT
help
Enable support for the Bluetooth Mesh HCI Commands.
config BT_WAIT_NOP
bool "Wait for \"NOP\" Command Complete event during init"
help
Emit a Command Complete event from the Controller (and wait for it
from the Host) for the NOP opcode to indicate that the Controller is
ready to receive commands.
config BT_RPA
bool
select TINYCRYPT
select TINYCRYPT_AES
config BT_ASSERT
bool "Custom Bluetooth assert implementation"
default y
help
Use a custom Bluetooth assert implementation instead of the
kernel-wide __ASSERT() when CONFIG_ASSERT is disabled.
if BT_ASSERT
config BT_ASSERT_VERBOSE
bool "Print out an assert string when using BT_ASSERT"
default y
help
When CONFIG_BT_ASSERT is enabled, this option turns on printing the
cause of the assert to the console using printk().
config BT_ASSERT_PANIC
bool "Use k_panic() instead of k_oops()"
help
When CONFIG_BT_ASSERT is enabled, this option makes the code call
k_panic() instead of k_oops() when an assertion is triggered.
endif # BT_ASSERT
config BT_HCI_ERR_TO_STR
bool "Print HCI error codes as strings [EXPERIMENTAL]"
select EXPERIMENTAL
help
This configuration enables printing of HCI error
codes represented as strings.
See bt_hci_err_to_str() for more details.
config BT_MONITOR
bool
select LOG_OUTPUT
choice BT_DEBUG_TYPE
prompt "Bluetooth debug type"
default BT_DEBUG_NONE
config BT_DEBUG_NONE
bool "No debug log"
help
Select this to disable all Bluetooth debug logs.
config BT_DEBUG_MONITOR_UART
bool "Monitor protocol over UART"
select LOG
select CONSOLE_HAS_DRIVER
select BT_MONITOR
help
Use a custom logging protocol over the console UART
instead of plain-text output. Requires a special application
on the host side that can decode this protocol. Currently
the 'btmon' tool from BlueZ is capable of doing this.
If the target board has two or more external UARTs it is
possible to keep using UART_CONSOLE together with this option,
however if there is only a single external UART then
UART_CONSOLE needs to be disabled (in which case printk/printf
will get encoded into the monitor protocol).
config BT_DEBUG_MONITOR_RTT
bool "Monitor protocol over RTT"
depends on USE_SEGGER_RTT
depends on SEGGER_RTT_MAX_NUM_UP_BUFFERS >= 2
select LOG
select CONSOLE_HAS_DRIVER
select BT_MONITOR
help
Use a custom logging protocol over the RTT buffer instead of
plain-text output. Requires a special application
on the host side that can decode this protocol. Currently
the 'btmon' tool from BlueZ is capable of doing this.
if BT_DEBUG_MONITOR_RTT
config BT_DEBUG_MONITOR_RTT_BUFFER
int "Buffer number used for custom logger output."
range 1 SEGGER_RTT_MAX_NUM_UP_BUFFERS
default 1
help
Select index of up-buffer used for logger output.
Make sure the buffer number is not used by other logger,
e.g. in LOG_BACKEND_RTT_BUFFER, otherwise the buffer will be
overwritten.
config BT_DEBUG_MONITOR_RTT_BUFFER_NAME
string "Buffer name used for custom logger output."
default "btmonitor"
help
Select index of up-buffer used for logger output.
config BT_DEBUG_MONITOR_RTT_BUFFER_SIZE
int "Size of reserved up-buffer for custom logger output."
default 1024
help
Specify reserved size of up-buffer used for custom logger output.
endif # BT_DEBUG_MONITOR_RTT
endchoice # Bluetooth debug type