# 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 65535 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. The Host will segment the data transmitted to the Controller so that packets sent to the Controller will contain data up to this size. 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 3 range 1 255 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_BREDR default 70 if BT_EATT default 69 if BT_SMP default 37 if BT_MESH_GATT default 27 range 70 65535 if BT_EATT range 69 65535 if BT_SMP range 27 65535 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 the buffer sizes in both the Host and the Controller will use this value for buffer sizes, and therefore Controller to Host flow Controller is not needed. 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 infinite buffer size so this value should then be set to something that is guaranteed the Controller will not exceed or the data packets will be dropped. In a Controller only build this will determine the maximum ACL size that the Controller will send to the Host. The Host supports reassembling of L2CAP PDUs from ACL data packets, but the maximum supported L2CAP PDU size is limited by the maximum supported ACL size. This means the maximum L2CAP PDU MTU is restricted by the maximum ACL size subtracting the 4 byte header of an L2CAP PDU. When using L2CAP Connection oriented Channels without segmentation then the L2CAP SDU MTU is also restricted by the maximum ACL size subtracting the 4 Byte header of an L2CAP PDU plus the 2 byte header of an L2CAP SDU. With Enhanced ATT enabled the minimum of 70 is needed to support the minimum ATT_MTU of 64 octets in an L2CAP SDU without segmentation. With SMP LE Secure Connections enabled the minimum of 69 is needed to support the minimum SMP MTU of 65 octets (public key + opcode) in an L2CAP PDU. An L2CAP PDU is also referred to as an L2CAP basic frame or B-frame. An L2CAP SDU is also referred to as an L2CAP Credit-based frame or K-frame. config BT_BUF_ACL_RX_COUNT int "Number of incoming ACL data buffers" default NET_BUF_RX_COUNT if NET_L2_BT default 3 if BT_RECV_BLOCKING default 6 range 1 64 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. config BT_BUF_EVT_RX_SIZE int "Maximum supported HCI Event buffer length" default 255 if (BT_EXT_ADV && BT_OBSERVER) || BT_PER_ADV_SYNC || BT_DF_CONNECTION_CTE_RX # LE Read Supported Commands command complete event. default 68 range 68 255 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 3 if BT_RECV_BLOCKING default 20 if (BT_MESH && !(BT_BUF_EVT_DISCARDABLE_COUNT > 0)) default 10 range 2 255 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 255 if !BT_EXT_ADV range 58 255 if BT_EXT_ADV # LE Extended Advertising Report event default 255 if BT_BREDR # 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 255 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 255 if (BT_EXT_ADV || BT_BREDR || 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_BREDR && BT_CTLR_DF && BT_CTLR_DF_CONN_CTE_REQ && !SOC_COMPATIBLE_NRF) # LE Generate DHKey v2 command default 65 range 65 255 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 config BT_HAS_HCI_VS bool 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_EXT bool "Zephyr HCI Vendor-Specific Extensions" depends on BT_HCI_VS default y help Enable support for the Zephyr HCI Vendor-Specific Extensions in the Host and/or Controller. This enables Write BD_ADDR, Read Build Info, Read Static Addresses and Read Key Hierarchy Roots vendor commands. config BT_HCI_VS_EVT bool "Zephyr HCI Vendor-Specific Events" depends on BT_HCI_VS_EXT help Enable support for the Zephyr HCI Vendor-Specific Events in the Host and/or Controller. config BT_HCI_VS_FATAL_ERROR bool "Allow vendor specific HCI event Zephyr Fatal Error" depends on BT_HCI_VS_EXT help Enable emiting 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_EXT && !BT_CTLR default y if BOARD_QEMU_X86 || BOARD_QEMU_CORTEX_M3 || BOARD_NATIVE_POSIX 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_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_LOG bool "[DEPRECATED] Normal printf-style to console" select DEPRECATED select LOG imply LOG_FUNC_NAME_PREFIX_INF imply LOG_FUNC_NAME_PREFIX_WRN imply LOG_FUNC_NAME_PREFIX_ERR help This option enables Bluetooth debug going to standard serial console. 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