| # Kconfig - Bluetooth LE stack configuration options |
| |
| # |
| # Copyright (c) 2016-2017 Nordic Semiconductor ASA |
| # Copyright (c) 2015-2016 Intel Corporation |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| |
| comment "Host Stack Configuration" |
| |
| config BT_HCI_HOST |
| # Hidden option to make the conditions more intuitive |
| bool |
| default y |
| depends on !BT_HCI_RAW |
| select POLL |
| |
| config BT_HCI_CMD_COUNT |
| int "Number of HCI command buffers" |
| default 2 |
| range 2 64 |
| help |
| Number of buffers available for HCI commands. |
| |
| config BT_RX_BUF_COUNT |
| int "Number of HCI RX buffers" |
| default 3 if BT_RECV_IS_RX_THREAD |
| default 20 if (BT_MESH && !(BT_DISCARDABLE_BUF_COUNT > 0)) |
| default 10 |
| range 2 255 |
| help |
| Number of buffers available for incoming ACL packets or HCI events |
| from the controller. |
| |
| config BT_RX_BUF_LEN |
| int "Maximum supported HCI RX buffer length" |
| default 264 if BT_BREDR |
| default 77 if BT_MESH_PROXY |
| default 76 |
| range 73 2000 |
| help |
| Maximum data size for each HCI RX buffer. This size includes |
| everything starting with the ACL or HCI event headers. Note that |
| buffer sizes are always rounded up to the nearest multiple of 4, |
| so if this Kconfig value is something else then there will be some |
| wasted space. The minimum of 73 has been taken for LE SC which has |
| an L2CAP MTU of 65 bytes. On top of this there's the L2CAP header |
| (4 bytes) and the ACL header (also 4 bytes) which yields 73 bytes. |
| |
| config BT_DISCARDABLE_BUF_COUNT |
| int "Number of discardable event buffers" |
| range 1 255 |
| default 20 if BT_MESH |
| default 3 |
| depends on BT_H4 || BT_CTLR |
| 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 means 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_HCI_TX_STACK_SIZE |
| # NOTE: This value is derived from other symbols and should only be |
| # changed if required by architecture |
| int "HCI Tx thread stack size" |
| default 512 if BT_H4 |
| default 512 if BT_H5 |
| default 416 if BT_SPI |
| default 940 if BT_CTLR && (BT_LL_SW_LEGACY || BT_LL_SW_SPLIT) && NO_OPTIMIZATIONS |
| default 1024 if BT_CTLR && (BT_LL_SW_LEGACY || BT_LL_SW_SPLIT) && BT_CENTRAL |
| default 640 if BT_CTLR && (BT_LL_SW_LEGACY || BT_LL_SW_SPLIT) |
| default 512 if BT_USERCHAN |
| default 640 if BT_STM32_IPM |
| # Even if no driver is selected the following default is still |
| # needed e.g. for unit tests. This default will also server as |
| # the worst-case stack size if an out-of-tree controller is used. |
| default 1024 |
| help |
| Stack size needed for executing bt_send with specified driver. |
| NOTE: This is an advanced setting and should not be changed unless |
| absolutely necessary |
| |
| config BT_HCI_ECC_STACK_SIZE |
| # NOTE: This value is derived from other symbols and should only be |
| # changed if required by architecture |
| int "HCI ECC thread stack size" |
| default 1100 |
| help |
| NOTE: This is an advanced setting and should not be changed unless |
| absolutely necessary |
| |
| config BT_HCI_TX_PRIO |
| # Hidden option for Co-Operative Tx thread priority |
| int |
| default 7 |
| |
| config BT_HCI_RESERVE |
| int |
| default 0 if BT_H4 |
| default 1 if BT_H5 |
| default 1 if BT_SPI |
| default 1 if BT_STM32_IPM |
| default 1 if BT_USERCHAN |
| # Even if no driver is selected the following default is still |
| # needed e.g. for unit tests. |
| default 0 |
| help |
| Headroom that the driver needs for sending and receiving buffers. Add a |
| new 'default' entry for each new driver. |
| |
| config BT_RECV_IS_RX_THREAD |
| # Hidden option set by the HCI driver to indicate that there's |
| # no need for the host to have its own RX thread. |
| # It is then the responsibility of the HCI driver to call bt_recv_prio |
| # from a higher priority context than bt_recv in order to avoid deadlock. |
| # If the host has its own RX thread it is safe to call bt_recv and |
| # bt_recv_prio from the same priority context. |
| bool |
| |
| config BT_RX_STACK_SIZE |
| int "Size of the receiving thread stack" |
| depends on BT_HCI_HOST || BT_RECV_IS_RX_THREAD |
| default 512 if BT_HCI_RAW |
| default 2048 if BT_MESH |
| default 2200 if BT_SETTINGS |
| default 1024 |
| range 512 65536 if BT_HCI_RAW |
| range 1100 65536 if BT_MESH |
| range 1024 65536 |
| help |
| Size of the receiving thread stack. This is the context from |
| which all event callbacks to the application occur. The |
| default value is sufficient for basic operation, but if the |
| application needs to do advanced things in its callbacks that |
| require extra stack space, this value can be increased to |
| accommodate for that. |
| |
| config BT_RX_PRIO |
| # Hidden option for Co-Operative Rx thread priority |
| int |
| depends on BT_HCI_HOST || BT_RECV_IS_RX_THREAD |
| default 8 |
| |
| if BT_HCI_HOST |
| |
| config BT_HOST_CRYPTO |
| # Hidden option that compiles in random number generation and AES |
| # encryption support using TinyCrypt library if this is not provided |
| # by the controller implementation. |
| bool |
| default y if !BT_CTLR_CRYPTO |
| select TINYCRYPT |
| select TINYCRYPT_AES |
| select TINYCRYPT_SHA256 |
| select TINYCRYPT_SHA256_HMAC |
| select TINYCRYPT_SHA256_HMAC_PRNG |
| |
| config BT_SETTINGS |
| bool "Store Bluetooth state and configuration persistently" |
| depends on SETTINGS |
| select MPU_ALLOW_FLASH_WRITE if ARM_MPU |
| help |
| When selected, the Bluetooth stack will take care of storing |
| (and restoring) the Bluetooth state (e.g. pairing keys) and |
| configuration persistently in flash. |
| |
| When this option has been enabled, it's important that the |
| application makes a call to settings_load() after having done |
| all necessary initialization (e.g. calling bt_enable). The |
| reason settings_load() is handled externally to the stack, is |
| that there may be other subsystems using the settings API, in |
| which case it's more efficient to load all settings in one go, |
| instead of each subsystem doing it independently. |
| |
| if BT_SETTINGS |
| config BT_SETTINGS_CCC_STORE_ON_WRITE |
| bool "Store CCC value immediately after it has been written" |
| help |
| Store Client Configuration Characteristic value right after it has |
| been updated. |
| |
| By default, CCC is only stored on disconnection. |
| Choosing this option is safer for battery-powered devices or devices |
| that expect to be reset suddenly. However, it requires additional |
| workqueue stack space. |
| |
| config BT_SETTINGS_USE_PRINTK |
| bool "Use snprintk to encode Bluetooth settings key strings" |
| depends on SETTINGS && PRINTK |
| default y |
| help |
| When selected, Bluetooth settings will use snprintk to encode |
| key strings. |
| When not selected, Bluetooth settings will use a faster builtin |
| function to encode the key string. The drawback is that if |
| printk is enabled then the program memory footprint will be larger. |
| endif # BT_SETTINGS |
| |
| config BT_WHITELIST |
| bool "Enable whitelist support" |
| help |
| This option enables the whitelist API. This takes advantage of the |
| whitelisting feature of a BLE controller. |
| The whitelist is a global list and the same whitelist is used |
| by both scanner and advertiser. The whitelist cannot be modified while |
| it is in use. |
| |
| An Advertiser can whitelist which peers can connect or request scan |
| response data. |
| A scanner can whitelist advertiser for which it will generate |
| advertising reports. |
| Connections can be established automatically for whitelisted peers. |
| |
| This options deprecates the bt_le_set_auto_conn API in favor of the |
| bt_conn_create_aute_le API. |
| |
| if BT_CONN |
| |
| if BT_HCI_ACL_FLOW_CONTROL |
| config BT_ACL_RX_COUNT |
| int "Number of incoming ACL data buffers" |
| default BT_CTLR_RX_BUFFERS if BT_CTLR |
| default 6 |
| range 1 64 |
| help |
| Number of buffers available for incoming ACL data. |
| endif # BT_HCI_ACL_FLOW_CONTROL |
| |
| config BT_CONN_TX_MAX |
| int "Maximum number of pending TX buffers" |
| default BT_CTLR_TX_BUFFERS if BT_CTLR |
| default 7 |
| range 1 128 |
| help |
| Maximum number of pending TX buffers that have not yet |
| been acknowledged by the controller. |
| |
| config BT_AUTO_PHY_UPDATE |
| bool "Auto-initiate PHY Update Procedure" |
| depends on BT_PHY_UPDATE |
| default y |
| help |
| Initiate PHY Update Procedure on connection establishment. |
| |
| Disable this if you want PHY Update Procedure feature supported but |
| want to rely on remote device to initiate the procedure at its |
| discretion. |
| |
| config BT_SMP |
| bool "Security Manager Protocol support" |
| select TINYCRYPT |
| select TINYCRYPT_AES |
| select TINYCRYPT_AES_CMAC |
| select BT_RPA |
| select BT_ECC |
| help |
| This option enables support for the Security Manager Protocol |
| (SMP), making it possible to pair devices over LE. |
| |
| if BT_SMP |
| config BT_PRIVACY |
| bool "Privacy Feature" |
| help |
| Enable local Privacy Feature support. This makes it possible |
| to use Resolvable Private Addresses (RPAs). |
| |
| config BT_RPA_TIMEOUT |
| int "Resolvable Private Address timeout" |
| depends on BT_PRIVACY |
| default 900 |
| range 1 65535 |
| help |
| This option defines how often resolvable private address is rotated. |
| Value is provided in seconds and defaults to 900 seconds (15 minutes). |
| |
| config BT_SIGNING |
| bool "Data signing support" |
| help |
| This option enables data signing which is used for transferring |
| authenticated data in an unencrypted connection. |
| |
| config BT_SMP_SC_PAIR_ONLY |
| bool "Disable legacy pairing" |
| help |
| This option disables LE legacy pairing and forces LE secure connection |
| pairing. All Security Mode 1 levels can be used with legacy pairing |
| disabled, but pairing with devices that do not support secure |
| connections pairing will not be supported. |
| To force a higher security level use "Secure Connections Only Mode" |
| |
| config BT_SMP_SC_ONLY |
| bool "Secure Connections Only Mode" |
| select BT_SMP_SC_PAIR_ONLY |
| help |
| This option enables support for Secure Connection Only Mode. In this |
| mode device shall only use Security Mode 1 Level 4 with exception |
| for services that only require Security Mode 1 Level 1 (no security). |
| Security Mode 1 Level 4 stands for authenticated LE Secure Connections |
| pairing with encryption. Enabling this option disables legacy pairing. |
| |
| config BT_FIXED_PASSKEY |
| bool "Use a fixed passkey for pairing" |
| help |
| With this option enabled, the application will be able to call the |
| bt_passkey_set() API to set a fixed passkey. If set, the |
| pairing_confim() callback will be called for all incoming pairings. |
| |
| config BT_USE_DEBUG_KEYS |
| bool "Enable Security Manager Debug Mode" |
| depends on BT_TINYCRYPT_ECC |
| help |
| This option places Security Manager in a Debug Mode. In this mode |
| predefined Diffie-Hellman private/public key pair is used as described |
| in Core Specification Vol. 3, Part H, 2.3.5.6.1. This option should |
| only be enabled for debugging and should never be used in production. |
| If this option is enabled anyone is able to decipher encrypted air |
| traffic. |
| |
| config BT_BONDABLE |
| bool "Bondable Mode" |
| default y |
| help |
| This option enables support for Bondable Mode. In this mode, |
| Bonding flag in AuthReq of SMP Pairing Request/Response will be set |
| indicating the support for this mode. |
| |
| config BT_STORE_DEBUG_KEYS |
| bool "Store Debug Mode bonds" |
| help |
| This option enables support for storing bonds where either of devices |
| has the Security Manager in Debug mode. This option should |
| only be enabled for debugging and should never be used in production. |
| |
| config BT_SMP_ENFORCE_MITM |
| bool "Enforce MITM protection" |
| default y |
| help |
| With this option enabled, the Security Manager will set MITM option in |
| the Authentication Requirements Flags whenever local IO Capabilities |
| allow the generated key to be authenticated. |
| |
| config BT_OOB_DATA_FIXED |
| bool "Use a fixed random number for LESC OOB pairing" |
| depends on BT_TESTING |
| help |
| With this option enabled, the application will be able to perform LESC |
| pairing with OOB data that consists of fixed random number and confirm |
| value. This option should only be enabled for debugging and should |
| never be used in production. |
| |
| config BT_KEYS_OVERWRITE_OLDEST |
| bool "Overwrite oldest keys with new ones if key storage is full" |
| help |
| With this option enabled, if a pairing attempt occurs and the key storage |
| is full, then the oldest keys in storage will be removed to free space |
| for the new pairing keys. |
| |
| config BT_KEYS_SAVE_AGING_COUNTER_ON_PAIRING |
| bool "Store aging counter every time a successful paring occurs" |
| depends on BT_SETTINGS && BT_KEYS_OVERWRITE_OLDEST |
| help |
| With this option enabled, aging counter will be stored in settings every |
| time a successful pairing occurs. This increases flash wear out but offers |
| a more correct finding of the oldest unused paiting info. |
| |
| endif # BT_SMP |
| |
| source "subsys/bluetooth/host/Kconfig.l2cap" |
| source "subsys/bluetooth/host/Kconfig.gatt" |
| |
| config BT_MAX_PAIRED |
| int "Maximum number of paired devices" |
| default 0 if !BT_SMP |
| default 1 |
| range 0 128 |
| help |
| Maximum number of paired Bluetooth devices. The minimum (and |
| default) number is 1. |
| |
| config BT_CREATE_CONN_TIMEOUT |
| int "Timeout for pending LE Create Connection command in seconds" |
| default 3 |
| range 1 65535 |
| |
| config BT_CONN_PARAM_UPDATE_TIMEOUT |
| int "Peripheral connection parameter update timeout in milliseconds" |
| default 5000 |
| range 1 65535 |
| |
| help |
| The value is a timeout used by peripheral device to wait until it |
| starts the connection parameters update procedure to change default |
| connection parameters. The default value is set to 5s, to comply |
| with BT protocol specification: Core 4.2 Vol 3, Part C, 9.3.12.2 |
| |
| endif # BT_CONN |
| |
| if BT_OBSERVER |
| config BT_BACKGROUND_SCAN_INTERVAL |
| int "Scan interval used for background scanning in 0.625 ms units" |
| default 2048 |
| range 4 16384 |
| config BT_BACKGROUND_SCAN_WINDOW |
| int "Scan window used for background scanning in 0.625 ms units" |
| default 18 |
| range 4 16384 |
| endif # BT_OBSERVER |
| |
| config BT_SCAN_WITH_IDENTITY |
| bool "Perform active scanning using local identity address" |
| depends on !BT_PRIVACY && (BT_CENTRAL || BT_OBSERVER) |
| help |
| Enable this if you want to perform active scanning using the local |
| identity address as the scanner address. By default the stack will |
| always use a non-resolvable private address (NRPA) in order to avoid |
| disclosing local identity information. However, if the use case |
| requires disclosing it then enable this option. |
| |
| config BT_DEVICE_NAME_DYNAMIC |
| bool "Allow to set Bluetooth device name on runtime" |
| help |
| Enabling this option allows for runtime configuration of Bluetooth |
| device name. |
| |
| config BT_DEVICE_NAME_MAX |
| int "Maximum size in bytes for device name" |
| depends on BT_DEVICE_NAME_DYNAMIC |
| default 28 |
| range 2 248 |
| help |
| Bluetooth device name storage size. Storage can be up to 248 bytes |
| long (excluding NULL termination). |
| |
| config BT_DEVICE_NAME |
| string "Bluetooth device name" |
| default "Zephyr" |
| help |
| Bluetooth device name. Name can be up to 248 bytes long (excluding |
| NULL termination). Can be empty string. |
| |
| config BT_DEVICE_APPEARANCE |
| int "Bluetooth device appearance" |
| range 0 65535 |
| default 0 |
| help |
| Bluetooth device appearance. For the list of possible values please |
| consult the following link: |
| https://www.bluetooth.com/specifications/assigned-numbers |
| |
| config BT_ID_MAX |
| int "Maximum number of local identities" |
| range 1 10 |
| default 1 |
| help |
| Maximum number of supported local identity addresses. For most |
| products this is safe to leave as the default value (1). |
| |
| endif # BT_HCI_HOST |
| |
| config BT_ECC |
| bool "Enable ECDH key generation support" |
| help |
| This option adds support for ECDH HCI commands. |
| |
| config BT_TINYCRYPT_ECC |
| bool "Use TinyCrypt library for ECDH" |
| select TINYCRYPT |
| select TINYCRYPT_ECC_DH |
| depends on BT_ECC && (BT_HCI_RAW || BT_HCI_HOST) |
| default y if BT_CTLR |
| help |
| If this option is set TinyCrypt library is used for emulating the |
| ECDH HCI commands and events needed by e.g. LE Secure Connections. |
| In builds including the BLE Host, if not set the controller crypto is |
| used for ECDH and if the controller doesn't support the required HCI |
| commands the LE Secure Connections support will be disabled. |
| In builds including the HCI Raw interface and the BLE Controller, this |
| option injects support for the 2 HCI commands required for LE Secure |
| Connections so that Hosts can make use of those. The option defaults |
| to enabled for a combined build with Zephyr's own controller, since it |
| does not have any special ECC support itself (at least not currently). |
| |
| if BT_DEBUG |
| config BT_DEBUG_SETTINGS |
| bool "Bluetooth storage debug" |
| depends on BT_SETTINGS |
| help |
| This option enables debug support for Bluetooth storage. |
| |
| config BT_DEBUG_HCI_CORE |
| bool "Bluetooth HCI core debug" |
| help |
| This option enables debug support for Bluetooth HCI |
| core. |
| |
| config BT_DEBUG_CONN |
| bool "Bluetooth connection debug" |
| depends on BT_CONN |
| help |
| This option enables debug support for Bluetooth |
| connection handling. |
| |
| config BT_DEBUG_KEYS |
| bool "Bluetooth security keys debug" |
| depends on BT_HCI_HOST |
| depends on BT_SMP |
| help |
| This option enables debug support for the handling of |
| Bluetooth security keys. |
| |
| config BT_DEBUG_SMP |
| bool "Bluetooth Security Manager Protocol (SMP) debug" |
| depends on BT_HCI_HOST |
| depends on BT_SMP |
| help |
| This option enables debug support for the Bluetooth |
| Security Manager Protocol (SMP). |
| |
| config BT_SMP_SELFTEST |
| bool "Bluetooth SMP self tests executed on init" |
| depends on BT_DEBUG_SMP |
| help |
| This option enables SMP self-tests executed on startup |
| to verify security and crypto functions. |
| |
| config BT_SMP_FORCE_BREDR |
| bool "Force Bluetooth SMP over BR/EDR" |
| depends on BT_DEBUG_SMP |
| help |
| This option enables SMP over BR/EDR even if controller is not |
| supporting BR/EDR Secure Connections. This option is solely for |
| testing and should never be enabled on production devices. |
| |
| config BT_DEBUG_RFCOMM |
| bool "Bluetooth RFCOMM debug" |
| depends on BT_RFCOMM |
| help |
| This option enables debug support for the Bluetooth |
| RFCOMM layer. |
| |
| config BT_DEBUG_HFP_HF |
| bool "Bluetooth Hands Free Profile (HFP) debug" |
| depends on BT_HFP_HF |
| help |
| This option enables debug support for the Bluetooth |
| Hands Free Profile (HFP). |
| |
| config BT_DEBUG_AVDTP |
| bool "Bluetooth AVDTP debug" |
| depends on BT_AVDTP |
| help |
| This option enables debug support for the Bluetooth AVDTP. |
| |
| config BT_DEBUG_A2DP |
| bool "Bluetooth A2DP debug" |
| depends on BT_A2DP |
| help |
| This option enables debug support for the Bluetooth |
| A2DP profile. |
| |
| config BT_DEBUG_SDP |
| bool "Bluetooth Service Discovery Protocol (SDP) debug" |
| depends on BT_BREDR |
| help |
| This option enables debug support for the Bluetooth |
| Service Discovery Protocol (SDP). |
| |
| config BT_DEBUG_SERVICE |
| bool "Bluetooth Services debug" |
| depends on BT_CONN |
| help |
| This option enables debug support for the Bluetooth |
| Services. |
| |
| endif # BT_DEBUG |
| |
| config BT_TESTING |
| bool "Bluetooth Testing" |
| help |
| This option enables custom Bluetooth testing interface. |
| Shall only be used for testing purposes. |
| |
| config BT_BREDR |
| bool "Bluetooth BR/EDR support [EXPERIMENTAL]" |
| depends on BT_HCI_HOST |
| select BT_PERIPHERAL |
| select BT_CENTRAL |
| select BT_SMP |
| select BT_L2CAP_DYNAMIC_CHANNEL |
| help |
| This option enables Bluetooth BR/EDR support |
| |
| if BT_BREDR |
| config BT_MAX_SCO_CONN |
| int "Maximum number of simultaneous SCO connections" |
| default 1 |
| range 1 3 |
| help |
| Maximum number of simultaneous Bluetooth synchronous connections |
| supported. The minimum (and default) number is 1. |
| |
| config BT_RFCOMM |
| bool "Bluetooth RFCOMM protocol support [EXPERIMENTAL]" |
| help |
| This option enables Bluetooth RFCOMM support |
| |
| config BT_RFCOMM_L2CAP_MTU |
| int "L2CAP MTU for RFCOMM frames" |
| default BT_L2CAP_RX_MTU if BT_HCI_ACL_FLOW_CONTROL |
| default BT_RX_BUF_LEN |
| depends on BT_RFCOMM |
| range BT_L2CAP_RX_MTU 32767 if BT_HCI_ACL_FLOW_CONTROL |
| range BT_RX_BUF_LEN 32767 |
| help |
| Maximum size of L2CAP PDU for RFCOMM frames. |
| |
| config BT_HFP_HF |
| bool "Bluetooth Handsfree profile HF Role support [EXPERIMENTAL]" |
| depends on PRINTK |
| select BT_RFCOMM |
| help |
| This option enables Bluetooth HF support |
| |
| config BT_AVDTP |
| bool "Bluetooth AVDTP protocol support [EXPERIMENTAL]" |
| help |
| This option enables Bluetooth AVDTP support |
| |
| config BT_A2DP |
| bool "Bluetooth A2DP Profile [EXPERIMENTAL]" |
| select BT_AVDTP |
| help |
| This option enables the A2DP profile |
| |
| config BT_PAGE_TIMEOUT |
| hex "Bluetooth Page Timeout" |
| default 0x2000 |
| range 0x0001 0xffff |
| help |
| This option sets the page timeout value. Value is selected as |
| (N * 0.625) ms. |
| |
| endif # BT_BREDR |
| |
| config BT_HCI_VS_EVT_USER |
| bool "User Vendor-Specific event handling" |
| help |
| Enable registering a callback for delegating to the user the handling of |
| VS events that are not known to the stack |