69b4e18118
- aes67_board: Waveshare ESP32-P4-ETH pin profile and EMAC + IP101 driver install (PHY addr 1, reset GPIO51, ref clock in on GPIO50). - aes67_net: Ethernet netif with DHCP client; logs link up/down (speed, duplex, MAC) and the DHCP lease. - Verified on board: 100 Mbps full duplex, DHCP lease in ~8 s, ping 0% loss, ~0.2 ms RTT. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
59 lines
1.9 KiB
C
59 lines
1.9 KiB
C
#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);
|
|
}
|