From 70d0d4648766cea047613062ed50a9ecfc9de31f Mon Sep 17 00:00:00 2001 From: copercini Date: Tue, 19 Dec 2017 11:07:22 -0200 Subject: [PATCH] Enable static IP via ethernet (#924) --- libraries/WiFi/src/ETH.cpp | 44 ++++++++++++++++++++++++++------------ libraries/WiFi/src/ETH.h | 3 +-- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/libraries/WiFi/src/ETH.cpp b/libraries/WiFi/src/ETH.cpp index cf53978e8f3..b4d404d3d1c 100644 --- a/libraries/WiFi/src/ETH.cpp +++ b/libraries/WiFi/src/ETH.cpp @@ -1,6 +1,6 @@ /* ETH.h - espre ETH PHY support. - Based on WiFi.h from Ardiono WiFi shield library. + Based on WiFi.h from Arduino WiFi shield library. Copyright (c) 2011-2014 Arduino. All right reserved. This library is free software; you can redistribute it and/or @@ -110,26 +110,43 @@ bool ETHClass::begin(uint8_t phy_addr, int power, int mdc, int mdio, eth_phy_typ return false; } -/* bool ETHClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2) { - if(!initialized){ + esp_err_t err = ESP_OK; + tcpip_adapter_ip_info_t info; + + if(local_ip != (uint32_t)0x00000000){ + info.ip.addr = static_cast(local_ip); + info.gw.addr = static_cast(gateway); + info.netmask.addr = static_cast(subnet); + } else { + info.ip.addr = 0; + info.gw.addr = 0; + info.netmask.addr = 0; + } + + err = tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_ETH); + if(err != ESP_OK && err != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED){ + log_e("DHCP could not be stopped! Error: %d", err); return false; } - tcpip_adapter_ip_info_t info; - info.ip.addr = static_cast(local_ip); - info.gw.addr = static_cast(gateway); - info.netmask.addr = static_cast(subnet); - - if(!staticIP){ - tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_ETH); - } - if(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_ETH, &info) == ESP_OK) { + err = tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_ETH, &info); + if(err != ERR_OK){ + log_e("STA IP could not be configured! Error: %d", err); + return false; +} + if(info.ip.addr){ staticIP = true; } else { - return false; + err = tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_ETH); + if(err != ESP_OK && err != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STARTED){ + log_w("DHCP could not be started! Error: %d", err); + return false; + } + staticIP = false; } + ip_addr_t d; d.type = IPADDR_TYPE_V4; @@ -147,7 +164,6 @@ bool ETHClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, I return true; } -*/ IPAddress ETHClass::localIP() { diff --git a/libraries/WiFi/src/ETH.h b/libraries/WiFi/src/ETH.h index 0bb70ffda5a..8dcd85b9cbd 100644 --- a/libraries/WiFi/src/ETH.h +++ b/libraries/WiFi/src/ETH.h @@ -62,8 +62,7 @@ class ETHClass { bool begin(uint8_t phy_addr=ETH_PHY_ADDR, int power=ETH_PHY_POWER, int mdc=ETH_PHY_MDC, int mdio=ETH_PHY_MDIO, eth_phy_type_t type=ETH_PHY_TYPE, eth_clock_mode_t clk_mode=ETH_CLK_MODE); - // NOT WORKING YET! - //bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000); + bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000); const char * getHostname(); bool setHostname(const char * hostname);