Skip to content

Commit 1e0e783

Browse files
author
Harald Frostel
committed
2 parents c61f226 + 1750022 commit 1e0e783

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

doc/esp8266wifi/station-class.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ The following IP configuration may be provided:
135135
Serial.println();
136136
137137
Serial.printf("Connecting to %s\n", ssid);
138-
WiFi.begin(ssid, password);
139138
WiFi.config(staticIP, gateway, subnet);
139+
WiFi.begin(ssid, password);
140140
while (WiFi.status() != WL_CONNECTED)
141141
{
142142
delay(500);

libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,27 @@ wl_status_t ESP8266WiFiSTAClass::begin() {
247247
* @param dns1 Static DNS server 1
248248
* @param dns2 Static DNS server 2
249249
*/
250+
251+
#if LWIP_VERSION_MAJOR != 1
252+
/*
253+
About the following call in the end of ESP8266WiFiSTAClass::config():
254+
netif_set_addr(eagle_lwip_getif(STATION_IF), &info.ip, &info.netmask, &info.gw);
255+
256+
With lwip2, it is needed to trigger IP address change.
257+
Recall: when lwip2 is enabled, lwip1 api is still used by espressif firmware
258+
https://github.com/d-a-v/esp82xx-nonos-linklayer/tree/25d5e8186f710a230221021cba97727dbfdfd953#how-it-works
259+
260+
We need first to disable the lwIP API redirection for netif_set_addr() so lwip1's call will be linked:
261+
https://github.com/d-a-v/esp82xx-nonos-linklayer/blob/25d5e8186f710a230221021cba97727dbfdfd953/glue-lwip/arch/cc.h#L122
262+
263+
We also need to declare its prototype using ip4_addr_t instead of ip_addr_t because lwIP-1.x never has IPv6.
264+
No need to worry about this #undef, this call is only needed in lwip2, and never used in arduino core code.
265+
*/
266+
#undef netif_set_addr // need to call lwIP-v1.4 netif_set_addr()
267+
extern "C" struct netif* eagle_lwip_getif (int netif_index);
268+
extern "C" void netif_set_addr (struct netif* netif, ip4_addr_t* ip, ip4_addr_t* netmask, ip4_addr_t* gw);
269+
#endif
270+
250271
bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress arg1, IPAddress arg2, IPAddress arg3, IPAddress dns2) {
251272

252273
if(!WiFi.enableSTA(true)) {
@@ -310,6 +331,12 @@ bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress arg1, IPAddress a
310331
dns_setserver(1, dns2);
311332
}
312333

334+
#if LWIP_VERSION_MAJOR != 1
335+
// trigger address change by calling lwIP-v1.4 api
336+
// (see explanation above)
337+
netif_set_addr(eagle_lwip_getif(STATION_IF), &info.ip, &info.netmask, &info.gw);
338+
#endif
339+
313340
return true;
314341
}
315342

0 commit comments

Comments
 (0)