From 13b8ff0e889d9b7cede0c6719cbcbf62f5889900 Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Tue, 14 Jun 2022 23:20:56 +0300 Subject: [PATCH] Make sure to call SDK functions to start and stop DHCP server As noticed in https://github.com/esp8266/Arduino/pull/8582#issuecomment-1153331408 Can't really use `server.begin()` and `server.end()` directly, only default static IP is applied to the interface since DHCP server is deemed 'running' (see `wifi_softap_dhcps_status()` return value) --- libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp | 25 ++++++++++----------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp index 2b7575d2f7..6d5880ad38 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp @@ -167,8 +167,7 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* psk, int channel, DEBUG_WIFI("[AP] softap config unchanged\n"); } - auto& server = softAPDhcpServer(); - server.end(); + wifi_softap_dhcps_stop(); // check IP config struct ip_info ip; @@ -179,17 +178,13 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* psk, int channel, IPAddress(192, 168, 4, 1), IPAddress(192, 168, 4, 1), IPAddress(255, 255, 255, 0)); - if(!ret) { - DEBUG_WIFI("[AP] softAPConfig failed!\n"); - ret = false; - } } } else { DEBUG_WIFI("[AP] wifi_get_ip_info failed!\n"); ret = false; } - server.begin(); + wifi_softap_dhcps_start(); return ret; } @@ -227,9 +222,10 @@ bool ESP8266WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPA info.gw.addr = gateway.v4(); info.netmask.addr = subnet.v4(); - auto& server = softAPDhcpServer(); - server.end(); - + // use SDK function for dhcps, not just server.begin() + // setting info with static IPs will fail otherwise + // (TODO: dhcps_flag seems to store 'SDK' DHCPs status) + wifi_softap_dhcps_stop(); if(!wifi_set_ip_info(SOFTAP_IF, &info)) { DEBUG_WIFI("[APConfig] wifi_set_ip_info failed!\n"); ret = false; @@ -246,14 +242,17 @@ bool ESP8266WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPA dhcp_lease.end_ip.addr = ip.v4(); DEBUG_WIFI("[APConfig] DHCP IP end: %s\n", ip.toString().c_str()); + auto& server = softAPDhcpServer(); if(!server.set_dhcps_lease(&dhcp_lease)) { - DEBUG_WIFI("[APConfig] wifi_set_ip_info failed!\n"); + DEBUG_WIFI("[APConfig] server set_dhcps_lease failed!\n"); ret = false; } - server.setRouter(true); // send ROUTER option with netif's gateway IP - server.begin(); + // send ROUTER option with netif's gateway IP + server.setRouter(true); + + wifi_softap_dhcps_start(); // check config if(wifi_get_ip_info(SOFTAP_IF, &info)) {