Skip to content

Commit

Permalink
LwipIntfDev - method end() to enable repeated begin
Browse files Browse the repository at this point in the history
  • Loading branch information
JAndrassy committed Nov 12, 2023
1 parent 31c1592 commit 3594be9
Showing 1 changed file with 30 additions and 7 deletions.
37 changes: 30 additions & 7 deletions cores/esp8266/LwipIntfDev.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class LwipIntfDev: public LwipIntf, public RawDev

// 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
{
Expand Down Expand Up @@ -138,6 +139,7 @@ class LwipIntfDev: public LwipIntf, public RawDev
int8_t _intrPin;
uint8_t _macAddress[6];
bool _started;
bool _scheduled;
bool _default;
};

Expand Down Expand Up @@ -229,6 +231,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;
}

Expand All @@ -242,10 +245,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;
}
}
Expand All @@ -272,22 +276,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()
{
Expand Down

0 comments on commit 3594be9

Please sign in to comment.