menu "Example Ethernet Configuration"

    orsource "$IDF_PATH/examples/common_components/env_caps/$IDF_TARGET/Kconfig.env_caps"

    config EXAMPLE_USE_INTERNAL_ETHERNET
        depends on SOC_EMAC_SUPPORTED
        select ETH_USE_ESP32_EMAC
        default y
        bool "Internal EMAC"
        help
            Use internal Ethernet MAC controller.

    if EXAMPLE_USE_INTERNAL_ETHERNET
        choice EXAMPLE_ETH_PHY_MODEL
            prompt "Ethernet PHY Device"
            default EXAMPLE_ETH_PHY_IP101
            help
                Select the Ethernet PHY device to use in the example.

            config EXAMPLE_ETH_PHY_IP101
                bool "IP101"
                help
                    IP101 is a single port 10/100 MII/RMII/TP/Fiber Fast Ethernet Transceiver.
                    Goto http://www.icplus.com.tw/pp-IP101G.html for more information about it.

            config EXAMPLE_ETH_PHY_RTL8201
                bool "RTL8201/SR8201"
                help
                    RTL8201F/SR8201F is a single port 10/100Mb Ethernet Transceiver with auto MDIX.
                    Goto http://www.corechip-sz.com/productsview.asp?id=22 for more information about it.

            config EXAMPLE_ETH_PHY_LAN87XX
                bool "LAN87xx"
                help
                    Below chips are supported:
                    LAN8710A is a small footprint MII/RMII 10/100 Ethernet Transceiver with HP Auto-MDIX and
                        flexPWR® Technology.
                    LAN8720A is a small footprint RMII 10/100 Ethernet Transceiver with HP Auto-MDIX Support.
                    LAN8740A/LAN8741A is a small footprint MII/RMII 10/100 Energy Efficient Ethernet Transceiver
                        with HP Auto-MDIX and flexPWR® Technology.
                    LAN8742A is a small footprint RMII 10/100 Ethernet Transceiver with HP Auto-MDIX and
                        flexPWR® Technology.
                    Goto https://www.microchip.com for more information about them.

            config EXAMPLE_ETH_PHY_DP83848
                bool "DP83848"
                help
                    DP83848 is a single port 10/100Mb/s Ethernet Physical Layer Transceiver.
                    Goto http://www.ti.com/product/DP83848J for more information about it.

            config EXAMPLE_ETH_PHY_KSZ80XX
                bool "KSZ80xx"
                help
                    With the KSZ80xx series, Microchip offers single-chip 10BASE-T/100BASE-TX
                    Ethernet Physical Layer Tranceivers (PHY).
                    The following chips are supported: KSZ8001, KSZ8021, KSZ8031, KSZ8041,
                        KSZ8051, KSZ8061, KSZ8081, KSZ8091
                    Goto https://www.microchip.com for more information about them.
        endchoice # EXAMPLE_ETH_PHY_MODEL

        config EXAMPLE_ETH_MDC_GPIO
            int "SMI MDC GPIO number"
            range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
            default 23
            help
                Set the GPIO number used by SMI MDC.

        config EXAMPLE_ETH_MDIO_GPIO
            int "SMI MDIO GPIO number"
            range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
            default 18
            help
                Set the GPIO number used by SMI MDIO.

        config EXAMPLE_ETH_PHY_RST_GPIO
            int "PHY Reset GPIO number"
            range -1 ENV_GPIO_OUT_RANGE_MAX
            default 5
            help
                Set the GPIO number used to reset PHY chip.
                Set to -1 to disable PHY chip hardware reset.

        config EXAMPLE_ETH_PHY_ADDR
            int "PHY Address"
            range 0 31
            default 1
            help
                Set PHY address according your board schematic.
    endif # EXAMPLE_USE_INTERNAL_ETHERNET

    config EXAMPLE_USE_SPI_ETHERNET
        bool "SPI Ethernet"
        default n
        select ETH_USE_SPI_ETHERNET
        help
            Use external SPI-Ethernet module(s).

    if EXAMPLE_USE_SPI_ETHERNET
        config EXAMPLE_SPI_ETHERNETS_NUM
            int "Number of SPI Ethernet modules to use at a time"
            range 1 2
            default 1
            help
                Set the number of SPI Ethernet modules you want to use at a time. Multiple SPI modules can be connected
                to one SPI interface and can be separately accessed based on state of associated Chip Select (CS).

        choice EXAMPLE_ETHERNET_TYPE_SPI
            prompt "Ethernet SPI"
            default EXAMPLE_USE_W5500
            help
                Select which kind of Ethernet will be used in the example.

            config EXAMPLE_USE_DM9051
                bool "DM9051 Module"
                select ETH_SPI_ETHERNET_DM9051
                help
                    Select external SPI-Ethernet module (DM9051).

            config EXAMPLE_USE_KSZ8851SNL
                bool "KSZ8851SNL Module"
                select ETH_SPI_ETHERNET_KSZ8851SNL
                help
                    Select external SPI-Ethernet module (KSZ8851SNL).

            config EXAMPLE_USE_W5500
                bool "W5500 Module"
                select ETH_SPI_ETHERNET_W5500
                help
                    Select external SPI-Ethernet module (W5500).
        endchoice

        config EXAMPLE_ETH_SPI_HOST
            int "SPI Host Number"
            range 0 2
            default 1
            help
                Set the SPI host used to communicate with the SPI Ethernet Controller.

        config EXAMPLE_ETH_SPI_SCLK_GPIO
            int "SPI SCLK GPIO number"
            range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
            default 14 if IDF_TARGET_ESP32
            default 12 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3
            default 6 if IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32C2
            default 4 if IDF_TARGET_ESP32H2
            help
                Set the GPIO number used by SPI SCLK.

        config EXAMPLE_ETH_SPI_MOSI_GPIO
            int "SPI MOSI GPIO number"
            range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
            default 13 if IDF_TARGET_ESP32
            default 11 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3
            default 7 if IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32C2
            default 5 if IDF_TARGET_ESP32H2
            help
                Set the GPIO number used by SPI MOSI.

        config EXAMPLE_ETH_SPI_MISO_GPIO
            int "SPI MISO GPIO number"
            range ENV_GPIO_RANGE_MIN ENV_GPIO_IN_RANGE_MAX
            default 12 if IDF_TARGET_ESP32
            default 13 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3
            default 2 if IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32C2
            default 0 if IDF_TARGET_ESP32H2
            help
                Set the GPIO number used by SPI MISO.

        config EXAMPLE_ETH_SPI_CLOCK_MHZ
            int "SPI clock speed (MHz)"
            range 5 80
            default 12 if IDF_TARGET_ESP32 || IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32C2 || IDF_TARGET_ESP32H2
            default 36 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3
            help
                Set the clock speed (MHz) of SPI interface.

        config EXAMPLE_ETH_SPI_CS0_GPIO
            int "SPI CS0 GPIO number for SPI Ethernet module #1"
            range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
            default 15 if IDF_TARGET_ESP32
            default 10 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32C2
            default 1 if IDF_TARGET_ESP32H2
            help
                Set the GPIO number used by SPI CS0, i.e. Chip Select associated with the first SPI Eth module).

        config EXAMPLE_ETH_SPI_CS1_GPIO
            depends on EXAMPLE_SPI_ETHERNETS_NUM > 1
            int "SPI CS1 GPIO number for SPI Ethernet module #2"
            range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX
            default 32 if IDF_TARGET_ESP32
            default 7 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3
            default 8 if IDF_TARGET_ESP32C3
            default 3 if IDF_TARGET_ESP32C2
            default 11 if IDF_TARGET_ESP32H2
            help
                Set the GPIO number used by SPI CS1, i.e. Chip Select associated with the second SPI Eth module.

        config EXAMPLE_ETH_SPI_INT0_GPIO
            int "Interrupt GPIO number SPI Ethernet module #1"
            range -1 ENV_GPIO_IN_RANGE_MAX
            default 4 if IDF_TARGET_ESP32 || IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3
            default 4 if IDF_TARGET_ESP32C2
            default 9 if IDF_TARGET_ESP32H2
            help
                Set the GPIO number used by the first SPI Ethernet module interrupt line.
                Set -1 to use SPI Ethernet module in polling mode.

        config EXAMPLE_ETH_SPI_INT1_GPIO
            depends on EXAMPLE_SPI_ETHERNETS_NUM > 1
            int "Interrupt GPIO number SPI Ethernet module #2"
            range -1 ENV_GPIO_IN_RANGE_MAX
            default 33 if IDF_TARGET_ESP32
            default 5 if IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32C2
            default 10 if IDF_TARGET_ESP32H2
            help
                Set the GPIO number used by the second SPI Ethernet module interrupt line.
                Set -1 to use SPI Ethernet module in polling mode.

        config EXAMPLE_ETH_SPI_POLLING0_MS_VAL
            depends on EXAMPLE_ETH_SPI_INT0_GPIO < 0
            int "Polling period in msec of SPI Ethernet Module #1"
            default 10
            help
                Set SPI Ethernet module polling period.

        config EXAMPLE_ETH_SPI_POLLING1_MS_VAL
            depends on EXAMPLE_SPI_ETHERNETS_NUM > 1 && EXAMPLE_ETH_SPI_INT1_GPIO < 0
            int "Polling period in msec of SPI Ethernet Module #2"
            default 10
            help
                Set SPI Ethernet module polling period.

        config EXAMPLE_ETH_SPI_POLLING0_MS
            # Hidden variable to ensure that polling period option is visible only when interrupt is set disabled and
            # it is set to known value (0) when interrupt is enabled at the same time.
            int
            default EXAMPLE_ETH_SPI_POLLING0_MS_VAL if EXAMPLE_ETH_SPI_POLLING0_MS_VAL > 0
            default 0

        config EXAMPLE_ETH_SPI_POLLING1_MS
            # Hidden variable to ensure that polling period option is visible only when interrupt is set disabled and
            # it is set to known value (0) when interrupt is enabled at the same time.
            depends on EXAMPLE_SPI_ETHERNETS_NUM > 1
            int
            default EXAMPLE_ETH_SPI_POLLING1_MS_VAL if EXAMPLE_ETH_SPI_POLLING1_MS_VAL > 0
            default 0

        config EXAMPLE_ETH_SPI_PHY_RST0_GPIO
            int "PHY Reset GPIO number of SPI Ethernet Module #1"
            range -1 ENV_GPIO_OUT_RANGE_MAX
            default -1
            help
                Set the GPIO number used to reset PHY chip on the first SPI Ethernet module.
                Set to -1 to disable PHY chip hardware reset.

        config EXAMPLE_ETH_SPI_PHY_RST1_GPIO
            depends on EXAMPLE_SPI_ETHERNETS_NUM > 1
            int "PHY Reset GPIO number of SPI Ethernet Module #2"
            range -1 ENV_GPIO_OUT_RANGE_MAX
            default -1
            help
                Set the GPIO number used to reset PHY chip on the second SPI Ethernet module.
                Set to -1 to disable PHY chip hardware reset.

        config EXAMPLE_ETH_SPI_PHY_ADDR0
            int "PHY Address of SPI Ethernet Module #1"
            range 0 31
            default 1
            help
                Set the first SPI Ethernet module PHY address according your board schematic.

        config EXAMPLE_ETH_SPI_PHY_ADDR1
            depends on EXAMPLE_SPI_ETHERNETS_NUM > 1
            int "PHY Address of SPI Ethernet Module #2"
            range 0 31
            default 1
            help
                Set the second SPI Ethernet module PHY address according your board schematic.
    endif # EXAMPLE_USE_SPI_ETHERNET
endmenu