From d150ff7c6b5fa463125603d43e6e779599755510 Mon Sep 17 00:00:00 2001 From: Adrian Soundy Date: Thu, 19 Sep 2024 13:03:12 +1200 Subject: [PATCH 1/4] Set IP addresses and tidy --- targets/ESP32/_Network/CMakeLists.txt | 1 + targets/ESP32/_Network/NF_ESP32_Ethernet.cpp | 3 + targets/ESP32/_Network/NF_ESP32_Network.cpp | 118 +++++++++++++++++++ targets/ESP32/_Network/NF_ESP32_Wireless.cpp | 57 ++------- targets/ESP32/_include/NF_ESP32_Network.h | 3 + 5 files changed, 138 insertions(+), 44 deletions(-) create mode 100644 targets/ESP32/_Network/NF_ESP32_Network.cpp diff --git a/targets/ESP32/_Network/CMakeLists.txt b/targets/ESP32/_Network/CMakeLists.txt index f76a1dc7ed..7e88e7429b 100644 --- a/targets/ESP32/_Network/CMakeLists.txt +++ b/targets/ESP32/_Network/CMakeLists.txt @@ -11,6 +11,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/esp32_ethernet_options.h.in ${CMAKE_BINARY_DIR}/targets/${RTOS}/${TARGET_BOARD}/esp32_ethernet_options.h @ONLY) # append networking files, if enabled +list(APPEND TARGET_ESP32_IDF_NETWORK_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/NF_ESP32_Network.cpp) list(APPEND TARGET_ESP32_IDF_NETWORK_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/NF_ESP32_Ethernet.cpp) list(APPEND TARGET_ESP32_IDF_NETWORK_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/NF_ESP32_Wireless.cpp) list(APPEND TARGET_ESP32_IDF_NETWORK_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/NF_ESP32_SmartConfig.cpp) diff --git a/targets/ESP32/_Network/NF_ESP32_Ethernet.cpp b/targets/ESP32/_Network/NF_ESP32_Ethernet.cpp index b16214fab7..6b1489a931 100644 --- a/targets/ESP32/_Network/NF_ESP32_Ethernet.cpp +++ b/targets/ESP32/_Network/NF_ESP32_Ethernet.cpp @@ -219,6 +219,9 @@ esp_err_t NF_ESP32_InitialiseEthernet(uint8_t *pMacAdr) // attach Ethernet driver to TCP/IP stack ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handle))); + // COnfigure static address if required in config + ESP_ERROR_CHECK(NF_ESP32_ConfigureNetworkByIndex(IDF_ETH_DEF, eth_netif)); + // start Ethernet driver state machine ESP_ERROR_CHECK(esp_eth_start(eth_handle)); diff --git a/targets/ESP32/_Network/NF_ESP32_Network.cpp b/targets/ESP32/_Network/NF_ESP32_Network.cpp new file mode 100644 index 0000000000..a529c87835 --- /dev/null +++ b/targets/ESP32/_Network/NF_ESP32_Network.cpp @@ -0,0 +1,118 @@ +// +// Copyright (c) .NET Foundation and Contributors +// See LICENSE file in the project root for full license information. +// + +// This file includes common method for networking code + +#include "NF_ESP32_Network.h" +#include "esp_netif_net_stack.h" + +// Wait for the network interface to become available +int NF_ESP32_Wait_NetNumber(int num) +{ + int number = 0; + + esp_netif_t *espNetif; + + while (true) + { + switch (num) + { + case IDF_WIFI_STA_DEF: + espNetif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"); + break; + + case IDF_WIFI_AP_DEF: + espNetif = esp_netif_get_handle_from_ifkey("WIFI_AP_DEF"); + break; + + case IDF_ETH_DEF: + espNetif = esp_netif_get_handle_from_ifkey("ETH_DEF"); + break; + + case IDF_OT_DEF: + espNetif = esp_netif_get_handle_from_ifkey("OT_DEF"); + break; + + default: + // can't reach here + HAL_AssertEx(); + break; + } + + if (espNetif != NULL) + { + break; + } + + vTaskDelay(20 / portTICK_PERIOD_MS); + } + + return espNetif->lwip_netif->num; +} + +HAL_Configuration_NetworkInterface * NF_ESP32_GetNetworkConfigBlock(int index) +{ + HAL_Configuration_NetworkInterface *networkConfig = + (HAL_Configuration_NetworkInterface *)platform_malloc(sizeof(HAL_Configuration_NetworkInterface)); + + if (networkConfig != NULL) + { + if (ConfigurationManager_GetConfigurationBlock(networkConfig, DeviceConfigurationOption_Network, index)) + { + return networkConfig; + } + } + + return NULL; +} + +// +// Configure network settings for a espressif network interface +// +esp_err_t NF_ESP32_ConfigureNetwork(esp_netif_t *netIf, HAL_Configuration_NetworkInterface *config) +{ + esp_err_t ec; + esp_netif_ip_info_t ip_info; + + ec = esp_netif_get_ip_info(netIf, &ip_info); + if (ec != ESP_OK) + { + return ec; + } + + bool enableDHCP = (config->StartupAddressMode == AddressMode_DHCP); + + // Set static addresses + if (config->IPv4Address != 0) + { + ip_info.ip.addr = config->IPv4Address; + ip_info.netmask.addr = config->IPv4NetMask; + ip_info.gw.addr = config->IPv4GatewayAddress; + + ec = esp_netif_set_ip_info(netIf, &ip_info); + + // Make sure DHCP client is disabled + netIf->flags = (esp_netif_flags_t)(netIf->flags & ~ESP_NETIF_DHCP_CLIENT); + } + + return ec; +} + +esp_err_t NF_ESP32_ConfigureNetworkByIndex(int index, esp_netif_t *netIf) +{ + esp_err_t ec; + + HAL_Configuration_NetworkInterface *networkConfig = NF_ESP32_GetNetworkConfigBlock(index); + if (networkConfig == NULL) + { + return ESP_FAIL; + } + + ec = NF_ESP32_ConfigureNetwork(netIf, networkConfig); + + platform_free(networkConfig); + + return ec; +} diff --git a/targets/ESP32/_Network/NF_ESP32_Wireless.cpp b/targets/ESP32/_Network/NF_ESP32_Wireless.cpp index 6954849512..64f49a8ebf 100644 --- a/targets/ESP32/_Network/NF_ESP32_Wireless.cpp +++ b/targets/ESP32/_Network/NF_ESP32_Wireless.cpp @@ -112,6 +112,11 @@ wifi_mode_t NF_ESP32_GetCurrentWifiMode() return current_wifi_mode; } +esp_err_t NF_ESP32_ConfigureNetworkStation(esp_netif_t *netIf) +{ + return NF_ESP32_ConfigureNetworkByIndex(IDF_WIFI_STA_DEF, netIf); +} + void NF_ESP32_DeinitWifi() { // clear flags @@ -155,6 +160,14 @@ esp_err_t NF_ESP32_InitaliseWifi() // create Wi-Fi STA (ignoring return) wifiStaNetif = esp_netif_create_default_wifi_sta(); + // Set static address if configured + // ignore any errors + ec = NF_ESP32_ConfigureNetworkStation(wifiStaNetif); + if (ec != ESP_OK) + { + ESP_LOGE(TAG, "Unable to configure Wifi station - result %d", ec); + } + // We need to start the WIFI stack before the station can Connect // Also we can only get the NetIf number used by ESP IDF after it has been started. // Starting will also start the Soft- AP (if we have enabled it). @@ -514,47 +527,3 @@ bool NF_ESP32_WirelessAP_Close() } #endif - -// Wait for the network interface to become available -int NF_ESP32_Wait_NetNumber(int num) -{ - int number = 0; - - esp_netif_t *espNetif; - - while (true) - { - switch (num) - { - case IDF_WIFI_STA_DEF: - espNetif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"); - break; - - case IDF_WIFI_AP_DEF: - espNetif = esp_netif_get_handle_from_ifkey("WIFI_AP_DEF"); - break; - - case IDF_ETH_DEF: - espNetif = esp_netif_get_handle_from_ifkey("ETH_DEF"); - break; - - case IDF_OT_DEF: - espNetif = esp_netif_get_handle_from_ifkey("OT_DEF"); - break; - - default: - // can't reach here - HAL_AssertEx(); - break; - } - - if (espNetif != NULL) - { - break; - } - - vTaskDelay(20 / portTICK_PERIOD_MS); - } - - return espNetif->lwip_netif->num; -} diff --git a/targets/ESP32/_include/NF_ESP32_Network.h b/targets/ESP32/_include/NF_ESP32_Network.h index 94e0edf837..f03ad78a36 100644 --- a/targets/ESP32/_include/NF_ESP32_Network.h +++ b/targets/ESP32/_include/NF_ESP32_Network.h @@ -60,5 +60,8 @@ void NF_ESP32_Start_wifi_smart_config(void); // Helpers int NF_ESP32_Wait_NetNumber(int num); +HAL_Configuration_NetworkInterface * NF_ESP32_GetNetworkConfigBlock(int index); +esp_err_t NF_ESP32_ConfigureNetwork(esp_netif_t *netIf, HAL_Configuration_NetworkInterface *config); +esp_err_t NF_ESP32_ConfigureNetworkByIndex(int index, esp_netif_t *netIf); #endif // NF_ESP32_NETWORK_H From 05332315e481e34a318603f0616c52dbf7200efa Mon Sep 17 00:00:00 2001 From: nfbot Date: Fri, 14 Mar 2025 06:12:44 +0000 Subject: [PATCH 2/4] Code style fixes Automated fixes for code style. --- targets/ESP32/_Network/NF_ESP32_Network.cpp | 6 +++--- targets/ESP32/_Network/NF_ESP32_Wireless.cpp | 4 ++-- targets/ESP32/_include/NF_ESP32_Network.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/targets/ESP32/_Network/NF_ESP32_Network.cpp b/targets/ESP32/_Network/NF_ESP32_Network.cpp index a529c87835..359127f36c 100644 --- a/targets/ESP32/_Network/NF_ESP32_Network.cpp +++ b/targets/ESP32/_Network/NF_ESP32_Network.cpp @@ -52,7 +52,7 @@ int NF_ESP32_Wait_NetNumber(int num) return espNetif->lwip_netif->num; } -HAL_Configuration_NetworkInterface * NF_ESP32_GetNetworkConfigBlock(int index) +HAL_Configuration_NetworkInterface *NF_ESP32_GetNetworkConfigBlock(int index) { HAL_Configuration_NetworkInterface *networkConfig = (HAL_Configuration_NetworkInterface *)platform_malloc(sizeof(HAL_Configuration_NetworkInterface)); @@ -77,9 +77,9 @@ esp_err_t NF_ESP32_ConfigureNetwork(esp_netif_t *netIf, HAL_Configuration_Networ esp_netif_ip_info_t ip_info; ec = esp_netif_get_ip_info(netIf, &ip_info); - if (ec != ESP_OK) + if (ec != ESP_OK) { - return ec; + return ec; } bool enableDHCP = (config->StartupAddressMode == AddressMode_DHCP); diff --git a/targets/ESP32/_Network/NF_ESP32_Wireless.cpp b/targets/ESP32/_Network/NF_ESP32_Wireless.cpp index 64f49a8ebf..7d6d0851bd 100644 --- a/targets/ESP32/_Network/NF_ESP32_Wireless.cpp +++ b/targets/ESP32/_Network/NF_ESP32_Wireless.cpp @@ -163,8 +163,8 @@ esp_err_t NF_ESP32_InitaliseWifi() // Set static address if configured // ignore any errors ec = NF_ESP32_ConfigureNetworkStation(wifiStaNetif); - if (ec != ESP_OK) - { + if (ec != ESP_OK) + { ESP_LOGE(TAG, "Unable to configure Wifi station - result %d", ec); } diff --git a/targets/ESP32/_include/NF_ESP32_Network.h b/targets/ESP32/_include/NF_ESP32_Network.h index f03ad78a36..0bcd91f766 100644 --- a/targets/ESP32/_include/NF_ESP32_Network.h +++ b/targets/ESP32/_include/NF_ESP32_Network.h @@ -60,7 +60,7 @@ void NF_ESP32_Start_wifi_smart_config(void); // Helpers int NF_ESP32_Wait_NetNumber(int num); -HAL_Configuration_NetworkInterface * NF_ESP32_GetNetworkConfigBlock(int index); +HAL_Configuration_NetworkInterface *NF_ESP32_GetNetworkConfigBlock(int index); esp_err_t NF_ESP32_ConfigureNetwork(esp_netif_t *netIf, HAL_Configuration_NetworkInterface *config); esp_err_t NF_ESP32_ConfigureNetworkByIndex(int index, esp_netif_t *netIf); From 7705105de8171acb979289527ca9d9afc2345512 Mon Sep 17 00:00:00 2001 From: Adrian Soundy Date: Sat, 15 Mar 2025 08:52:46 +1100 Subject: [PATCH 3/4] Update code changes suggested by coderabbitai --- targets/ESP32/_Network/NF_ESP32_Network.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/targets/ESP32/_Network/NF_ESP32_Network.cpp b/targets/ESP32/_Network/NF_ESP32_Network.cpp index 359127f36c..77c0e89127 100644 --- a/targets/ESP32/_Network/NF_ESP32_Network.cpp +++ b/targets/ESP32/_Network/NF_ESP32_Network.cpp @@ -12,10 +12,11 @@ int NF_ESP32_Wait_NetNumber(int num) { int number = 0; - + int timeoutMs = 30000; // 30 seconds timeout + int elapsedMs = 0; esp_netif_t *espNetif; - while (true) + while (elapsedMs < timeoutMs) { switch (num) { @@ -46,7 +47,15 @@ int NF_ESP32_Wait_NetNumber(int num) break; } - vTaskDelay(20 / portTICK_PERIOD_MS); + const int delayMs = 20; + vTaskDelay(delayMs / portTICK_PERIOD_MS); + elapsedMs += delayMs; + } + + if (espNetif == NULL) + { + // Return error or default value + return SOCK_SOCKET_ERROR; } return espNetif->lwip_netif->num; @@ -63,6 +72,7 @@ HAL_Configuration_NetworkInterface *NF_ESP32_GetNetworkConfigBlock(int index) { return networkConfig; } + platform_free(networkConfig); } return NULL; From 46867d564a1071bb63edc0740dbfd0a776bf41de Mon Sep 17 00:00:00 2001 From: Adrian Soundy Date: Mon, 17 Mar 2025 19:49:20 +1100 Subject: [PATCH 4/4] Fix comment typo Co-authored-by: Laurent Ellerbach --- targets/ESP32/_Network/NF_ESP32_Ethernet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/ESP32/_Network/NF_ESP32_Ethernet.cpp b/targets/ESP32/_Network/NF_ESP32_Ethernet.cpp index 6b1489a931..4f0cf464bb 100644 --- a/targets/ESP32/_Network/NF_ESP32_Ethernet.cpp +++ b/targets/ESP32/_Network/NF_ESP32_Ethernet.cpp @@ -219,7 +219,7 @@ esp_err_t NF_ESP32_InitialiseEthernet(uint8_t *pMacAdr) // attach Ethernet driver to TCP/IP stack ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handle))); - // COnfigure static address if required in config + // Configure static address if required in config ESP_ERROR_CHECK(NF_ESP32_ConfigureNetworkByIndex(IDF_ETH_DEF, eth_netif)); // start Ethernet driver state machine