mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-10 20:54:24 +00:00
feat(esp_eth): added example to deinit Ethernet
This commit is contained in:
@@ -75,14 +75,18 @@ void app_main(void)
|
||||
// Create default event loop that running in background
|
||||
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
||||
|
||||
esp_netif_t *eth_netifs[eth_port_cnt];
|
||||
esp_eth_netif_glue_handle_t eth_netif_glues[eth_port_cnt];
|
||||
|
||||
// Create instance(s) of esp-netif for Ethernet(s)
|
||||
if (eth_port_cnt == 1) {
|
||||
// Use ESP_NETIF_DEFAULT_ETH when just one Ethernet interface is used and you don't need to modify
|
||||
// default esp-netif configuration parameters.
|
||||
esp_netif_config_t cfg = ESP_NETIF_DEFAULT_ETH();
|
||||
esp_netif_t *eth_netif = esp_netif_new(&cfg);
|
||||
eth_netifs[0] = esp_netif_new(&cfg);
|
||||
eth_netif_glues[0] = esp_eth_new_netif_glue(eth_handles[0]);
|
||||
// Attach Ethernet driver to TCP/IP stack
|
||||
ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handles[0])));
|
||||
ESP_ERROR_CHECK(esp_netif_attach(eth_netifs[0], eth_netif_glues[0]));
|
||||
} else {
|
||||
// Use ESP_NETIF_INHERENT_DEFAULT_ETH when multiple Ethernet interfaces are used and so you need to modify
|
||||
// esp-netif configuration parameters for each interface (name, priority, etc.).
|
||||
@@ -101,10 +105,10 @@ void app_main(void)
|
||||
esp_netif_config.if_key = if_key_str;
|
||||
esp_netif_config.if_desc = if_desc_str;
|
||||
esp_netif_config.route_prio -= i*5;
|
||||
esp_netif_t *eth_netif = esp_netif_new(&cfg_spi);
|
||||
|
||||
eth_netifs[i] = esp_netif_new(&cfg_spi);
|
||||
eth_netif_glues[i] = esp_eth_new_netif_glue(eth_handles[0]);
|
||||
// Attach Ethernet driver to TCP/IP stack
|
||||
ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handles[i])));
|
||||
ESP_ERROR_CHECK(esp_netif_attach(eth_netifs[i], eth_netif_glues[i]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,4 +120,21 @@ void app_main(void)
|
||||
for (int i = 0; i < eth_port_cnt; i++) {
|
||||
ESP_ERROR_CHECK(esp_eth_start(eth_handles[i]));
|
||||
}
|
||||
|
||||
#if CONFIG_EXAMPLE_ETH_DEINIT_AFTER_S >= 0
|
||||
// For demonstration purposes, wait and then deinit Ethernet network
|
||||
vTaskDelay(pdMS_TO_TICKS(CONFIG_EXAMPLE_ETH_DEINIT_AFTER_S * 1000));
|
||||
ESP_LOGI(TAG, "stop and deinitialize Ethernet network...");
|
||||
// Stop Ethernet driver state machine and destroy netif
|
||||
for (int i = 0; i < eth_port_cnt; i++) {
|
||||
ESP_ERROR_CHECK(esp_eth_stop(eth_handles[i]));
|
||||
ESP_ERROR_CHECK(esp_eth_del_netif_glue(eth_netif_glues[i]));
|
||||
esp_netif_destroy(eth_netifs[i]);
|
||||
}
|
||||
esp_netif_deinit();
|
||||
ESP_ERROR_CHECK(example_eth_deinit(eth_handles, eth_port_cnt));
|
||||
ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_ETH_GOT_IP, got_ip_event_handler));
|
||||
ESP_ERROR_CHECK(esp_event_handler_unregister(ETH_EVENT, ESP_EVENT_ANY_ID, eth_event_handler));
|
||||
ESP_ERROR_CHECK(esp_event_loop_delete_default());
|
||||
#endif // EXAMPLE_ETH_DEINIT_AFTER_S > 0
|
||||
}
|
||||
|
Reference in New Issue
Block a user