mirror of
https://github.com/esphome/esphome.git
synced 2024-11-22 23:18:10 +01:00
Prepare ethernet to work with esp idf 5.0 (#5037)
This commit is contained in:
parent
63d3a0e8b3
commit
25b9bde0a5
2 changed files with 33 additions and 4 deletions
|
@ -19,7 +19,11 @@
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "esp_eth.h"
|
#include "esp_eth.h"
|
||||||
|
#if ESP_IDF_VERSION_MAJOR >= 5
|
||||||
|
#include "esp_eth_phy_802_3.h"
|
||||||
|
#else
|
||||||
#include "eth_phy_regs_struct.h"
|
#include "eth_phy_regs_struct.h"
|
||||||
|
#endif
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
|
@ -170,7 +174,11 @@ static esp_err_t jl1101_reset_hw(esp_eth_phy_t *phy) {
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ESP_IDF_VERSION_MAJOR >= 5
|
||||||
|
static esp_err_t jl1101_negotiate(esp_eth_phy_t *phy, eth_phy_autoneg_cmd_t cmd, bool *nego_state) {
|
||||||
|
#else
|
||||||
static esp_err_t jl1101_negotiate(esp_eth_phy_t *phy) {
|
static esp_err_t jl1101_negotiate(esp_eth_phy_t *phy) {
|
||||||
|
#endif
|
||||||
phy_jl1101_t *jl1101 = __containerof(phy, phy_jl1101_t, parent);
|
phy_jl1101_t *jl1101 = __containerof(phy, phy_jl1101_t, parent);
|
||||||
esp_eth_mediator_t *eth = jl1101->eth;
|
esp_eth_mediator_t *eth = jl1101->eth;
|
||||||
/* in case any link status has changed, let's assume we're in link down status */
|
/* in case any link status has changed, let's assume we're in link down status */
|
||||||
|
@ -285,7 +293,11 @@ static esp_err_t jl1101_init(esp_eth_phy_t *phy) {
|
||||||
esp_eth_mediator_t *eth = jl1101->eth;
|
esp_eth_mediator_t *eth = jl1101->eth;
|
||||||
// Detect PHY address
|
// Detect PHY address
|
||||||
if (jl1101->addr == ESP_ETH_PHY_ADDR_AUTO) {
|
if (jl1101->addr == ESP_ETH_PHY_ADDR_AUTO) {
|
||||||
|
#if ESP_IDF_VERSION_MAJOR >= 5
|
||||||
|
PHY_CHECK(esp_eth_phy_802_3_detect_phy_addr(eth, &jl1101->addr) == ESP_OK, "Detect PHY address failed", err);
|
||||||
|
#else
|
||||||
PHY_CHECK(esp_eth_detect_phy_addr(eth, &jl1101->addr) == ESP_OK, "Detect PHY address failed", err);
|
PHY_CHECK(esp_eth_detect_phy_addr(eth, &jl1101->addr) == ESP_OK, "Detect PHY address failed", err);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
/* Power on Ethernet PHY */
|
/* Power on Ethernet PHY */
|
||||||
PHY_CHECK(jl1101_pwrctl(phy, true) == ESP_OK, "power control failed", err);
|
PHY_CHECK(jl1101_pwrctl(phy, true) == ESP_OK, "power control failed", err);
|
||||||
|
@ -324,7 +336,11 @@ esp_eth_phy_t *esp_eth_phy_new_jl1101(const eth_phy_config_t *config) {
|
||||||
jl1101->parent.init = jl1101_init;
|
jl1101->parent.init = jl1101_init;
|
||||||
jl1101->parent.deinit = jl1101_deinit;
|
jl1101->parent.deinit = jl1101_deinit;
|
||||||
jl1101->parent.set_mediator = jl1101_set_mediator;
|
jl1101->parent.set_mediator = jl1101_set_mediator;
|
||||||
|
#if ESP_IDF_VERSION_MAJOR >= 5
|
||||||
|
jl1101->parent.autonego_ctrl = jl1101_negotiate;
|
||||||
|
#else
|
||||||
jl1101->parent.negotiate = jl1101_negotiate;
|
jl1101->parent.negotiate = jl1101_negotiate;
|
||||||
|
#endif
|
||||||
jl1101->parent.get_link = jl1101_get_link;
|
jl1101->parent.get_link = jl1101_get_link;
|
||||||
jl1101->parent.pwrctl = jl1101_pwrctl;
|
jl1101->parent.pwrctl = jl1101_pwrctl;
|
||||||
jl1101->parent.get_addr = jl1101_get_addr;
|
jl1101->parent.get_addr = jl1101_get_addr;
|
||||||
|
|
|
@ -41,18 +41,27 @@ void EthernetComponent::setup() {
|
||||||
this->eth_netif_ = esp_netif_new(&cfg);
|
this->eth_netif_ = esp_netif_new(&cfg);
|
||||||
|
|
||||||
// Init MAC and PHY configs to default
|
// Init MAC and PHY configs to default
|
||||||
eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
|
|
||||||
eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
|
eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
|
||||||
|
|
||||||
phy_config.phy_addr = this->phy_addr_;
|
phy_config.phy_addr = this->phy_addr_;
|
||||||
phy_config.reset_gpio_num = this->power_pin_;
|
phy_config.reset_gpio_num = this->power_pin_;
|
||||||
|
|
||||||
|
eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
|
||||||
|
#if ESP_IDF_VERSION_MAJOR >= 5
|
||||||
|
eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG();
|
||||||
|
esp32_emac_config.smi_mdc_gpio_num = this->mdc_pin_;
|
||||||
|
esp32_emac_config.smi_mdio_gpio_num = this->mdio_pin_;
|
||||||
|
esp32_emac_config.clock_config.rmii.clock_mode = this->clk_mode_;
|
||||||
|
esp32_emac_config.clock_config.rmii.clock_gpio = this->clk_gpio_;
|
||||||
|
|
||||||
|
esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config);
|
||||||
|
#else
|
||||||
mac_config.smi_mdc_gpio_num = this->mdc_pin_;
|
mac_config.smi_mdc_gpio_num = this->mdc_pin_;
|
||||||
mac_config.smi_mdio_gpio_num = this->mdio_pin_;
|
mac_config.smi_mdio_gpio_num = this->mdio_pin_;
|
||||||
mac_config.clock_config.rmii.clock_mode = this->clk_mode_;
|
mac_config.clock_config.rmii.clock_mode = this->clk_mode_;
|
||||||
mac_config.clock_config.rmii.clock_gpio = this->clk_gpio_;
|
mac_config.clock_config.rmii.clock_gpio = this->clk_gpio_;
|
||||||
|
|
||||||
esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&mac_config);
|
esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&mac_config);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (this->type_) {
|
switch (this->type_) {
|
||||||
case ETHERNET_TYPE_LAN8720: {
|
case ETHERNET_TYPE_LAN8720: {
|
||||||
|
@ -76,7 +85,11 @@ void EthernetComponent::setup() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ETHERNET_TYPE_KSZ8081: {
|
case ETHERNET_TYPE_KSZ8081: {
|
||||||
|
#if ESP_IDF_VERSION_MAJOR >= 5
|
||||||
|
this->phy_ = esp_eth_phy_new_ksz80xx(&phy_config);
|
||||||
|
#else
|
||||||
this->phy_ = esp_eth_phy_new_ksz8081(&phy_config);
|
this->phy_ = esp_eth_phy_new_ksz8081(&phy_config);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
|
@ -221,13 +234,13 @@ void EthernetComponent::eth_event_handler(void *arg, esp_event_base_t event_base
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ESP_LOGV(TAG, "[Ethernet event] %s (num=%d)", event_name, event);
|
ESP_LOGV(TAG, "[Ethernet event] %s (num=%" PRId32 ")", event_name, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EthernetComponent::got_ip_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id,
|
void EthernetComponent::got_ip_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id,
|
||||||
void *event_data) {
|
void *event_data) {
|
||||||
global_eth_component->connected_ = true;
|
global_eth_component->connected_ = true;
|
||||||
ESP_LOGV(TAG, "[Ethernet event] ETH Got IP (num=%d)", event_id);
|
ESP_LOGV(TAG, "[Ethernet event] ETH Got IP (num=%" PRId32 ")", event_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EthernetComponent::start_connect_() {
|
void EthernetComponent::start_connect_() {
|
||||||
|
|
Loading…
Reference in a new issue