1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-18 12:24:04 +03:00

LwipIntfDev - method end() to enable repeated begin (#9023)

This commit is contained in:
Juraj Andrássy 2023-11-12 23:41:08 +01:00 committed by GitHub
parent c84fda145c
commit 74c04c88c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -68,6 +68,7 @@ public:
// default mac-address is inferred from esp8266's STA interface
boolean begin(const uint8_t* macAddress = nullptr, const uint16_t mtu = DEFAULT_MTU);
void end();
const netif* getNetIf() const
{
@ -170,6 +171,7 @@ protected:
int8_t _intrPin;
uint8_t _macAddress[6];
bool _started;
bool _scheduled;
bool _default;
};
@ -261,6 +263,7 @@ boolean LwipIntfDev<RawDev>::begin(const uint8_t* macAddress, const uint16_t mtu
if (!netif_add(&_netif, ip_2_ip4(&ip_addr), ip_2_ip4(&netmask), ip_2_ip4(&gw), this,
netif_init_s, ethernet_input))
{
RawDev::end();
return false;
}
@ -274,10 +277,11 @@ boolean LwipIntfDev<RawDev>::begin(const uint8_t* macAddress, const uint16_t mtu
break;
case ERR_IF:
RawDev::end();
return false;
default:
netif_remove(&_netif);
end();
return false;
}
}
@ -304,22 +308,41 @@ boolean LwipIntfDev<RawDev>::begin(const uint8_t* macAddress, const uint16_t mtu
}
}
if (_intrPin < 0
&& !schedule_recurrent_function_us(
if (_intrPin < 0 && !_scheduled)
{
_scheduled = schedule_recurrent_function_us(
[&]()
{
if (!_started)
{
_scheduled = false;
return false;
}
this->handlePackets();
return true;
},
100))
{
netif_remove(&_netif);
return false;
100);
if (!_scheduled)
{
end();
return false;
}
}
return true;
}
template<class RawDev>
void LwipIntfDev<RawDev>::end()
{
netif_remove(&_netif);
ip_addr_copy(_netif.ip_addr, ip_addr_any); // to allow DHCP at next begin
ip_addr_copy(_netif.netmask, ip_addr_any);
ip_addr_copy(_netif.gw, ip_addr_any);
_started = false;
RawDev::end();
}
template<class RawDev>
wl_status_t LwipIntfDev<RawDev>::status()
{