mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
This commit adds W5500 W5100 and ENC28j60 drivers from @njh with credits They are available in libraries/ An example is added in W5500 examples directory plus: * Extract dhcp server from lwip2 and add it to the core as a class. It must always be present, it is linked and can be called by fw on boot. So it cannot be stored in a library. * ethernet: static or dhcp works * PPPServer: example * bring WiFi.config() to the lwIP generic interface (argument reorder common function) * move hostname() from WiFI-STA to generic interface * remove non readable characters from dhcp-server comments * dhcp-server: magic_cookie is part of bootp rfc * fixes from https://github.com/d-a-v/W5500lwIP/issues/17 * enable lwip_hook_dhcp_parse_option() * +ethernet tcp client example in w5500 library examples
45 lines
978 B
C++
45 lines
978 B
C++
|
|
#include <LwipIntf.h>
|
|
#include <Schedule.h>
|
|
#include <debug.h>
|
|
|
|
#define NETIF_STATUS_CB_SIZE 3
|
|
|
|
static int netifStatusChangeListLength = 0;
|
|
LwipIntf::CBType netifStatusChangeList [NETIF_STATUS_CB_SIZE];
|
|
|
|
extern "C" void netif_status_changed(struct netif* netif)
|
|
{
|
|
// override the default empty weak function
|
|
for (int i = 0; i < netifStatusChangeListLength; i++)
|
|
{
|
|
netifStatusChangeList[i](netif);
|
|
}
|
|
}
|
|
|
|
bool LwipIntf::stateChangeSysCB(LwipIntf::CBType&& cb)
|
|
{
|
|
if (netifStatusChangeListLength >= NETIF_STATUS_CB_SIZE)
|
|
{
|
|
#if defined(DEBUG_ESP_CORE)
|
|
DEBUGV("NETIF_STATUS_CB_SIZE is too low\n");
|
|
#endif
|
|
return false;
|
|
}
|
|
|
|
netifStatusChangeList[netifStatusChangeListLength++] = cb;
|
|
return true;
|
|
}
|
|
|
|
bool LwipIntf::stateUpCB(LwipIntf::CBType&& cb)
|
|
{
|
|
return stateChangeSysCB([cb](netif * nif)
|
|
{
|
|
if (netif_is_up(nif))
|
|
schedule_function([cb, nif]()
|
|
{
|
|
cb(nif);
|
|
});
|
|
});
|
|
}
|