IOT ETH Ethernet

[中文]

iot_eth provides a complete solution for connecting 4G modules to Ethernet, offering an abstraction layer for the underlying hardware and a default network interface based on LWIP. It also supports user-defined network interfaces.

Features

  • Advanced factory mode, supporting various underlying connection methods

  • Default support for LWIP network interface, also supports user-defined network interfaces

User Guide

  1. First, initialize the driver layer to provide lower-level hardware abstraction

static esp_err_t drv_init(iot_eth_driver_t *driver)
{
    ESP_LOGI(TAG, "network interface init success");
    return ESP_OK;
}

static esp_err_t drv_set_mediator(iot_eth_driver_t *driver, iot_eth_mediator_t *mediator)
{
    net_ctx_t *net = __containerof(driver, net_ctx_t, base);
    net->mediator = mediator;
    ESP_LOGI(TAG, "network interface set mediator success");
    return ESP_OK;
}

static esp_err_t usbh_rndis_transmit(iot_eth_driver_t *h, uint8_t *buffer, size_t buflen)
{
    ESP_LOGI(TAG, "network interface transmit success");
    return ESP_OK;
}

static esp_err_t drv_get_addr(iot_eth_driver_t *driver, uint8_t *mac)
{
    ESP_LOGI(TAG, "network interface get mac success");
    return ESP_OK;
}

static esp_err_t drv_deinit(iot_eth_driver_t *driver)
{
    ESP_LOGI(TAG, "network interface deinit success");
    free(driver);
    return ESP_OK;
}

static iot_eth_driver_t * new_rndis_eth_driver()
{
    net_ctx_t *net = calloc(1, sizeof(net_ctx_t));
    net->base.name = "test drv";
    net->base.init = drv_init;
    net->base.deinit = drv_deinit;
    net->base.set_mediator = drv_set_mediator;
    net->base.get_addr = drv_get_addr;
    net->base.transmit = usbh_rndis_transmit;
    return &net->base;
}
  1. Initialize the iot_eth layer

iot_eth_config_t eth_cfg = {
    .driver = rndis_handle,
    .stack_input = NULL,
};

iot_eth_handle_t eth_handle = NULL;
ret = iot_eth_install(&eth_cfg, &eth_handle);
if (ret != ESP_OK) {
    ESP_LOGE(TAG, "Failed to install USB RNDIS driver");
    return;
}
  1. Start the iot_eth layer

ret = iot_eth_start(eth_handle);
if (ret != ESP_OK) {
    ESP_LOGE(TAG, "Failed to start eth driver");
    return;
}

Using Other Network Interfaces

  1. Transmission: Call iot_eth_transmit to send data.

  2. Reception: Configure the stack_input callback function in iot_eth_config_t. This callback is called when data is received.

  3. Get the MAC address of the 4G module: Call iot_eth_get_addr to retrieve the MAC address.

Supported Network Interfaces

API Reference

Header File

Functions

esp_err_t iot_eth_install(const iot_eth_config_t *config, iot_eth_handle_t *handle)
esp_err_t iot_eth_uninstall(iot_eth_handle_t handle)
esp_err_t iot_eth_start(iot_eth_handle_t handle)
esp_err_t iot_eth_stop(iot_eth_handle_t handle)
esp_err_t iot_eth_transmit(iot_eth_handle_t handle, void *data, size_t len)
esp_err_t iot_eth_get_addr(iot_eth_handle_t handle, uint8_t *mac)
esp_err_t iot_eth_update_input_path(iot_eth_handle_t handle, static_input_cb_t stack_input, void *user_data)
esp_err_t iot_eth_update_input_path_info(iot_eth_handle_t handle, static_input_info_cb_t stack_input_info, void *user_data)

Structures

struct iot_eth_config_t

Ethernet configuration structure.

This structure holds the configuration for initializing an Ethernet instance.

Public Members

iot_eth_driver_t *driver

Pointer to the Ethernet driver

static_input_cb_t stack_input

Function pointer for stack input

static_input_info_cb_t stack_input_info

Function pointer for stack input with extra frame info

Type Definitions

typedef void *iot_eth_handle_t

iot_eth event base declaration

Ethernet handle type

This is a handle to an Ethernet instance, used for managing Ethernet operations.

typedef esp_err_t (*static_input_cb_t)(iot_eth_handle_t handle, uint8_t *data, size_t len, void *user_data)

Static input callback function type.

This type defines a function pointer for a static input callback. It takes an Ethernet handle, a pointer to data, the length of the data, and a user data pointer as arguments.

typedef esp_err_t (*static_input_info_cb_t)(iot_eth_handle_t handle, uint8_t *data, size_t len, void *user_data, void *info)

Static input callback function type with extra frame information.

This callback is used by drivers that can provide additional frame metadata, such as hardware timestamps, while keeping the legacy input callback available.

Enumerations

enum iot_eth_event_t

iot_eth event declarations

Values:

enumerator IOT_ETH_EVENT_START

IOT_ETH driver start

enumerator IOT_ETH_EVENT_STOP

IOT_ETH driver stop

enumerator IOT_ETH_EVENT_CONNECTED

IOT_ETH got a valid link

enumerator IOT_ETH_EVENT_DISCONNECTED

IOT_ETH lost a valid link