diff --git a/libraries/Ethernet/src/ETH.cpp b/libraries/Ethernet/src/ETH.cpp index 2480dd982ec..4d215d80034 100644 --- a/libraries/Ethernet/src/ETH.cpp +++ b/libraries/Ethernet/src/ETH.cpp @@ -130,7 +130,8 @@ ETHClass::ETHClass(uint8_t eth_index) , _pin_mcd(-1), _pin_mdio(-1), _pin_power(-1), _pin_rmii_clock(-1) #endif /* CONFIG_ETH_USE_ESP32_EMAC */ -{ + , + _task_stack_size(4096) { } ETHClass::~ETHClass() {} @@ -141,6 +142,10 @@ bool ETHClass::ethDetachBus(void *bus_pointer) { return true; } +void ETHClass::setTaskStackSize(size_t size) { + _task_stack_size = size; +} + #if CONFIG_ETH_USE_ESP32_EMAC bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int mdc, int mdio, int power, eth_clock_mode_t clock_mode) { esp_err_t ret = ESP_OK; @@ -214,6 +219,7 @@ bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int mdc, int mdio, i eth_mac_config_t eth_mac_config = ETH_MAC_DEFAULT_CONFIG(); eth_mac_config.sw_reset_timeout_ms = 1000; + eth_mac_config.rx_task_stack_size = _task_stack_size; esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&mac_config, ð_mac_config); if (mac == NULL) { @@ -578,6 +584,9 @@ bool ETHClass::beginSPI( __unused eth_mac_config_t eth_mac_config = ETH_MAC_DEFAULT_CONFIG(); __unused eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG(); + // Set RX Task Stack Size + eth_mac_config.rx_task_stack_size = _task_stack_size; + // Update PHY config based on board specific configuration phy_config.phy_addr = phy_addr; phy_config.reset_gpio_num = _pin_rst; diff --git a/libraries/Ethernet/src/ETH.h b/libraries/Ethernet/src/ETH.h index b481b9e36c3..14d2d042614 100644 --- a/libraries/Ethernet/src/ETH.h +++ b/libraries/Ethernet/src/ETH.h @@ -153,6 +153,9 @@ class ETHClass : public NetworkInterface { void end(); + // This function must be called before `begin()` + void setTaskStackSize(size_t size); + // ETH Handle APIs bool fullDuplex() const; uint8_t linkSpeed() const; @@ -203,6 +206,7 @@ class ETHClass : public NetworkInterface { int8_t _pin_power; int8_t _pin_rmii_clock; #endif /* CONFIG_ETH_USE_ESP32_EMAC */ + size_t _task_stack_size; static bool ethDetachBus(void *bus_pointer); bool beginSPI(