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.

        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
            default n
            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.

    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

        config HFP_AUDIO_DATA_PATH_PCM
            bool "PCM"
            help
                This enables the Serial Port Profile
        config HFP_AUDIO_DATA_PATH_HCI
            bool "HCI"
            help
                This enables the Serial Port Profile
    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 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 BT_RESERVE_DRAM
        hex
        default 0xdb5c if BT_ENABLED
        default 0

endmenu
