@@ -194,8 +194,10 @@ bool ESP8266WiFiAPClass::softAP(const String& ssid, const String& passphrase, in
194
194
* @param local_ip access point IP
195
195
* @param gateway gateway IP (0.0.0.0 to disable)
196
196
* @param subnet subnet mask
197
+ * @param dhcp_start first IP assigned by DHCP
198
+ * @param dhcp_end last IP assigned by DHCP
197
199
*/
198
- bool ESP8266WiFiAPClass::softAPConfig (IPAddress local_ip, IPAddress gateway, IPAddress subnet) {
200
+ bool ESP8266WiFiAPClass::softAPConfig (IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dhcp_start, IPAddress dhcp_end ) {
199
201
DEBUG_WIFI (" [APConfig] local_ip: %s gateway: %s subnet: %s\n " , local_ip.toString ().c_str (), gateway.toString ().c_str (), subnet.toString ().c_str ());
200
202
if (!WiFi.enableAP (true )) {
201
203
// enable AP failed
@@ -214,10 +216,24 @@ bool ESP8266WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPA
214
216
return false ;
215
217
}
216
218
struct ip_info info;
219
+
217
220
info.ip .addr = local_ip.v4 ();
218
221
info.gw .addr = gateway.v4 ();
219
222
info.netmask .addr = subnet.v4 ();
220
-
223
+
224
+ uint32_t softap_ip = htonl (info.ip .addr );
225
+ uint32_t start_ip = htonl (dhcp_start.v4 ());
226
+ uint32_t end_ip = htonl (dhcp_end.v4 ());
227
+ softap_ip >>= 8 ;
228
+ if (( start_ip >> 8 != softap_ip ) || ( end_ip >> 8 != softap_ip )) {
229
+ DEBUG_WIFI (" [APConfig] dhcp_start or dhcp_end isn't in range of local_ip Address!\n " );
230
+ DEBUG_WIFI (" [APConfig] set dfault vaule\n " );
231
+ dhcp_start = local_ip;
232
+ dhcp_start[3 ] += 99 ;
233
+ dhcp_end = dhcp_start;
234
+ dhcp_end[3 ] += 100 ;
235
+ }
236
+
221
237
if (!wifi_softap_dhcps_stop ()) {
222
238
DEBUG_WIFI (" [APConfig] wifi_softap_dhcps_stop failed!\n " );
223
239
}
@@ -228,14 +244,12 @@ bool ESP8266WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPA
228
244
}
229
245
230
246
struct dhcps_lease dhcp_lease;
231
- IPAddress ip = local_ip;
232
- ip[3 ] += 99 ;
233
- dhcp_lease.start_ip .addr = ip.v4 ();
234
- DEBUG_WIFI (" [APConfig] DHCP IP start: %s\n " , ip.toString ().c_str ());
247
+ dhcp_lease.enable = true ;
248
+ dhcp_lease.start_ip .addr = dhcp_start.v4 ();
249
+ DEBUG_WIFI (" [APConfig] DHCP IP start: %s\n " , dhcp_start.toString ().c_str ());
235
250
236
- ip[3 ] += 100 ;
237
- dhcp_lease.end_ip .addr = ip.v4 ();
238
- DEBUG_WIFI (" [APConfig] DHCP IP end: %s\n " , ip.toString ().c_str ());
251
+ dhcp_lease.end_ip .addr = dhcp_end.v4 ();
252
+ DEBUG_WIFI (" [APConfig] DHCP IP end: %s\n " , dhcp_end.toString ().c_str ());
239
253
240
254
if (!wifi_softap_set_dhcps_lease (&dhcp_lease)) {
241
255
DEBUG_WIFI (" [APConfig] wifi_set_ip_info failed!\n " );
@@ -265,7 +279,7 @@ bool ESP8266WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPA
265
279
DEBUG_WIFI (" [APConfig] IP config Invalid?!\n " );
266
280
ret = false ;
267
281
} else if (local_ip.v4 () != info.ip .addr ) {
268
- ip = info.ip .addr ;
282
+ IPAddress ip = info.ip .addr ;
269
283
DEBUG_WIFI (" [APConfig] IP config not set correct?! new IP: %s\n " , ip.toString ().c_str ());
270
284
ret = false ;
271
285
}
@@ -277,7 +291,24 @@ bool ESP8266WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPA
277
291
return ret;
278
292
}
279
293
294
+ /* *
295
+ * Configure access point
296
+ * @param local_ip access point IP
297
+ * @param gateway gateway IP
298
+ * @param subnet subnet mask
299
+ */
300
+ bool ESP8266WiFiAPClass::softAPConfig (IPAddress local_ip, IPAddress gateway, IPAddress subnet) {
301
+ IPAddress dhcp_start;
302
+ IPAddress dhcp_end;
303
+
304
+ dhcp_start = local_ip;
305
+ dhcp_start[3 ] += 99 ;
306
+ dhcp_end = dhcp_start;
307
+ dhcp_end[3 ] += 100 ;
280
308
309
+ bool ret = softAPConfig (local_ip, gateway, subnet, dhcp_start, dhcp_end);
310
+ return ret;
311
+ }
281
312
282
313
/* *
283
314
* Disconnect from the network (close AP)
0 commit comments