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
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;
}
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(ð_cfg, ð_handle);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to install USB RNDIS driver");
return;
}
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
Transmission: Call iot_eth_transmit to send data.
Reception: Configure the stack_input callback function in iot_eth_config_t. This callback is called when data is received.
Get the MAC address of the 4G module: Call iot_eth_get_addr to retrieve the MAC address.
Supported Network Interfaces
USB interface-based RNDIS USB RNDIS Host Driver
USB interface-based PPP USB PPP
USB interface-based ECM USB ECM Host Driver
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
-
iot_eth_driver_t *driver
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.