menu "Example Configuration"

    choice EXAMPLE_MAX_CPU_FREQ
        prompt "Maximum CPU frequency"
        default EXAMPLE_MAX_CPU_FREQ_160 if !IDF_TARGET_ESP32H2 && !IDF_TARGET_ESP32C2 && !IDF_TARGET_ESP32C5
        default EXAMPLE_MAX_CPU_FREQ_96 if IDF_TARGET_ESP32H2
        default EXAMPLE_MAX_CPU_FREQ_120 if IDF_TARGET_ESP32C2
        default EXAMPLE_MAX_CPU_FREQ_240 if IDF_TARGET_ESP32C5
        depends on PM_ENABLE
        help
            Maximum CPU frequency to use for dynamic frequency scaling.

        config EXAMPLE_MAX_CPU_FREQ_80
            bool "80 MHz"
        config EXAMPLE_MAX_CPU_FREQ_96
            bool "96 MHz"
            depends on IDF_TARGET_ESP32H2
        config EXAMPLE_MAX_CPU_FREQ_160
            bool "160 MHz"
        config EXAMPLE_MAX_CPU_FREQ_120
            bool "120 MHz"
            depends on IDF_TARGET_ESP32C2
        config EXAMPLE_MAX_CPU_FREQ_240
            bool "240 MHz"
            depends on IDF_TARGET_ESP32 || IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32C5
    endchoice

    config EXAMPLE_MAX_CPU_FREQ_MHZ
        int
        default 80 if EXAMPLE_MAX_CPU_FREQ_80
        default 96 if EXAMPLE_MAX_CPU_FREQ_96
        default 120 if EXAMPLE_MAX_CPU_FREQ_120
        default 160 if EXAMPLE_MAX_CPU_FREQ_160
        default 240 if EXAMPLE_MAX_CPU_FREQ_240

    choice EXAMPLE_MIN_CPU_FREQ
        prompt "Minimum CPU frequency"
        default EXAMPLE_MIN_CPU_FREQ_40M if !IDF_TARGET_ESP32H2 && !IDF_TARGET_ESP32C2 && !IDF_TARGET_ESP32C5
        default EXAMPLE_MIN_CPU_FREQ_48M if IDF_TARGET_ESP32C5
        default EXAMPLE_MIN_CPU_FREQ_32M if IDF_TARGET_ESP32H2
        default EXAMPLE_MIN_CPU_FREQ_26M if IDF_TARGET_ESP32C2
        depends on PM_ENABLE
        help
            Minimum CPU frequency to use for dynamic frequency scaling.
            Should be set to XTAL frequency or XTAL frequency divided by integer.

        config EXAMPLE_MIN_CPU_FREQ_80M
            bool "80 MHz"
            depends on !(IDF_TARGET_ESP32 && EXAMPLE_MAX_CPU_FREQ_240)
            help
                ESP32 does not support switching between 240M and 80M.The root cause
                is that when switching between 240M and 80M, we need to disable
                BBPLL and then re-enable it with a different frequency.Since the
                Bluetooth baseband works from PLL frequency, it will temporarily
                lose its 80 MHz clock, while the BBPLL is disabled.
        config EXAMPLE_MIN_CPU_FREQ_48M
            bool "48 MHz (use with 48MHz XTAL)"
            depends on XTAL_FREQ_48 || XTAL_FREQ_AUTO
        config EXAMPLE_MIN_CPU_FREQ_40M
            bool "40 MHz (use with 40MHz XTAL)"
            depends on XTAL_FREQ_40 || XTAL_FREQ_AUTO
        config EXAMPLE_MIN_CPU_FREQ_32M
            bool "32 MHz (use with 32MHz XTAL)"
            depends on IDF_TARGET_ESP32H2
            depends on XTAL_FREQ_32 || XTAL_FREQ_AUTO
        config EXAMPLE_MIN_CPU_FREQ_26M
            bool "26 MHz (use with 26MHz XTAL)"
            depends on IDF_TARGET_ESP32C2
            depends on XTAL_FREQ_26 || XTAL_FREQ_AUTO
        config EXAMPLE_MIN_CPU_FREQ_20M
            bool "20 MHz (use with 40MHz XTAL)"
            depends on XTAL_FREQ_40 || XTAL_FREQ_AUTO
        config EXAMPLE_MIN_CPU_FREQ_10M
            bool "10 MHz (use with 40MHz XTAL)"
            depends on XTAL_FREQ_40 || XTAL_FREQ_AUTO
    endchoice

    config EXAMPLE_MIN_CPU_FREQ_MHZ
        int
        default 80 if EXAMPLE_MIN_CPU_FREQ_80M
        default 48 if EXAMPLE_MIN_CPU_FREQ_48M
        default 40 if EXAMPLE_MIN_CPU_FREQ_40M
        default 32 if EXAMPLE_MIN_CPU_FREQ_32M
        default 26 if EXAMPLE_MIN_CPU_FREQ_26M
        default 20 if EXAMPLE_MIN_CPU_FREQ_20M
        default 10 if EXAMPLE_MIN_CPU_FREQ_10M

    choice EXAMPLE_USE_IO_TYPE
        prompt "I/O Capability"
        default BLE_SM_IO_CAP_NO_IO
        help
            I/O capability of device.

        config BLE_SM_IO_CAP_DISP_ONLY
            bool "DISPLAY ONLY"
        config BLE_SM_IO_CAP_DISP_YES_NO
            bool "DISPLAY YESNO"
        config BLE_SM_IO_CAP_KEYBOARD_ONLY
            bool "KEYBOARD ONLY"
        config BLE_SM_IO_CAP_NO_IO
            bool "Just works"
        config BLE_SM_IO_CAP_KEYBOARD_DISP
            bool "Both KEYBOARD & DISPLAY"
    endchoice

    config EXAMPLE_IO_TYPE
        int
        default 0 if BLE_SM_IO_CAP_DISP_ONLY
        default 1 if BLE_SM_IO_CAP_DISP_YES_NO
        default 2 if BLE_SM_IO_CAP_KEYBOARD_ONLY
        default 3 if BLE_SM_IO_CAP_NO_IO
        default 4 if BLE_SM_IO_CAP_KEYBOARD_DISP

    config EXAMPLE_BONDING
        bool
        default n
        prompt "Use Bonding"
        help
            Use this option to enable/disable bonding.

    config EXAMPLE_MITM
        bool
        default n
        prompt "MITM security"
        help
            Use this option to enable/disable MITM security.

    config EXAMPLE_USE_SC
        bool
        depends on BT_NIMBLE_SM_SC
        default n
        prompt "Use Secure Connection feature"
        help
            Use this option to enable/disable Security Manager Secure Connection 4.2 feature.

    config EXAMPLE_EXTENDED_ADV
        bool
        depends on SOC_BLE_50_SUPPORTED && BT_NIMBLE_50_FEATURE_SUPPORT
        default y if SOC_ESP_NIMBLE_CONTROLLER
        select BT_NIMBLE_EXT_ADV
        prompt "Enable Extended Adv"
        help
            Use this option to enable extended advertising in the example.
            If this option is disabled, ensure config BT_NIMBLE_EXT_ADV is
            also disabled from Nimble stack menuconfig

    config EXAMPLE_RANDOM_ADDR
        bool
        prompt "Advertise RANDOM Address"
        help
            Use this option to advertise a random address instead of public address

    config EXAMPLE_ENCRYPTION
        bool
        prompt "Enable Link Encryption"
        help
            This adds Encrypted Read and Write permissions in the custom GATT server.

    config EXAMPLE_RESOLVE_PEER_ADDR
        bool
        prompt "Enable resolving peer address"
        help
            Use this option to enable resolving peer's address.

    config EXAMPLE_USE_CI_ADDRESS
        bool
        default n
        prompt "Advertise using Test address(Internal Test ONLY)"
        help
            Used for internal test ONLY.
            Use this option to advertise in a specific random address.

    config EXAMPLE_CI_ADDRESS_OFFSET
        string
        prompt "Advertise using Test address(Internal Test ONLY)"
        depends on EXAMPLE_USE_CI_ADDRESS
        help
            Used for internal test ONLY.
            Use this option to advertise in a specific random address.

    config EXAMPLE_SLEEP_WAKEUP
        bool "Enable Vendor-Specific Sleep Wake-Up Event"
        depends on BT_NIMBLE_VS_SUPPORT
        default n
        help
            When enabled, the Nimble Host allows setting a Vendor-Specific
            Event Mask for processing sleep wake-up events from the controller.
            The controller sends a wake-up event (HCI_LE_SLEEP_WAKE_UP 0xFF 0xC3)
            when it resumes from sleep.

endmenu
