menu Bluetooth


    config BT_ENABLED
        bool "Bluetooth"
        help
            Select this option to enable Bluetooth and show the submenu with Bluetooth configuration choices.

    menu "Bluetooth controller"
        visible if BT_ENABLED

        choice BTDM_CONTROLLER_MODE
            prompt "Bluetooth controller mode (BR/EDR/BLE/DUALMODE)"
            depends on BT_ENABLED
            help
                Specify the bluetooth controller mode (BR/EDR, BLE or dual mode).

            config BTDM_CONTROLLER_MODE_BLE_ONLY
                bool "BLE Only"

            config BTDM_CONTROLLER_MODE_BR_EDR_ONLY
                bool "BR/EDR Only"

            config BTDM_CONTROLLER_MODE_BTDM
                bool "Bluetooth Dual Mode"

        endchoice

        config BTDM_CONTROLLER_BLE_MAX_CONN
            int "BLE Max Connections"
            depends on BTDM_CONTROLLER_MODE_BLE_ONLY || BTDM_CONTROLLER_MODE_BTDM
            default 3
            range 1 9
            help
                BLE maximum connections of bluetooth controller.
                Each connection uses 1KB static DRAM whenever the BT controller is enabled.

        config BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN
            int "BR/EDR ACL Max Connections"
            depends on BTDM_CONTROLLER_MODE_BR_EDR_ONLY || BTDM_CONTROLLER_MODE_BTDM
            default 2
            range 1 7
            help
                BR/EDR ACL maximum connections of bluetooth controller.
                Each connection uses 1.2KB static DRAM whenever the BT controller is enabled.

        config BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN
            int "BR/EDR Sync(SCO/eSCO) Max Connections"
            depends on BTDM_CONTROLLER_MODE_BR_EDR_ONLY || BTDM_CONTROLLER_MODE_BTDM
            default 0
            range 0 3
            help
                BR/EDR Synchronize maximum connections of bluetooth controller.
                Each connection uses 2KB static DRAM whenever the BT controller is enabled.

        choice BTDM_CTRL_BR_EDR_SCO_DATA_PATH
            prompt "BR/EDR Sync(SCO/eSCO) default data path"
            depends on BTDM_CTRL_MODE_BR_EDR_ONLY || BTDM_CTRL_MODE_BTDM
            default BTDM_CTRL_BR_EDR_SCO_DATA_PATH_PCM
            help
                SCO data path, i.e. HCI or PCM.
                SCO data can be sent/received through HCI synchronous packets, or the data
                can be routed to on-chip PCM module on ESP32. PCM input/output signals can
                be "matrixed" to GPIOs. The default data path can also be set using API
                "esp_bredr_sco_datapath_set"

            config BTDM_CTRL_BR_EDR_SCO_DATA_PATH_HCI
                bool "HCI"
            config BTDM_CTRL_BR_EDR_SCO_DATA_PATH_PCM
                bool "PCM"
        endchoice

        config BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF
            int
            default 0 if BTDM_CTRL_BR_EDR_SCO_DATA_PATH_HCI
            default 1 if BTDM_CTRL_BR_EDR_SCO_DATA_PATH_PCM
            default 0

        config BTDM_CTRL_AUTO_LATENCY
            bool "Auto latency"
            depends on BTDM_CONTROLLER_MODE_BTDM
            default n
            help
                BLE auto latency, used to enhance classic BT performance
                while classic BT and BLE are enabled at the same time.

        config BTDM_CTRL_AUTO_LATENCY_EFF
            bool
            default BTDM_CTRL_AUTO_LATENCY if BTDM_CONTROLLER_MODE_BTDM
            default n


        config BTDM_CONTROLLER_BLE_MAX_CONN_EFF
            int
            default BTDM_CONTROLLER_BLE_MAX_CONN if BTDM_CONTROLLER_MODE_BLE_ONLY || BTDM_CONTROLLER_MODE_BTDM
            default 0

        config BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF
            int
            default BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN if BTDM_CONTROLLER_MODE_BR_EDR_ONLY || BTDM_CONTROLLER_MODE_BTDM  # NOERROR
            default 0

        config BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF
            int
            default BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN if BTDM_CONTROLLER_MODE_BR_EDR_ONLY || BTDM_CONTROLLER_MODE_BTDM  # NOERROR
            default 0

        choice BTDM_CONTROLLER_PINNED_TO_CORE_CHOICE
            prompt "The cpu core which bluetooth controller run"
            depends on BT_ENABLED && !FREERTOS_UNICORE
            help
                Specify the cpu core to run bluetooth controller.
                Can not specify no-affinity.

            config BTDM_CONTROLLER_PINNED_TO_CORE_0
                bool "Core 0 (PRO CPU)"
            config BTDM_CONTROLLER_PINNED_TO_CORE_1
                bool "Core 1 (APP CPU)"
                depends on !FREERTOS_UNICORE
        endchoice

        config BTDM_CONTROLLER_PINNED_TO_CORE
            int
            default 0 if BTDM_CONTROLLER_PINNED_TO_CORE_0
            default 1 if BTDM_CONTROLLER_PINNED_TO_CORE_1
            default 0

        choice BTDM_CONTROLLER_HCI_MODE_CHOICE
            prompt "HCI mode"
            depends on BT_ENABLED
            help
                Speicify HCI mode as VHCI or UART(H4)

            config BTDM_CONTROLLER_HCI_MODE_VHCI
                bool "VHCI"
                help
                    Normal option. Mostly, choose this VHCI when bluetooth host run on ESP32, too.

            config BTDM_CONTROLLER_HCI_MODE_UART_H4
                bool "UART(H4)"
                help
                    If use external bluetooth host which run on other hardware and use UART as the HCI interface,
                    choose this option.
        endchoice

        menu "HCI UART(H4) Options"
            visible if BTDM_CONTROLLER_HCI_MODE_UART_H4

            config BT_HCI_UART_NO
                int "UART Number for HCI"
                depends on BTDM_CONTROLLER_HCI_MODE_UART_H4
                range 1 2
                default 1
                help
                    Uart number for HCI. The available uart is UART1 and UART2.

            config BT_HCI_UART_BAUDRATE
                int "UART Baudrate for HCI"
                depends on BTDM_CONTROLLER_HCI_MODE_UART_H4
                range 115200 921600
                default 921600
                help
                    UART Baudrate for HCI. Please use standard baudrate.

        endmenu

        menu "MODEM SLEEP Options"
            visible if BT_ENABLED

            config BTDM_CONTROLLER_MODEM_SLEEP
                bool "Bluetooth modem sleep"
                depends on BT_ENABLED
                default y
                help
                    Enable/disable bluetooth controller low power mode.

            choice BTDM_MODEM_SLEEP_MODE
                prompt "Bluetooth Modem sleep mode"
                depends on BTDM_CONTROLLER_MODEM_SLEEP
                help
                    To select which strategy to use for modem sleep

                config BTDM_MODEM_SLEEP_MODE_ORIG
                    bool "ORIG Mode(sleep with low power clock)"
                    help
                        ORIG mode is a bluetooth sleep mode that can be used for dual mode controller. In this mode,
                        bluetooth controller sleeps between BR/EDR frames and BLE events. A low power clock is used to
                        maintain bluetooth reference clock.

                config BTDM_MODEM_SLEEP_MODE_EVED
                    bool "EVED Mode(For internal test only)"
                    help
                        EVED mode is for BLE only and is only for internal test. Do not use it for production. this
                        mode is not compatible with DFS nor light sleep
            endchoice

            choice BTDM_LOW_POWER_CLOCK
                prompt "Bluetooth low power clock"
                depends on BTDM_MODEM_SLEEP_MODE_ORIG
                help
                    Select the low power clock source for bluetooth controller

                config BTDM_LPCLK_SEL_MAIN_XTAL
                    bool "Main crystal"
                    help
                        Main crystal can be used as low power clock for bluetooth modem sleep. If this option is
                        selected, bluetooth modem sleep can work under Dynamic Frequency Scaling(DFS) enabled, but
                        cannot work when light sleep is enabled. Main crystal has a relatively better performance than
                        other bluetooth low power clock sources.

                config BTDM_LPCLK_SEL_EXT_32K_XTAL
                    bool "External 32kHz crystal"
                    depends on ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL
            endchoice

        endmenu

        config BLE_SCAN_DUPLICATE
            bool "BLE Scan Duplicate Options"
            depends on (BTDM_CONTROLLER_MODE_BTDM || BTDM_CONTROLLER_MODE_BLE_ONLY)
            default y
            help
                This select enables parameters setting of BLE scan duplicate.

        choice SCAN_DUPLICATE_TYPE
            prompt "Scan Duplicate Type"
            default SCAN_DUPLICATE_BY_DEVICE_ADDR
            depends on BLE_SCAN_DUPLICATE
            help
                Scan duplicate have three ways. one is "Scan Duplicate By Device Address", This way is to use
                advertiser address filtering. The adv packet of the same address is only allowed to be reported once.
                Another way is "Scan Duplicate By Device Address And Advertising Data". This way is to use advertising
                data and device address filtering. All different adv packets with the same address are allowed to be
                reported. The last way is "Scan Duplicate By Advertising Data". This way is to use advertising data
                filtering. All same advertising data only allow to be reported once even though they are from
                different devices.

            config SCAN_DUPLICATE_BY_DEVICE_ADDR
                bool "Scan Duplicate By Device Address"
                help
                    This way is to use advertiser address filtering. The adv packet of the same address is only
                    allowed to be reported once

            config SCAN_DUPLICATE_BY_ADV_DATA
                bool "Scan Duplicate By Advertising Data"
                help
                    This way is to use advertising data filtering. All same advertising data only allow to be reported
                    once even though they are from different devices.

            config SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR
                bool "Scan Duplicate By Device Address And Advertising Data"
                help
                    This way is to use advertising data and device address filtering. All different adv packets with
                    the same address are allowed to be reported.
        endchoice

        config SCAN_DUPLICATE_TYPE
            int
            depends on BLE_SCAN_DUPLICATE
            default 0 if SCAN_DUPLICATE_BY_DEVICE_ADDR
            default 1 if SCAN_DUPLICATE_BY_ADV_DATA
            default 2 if SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR
            default 0

        config DUPLICATE_SCAN_CACHE_SIZE
            int "Maximum number of devices in scan duplicate filter"
            depends on BLE_SCAN_DUPLICATE
            range 10 1000
            default 200
            help
                Maximum number of devices which can be recorded in scan duplicate filter.
                When the maximum amount of device in the filter is reached, the cache will be refreshed.

        config BLE_MESH_SCAN_DUPLICATE_EN
            bool "Special duplicate scan mechanism for BLE Mesh scan"
            depends on BLE_SCAN_DUPLICATE
            default n
            help
                This enables the BLE scan duplicate for special BLE Mesh scan.

        config MESH_DUPLICATE_SCAN_CACHE_SIZE
            int "Maximum number of Mesh adv packets in scan duplicate filter"
            depends on BLE_MESH_SCAN_DUPLICATE_EN
            range 10 1000
            default 200
            help
                Maximum number of adv packets which can be recorded in duplicate scan cache for BLE Mesh.
                When the maximum amount of device in the filter is reached, the cache will be refreshed.

        config BTDM_CONTROLLER_FULL_SCAN_SUPPORTED
            bool "BLE full scan feature supported"
            depends on BTDM_CONTROLLER_MODE_BLE_ONLY || BTDM_CONTROLLER_MODE_BTDM
            default y
            help
                The full scan function is mainly used to provide BLE scan performance.
                This is required for scenes with high scan performance requirements, such as BLE Mesh scenes.

        config BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED
            bool "BLE adv report flow control supported"
            depends on (BTDM_CONTROLLER_MODE_BTDM || BTDM_CONTROLLER_MODE_BLE_ONLY)
            default y
            help
                The function is mainly used to enable flow control for advertising reports. When it is enabled,
                advertising reports will be discarded by the controller if the number of unprocessed advertising
                reports exceeds the size of BLE adv report flow control.

        config BLE_ADV_REPORT_FLOW_CONTROL_NUM
            int "BLE adv report flow control number"
            depends on BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED
            range 50 1000
            default 100
            help
                The number of unprocessed advertising report that Bluedroid can save.If you set
                `BLE_ADV_REPORT_FLOW_CONTROL_NUM` to a small value, this may cause adv packets lost.
                If you set `BLE_ADV_REPORT_FLOW_CONTROL_NUM` to a large value, Bluedroid may cache a
                lot of adv packets and this may cause system memory run out. For example, if you set
                it to 50, the maximum memory consumed by host is 35 * 50 bytes. Please set
                `BLE_ADV_REPORT_FLOW_CONTROL_NUM` according to your system free memory and handle adv
                packets as fast as possible, otherwise it will cause adv packets lost.

        config BLE_ADV_REPORT_DISCARD_THRSHOLD
            int "BLE adv lost event threshold value"
            depends on BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED
            range 1 1000
            default 20
            help
                When adv report flow control is enabled, The ADV lost event will be generated when the number
                of ADV packets lost in the controller reaches this threshold. It is better to set a larger value.
                If you set `BLE_ADV_REPORT_DISCARD_THRSHOLD` to a small value or printf every adv lost event, it
                may cause adv packets lost more.

        menuconfig BTDM_COEX_BT_OPTIONS
            bool "Coexistence Bluetooth Side Options"
            depends on SW_COEXIST_ENABLE
            default n
            help
                Options of Bluetooth Side of WiFi and bluetooth coexistence.

        config BTDM_COEX_BLE_ADV_HIGH_PRIORITY
            bool "Improve BLE ADV priority for WiFi & BLE coexistence"
            depends on BTDM_COEX_BT_OPTIONS
            default n
            help
                Improve BLE ADV coexistence priority to make it better performance.
                For example, BLE mesh need to enable this option to improve BLE adv performance.

    endmenu

    menuconfig BLUEDROID_ENABLED
        bool "Bluedroid Enable"
        depends on BTDM_CONTROLLER_HCI_MODE_VHCI
        default y
        help
            This enables the default Bluedroid Bluetooth stack

    choice BLUEDROID_PINNED_TO_CORE_CHOICE
        prompt "The cpu core which Bluedroid run"
        depends on BLUEDROID_ENABLED && !FREERTOS_UNICORE
        help
            Which the cpu core to run Bluedroid. Can choose core0 and core1.
            Can not specify no-affinity.

        config BLUEDROID_PINNED_TO_CORE_0
            bool "Core 0 (PRO CPU)"
        config BLUEDROID_PINNED_TO_CORE_1
            bool "Core 1 (APP CPU)"
            depends on !FREERTOS_UNICORE
    endchoice

    config BLUEDROID_PINNED_TO_CORE
        int
        depends on BLUEDROID_ENABLED
        default 0 if BLUEDROID_PINNED_TO_CORE_0
        default 1 if BLUEDROID_PINNED_TO_CORE_1
        default 0

    config BTC_TASK_STACK_SIZE
        int "Bluetooth event (callback to application) task stack size"
        depends on BLUEDROID_ENABLED
        default 3072
        help
            This select btc task stack size

    config BTU_TASK_STACK_SIZE
        int "Bluetooth Bluedroid Host Stack task stack size"
        depends on BLUEDROID_ENABLED
        default 4096
        help
            This select btu task stack size

    config BLUEDROID_MEM_DEBUG
        bool "Bluedroid memory debug"
        depends on BLUEDROID_ENABLED
        default n
        help
            Bluedroid memory debug

    config CLASSIC_BT_ENABLED
        bool "Classic Bluetooth"
        depends on BLUEDROID_ENABLED
        default n
        help
            For now this option needs "SMP_ENABLE" to be set to yes

    config A2DP_ENABLE
        bool "A2DP"
        depends on CLASSIC_BT_ENABLED
        default n
        help
            Advanced Audio Distrubution Profile

    config A2DP_SINK_TASK_STACK_SIZE
        int "A2DP sink (audio stream decoding) task stack size"
        depends on A2DP_ENABLE
        default 2048

    config A2DP_SOURCE_TASK_STACK_SIZE
        int "A2DP source (audio stream encoding) task stack size"
        depends on A2DP_ENABLE
        default 2048

    config BT_SPP_ENABLED
        bool "SPP"
        depends on CLASSIC_BT_ENABLED
        default n
        help
            This enables the Serial Port Profile

    config HFP_ENABLE
        bool "Hands Free/Handset Profile"
        depends on CLASSIC_BT_ENABLED
        default n

    choice HFP_ROLE
        prompt "Hands-free Profile Role configuration"
        depends on HFP_ENABLE

        config HFP_CLIENT_ENABLE
            bool "Hands Free Unit"
    endchoice

    choice HFP_AUDIO_DATA_PATH
        prompt "audio(SCO) data path"
        depends on HFP_ENABLE
        help
            SCO data path, i.e. HCI or PCM. This option is set using API
            "esp_bredr_sco_datapath_set" in Bluetooth host. Default SCO data
            path can also be set in Bluetooth Controller.

        config HFP_AUDIO_DATA_PATH_PCM
            bool "PCM"
        config HFP_AUDIO_DATA_PATH_HCI
            bool "HCI"
    endchoice

    config BT_SSP_ENABLED
        bool "Secure Simple Pairing"
        depends on CLASSIC_BT_ENABLED
        default y
        help
            This enables the Secure Simple Pairing. If disable this option, Bluedroid will only support Legacy Pairing

    config GATTS_ENABLE
        bool "Include GATT server module(GATTS)"
        depends on BLUEDROID_ENABLED && (BTDM_CONTROLLER_MODE_BTDM || BTDM_CONTROLLER_MODE_BLE_ONLY)
        default y
        help
            This option can be disabled when the app work only on gatt client mode

    choice GATTS_SEND_SERVICE_CHANGE_MODE
        prompt "GATTS Service Change Mode"
        default GATTS_SEND_SERVICE_CHANGE_AUTO
        depends on GATTS_ENABLE
        help
            Service change indication mode for GATT Server.

        config GATTS_SEND_SERVICE_CHANGE_MANUAL
            bool "GATTS manually send service change indication"
            help
                Manually send service change indication through API esp_ble_gatts_send_service_change_indication()

        config GATTS_SEND_SERVICE_CHANGE_AUTO
            bool "GATTS automatically send service change indication"
            help
                Let Bluedroid handle the service change indication internally

    endchoice

    config GATTS_SEND_SERVICE_CHANGE_MODE
        int
        depends on GATTS_ENABLE
        default 0 if GATTS_SEND_SERVICE_CHANGE_AUTO
        default 1 if GATTS_SEND_SERVICE_CHANGE_MANUAL
        default 0

    config GATTC_ENABLE
        bool "Include GATT client module(GATTC)"
        depends on BLUEDROID_ENABLED && (BTDM_CONTROLLER_MODE_BTDM || BTDM_CONTROLLER_MODE_BLE_ONLY)
        default y
        help
            This option can be close when the app work only on gatt server mode

    config GATTC_CACHE_NVS_FLASH
        bool "Save gattc cache data to nvs flash"
        depends on GATTC_ENABLE && (BTDM_CONTROLLER_MODE_BTDM || BTDM_CONTROLLER_MODE_BLE_ONLY)
        default n
        help
            This select can save gattc cache data to nvs flash

    config BLE_SMP_ENABLE
        bool "Include BLE security module(SMP)"
        depends on BLUEDROID_ENABLED && (BTDM_CONTROLLER_MODE_BTDM || BTDM_CONTROLLER_MODE_BLE_ONLY)
        default y
        help
            This option can be close when the app not used the ble security connect.

    config SMP_SLAVE_CON_PARAMS_UPD_ENABLE
        bool "Slave enable connection parameters update during pairing"
        depends on BLE_SMP_ENABLE
        default n
        help
            In order to reduce the pairing time, slave actively initiates connection parameters update during pairing.

    config BT_STACK_NO_LOG
        bool "Disable BT debug logs (minimize bin size)"
        depends on BLUEDROID_ENABLED
        default n
        help
            This select can save the rodata code size

    menu "BT DEBUG LOG LEVEL"
        depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG

        choice HCI_INITIAL_TRACE_LEVEL
            prompt "HCI layer"
            default HCI_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for HCI layer

            config HCI_TRACE_LEVEL_NONE
                bool "NONE"
            config HCI_TRACE_LEVEL_ERROR
                bool "ERROR"
            config HCI_TRACE_LEVEL_WARNING
                bool "WARNING"
            config HCI_TRACE_LEVEL_API
                bool "API"
            config HCI_TRACE_LEVEL_EVENT
                bool "EVENT"
            config HCI_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config HCI_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config HCI_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if HCI_TRACE_LEVEL_NONE
            default 1 if HCI_TRACE_LEVEL_ERROR
            default 2 if HCI_TRACE_LEVEL_WARNING
            default 3 if HCI_TRACE_LEVEL_API
            default 4 if HCI_TRACE_LEVEL_EVENT
            default 5 if HCI_TRACE_LEVEL_DEBUG
            default 6 if HCI_TRACE_LEVEL_VERBOSE
            default 2

        choice BTM_INITIAL_TRACE_LEVEL
            prompt "BTM layer"
            default BTM_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for BTM layer

            config BTM_TRACE_LEVEL_NONE
                bool "NONE"
            config BTM_TRACE_LEVEL_ERROR
                bool "ERROR"
            config BTM_TRACE_LEVEL_WARNING
                bool "WARNING"
            config BTM_TRACE_LEVEL_API
                bool "API"
            config BTM_TRACE_LEVEL_EVENT
                bool "EVENT"
            config BTM_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config BTM_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config BTM_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if BTM_TRACE_LEVEL_NONE
            default 1 if BTM_TRACE_LEVEL_ERROR
            default 2 if BTM_TRACE_LEVEL_WARNING
            default 3 if BTM_TRACE_LEVEL_API
            default 4 if BTM_TRACE_LEVEL_EVENT
            default 5 if BTM_TRACE_LEVEL_DEBUG
            default 6 if BTM_TRACE_LEVEL_VERBOSE
            default 2

        choice L2CAP_INITIAL_TRACE_LEVEL
            prompt "L2CAP layer"
            default L2CAP_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for L2CAP layer

            config L2CAP_TRACE_LEVEL_NONE
                bool "NONE"
            config L2CAP_TRACE_LEVEL_ERROR
                bool "ERROR"
            config L2CAP_TRACE_LEVEL_WARNING
                bool "WARNING"
            config L2CAP_TRACE_LEVEL_API
                bool "API"
            config L2CAP_TRACE_LEVEL_EVENT
                bool "EVENT"
            config L2CAP_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config L2CAP_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config L2CAP_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if L2CAP_TRACE_LEVEL_NONE
            default 1 if L2CAP_TRACE_LEVEL_ERROR
            default 2 if L2CAP_TRACE_LEVEL_WARNING
            default 3 if L2CAP_TRACE_LEVEL_API
            default 4 if L2CAP_TRACE_LEVEL_EVENT
            default 5 if L2CAP_TRACE_LEVEL_DEBUG
            default 6 if L2CAP_TRACE_LEVEL_VERBOSE
            default 2

        choice RFCOMM_INITIAL_TRACE_LEVEL
            prompt "RFCOMM layer"
            default RFCOMM_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for RFCOMM layer

            config RFCOMM_TRACE_LEVEL_NONE
                bool "NONE"
            config RFCOMM_TRACE_LEVEL_ERROR
                bool "ERROR"
            config RFCOMM_TRACE_LEVEL_WARNING
                bool "WARNING"
            config RFCOMM_TRACE_LEVEL_API
                bool "API"
            config RFCOMM_TRACE_LEVEL_EVENT
                bool "EVENT"
            config RFCOMM_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config RFCOMM_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config RFCOMM_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if RFCOMM_TRACE_LEVEL_NONE
            default 1 if RFCOMM_TRACE_LEVEL_ERROR
            default 2 if RFCOMM_TRACE_LEVEL_WARNING
            default 3 if RFCOMM_TRACE_LEVEL_API
            default 4 if RFCOMM_TRACE_LEVEL_EVENT
            default 5 if RFCOMM_TRACE_LEVEL_DEBUG
            default 6 if RFCOMM_TRACE_LEVEL_VERBOSE
            default 2

        choice SDP_INITIAL_TRACE_LEVEL
            prompt "SDP layer"
            default SDP_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for SDP layer

            config SDP_TRACE_LEVEL_NONE
                bool "NONE"
            config SDP_TRACE_LEVEL_ERROR
                bool "ERROR"
            config SDP_TRACE_LEVEL_WARNING
                bool "WARNING"
            config SDP_TRACE_LEVEL_API
                bool "API"
            config SDP_TRACE_LEVEL_EVENT
                bool "EVENT"
            config SDP_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config SDP_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config SDP_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if SDP_TRACE_LEVEL_NONE
            default 1 if SDP_TRACE_LEVEL_ERROR
            default 2 if SDP_TRACE_LEVEL_WARNING
            default 3 if SDP_TRACE_LEVEL_API
            default 4 if SDP_TRACE_LEVEL_EVENT
            default 5 if SDP_TRACE_LEVEL_DEBUG
            default 6 if SDP_TRACE_LEVEL_VERBOSE
            default 2

        choice GAP_INITIAL_TRACE_LEVEL
            prompt "GAP layer"
            default GAP_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for GAP layer

            config GAP_TRACE_LEVEL_NONE
                bool "NONE"
            config GAP_TRACE_LEVEL_ERROR
                bool "ERROR"
            config GAP_TRACE_LEVEL_WARNING
                bool "WARNING"
            config GAP_TRACE_LEVEL_API
                bool "API"
            config GAP_TRACE_LEVEL_EVENT
                bool "EVENT"
            config GAP_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config GAP_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config GAP_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if GAP_TRACE_LEVEL_NONE
            default 1 if GAP_TRACE_LEVEL_ERROR
            default 2 if GAP_TRACE_LEVEL_WARNING
            default 3 if GAP_TRACE_LEVEL_API
            default 4 if GAP_TRACE_LEVEL_EVENT
            default 5 if GAP_TRACE_LEVEL_DEBUG
            default 6 if GAP_TRACE_LEVEL_VERBOSE
            default 2

        choice BNEP_INITIAL_TRACE_LEVEL
            prompt "BNEP layer"
            default BNEP_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for BNEP layer

            config BNEP_TRACE_LEVEL_NONE
                bool "NONE"
            config BNEP_TRACE_LEVEL_ERROR
                bool "ERROR"
            config BNEP_TRACE_LEVEL_WARNING
                bool "WARNING"
            config BNEP_TRACE_LEVEL_API
                bool "API"
            config BNEP_TRACE_LEVEL_EVENT
                bool "EVENT"
            config BNEP_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config BNEP_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config BNEP_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if BNEP_TRACE_LEVEL_NONE
            default 1 if BNEP_TRACE_LEVEL_ERROR
            default 2 if BNEP_TRACE_LEVEL_WARNING
            default 3 if BNEP_TRACE_LEVEL_API
            default 4 if BNEP_TRACE_LEVEL_EVENT
            default 5 if BNEP_TRACE_LEVEL_DEBUG
            default 6 if BNEP_TRACE_LEVEL_VERBOSE
            default 2

        choice PAN_INITIAL_TRACE_LEVEL
            prompt "PAN layer"
            default PAN_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for PAN layer

            config PAN_TRACE_LEVEL_NONE
                bool "NONE"
            config PAN_TRACE_LEVEL_ERROR
                bool "ERROR"
            config PAN_TRACE_LEVEL_WARNING
                bool "WARNING"
            config PAN_TRACE_LEVEL_API
                bool "API"
            config PAN_TRACE_LEVEL_EVENT
                bool "EVENT"
            config PAN_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config PAN_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config PAN_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if PAN_TRACE_LEVEL_NONE
            default 1 if PAN_TRACE_LEVEL_ERROR
            default 2 if PAN_TRACE_LEVEL_WARNING
            default 3 if PAN_TRACE_LEVEL_API
            default 4 if PAN_TRACE_LEVEL_EVENT
            default 5 if PAN_TRACE_LEVEL_DEBUG
            default 6 if PAN_TRACE_LEVEL_VERBOSE
            default 2

        choice A2D_INITIAL_TRACE_LEVEL
            prompt "A2D layer"
            default A2D_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for A2D layer

            config A2D_TRACE_LEVEL_NONE
                bool "NONE"
            config A2D_TRACE_LEVEL_ERROR
                bool "ERROR"
            config A2D_TRACE_LEVEL_WARNING
                bool "WARNING"
            config A2D_TRACE_LEVEL_API
                bool "API"
            config A2D_TRACE_LEVEL_EVENT
                bool "EVENT"
            config A2D_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config A2D_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config A2D_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if A2D_TRACE_LEVEL_NONE
            default 1 if A2D_TRACE_LEVEL_ERROR
            default 2 if A2D_TRACE_LEVEL_WARNING
            default 3 if A2D_TRACE_LEVEL_API
            default 4 if A2D_TRACE_LEVEL_EVENT
            default 5 if A2D_TRACE_LEVEL_DEBUG
            default 6 if A2D_TRACE_LEVEL_VERBOSE
            default 2

        choice AVDT_INITIAL_TRACE_LEVEL
            prompt "AVDT layer"
            default AVDT_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for AVDT layer

            config AVDT_TRACE_LEVEL_NONE
                bool "NONE"
            config AVDT_TRACE_LEVEL_ERROR
                bool "ERROR"
            config AVDT_TRACE_LEVEL_WARNING
                bool "WARNING"
            config AVDT_TRACE_LEVEL_API
                bool "API"
            config AVDT_TRACE_LEVEL_EVENT
                bool "EVENT"
            config AVDT_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config AVDT_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config AVDT_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if AVDT_TRACE_LEVEL_NONE
            default 1 if AVDT_TRACE_LEVEL_ERROR
            default 2 if AVDT_TRACE_LEVEL_WARNING
            default 3 if AVDT_TRACE_LEVEL_API
            default 4 if AVDT_TRACE_LEVEL_EVENT
            default 5 if AVDT_TRACE_LEVEL_DEBUG
            default 6 if AVDT_TRACE_LEVEL_VERBOSE
            default 2

        choice AVCT_INITIAL_TRACE_LEVEL
            prompt "AVCT layer"
            default AVCT_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for AVCT layer

            config AVCT_TRACE_LEVEL_NONE
                bool "NONE"
            config AVCT_TRACE_LEVEL_ERROR
                bool "ERROR"
            config AVCT_TRACE_LEVEL_WARNING
                bool "WARNING"
            config AVCT_TRACE_LEVEL_API
                bool "API"
            config AVCT_TRACE_LEVEL_EVENT
                bool "EVENT"
            config AVCT_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config AVCT_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config AVCT_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if AVCT_TRACE_LEVEL_NONE
            default 1 if AVCT_TRACE_LEVEL_ERROR
            default 2 if AVCT_TRACE_LEVEL_WARNING
            default 3 if AVCT_TRACE_LEVEL_API
            default 4 if AVCT_TRACE_LEVEL_EVENT
            default 5 if AVCT_TRACE_LEVEL_DEBUG
            default 6 if AVCT_TRACE_LEVEL_VERBOSE
            default 2

        choice AVRC_INITIAL_TRACE_LEVEL
            prompt "AVRC layer"
            default AVRC_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for AVRC layer

            config AVRC_TRACE_LEVEL_NONE
                bool "NONE"
            config AVRC_TRACE_LEVEL_ERROR
                bool "ERROR"
            config AVRC_TRACE_LEVEL_WARNING
                bool "WARNING"
            config AVRC_TRACE_LEVEL_API
                bool "API"
            config AVRC_TRACE_LEVEL_EVENT
                bool "EVENT"
            config AVRC_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config AVRC_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config AVRC_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if AVRC_TRACE_LEVEL_NONE
            default 1 if AVRC_TRACE_LEVEL_ERROR
            default 2 if AVRC_TRACE_LEVEL_WARNING
            default 3 if AVRC_TRACE_LEVEL_API
            default 4 if AVRC_TRACE_LEVEL_EVENT
            default 5 if AVRC_TRACE_LEVEL_DEBUG
            default 6 if AVRC_TRACE_LEVEL_VERBOSE
            default 2

        choice MCA_INITIAL_TRACE_LEVEL
            prompt "MCA layer"
            default MCA_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for MCA layer

            config MCA_TRACE_LEVEL_NONE
                bool "NONE"
            config MCA_TRACE_LEVEL_ERROR
                bool "ERROR"
            config MCA_TRACE_LEVEL_WARNING
                bool "WARNING"
            config MCA_TRACE_LEVEL_API
                bool "API"
            config MCA_TRACE_LEVEL_EVENT
                bool "EVENT"
            config MCA_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config MCA_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config MCA_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if MCA_TRACE_LEVEL_NONE
            default 1 if MCA_TRACE_LEVEL_ERROR
            default 2 if MCA_TRACE_LEVEL_WARNING
            default 3 if MCA_TRACE_LEVEL_API
            default 4 if MCA_TRACE_LEVEL_EVENT
            default 5 if MCA_TRACE_LEVEL_DEBUG
            default 6 if MCA_TRACE_LEVEL_VERBOSE
            default 2

        choice HID_INITIAL_TRACE_LEVEL
            prompt "HID layer"
            default HID_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for HID layer

            config HID_TRACE_LEVEL_NONE
                bool "NONE"
            config HID_TRACE_LEVEL_ERROR
                bool "ERROR"
            config HID_TRACE_LEVEL_WARNING
                bool "WARNING"
            config HID_TRACE_LEVEL_API
                bool "API"
            config HID_TRACE_LEVEL_EVENT
                bool "EVENT"
            config HID_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config HID_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config HID_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if HID_TRACE_LEVEL_NONE
            default 1 if HID_TRACE_LEVEL_ERROR
            default 2 if HID_TRACE_LEVEL_WARNING
            default 3 if HID_TRACE_LEVEL_API
            default 4 if HID_TRACE_LEVEL_EVENT
            default 5 if HID_TRACE_LEVEL_DEBUG
            default 6 if HID_TRACE_LEVEL_VERBOSE
            default 2

        choice APPL_INITIAL_TRACE_LEVEL
            prompt "APPL layer"
            default APPL_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for APPL layer

            config APPL_TRACE_LEVEL_NONE
                bool "NONE"
            config APPL_TRACE_LEVEL_ERROR
                bool "ERROR"
            config APPL_TRACE_LEVEL_WARNING
                bool "WARNING"
            config APPL_TRACE_LEVEL_API
                bool "API"
            config APPL_TRACE_LEVEL_EVENT
                bool "EVENT"
            config APPL_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config APPL_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config APPL_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if APPL_TRACE_LEVEL_NONE
            default 1 if APPL_TRACE_LEVEL_ERROR
            default 2 if APPL_TRACE_LEVEL_WARNING
            default 3 if APPL_TRACE_LEVEL_API
            default 4 if APPL_TRACE_LEVEL_EVENT
            default 5 if APPL_TRACE_LEVEL_DEBUG
            default 6 if APPL_TRACE_LEVEL_VERBOSE
            default 2

        choice GATT_INITIAL_TRACE_LEVEL
            prompt "GATT layer"
            default GATT_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for GATT layer

            config GATT_TRACE_LEVEL_NONE
                bool "NONE"
            config GATT_TRACE_LEVEL_ERROR
                bool "ERROR"
            config GATT_TRACE_LEVEL_WARNING
                bool "WARNING"
            config GATT_TRACE_LEVEL_API
                bool "API"
            config GATT_TRACE_LEVEL_EVENT
                bool "EVENT"
            config GATT_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config GATT_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config GATT_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if GATT_TRACE_LEVEL_NONE
            default 1 if GATT_TRACE_LEVEL_ERROR
            default 2 if GATT_TRACE_LEVEL_WARNING
            default 3 if GATT_TRACE_LEVEL_API
            default 4 if GATT_TRACE_LEVEL_EVENT
            default 5 if GATT_TRACE_LEVEL_DEBUG
            default 6 if GATT_TRACE_LEVEL_VERBOSE
            default 2

        choice SMP_INITIAL_TRACE_LEVEL
            prompt "SMP layer"
            default SMP_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for SMP layer

            config SMP_TRACE_LEVEL_NONE
                bool "NONE"
            config SMP_TRACE_LEVEL_ERROR
                bool "ERROR"
            config SMP_TRACE_LEVEL_WARNING
                bool "WARNING"
            config SMP_TRACE_LEVEL_API
                bool "API"
            config SMP_TRACE_LEVEL_EVENT
                bool "EVENT"
            config SMP_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config SMP_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config SMP_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if SMP_TRACE_LEVEL_NONE
            default 1 if SMP_TRACE_LEVEL_ERROR
            default 2 if SMP_TRACE_LEVEL_WARNING
            default 3 if SMP_TRACE_LEVEL_API
            default 4 if SMP_TRACE_LEVEL_EVENT
            default 5 if SMP_TRACE_LEVEL_DEBUG
            default 6 if SMP_TRACE_LEVEL_VERBOSE
            default 2

        choice BTIF_INITIAL_TRACE_LEVEL
            prompt "BTIF layer"
            default BTIF_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for BTIF layer

            config BTIF_TRACE_LEVEL_NONE
                bool "NONE"
            config BTIF_TRACE_LEVEL_ERROR
                bool "ERROR"
            config BTIF_TRACE_LEVEL_WARNING
                bool "WARNING"
            config BTIF_TRACE_LEVEL_API
                bool "API"
            config BTIF_TRACE_LEVEL_EVENT
                bool "EVENT"
            config BTIF_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config BTIF_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config BTIF_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if BTIF_TRACE_LEVEL_NONE
            default 1 if BTIF_TRACE_LEVEL_ERROR
            default 2 if BTIF_TRACE_LEVEL_WARNING
            default 3 if BTIF_TRACE_LEVEL_API
            default 4 if BTIF_TRACE_LEVEL_EVENT
            default 5 if BTIF_TRACE_LEVEL_DEBUG
            default 6 if BTIF_TRACE_LEVEL_VERBOSE
            default 2

        choice BTC_INITIAL_TRACE_LEVEL
            prompt "BTC layer"
            default BTC_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for BTC layer

            config BTC_TRACE_LEVEL_NONE
                bool "NONE"
            config BTC_TRACE_LEVEL_ERROR
                bool "ERROR"
            config BTC_TRACE_LEVEL_WARNING
                bool "WARNING"
            config BTC_TRACE_LEVEL_API
                bool "API"
            config BTC_TRACE_LEVEL_EVENT
                bool "EVENT"
            config BTC_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config BTC_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config BTC_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if BTC_TRACE_LEVEL_NONE
            default 1 if BTC_TRACE_LEVEL_ERROR
            default 2 if BTC_TRACE_LEVEL_WARNING
            default 3 if BTC_TRACE_LEVEL_API
            default 4 if BTC_TRACE_LEVEL_EVENT
            default 5 if BTC_TRACE_LEVEL_DEBUG
            default 6 if BTC_TRACE_LEVEL_VERBOSE
            default 2

        choice OSI_INITIAL_TRACE_LEVEL
            prompt "OSI layer"
            default OSI_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for OSI layer

            config OSI_TRACE_LEVEL_NONE
                bool "NONE"
            config OSI_TRACE_LEVEL_ERROR
                bool "ERROR"
            config OSI_TRACE_LEVEL_WARNING
                bool "WARNING"
            config OSI_TRACE_LEVEL_API
                bool "API"
            config OSI_TRACE_LEVEL_EVENT
                bool "EVENT"
            config OSI_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config OSI_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config OSI_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if OSI_TRACE_LEVEL_NONE
            default 1 if OSI_TRACE_LEVEL_ERROR
            default 2 if OSI_TRACE_LEVEL_WARNING
            default 3 if OSI_TRACE_LEVEL_API
            default 4 if OSI_TRACE_LEVEL_EVENT
            default 5 if OSI_TRACE_LEVEL_DEBUG
            default 6 if OSI_TRACE_LEVEL_VERBOSE
            default 2

        choice BLUFI_INITIAL_TRACE_LEVEL
            prompt "BLUFI layer"
            default BLUFI_TRACE_LEVEL_WARNING
            depends on BLUEDROID_ENABLED && !BT_STACK_NO_LOG
            help
                Define BT trace level for BLUFI layer

            config BLUFI_TRACE_LEVEL_NONE
                bool "NONE"
            config BLUFI_TRACE_LEVEL_ERROR
                bool "ERROR"
            config BLUFI_TRACE_LEVEL_WARNING
                bool "WARNING"
            config BLUFI_TRACE_LEVEL_API
                bool "API"
            config BLUFI_TRACE_LEVEL_EVENT
                bool "EVENT"
            config BLUFI_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config BLUFI_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config BLUFI_INITIAL_TRACE_LEVEL
            int
            depends on BLUEDROID_ENABLED
            default 0 if BLUFI_TRACE_LEVEL_NONE
            default 1 if BLUFI_TRACE_LEVEL_ERROR
            default 2 if BLUFI_TRACE_LEVEL_WARNING
            default 3 if BLUFI_TRACE_LEVEL_API
            default 4 if BLUFI_TRACE_LEVEL_EVENT
            default 5 if BLUFI_TRACE_LEVEL_DEBUG
            default 6 if BLUFI_TRACE_LEVEL_VERBOSE
            default 2

    endmenu #BT DEBUG LOG LEVEL


    config BT_ACL_CONNECTIONS
        int "BT/BLE MAX ACL CONNECTIONS(1~7)"
        depends on BLUEDROID_ENABLED
        range 1 7
        default 4
        help
            Maximum BT/BLE connection count

    config BT_ALLOCATION_FROM_SPIRAM_FIRST
        bool "BT/BLE will first malloc the memory from the PSRAM"
        depends on BLUEDROID_ENABLED
        default n
        help
            This select can save the internal RAM if there have the PSRAM

    config BT_BLE_DYNAMIC_ENV_MEMORY
        bool "Use dynamic memory allocation in BT/BLE stack"
        depends on BLUEDROID_ENABLED
        default n
        help
            This select can make the allocation of memory will become more flexible

    config BLE_HOST_QUEUE_CONGESTION_CHECK
        bool "BLE queue congestion check"
        depends on BLUEDROID_ENABLED
        default n
        help
            When scanning and scan duplicate is not enabled, if there are a lot of adv packets around or application
            layer handling adv packets is slow, it will cause the controller memory to run out. if enabled, adv
            packets will be lost when host queue is congested.

    config SMP_ENABLE
        bool
        depends on BLUEDROID_ENABLED
        default CLASSIC_BT_ENABLED || BLE_SMP_ENABLE

    config BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY
        bool "Report adv data and scan response individually when BLE active scan"
        depends on BLUEDROID_ENABLED && (BTDM_CONTROLLER_MODE_BTDM || BTDM_CONTROLLER_MODE_BLE_ONLY)
        default n
        help
            Originally, when doing BLE active scan, Bluedroid will not report adv to application layer
            until receive scan response. This option is used to disable the behavior. When enable this option,
            Bluedroid will report adv data or scan response to application layer immediately.

            # Memory reserved at start of DRAM for Bluetooth stack

    config BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT
        int "Timeout of BLE connection establishment"
        depends on BLUEDROID_ENABLED
        range 1 60
        default 30
        help
            Bluetooth Connection establishment maximum time, if connection time exceeds this value, the connection
            establishment fails, ESP_GATTC_OPEN_EVT or ESP_GATTS_OPEN_EVT is triggered.

    config BT_RESERVE_DRAM
        hex
        default 0xdb5c if BT_ENABLED
        default 0


    menuconfig NIMBLE_ENABLED
        bool "Enable NimBLE host stack"
        depends on BTDM_CONTROLLER_HCI_MODE_VHCI && !BLUEDROID_ENABLED
        default n
        help
            This enables NimBLE host stack

    choice NIMBLE_MEM_ALLOC_MODE
        prompt "Memory allocation strategy"
        default NIMBLE_MEM_ALLOC_MODE_INTERNAL
        depends on NIMBLE_ENABLED
        help
            Allocation strategy for NimBLE host stack, essentially provides ability to
            allocate all required dynamic allocations from,

            - Internal DRAM memory only
            - External SPIRAM memory only
            - Either internal or external memory based on default malloc()
              behavior in ESP-IDF
            - Internal IRAM memory wherever applicable else internal DRAM

            Recommended mode here is always internal, since that is most preferred
            from security perspective. But if application requirement does not
            allow sufficient free internal memory then alternate mode can be
            selected.

        config NIMBLE_MEM_ALLOC_MODE_INTERNAL
            bool "Internal memory"

        config NIMBLE_MEM_ALLOC_MODE_EXTERNAL
            bool "External SPIRAM"
            depends on ESP32_SPIRAM_SUPPORT

        config NIMBLE_MEM_ALLOC_MODE_DEFAULT
            bool "Default alloc mode"

        config NIMBLE_MEM_ALLOC_MODE_IRAM_8BIT
        bool "Internal IRAM"
        depends on NIMBLE_ENABLED && ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY
        help
            Allows to use IRAM memory region as 8bit accessible region.

            Every unaligned (8bit or 16bit) access will result in an exception
            and incur penalty of certain clock cycles per unaligned read/write.

    endchoice #NIMBLE_MEM_ALLOC_MODE

    config NIMBLE_MAX_CONNECTIONS
        int "Maximum number of concurrent connections"
        range 1 9
        default BTDM_CONTROLLER_BLE_MAX_CONN
        depends on NIMBLE_ENABLED
        help
            Defines maximum number of concurrent BLE connections

    config NIMBLE_MAX_BONDS
        int "Maximum number of bonds to save across reboots"
        default 3
        depends on NIMBLE_ENABLED
        help
            Defines maximum number of bonds to save for peer security and our security

    config NIMBLE_MAX_CCCDS
        int "Maximum number of CCC descriptors to save across reboots"
        default 8
        depends on NIMBLE_ENABLED
        help
            Defines maximum number of CCC descriptors to save

    config NIMBLE_L2CAP_COC_MAX_NUM
        int "Maximum number of connection oriented channels"
        range 0 9
        depends on NIMBLE_ENABLED
        default 0
        help
            Defines maximum number of BLE Connection Oriented Channels. When set to (0), BLE COC is not compiled in

    choice NIMBLE_PINNED_TO_CORE_CHOICE
        prompt "The CPU core on which NimBLE host will run"
        depends on NIMBLE_ENABLED && !FREERTOS_UNICORE
        help
            The CPU core on which NimBLE host will run. You can choose Core 0 or Core 1.
            Cannot specify no-affinity

        config NIMBLE_PINNED_TO_CORE_0
            bool "Core 0 (PRO CPU)"
        config NIMBLE_PINNED_TO_CORE_1
            bool "Core 1 (APP CPU)"
            depends on !FREERTOS_UNICORE
    endchoice

    config NIMBLE_PINNED_TO_CORE
        int
        depends on NIMBLE_ENABLED
        default 0 if NIMBLE_PINNED_TO_CORE_0
        default 1 if NIMBLE_PINNED_TO_CORE_1
        default 0

    config NIMBLE_TASK_STACK_SIZE
        int "NimBLE Host task stack size"
        depends on NIMBLE_ENABLED
        default 5120 if BLE_MESH
        default 4096
        help
            This configures stack size of NimBLE host task

    config NIMBLE_ROLE_CENTRAL
        bool "Enable BLE Central role"
        depends on NIMBLE_ENABLED
        default y

    config NIMBLE_ROLE_PERIPHERAL
        bool "Enable BLE Peripheral role"
        depends on NIMBLE_ENABLED
        default y

    config NIMBLE_ROLE_BROADCASTER
        bool "Enable BLE Broadcaster role"
        depends on NIMBLE_ENABLED
        default y

    config NIMBLE_ROLE_OBSERVER
        bool "Enable BLE Observer role"
        depends on NIMBLE_ENABLED
        default y

    config NIMBLE_NVS_PERSIST
        bool "Persist the BLE Bonding keys in NVS"
        depends on NIMBLE_ENABLED
        default y
        help
            Enable this flag to make bonding persistent across device reboots

    config NIMBLE_SM_LEGACY
        bool "Security manager legacy pairing"
        depends on NIMBLE_ENABLED
        default y
        help
            Enable security manager legacy pairing

    config NIMBLE_SM_SC
        bool "Security manager secure connections (4.2)"
        depends on NIMBLE_ENABLED
        default y
        help
            Enable security manager secure connections

    config NIMBLE_DEBUG
        bool "Enable extra runtime asserts and host debugging"
        default n
        depends on NIMBLE_ENABLED
        help
            This enables extra runtime asserts and host debugging

    config NIMBLE_SM_SC_DEBUG_KEYS
        bool "Use predefined public-private key pair"
        default n
        depends on NIMBLE_ENABLED && NIMBLE_SM_SC
        help
            If this option is enabled, SM uses predefined DH key pair as described
            in Core Specification, Vol. 3, Part H, 2.3.5.6.1. This allows to
            decrypt air traffic easily and thus should only be used for debugging.

    config NIMBLE_SVC_GAP_DEVICE_NAME
        string "BLE GAP default device name"
        depends on NIMBLE_ENABLED
        default "nimble"
        help
            The Device Name characteristic shall contain the name of the device as an UTF-8 string.
            This name can be changed by using API ble_svc_gap_device_name_set()

    config NIMBLE_GAP_DEVICE_NAME_MAX_LEN
        int "Maximum length of BLE device name in octets"
        depends on NIMBLE_ENABLED
        default 31
        help
            Device Name characteristic value shall be 0 to 248 octets in length

    config NIMBLE_ATT_PREFERRED_MTU
        int "Preferred MTU size in octets"
        depends on NIMBLE_ENABLED
        default 256
        help
            This is the default value of ATT MTU indicated by the device during an ATT MTU exchange.
            This value can be changed using API ble_att_set_preferred_mtu()

    config NIMBLE_SVC_GAP_APPEARANCE
        hex "External appearance of the device"
        depends on NIMBLE_ENABLED
        default 0
        help
            Standard BLE GAP Appearance value in HEX format e.g. 0x02C0

    config NIMBLE_ACL_BUF_COUNT
        int "ACL Buffer count"
        depends on NIMBLE_ENABLED
        default 12
        help
            The number of ACL data buffers.

    config NIMBLE_ACL_BUF_SIZE
        int "ACL Buffer size"
        depends on NIMBLE_ENABLED
        default 255
        help
            This is the maximum size of the data portion of HCI ACL data packets.
            It does not include the HCI data header (of 4 bytes)

    config NIMBLE_HCI_EVT_BUF_SIZE
        int "HCI Event Buffer size"
        depends on NIMBLE_ENABLED
        default 70
        help
            This is the size of each HCI event buffer in bytes

    config NIMBLE_HCI_EVT_HI_BUF_COUNT
        int "High Priority HCI Event Buffer count"
        depends on NIMBLE_ENABLED
        default 30
        help
            This is the high priority HCI events' buffer size. High-priority
            event buffers are for everything except advertising reports. If there
            are no free high-priority event buffers then host will try to allocate a
            low-priority buffer instead

    config NIMBLE_HCI_EVT_LO_BUF_COUNT
        int "Low Priority HCI Event Buffer count"
        depends on NIMBLE_ENABLED
        default 8
        help
            This is the low priority HCI events' buffer size. Low-priority event
            buffers are only used for advertising reports. If there are no free
            low-priority event buffers, then an incoming advertising report will
            get dropped

    config NIMBLE_MSYS1_BLOCK_COUNT
        int "MSYS_1 Block Count"
        depends on NIMBLE_ENABLED
        default 12
        help
            MSYS is a system level mbuf registry. For prepare write & prepare
            responses MBUFs are allocated out of msys_1 pool. For NIMBLE_MESH
            enabled cases, this block count is increased by 8 than user defined
            count.

    config NIMBLE_HS_FLOW_CTRL
        bool "Enable Host Flow control"
        depends on NIMBLE_ENABLED
        default y
        help
            Enable Host Flow control

    config NIMBLE_HS_FLOW_CTRL_ITVL
        int "Host Flow control interval"
        depends on NIMBLE_HS_FLOW_CTRL
        default 1000
        help
            Host flow control interval in msecs

    config NIMBLE_HS_FLOW_CTRL_THRESH
        int "Host Flow control threshold"
        depends on NIMBLE_HS_FLOW_CTRL
        default 2
        help
            Host flow control threshold, if the number of free buffers are at or
            below this threshold, send an immediate number-of-completed-packets
            event

    config NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT
        bool "Host Flow control on disconnect"
        depends on NIMBLE_HS_FLOW_CTRL
        default y
        help
            Enable this option to send number-of-completed-packets event to
            controller after disconnection

    config NIMBLE_RPA_TIMEOUT
        int "RPA timeout in seconds"
        range 1 41400
        depends on NIMBLE_ENABLED
        default 900
        help
            Time interval between RPA address change. This is applicable in case of
            Host based RPA

    menuconfig NIMBLE_MESH
        bool "Enable BLE mesh functionality"
        select NIMBLE_SM_SC
        depends on NIMBLE_ENABLED
        default n
        help
            Enable BLE Mesh functionality

    config NIMBLE_MESH_PROXY
        bool "Enable mesh proxy functionality"
        default n
        depends on NIMBLE_MESH
        help
            Enable proxy. This is automatically set whenever NIMBLE_MESH_PB_GATT or
            NIMBLE_MESH_GATT_PROXY is set


    config NIMBLE_MESH_PROV
        bool "Enable BLE mesh provisioning"
        default y
        depends on NIMBLE_MESH
        help
            Enable mesh provisioning

    config NIMBLE_MESH_PB_ADV
        bool "Enable mesh provisioning over advertising bearer"
        default y
        depends on NIMBLE_MESH_PROV
        help
            Enable this option to allow the device to be provisioned over
            the advertising bearer


    config NIMBLE_MESH_PB_GATT
        bool "Enable mesh provisioning over GATT bearer"
        default y
        select NIMBLE_MESH_PROXY
        depends on NIMBLE_MESH_PROV
        help
            Enable this option to allow the device to be provisioned over the GATT
            bearer

    config NIMBLE_MESH_GATT_PROXY
        bool "Enable GATT Proxy functionality"
        default y
        select NIMBLE_MESH_PROXY
        depends on NIMBLE_MESH
        help
            This option enables support for the Mesh GATT Proxy Service,
            i.e. the ability to act as a proxy between a Mesh GATT Client
            and a Mesh network

    config NIMBLE_MESH_RELAY
        bool "Enable mesh relay functionality"
        default n
        depends on NIMBLE_MESH
        help
            Support for acting as a Mesh Relay Node

    config NIMBLE_MESH_LOW_POWER
        bool "Enable mesh low power mode"
        default n
        depends on NIMBLE_MESH
        help
            Enable this option to be able to act as a Low Power Node

    config NIMBLE_MESH_FRIEND
        bool "Enable mesh friend functionality"
        default n
        depends on NIMBLE_MESH
        help
            Enable this option to be able to act as a Friend Node

    config NIMBLE_MESH_DEVICE_NAME
        string "Set mesh device name"
        default "nimble-mesh-node"
        depends on NIMBLE_MESH
        help
            This value defines Bluetooth Mesh device/node name

    config NIMBLE_CRYPTO_STACK_MBEDTLS
        bool "Override TinyCrypt with mbedTLS for crypto computations"
        default y
        depends on NIMBLE_ENABLED
        select MBEDTLS_ECP_RESTARTABLE
        select MBEDTLS_CMAC_C
        help
            Enable this option to choose mbedTLS instead of TinyCrypt for crypto
            computations.

