#include "aes67_net.h" #include "esp_eth.h" #include "esp_event.h" #include "esp_log.h" #include "esp_netif.h" static const char *TAG = "net"; static void eth_event(void *arg, esp_event_base_t base, int32_t id, void *data) { esp_eth_handle_t eth = *(esp_eth_handle_t *)data; switch (id) { case ETHERNET_EVENT_CONNECTED: { uint8_t mac[6]; eth_speed_t speed; eth_duplex_t duplex; esp_eth_ioctl(eth, ETH_CMD_G_MAC_ADDR, mac); esp_eth_ioctl(eth, ETH_CMD_G_SPEED, &speed); esp_eth_ioctl(eth, ETH_CMD_G_DUPLEX_MODE, &duplex); ESP_LOGI(TAG, "link up: %s Mbps %s duplex, MAC %02x:%02x:%02x:%02x:%02x:%02x", speed == ETH_SPEED_100M ? "100" : "10", duplex == ETH_DUPLEX_FULL ? "full" : "half", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); break; } case ETHERNET_EVENT_DISCONNECTED: ESP_LOGW(TAG, "link down"); break; default: break; } } static void ip_event(void *arg, esp_event_base_t base, int32_t id, void *data) { const ip_event_got_ip_t *ev = data; ESP_LOGI(TAG, "got IP " IPSTR " mask " IPSTR " gw " IPSTR, IP2STR(&ev->ip_info.ip), IP2STR(&ev->ip_info.netmask), IP2STR(&ev->ip_info.gw)); } esp_err_t aes67_net_init(esp_eth_handle_t eth) { ESP_ERROR_CHECK(esp_netif_init()); esp_err_t err = esp_event_loop_create_default(); if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) { return err; } esp_netif_config_t netif_cfg = ESP_NETIF_DEFAULT_ETH(); esp_netif_t *netif = esp_netif_new(&netif_cfg); ESP_ERROR_CHECK(esp_netif_attach(netif, esp_eth_new_netif_glue(eth))); ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, eth_event, NULL)); ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, ip_event, NULL)); return esp_eth_start(eth); }