@@ -45,7 +45,6 @@ extern void add_esp_interface_netif(esp_interface_t interface, esp_netif_t* esp_
4545
4646ETHClass::ETHClass (uint8_t eth_index)
4747 :_eth_started(false )
48- ,_use_static_ip(false )
4948 ,_eth_handle(NULL )
5049 ,_esp_netif(NULL )
5150 ,_eth_index(eth_index)
@@ -616,7 +615,6 @@ bool ETHClass::begin(eth_phy_type_t type, uint8_t phy_addr, int cs, int irq, int
616615void ETHClass::end (void )
617616{
618617 _eth_started = false ;
619- _use_static_ip = false ;
620618
621619 if (_esp_netif != NULL ){
622620 esp_netif_destroy (_esp_netif);
@@ -704,53 +702,52 @@ bool ETHClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, I
704702 }
705703 esp_err_t err = ESP_OK;
706704 esp_netif_ip_info_t info;
705+ esp_netif_dns_info_t d1;
706+ esp_netif_dns_info_t d2;
707+ d1.ip .type = IPADDR_TYPE_V4;
708+ d2.ip .type = IPADDR_TYPE_V4;
707709
708710 if (static_cast <uint32_t >(local_ip) != 0 ){
709711 info.ip .addr = static_cast <uint32_t >(local_ip);
710712 info.gw .addr = static_cast <uint32_t >(gateway);
711713 info.netmask .addr = static_cast <uint32_t >(subnet);
714+ d1.ip .u_addr .ip4 .addr = static_cast <uint32_t >(dns1);
715+ d2.ip .u_addr .ip4 .addr = static_cast <uint32_t >(dns2);
712716 } else {
713717 info.ip .addr = 0 ;
714718 info.gw .addr = 0 ;
715719 info.netmask .addr = 0 ;
720+ d1.ip .u_addr .ip4 .addr = 0 ;
721+ d2.ip .u_addr .ip4 .addr = 0 ;
716722 }
717723
724+ // Stop DHCPC
718725 err = esp_netif_dhcpc_stop (_esp_netif);
719726 if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED){
720727 log_e (" DHCP could not be stopped! Error: %d" , err);
721728 return false ;
722729 }
723730
731+ // Set IPv4, Netmask, Gateway
724732 err = esp_netif_set_ip_info (_esp_netif, &info);
725733 if (err != ERR_OK){
726734 log_e (" ETH IP could not be configured! Error: %d" , err);
727735 return false ;
728736 }
729737
730- if (info.ip .addr ){
731- _use_static_ip = true ;
732- } else {
738+ // Set DNS1-Server
739+ esp_netif_set_dns_info (_esp_netif, ESP_NETIF_DNS_MAIN, &d1);
740+
741+ // Set DNS2-Server
742+ esp_netif_set_dns_info (_esp_netif, ESP_NETIF_DNS_BACKUP, &d2);
743+
744+ // Start DHCPC if static IP was set
745+ if (info.ip .addr == 0 ){
733746 err = esp_netif_dhcpc_start (_esp_netif);
734747 if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED){
735748 log_w (" DHCP could not be started! Error: %d" , err);
736749 return false ;
737750 }
738- _use_static_ip = false ;
739- }
740-
741- esp_netif_dns_info_t d;
742- d.ip .type = IPADDR_TYPE_V4;
743-
744- if (static_cast <uint32_t >(dns1) != 0 ) {
745- // Set DNS1-Server
746- d.ip .u_addr .ip4 .addr = static_cast <uint32_t >(dns1);
747- esp_netif_set_dns_info (_esp_netif, ESP_NETIF_DNS_MAIN, &d);
748- }
749-
750- if (static_cast <uint32_t >(dns2) != 0 ) {
751- // Set DNS2-Server
752- d.ip .u_addr .ip4 .addr = static_cast <uint32_t >(dns2);
753- esp_netif_set_dns_info (_esp_netif, ESP_NETIF_DNS_BACKUP, &d);
754751 }
755752
756753 return true ;
@@ -880,21 +877,24 @@ IPv6Address ETHClass::localIPv6()
880877 return IPv6Address (addr.addr );
881878}
882879
883- const char * ETHClass::ifkey (void ){
880+ const char * ETHClass::ifkey (void )
881+ {
884882 if (_esp_netif == NULL ){
885883 return " " ;
886884 }
887885 return esp_netif_get_ifkey (_esp_netif);
888886}
889887
890- const char * ETHClass::desc (void ){
888+ const char * ETHClass::desc (void )
889+ {
891890 if (_esp_netif == NULL ){
892891 return " " ;
893892 }
894893 return esp_netif_get_desc (_esp_netif);
895894}
896895
897- String ETHClass::impl_name (void ){
896+ String ETHClass::impl_name (void )
897+ {
898898 if (_esp_netif == NULL ){
899899 return String (" " );
900900 }
@@ -907,9 +907,18 @@ String ETHClass::impl_name(void){
907907 return String (netif_name);
908908}
909909
910+ bool ETHClass::connected ()
911+ {
912+ return WiFiGenericClass::getStatusBits () & ETH_CONNECTED_BIT;
913+ }
914+
915+ bool ETHClass::hasIP ()
916+ {
917+ return WiFiGenericClass::getStatusBits () & ETH_HAS_IP_BIT;
918+ }
919+
910920bool ETHClass::linkUp ()
911921{
912- // return WiFiGenericClass::getStatusBits() & ETH_CONNECTED_BIT;
913922 if (_esp_netif == NULL ){
914923 return false ;
915924 }
0 commit comments