endmenu

menuconfig BLE_MESH
    bool "ESP BLE Mesh Support"
    help
        This option enables ESP BLE Mesh support. The specific features that are
        available may depend on other features that have been enabled in the
        stack, such as Bluetooth Support, Bluedroid Support & GATT support.

if BLE_MESH

    config BLE_MESH_HCI_5_0
        bool "Support sending 20ms non-connectable adv packets"
        default y
        help
            It is a temporary solution and needs further modifications.

    config BLE_MESH_USE_DUPLICATE_SCAN
        bool "Support Duplicate Scan in BLE Mesh"
        depends on BLUEDROID_ENABLED
        select BLE_SCAN_DUPLICATE
        select BLE_MESH_SCAN_DUPLICATE_EN
        default y
        help
            Enable this option to allow using specific duplicate scan filter
            in BLE Mesh, and Scan Duplicate Type must be set by choosing the
            option in the Bluetooth Controller section in menuconfig, which is
            "Scan Duplicate By Device Address and Advertising Data".

    config BLE_MESH_ALLOC_FROM_PSRAM_FIRST
        bool "BLE Mesh will first allocate memory from PSRAM"
        default n
        help
            When this option is enabled, BLE Mesh stack will try to allocate memory
            from PSRAM firstly. This will save the internal RAM if PSRAM exists.

    config BLE_MESH_FAST_PROV
        bool "Enable BLE Mesh Fast Provisioning"
        select BLE_MESH_NODE
        select BLE_MESH_PROVISIONER
        select BLE_MESH_PB_ADV
        default n
        help
            Enable this option to allow BLE Mesh fast provisioning solution to be used.
            When there are multiple unprovisioned devices around, fast provisioning can
            greatly reduce the time consumption of the whole provisioning process.
            When this option is enabled, and after an unprovisioned device is provisioned
            into a node successfully, it can be changed to a temporary Provisioner.

    config BLE_MESH_NODE
        bool "Support for BLE Mesh Node"
        help
            Enable the device to be provisioned into a node. This option should be
            enabled when an unprovisioned device is going to be provisioned into a
            node and communicate with other nodes in the BLE Mesh network.

    config BLE_MESH_PROVISIONER
        bool "Support for BLE Mesh Provisioner"
        help
            Enable the device to be a Provisioner. The option should be enabled when
            a device is going to act as a Provisioner and provision unprovisioned
            devices into the BLE Mesh network.

    if BLE_MESH_PROVISIONER

        config BLE_MESH_WAIT_FOR_PROV_MAX_DEV_NUM
            int "Maximum number of unprovisioned devices that can be added to device queue"
            default 10
            range 1 100
            help
                This option specifies how many unprovisioned devices can be added to device
                queue for provisioning. Users can use this option to define the size of the
                queue in the bottom layer which is used to store unprovisioned device
                information (e.g. Device UUID, address).

        config BLE_MESH_MAX_PROV_NODES
            int "Maximum number of devices that can be provisioned by Provisioner"
            default 10
            range 1 1000
            help
                This option specifies how many devices can be provisioned by a Provisioner.
                This value indicates the maximum number of unprovisioned devices which can be
                provisioned by a Provisioner. For instance, if the value is 6 then it means the
                Provisioner can provision up to 6 unprovisioned devices.
                Theoretically a Provisioner without the limitation of its memory can provision
                up to 32766 unprovisioned devices, here we limit the maximum number to 100
                just to limit the memory used by a Provisioner. The bigger the value is, the
                more memory it will cost by a Provisioner to store the information of nodes.

        if BLE_MESH_PB_ADV
            config BLE_MESH_PBA_SAME_TIME
                int "Maximum number of PB-ADV running at the same time by Provisioner"
                default 2
                range 1 10
                help
                    This option specifies how many devices can be provisioned at the same time
                    using PB-ADV. For examples, if the value is 2, it means a Provisioner can
                    provision two unprovisioned devices with PB-ADV at the same time.

        endif # BLE_MESH_PB_ADV

        if BLE_MESH_PB_GATT
            config BLE_MESH_PBG_SAME_TIME
                int "Maximum number of PB-GATT running at the same time by Provisioner"
                default 1
                range 1 5
                help
                    This option specifies how many devices can be provisioned at the same
                    time using PB-GATT. For example, if the value is 2, it means a Provisioner
                    can provision two unprovisioned devices with PB-GATT at the same time.

        endif # BLE_MESH_PB_GATT

        config BLE_MESH_PROVISIONER_SUBNET_COUNT
            int "Maximum number of mesh subnets that can be created by Provisioner"
            default 3
            range 1 4096
            help
                This option specifies how many subnets per network a Provisioner can create.
                Indeed, this value decides the number of network keys which can be added by a Provisioner.

        config BLE_MESH_PROVISIONER_APP_KEY_COUNT
            int "Maximum number of application keys that can be owned by Provisioner"
            default 3
            range 1 4096
            help
                This option specifies how many application keys the Provisioner can have.
                Indeed, this value decides the number of the application keys which can be added by a Provisioner.

    endif # BLE_MESH_PROVISIONER

    # Virtual option enabled whenever Generic Provisioning layer is needed
    config BLE_MESH_PROV
        bool "BLE Mesh Provisioning support"
        default y
        help
            Enable this option to support BLE Mesh Provisioning functionality. For
            BLE Mesh, this option should be always enabled.

    config BLE_MESH_PB_ADV
        bool "Provisioning support using the advertising bearer (PB-ADV)"
        select BLE_MESH_PROV
        default y
        help
            Enable this option to allow the device to be provisioned over the
            advertising bearer. This option should be enabled if PB-ADV is
            going to be used during provisioning procedure.

    config BLE_MESH_PB_GATT
        bool "Provisioning support using GATT (PB-GATT)"
        select BLE_MESH_PROXY
        select BLE_MESH_PROV
        help
            Enable this option to allow the device to be provisioned over GATT.
            This option should be enabled if PB-GATT is going to be used during
            provisioning procedure.

            # Virtual option enabled whenever any Proxy protocol is needed
    config BLE_MESH_PROXY
        bool "BLE Mesh Proxy protocol support"
        default y
        help
            Enable this option to support BLE Mesh Proxy protocol used by PB-GATT
            and other proxy pdu transmission.

    config BLE_MESH_GATT_PROXY_SERVER
        bool "BLE Mesh GATT Proxy Server"
        select BLE_MESH_PROXY
        depends on BLE_MESH_NODE
        default y
        help
            This option enables support for Mesh GATT Proxy Service, i.e. the
            ability to act as a proxy between a Mesh GATT Client and a Mesh network.
            This option should be enabled if a node is going to be a Proxy Server.

    config BLE_MESH_NODE_ID_TIMEOUT
        int "Node Identity advertising timeout"
        depends on BLE_MESH_GATT_PROXY_SERVER
        range 1 60
        default 60
        help
            This option determines for how long the local node advertises using
            Node Identity. The given value is in seconds. The specification limits
            this to 60 seconds and lists it as the recommended value as well.
            So leaving the default value is the safest option.
            When an unprovisioned device is provisioned successfully and becomes a
            node, it will start to advertise using Node Identity during the time
            set by this option. And after that, Network ID will be advertised.

    config BLE_MESH_PROXY_FILTER_SIZE
        int "Maximum number of filter entries per Proxy Client"
        depends on BLE_MESH_GATT_PROXY_SERVER
        default 4
        range 1 32767
        help
            This option specifies how many Proxy Filter entries the local node supports.
            The entries of Proxy filter (whitelist or blacklist) are used to store a
            list of addresses which can be used to decide which messages will be forwarded
            to the Proxy Client by the Proxy Server.

    config BLE_MESH_GATT_PROXY_CLIENT
        bool "BLE Mesh GATT Proxy Client"
        select BLE_MESH_PROXY
        default n
        help
            This option enables support for Mesh GATT Proxy Client. The Proxy Client
            can use the GATT bearer to send mesh messages to a node that supports the
            advertising bearer.

    config BLE_MESH_NET_BUF_POOL_USAGE
        bool "BLE Mesh net buffer pool usage tracking"
        default y
        help
            Enable BLE Mesh net buffer pool tracking. This option is used to introduce another
            variable in the bottom layer to record the usage of advertising buffers of BLE Mesh
            devices. Recommend to enable this option as default.

    config BLE_MESH_SETTINGS
        bool "Store BLE Mesh configuration persistently"
        default n
        help
            When selected, the BLE Mesh stack will take care of storing/restoring the BLE
            Mesh configuration persistently in flash.
            If the device is a BLE Mesh node, when this option is enabled, the configuration
            of the device will be stored persistently, including unicast address, NetKey,
            AppKey, etc.
            And if the device is a BLE Mesh Provisioner, the information of the device will
            be stored persistently, including the information of provisioned nodes, NetKey,
            AppKey, etc.

    if BLE_MESH_SETTINGS

        config BLE_MESH_SPECIFIC_PARTITION
            bool "Use a specific NVS partition for BLE Mesh"
            default n
            help
                When selected, the mesh stack will use a specified NVS partition instead of
                default NVS partition. Note that the specified partition must be registered
                with NVS using nvs_flash_init_partition() API, and the partition must exists
                in the csv file.
                When Provisioner needs to store a large amount of nodes' information in the
                flash (e.g. more than 20), this option is recommended to be enabled.

        if BLE_MESH_SPECIFIC_PARTITION

            config BLE_MESH_PARTITION_NAME
                string "Name of the NVS partition for BLE Mesh"
                default "ble_mesh"
                help
                    This value defines the name of the specified NVS partition used by the
                    mesh stack.

        endif # BLE_MESH_SPECIFIC_PARTITION

        config BLE_MESH_STORE_TIMEOUT
            int "Delay (in seconds) before storing anything persistently"
            range 0 1000000
            default 0
            help
                This value defines in seconds how soon any pending changes are actually
                written into persistent storage (flash) after a change occurs.
                The option allows nodes to delay a certain period of time to save proper
                information to flash. The default value is 0, which means information
                will be stored immediately once there are updates.

        config BLE_MESH_SEQ_STORE_RATE
            int "How often the sequence number gets updated in storage"
            range 0 1000000
            default 6
            help
                This value defines how often the local sequence number gets updated in
                persistent storage (i.e. flash). e.g. a value of 100 means that the
                sequence number will be stored to flash on every 100th increment.
                If the node sends messages very frequently a higher value makes more
                sense, whereas if the node sends infrequently a value as low as 0
                (update storage for every increment) can make sense. When the stack
                gets initialized it will add sequence number to the last stored one,
                so that it starts off with a value that's guaranteed to be larger than
                the last one used before power off.

        config BLE_MESH_RPL_STORE_TIMEOUT
            int "Minimum frequency that the RPL gets updated in storage"
            range 0 1000000
            default 5
            help
                This value defines in seconds how soon the RPL (Replay Protection List)
                gets written to persistent storage after a change occurs. If the node
                receives messages frequently, then a large value is recommended. If the
                node receives messages rarely, then the value can be as low as 0 (which
                means the RPL is written into the storage immediately).
                Note that if the node operates in a security-sensitive case, and there is
                a risk of sudden power-off, then a value of 0 is strongly recommended.
                Otherwise, a power loss before RPL being written into the storage may
                introduce message replay attacks and system security will be in a
                vulnerable state.

        config BLE_MESH_SETTINGS_BACKWARD_COMPATIBILITY
            bool "A specific option for settings backward compatibility"
            depends on BLE_MESH_NODE
            default n
            help
                This option is created to solve the issue of failure in recovering
                node information after mesh stack updates. In the old version mesh
                stack, there is no key of "mesh/role" in nvs. In the new version
                mesh stack, key of "mesh/role" is added in nvs, recovering node
                information needs to check "mesh/role" key in nvs and implements
                selective recovery of mesh node information. Therefore, there may
                be failure in recovering node information during node restarting
                after OTA.

                The new version mesh stack adds the option of "mesh/role" because
                we have added the support of storing Provisioner information, while
                the old version only supports storing node information.

                If users are updating their nodes from old version to new version,
                we recommend enabling this option, so that system could set the flag
                in advance before recovering node information and make sure the node
                information recovering could work as expected.

    endif  # if BLE_MESH_SETTINGS

    config BLE_MESH_SUBNET_COUNT
        int "Maximum number of mesh subnets per network"
        default 3
        range 1 4096
        help
            This option specifies how many subnets a Mesh network can have at the same time.
            Indeed, this value decides the number of the network keys which can be owned by a node.

    config BLE_MESH_APP_KEY_COUNT
        int "Maximum number of application keys per network"
        default 3
        range 1 4096
        help
            This option specifies how many application keys the device can store per network.
            Indeed, this value decides the number of the application keys which can be owned by a node.

    config BLE_MESH_MODEL_KEY_COUNT
        int "Maximum number of application keys per model"
        default 3
        range 1 4096
        help
            This option specifies the maximum number of application keys to which each model
            can be bound.

    config BLE_MESH_MODEL_GROUP_COUNT
        int "Maximum number of group address subscriptions per model"
        default 3
        range 1 4096
        help
            This option specifies the maximum number of addresses to which each model can
            be subscribed.

    config BLE_MESH_LABEL_COUNT
        int "Maximum number of Label UUIDs used for Virtual Addresses"
        default 3
        range 0 4096
        help
            This option specifies how many Label UUIDs can be stored.
            Indeed, this value decides the number of the Virtual Addresses can be supported by a node.

    config BLE_MESH_CRPL
        int "Maximum capacity of the replay protection list"
        default 10
        range 2 65535
        help
            This option specifies the maximum capacity of the replay protection list.
            It is similar to Network message cache size, but has a different purpose.
            The replay protection list is used to prevent a node from replay attack,
            which will store the source address and sequence number of the received
            mesh messages.
            For Provisioner, the replay protection list size should not be smaller than
            the maximum number of nodes whose information can be stored. And the element
            number of each node should also be taken into consideration. For example, if
            Provisioner can provision up to 20 nodes and each node contains two elements,
            then the replay protection list size of Provisioner should be at least 40.

    config BLE_MESH_MSG_CACHE_SIZE
        int "Network message cache size"
        default 10
        range 2 65535
        help
            Number of messages that are cached for the network. This helps prevent
            unnecessary decryption operations and unnecessary relays. This option
            is similar to Replay protection list, but has a different purpose.
            A node is not required to cache the entire Network PDU and may cache
            only part of it for tracking, such as values for SRC/SEQ or others.

    config BLE_MESH_ADV_BUF_COUNT
        int "Number of advertising buffers"
        default 60
        range 6 256
        help
            Number of advertising buffers available. The transport layer reserves
            ADV_BUF_COUNT - 3 buffers for outgoing segments. The maximum outgoing
            SDU size is 12 times this value (out of which 4 or 8 bytes are used
            for the Transport Layer MIC). For example, 5 segments means the maximum
            SDU size is 60 bytes, which leaves 56 bytes for application layer data
            using a 4-byte MIC, or 52 bytes using an 8-byte MIC.

    config BLE_MESH_SUPPORT_BLE_ADV
        bool "Support sending normal BLE advertising packets"
        default n
        help
            When selected, users can send normal BLE advertising packets
            with specific API.

    if BLE_MESH_SUPPORT_BLE_ADV

        config BLE_MESH_BLE_ADV_BUF_COUNT
            int "Number of advertising buffers for BLE advertising packets"
            default 3
            range 1 255
            help
                Number of advertising buffers for BLE packets available.

    endif # BLE_MESH_SUPPORT_BLE_ADV

    config BLE_MESH_IVU_DIVIDER
        int "Divider for IV Update state refresh timer"
        default 4
        range 2 96
        help
            When the IV Update state enters Normal operation or IV Update
            in Progress, we need to keep track of how many hours has passed
            in the state, since the specification requires us to remain in
            the state at least for 96 hours (Update in Progress has an
            additional upper limit of 144 hours).

            In order to fulfill the above requirement, even if the node might
            be powered off once in a while, we need to store persistently
            how many hours the node has been in the state. This doesn't
            necessarily need to happen every hour (thanks to the flexible
            duration range). The exact cadence will depend a lot on the
            ways that the node will be used and what kind of power source it
            has.

            Since there is no single optimal answer, this configuration
            option allows specifying a divider, i.e. how many intervals
            the 96 hour minimum gets split into. After each interval the
            duration that the node has been in the current state gets
            stored to flash. E.g. the default value of 4 means that the
            state is saved every 24 hours (96 / 4).

    config BLE_MESH_TX_SEG_MSG_COUNT
        int "Maximum number of simultaneous outgoing segmented messages"
        default 1
        range 1 BLE_MESH_ADV_BUF_COUNT
        help
            Maximum number of simultaneous outgoing multi-segment and/or reliable messages.
            The default value is 1, which means the device can only send one segmented
            message at a time. And if another segmented message is going to be sent, it
            should wait for the completion of the previous one.
            If users are going to send multiple segmented messages at the same time, this
            value should be configured properly.

    config BLE_MESH_RX_SEG_MSG_COUNT
        int "Maximum number of simultaneous incoming segmented messages"
        default 1
        range 1 255
        help
            Maximum number of simultaneous incoming multi-segment and/or reliable messages.
            The default value is 1, which means the device can only receive one segmented
            message at a time. And if another segmented message is going to be received,
            it should wait for the completion of the previous one.
            If users are going to receive multiple segmented messages at the same time, this
            value should be configured properly.

    config BLE_MESH_RX_SDU_MAX
        int "Maximum incoming Upper Transport Access PDU length"
        default 384
        range 36 384
        help
            Maximum incoming Upper Transport Access PDU length. Leave this to the default
            value, unless you really need to optimize memory usage.

    config BLE_MESH_TX_SEG_MAX
        int "Maximum number of segments in outgoing messages"
        default 32
        range 2 32
        help
            Maximum number of segments supported for outgoing messages.
            This value should typically be fine-tuned based on what
            models the local node supports, i.e. what's the largest
            message payload that the node needs to be able to send.
            This value affects memory and call stack consumption, which
            is why the default is lower than the maximum that the
            specification would allow (32 segments).

            The maximum outgoing SDU size is 12 times this number (out of
            which 4 or 8 bytes is used for the Transport Layer MIC). For
            example, 5 segments means the maximum SDU size is 60 bytes,
            which leaves 56 bytes for application layer data using a
            4-byte MIC and 52 bytes using an 8-byte MIC.

            Be sure to specify a sufficient number of advertising buffers
            when setting this option to a higher value. There must be at
            least three more advertising buffers (BLE_MESH_ADV_BUF_COUNT)
            as there are outgoing segments.

    config BLE_MESH_RELAY
        bool "Relay support"
        depends on BLE_MESH_NODE
        default y
        help
            Support for acting as a Mesh Relay Node. Enabling this option will allow
            a node to support the Relay feature, and the Relay feature can still
            be enabled or disabled by proper configuration messages. Disabling this
            option will let a node not support the Relay feature.

    if BLE_MESH_RELAY

        config BLE_MESH_RELAY_ADV_BUF
            bool "Use separate advertising buffers for relay packets"
            default n
            help
                When selected, self-send packets will be put in a high-priority
                queue and relay packets will be put in a low-priority queue.

        if BLE_MESH_RELAY_ADV_BUF

            config BLE_MESH_RELAY_ADV_BUF_COUNT
                int "Number of advertising buffers for relay packets"
                default 60
                range 6 256
                help
                    Number of advertising buffers for relay packets available.

        endif # BLE_MESH_RELAY_ADV_BUF

    endif # BLE_MESH_RELAY

    config BLE_MESH_LOW_POWER
        bool "Support for Low Power features"
        depends on BLE_MESH_NODE
        help
            Enable this option to operate as a Low Power Node. If low power consumption
            is required by a node, this option should be enabled. And once the node
            enters the mesh network, it will try to find a Friend node and establish a
            friendship.

    if BLE_MESH_LOW_POWER

        config BLE_MESH_LPN_ESTABLISHMENT
            bool "Perform Friendship establishment using low power"
            default n
            help
                Perform the Friendship establishment using low power with the help of a
                reduced scan duty cycle. The downside of this is that the node may miss
                out on messages intended for it until it has successfully set up Friendship
                with a Friend node.
                When this option is enabled, the node will stop scanning for a period of
                time after a Friend Request or Friend Poll is sent, so as to reduce more
                power consumption.

        config BLE_MESH_LPN_AUTO
            bool "Automatically start looking for Friend nodes once provisioned"
            default n
            help
                Once provisioned, automatically enable LPN functionality and start looking
                for Friend nodes. If this option is disabled LPN mode needs to be manually
                enabled by calling bt_mesh_lpn_set(true).
                When an unprovisioned device is provisioned successfully and becomes a node,
                enabling this option will trigger the node starts to send Friend Request at
                a certain period until it finds a proper Friend node.

        config BLE_MESH_LPN_AUTO_TIMEOUT
            int "Time from last received message before going to LPN mode"
            default 15
            range 0 3600
            depends on BLE_MESH_LPN_AUTO
            help
                Time in seconds from the last received message, that the node waits out
                before starting to look for Friend nodes.

        config BLE_MESH_LPN_RETRY_TIMEOUT
            int "Retry timeout for Friend requests"
            default 6
            range 1 3600
            help
                Time in seconds between Friend Requests, if a previous Friend Request did
                not yield any acceptable Friend Offers.

        config BLE_MESH_LPN_RSSI_FACTOR
            int "RSSIFactor, used in Friend Offer Delay calculation"
            range 0 3
            default 0
            help
                The contribution of the RSSI, measured by the Friend node, used in Friend
                Offer Delay calculations. 0 = 1, 1 = 1.5, 2 = 2, 3 = 2.5.
                RSSIFactor, one of the parameters carried by Friend Request sent by Low Power
                node, which is used to calculate the Friend Offer Delay.

        config BLE_MESH_LPN_RECV_WIN_FACTOR
            int "ReceiveWindowFactor, used in Friend Offer Delay calculation"
            range 0 3
            default 0
            help
                The contribution of the supported Receive Window used in Friend Offer
                Delay calculations. 0 = 1, 1 = 1.5, 2 = 2, 3 = 2.5.
                ReceiveWindowFactor, one of the parameters carried by Friend Request sent by
                Low Power node, which is used to calculate the Friend Offer Delay.

        config BLE_MESH_LPN_MIN_QUEUE_SIZE
            int "Minimum size of the acceptable friend queue (MinQueueSizeLog)"
            range 1 7
            default 1
            help
                The MinQueueSizeLog field is defined as log_2(N), where N is the minimum
                number of maximum size Lower Transport PDUs that the Friend node can store
                in its Friend Queue. As an example, MinQueueSizeLog value 1 gives N = 2,
                and value 7 gives N = 128.

        config BLE_MESH_LPN_RECV_DELAY
            int "Receive delay requested by the local node"
            range 10 255
            default 100
            help
                The ReceiveDelay is the time between the Low Power node sending a
                request and listening for a response. This delay allows the Friend
                node time to prepare the response. The value is in units of milliseconds.

        config BLE_MESH_LPN_POLL_TIMEOUT
            int "The value of the PollTimeout timer"
            range 10 244735
            default 300
            help
                PollTimeout timer is used to measure time between two consecutive
                requests sent by a Low Power node. If no requests are received
                the Friend node before the PollTimeout timer expires, then the
                friendship is considered terminated. The value is in units of 100
                milliseconds, so e.g. a value of 300 means 30 seconds.
                The smaller the value, the faster the Low Power node tries to get
                messages from corresponding Friend node and vice versa.

        config BLE_MESH_LPN_INIT_POLL_TIMEOUT
            int "The starting value of the PollTimeout timer"
            range 10 BLE_MESH_LPN_POLL_TIMEOUT
            default BLE_MESH_LPN_POLL_TIMEOUT
            help
                The initial value of the PollTimeout timer when Friendship is to be
                established for the first time. After this, the timeout gradually
                grows toward the actual PollTimeout, doubling in value for each iteration.
                The value is in units of 100 milliseconds, so e.g. a value of 300 means
                30 seconds.

        config BLE_MESH_LPN_SCAN_LATENCY
            int "Latency for enabling scanning"
            range 0 50
            default 10
            help
                Latency (in milliseconds) is the time it takes to enable scanning. In
                practice, it means how much time in advance of the Receive Window, the
                request to enable scanning is made.

        config BLE_MESH_LPN_GROUPS
            int "Number of groups the LPN can subscribe to"
            range 0 16384
            default 8
            help
                Maximum number of groups to which the LPN can subscribe.

    endif # BLE_MESH_LOW_POWER

    config BLE_MESH_FRIEND
        bool "Support for Friend feature"
        help
            Enable this option to be able to act as a Friend Node.

    if BLE_MESH_FRIEND

        config BLE_MESH_FRIEND_RECV_WIN
            int "Friend Receive Window"
            range 1 255
            default 255
            help
                Receive Window in milliseconds supported by the Friend node.

        config BLE_MESH_FRIEND_QUEUE_SIZE
            int "Minimum number of buffers supported per Friend Queue"
            range 2 65536
            default 16
            help
                Minimum number of buffers available to be stored for each local Friend Queue.
                This option decides the size of each buffer which can be used by a Friend node
                to store messages for each Low Power node.

        config BLE_MESH_FRIEND_SUB_LIST_SIZE
            int "Friend Subscription List Size"
            range 0 1023
            default 3
            help
                Size of the Subscription List that can be supported by a Friend node for a
                Low Power node. And Low Power node can send Friend Subscription List Add or
                Friend Subscription List Remove messages to the Friend node to add or remove
                subscription addresses.

        config BLE_MESH_FRIEND_LPN_COUNT
            int "Number of supported LPN nodes"
            range 1 1000
            default 2
            help
                Number of Low Power Nodes with which a Friend can have Friendship simultaneously.
                A Friend node can have friendship with multiple Low Power nodes at the same time,
                while a Low Power node can only establish friendship with only one Friend node at
                the same time.

        config BLE_MESH_FRIEND_SEG_RX
            int "Number of incomplete segment lists per LPN"
            range 1 1000
            default 1
            help
                Number of incomplete segment lists tracked for each Friends' LPN.
                In other words, this determines from how many elements can segmented
                messages destined for the Friend queue be received simultaneously.

    endif # BLE_MESH_FRIEND

    config BLE_MESH_NO_LOG
        bool "Disable BLE Mesh debug logs (minimize bin size)"
        depends on BLE_MESH
        default n
        help
            Select this to save the BLE Mesh related rodata code size. Enabling this option
            will disable the output of BLE Mesh debug log.

    menu "BLE Mesh STACK DEBUG LOG LEVEL"
        depends on BLE_MESH && !BLE_MESH_NO_LOG

        choice BLE_MESH_STACK_TRACE_LEVEL
            prompt "BLE_MESH_STACK"
            default BLE_MESH_TRACE_LEVEL_WARNING
            depends on BLE_MESH && !BLE_MESH_NO_LOG
            help
                Define BLE Mesh trace level for BLE Mesh stack.

            config BLE_MESH_TRACE_LEVEL_NONE
                bool "NONE"
            config BLE_MESH_TRACE_LEVEL_ERROR
                bool "ERROR"
            config BLE_MESH_TRACE_LEVEL_WARNING
                bool "WARNING"
            config BLE_MESH_TRACE_LEVEL_INFO
                bool "INFO"
            config BLE_MESH_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config BLE_MESH_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config BLE_MESH_STACK_TRACE_LEVEL
            int
            depends on BLE_MESH
            default 0 if BLE_MESH_TRACE_LEVEL_NONE
            default 1 if BLE_MESH_TRACE_LEVEL_ERROR
            default 2 if BLE_MESH_TRACE_LEVEL_WARNING
            default 3 if BLE_MESH_TRACE_LEVEL_INFO
            default 4 if BLE_MESH_TRACE_LEVEL_DEBUG
            default 5 if BLE_MESH_TRACE_LEVEL_VERBOSE
            default 2

    endmenu #BLE Mesh DEBUG LOG LEVEL

    menu "BLE Mesh NET BUF DEBUG LOG LEVEL"
        depends on BLE_MESH && !BLE_MESH_NO_LOG

        choice BLE_MESH_NET_BUF_TRACE_LEVEL
            prompt "BLE_MESH_NET_BUF"
            default BLE_MESH_NET_BUF_TRACE_LEVEL_WARNING
            depends on BLE_MESH && !BLE_MESH_NO_LOG
            help
                Define BLE Mesh trace level for BLE Mesh net buffer.

            config BLE_MESH_NET_BUF_TRACE_LEVEL_NONE
                bool "NONE"
            config BLE_MESH_NET_BUF_TRACE_LEVEL_ERROR
                bool "ERROR"
            config BLE_MESH_NET_BUF_TRACE_LEVEL_WARNING
                bool "WARNING"
            config BLE_MESH_NET_BUF_TRACE_LEVEL_INFO
                bool "INFO"
            config BLE_MESH_NET_BUF_TRACE_LEVEL_DEBUG
                bool "DEBUG"
            config BLE_MESH_NET_BUF_TRACE_LEVEL_VERBOSE
                bool "VERBOSE"
        endchoice

        config BLE_MESH_NET_BUF_TRACE_LEVEL
            int
            depends on BLE_MESH
            default 0 if BLE_MESH_NET_BUF_TRACE_LEVEL_NONE
            default 1 if BLE_MESH_NET_BUF_TRACE_LEVEL_ERROR
            default 2 if BLE_MESH_NET_BUF_TRACE_LEVEL_WARNING
            default 3 if BLE_MESH_NET_BUF_TRACE_LEVEL_INFO
            default 4 if BLE_MESH_NET_BUF_TRACE_LEVEL_DEBUG
            default 5 if BLE_MESH_NET_BUF_TRACE_LEVEL_VERBOSE
            default 2

    endmenu #BLE Mesh NET BUF DEBUG LOG LEVEL

    config BLE_MESH_CLIENT_MSG_TIMEOUT
        int "Timeout(ms) for client message response"
        range 100 1200000
        default 4000
        help
            Timeout value used by the node to get response of the acknowledged
            message which is sent by the client model.
            This value indicates the maximum time that a client model waits for
            the response of the sent acknowledged messages. If a client model
            uses 0 as the timeout value when sending acknowledged messages, then
            the default value will be used which is four seconds.

    menu "Support for BLE Mesh Client Models"

        config BLE_MESH_CFG_CLI
            bool "Configuration Client Model"
            help
                Enable support for Configuration client model.

        config BLE_MESH_HEALTH_CLI
            bool "Health Client Model"
            help
                Enable support for Health client model.

        config BLE_MESH_GENERIC_ONOFF_CLI
            bool "Generic OnOff Client Model"
            help
                Enable support for Generic OnOff client model.

        config BLE_MESH_GENERIC_LEVEL_CLI
            bool "Generic Level Client Model"
            help
                Enable support for Generic Level client model.

        config BLE_MESH_GENERIC_DEF_TRANS_TIME_CLI
            bool "Generic Default Transition Time Client Model"
            help
                Enable support for Generic Default Transition Time client model.

        config BLE_MESH_GENERIC_POWER_ONOFF_CLI
            bool "Generic Power OnOff Client Model"
            help
                Enable support for Generic Power OnOff client model.

        config BLE_MESH_GENERIC_POWER_LEVEL_CLI
            bool "Generic Power Level Client Model"
            help
                Enable support for Generic Power Level client model.

        config BLE_MESH_GENERIC_BATTERY_CLI
            bool "Generic Battery Client Model"
            help
                Enable support for Generic Battery client model.

        config BLE_MESH_GENERIC_LOCATION_CLI
            bool "Generic Location Client Model"
            help
                Enable support for Generic Location client model.

        config BLE_MESH_GENERIC_PROPERTY_CLI
            bool "Generic Property Client Model"
            help
                Enable support for Generic Property client model.

        config BLE_MESH_SENSOR_CLI
            bool "Sensor Client Model"
            help
                Enable support for Sensor client model.

        config BLE_MESH_TIME_CLI
            bool "Time Client Model"
            help
                Enable support for Time client model.

        config BLE_MESH_SCENE_CLI
            bool "Scene Client Model"
            help
                Enable support for Scene client model.

        config BLE_MESH_SCHEDULER_CLI
            bool "Scheduler Client Model"
            help
                Enable support for Scheduler client model.

        config BLE_MESH_LIGHT_LIGHTNESS_CLI
            bool "Light Lightness Client Model"
            help
                Enable support for Light Lightness client model.

        config BLE_MESH_LIGHT_CTL_CLI
            bool "Light CTL Client Model"
            help
                Enable support for Light CTL client model.

        config BLE_MESH_LIGHT_HSL_CLI
            bool "Light HSL Client Model"
            help
                Enable support for Light HSL client model.

        config BLE_MESH_LIGHT_XYL_CLI
            bool "Light XYL Client Model"
            help
                Enable support for Light XYL client model.

        config BLE_MESH_LIGHT_LC_CLI
            bool "Light LC Client Model"
            help
                Enable support for Light LC client model.

    endmenu

    config BLE_MESH_IV_UPDATE_TEST
        bool "Test the IV Update Procedure"
        default n
        help
            This option removes the 96 hour limit of the IV Update Procedure and
            lets the state to be changed at any time.
            If IV Update test mode is going to be used, this option should be enabled.

    menu "BLE Mesh specific test option"

        config BLE_MESH_SELF_TEST
            bool "Perform BLE Mesh self-tests"
            default n
            help
                This option adds extra self-tests which are run every time BLE Mesh
                networking is initialized.

        if BLE_MESH_SELF_TEST

            config BLE_MESH_TEST_AUTO_ENTER_NETWORK
                bool "Unprovisioned device enters mesh network automatically"
                default y
                help
                    With this option enabled, an unprovisioned device can automatically
                    enters mesh network using a specific test function without the pro-
                    visioning procedure. And on the Provisioner side, a test function
                    needs to be invoked to add the node information into the mesh stack.

            config BLE_MESH_TEST_USE_WHITE_LIST
                bool "Use white list to filter mesh advertising packets"
                default n
                help
                    With this option enabled, users can use white list to filter mesh
                    advertising packets while scanning.

        endif # BLE_MESH_SELF_TEST

        config BLE_MESH_SHELL
            bool "Enable BLE Mesh shell"
            default n
            help
                Activate shell module that provides BLE Mesh commands to the console.

        config BLE_MESH_DEBUG
            bool "Enable BLE Mesh debug logs"
            default n
            help
                Enable debug logs for the BLE Mesh functionality.

        if BLE_MESH_DEBUG

            config BLE_MESH_DEBUG_NET
                bool "Network layer debug"
                help
                    Enable Network layer debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_TRANS
                bool "Transport layer debug"
                help
                    Enable Transport layer debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_BEACON
                bool "Beacon debug"
                help
                    Enable Beacon-related debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_CRYPTO
                bool "Crypto debug"
                help
                    Enable cryptographic debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_PROV
                bool "Provisioning debug"
                help
                    Enable Provisioning debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_ACCESS
                bool "Access layer debug"
                help
                    Enable Access layer debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_MODEL
                bool "Foundation model debug"
                help
                    Enable Foundation Models debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_ADV
                bool "Advertising debug"
                help
                    Enable advertising debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_LOW_POWER
                bool "Low Power debug"
                help
                    Enable Low Power debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_FRIEND
                bool "Friend debug"
                help
                    Enable Friend debug logs for the BLE Mesh functionality.

            config BLE_MESH_DEBUG_PROXY
                bool "Proxy debug"
                depends on BLE_MESH_PROXY
                help
                    Enable Proxy protocol debug logs for the BLE Mesh functionality.

        endif # BLE_MESH_DEBUG

    endmenu

endif # BLE_MESH

