33
44#include < HttpEndpoint.h>
55#include < FSPersistence.h>
6+ #include < JsonUtils.h>
67
78#include < DNSServer.h>
89#include < IPAddress.h>
1516
1617#define DNS_PORT 53
1718
19+ #ifndef FACTORY_AP_PROVISION_MODE
20+ #define FACTORY_AP_PROVISION_MODE AP_MODE_DISCONNECTED
21+ #endif
22+
1823#ifndef FACTORY_AP_SSID
1924#define FACTORY_AP_SSID " ESP8266-React"
2025#endif
2328#define FACTORY_AP_PASSWORD " esp-react"
2429#endif
2530
26- #ifndef FACTORY_AP_PROVISION_MODE
27- #define FACTORY_AP_PROVISION_MODE AP_MODE_DISCONNECTED
31+ #ifndef FACTORY_AP_LOCAL_IP
32+ #define FACTORY_AP_LOCAL_IP " 192.168.4.1"
33+ #endif
34+
35+ #ifndef FACTORY_AP_GATEWAY_IP
36+ #define FACTORY_AP_GATEWAY_IP " 192.168.4.1"
37+ #endif
38+
39+ #ifndef FACTORY_AP_SUBNET_MASK
40+ #define FACTORY_AP_SUBNET_MASK " 255.255.255.0"
2841#endif
2942
3043#define AP_SETTINGS_FILE " /config/apSettings.json"
3144#define AP_SETTINGS_SERVICE_PATH " /rest/apSettings"
3245
33- enum APNetworkStatus {
34- ACTIVE = 0 ,
35- INACTIVE,
36- LINGERING
37- };
46+ enum APNetworkStatus { ACTIVE = 0 , INACTIVE, LINGERING };
3847
3948class APSettings {
4049 public:
4150 uint8_t provisionMode;
4251 String ssid;
4352 String password;
53+ IPAddress localIP;
54+ IPAddress gatewayIP;
55+ IPAddress subnetMask;
56+
57+ bool operator ==(const APSettings& settings) const {
58+ return provisionMode == settings.provisionMode && ssid == settings.ssid && password == settings.password &&
59+ localIP == settings.localIP && gatewayIP == settings.gatewayIP && subnetMask == settings.subnetMask ;
60+ }
4461
4562 static void read (APSettings& settings, JsonObject& root) {
4663 root[" provision_mode" ] = settings.provisionMode ;
4764 root[" ssid" ] = settings.ssid ;
4865 root[" password" ] = settings.password ;
66+ root[" local_ip" ] = settings.localIP .toString ();
67+ root[" gateway_ip" ] = settings.gatewayIP .toString ();
68+ root[" subnet_mask" ] = settings.subnetMask .toString ();
4969 }
5070
5171 static StateUpdateResult update (JsonObject& root, APSettings& settings) {
@@ -61,8 +81,12 @@ class APSettings {
6181 }
6282 newSettings.ssid = root[" ssid" ] | FACTORY_AP_SSID;
6383 newSettings.password = root[" password" ] | FACTORY_AP_PASSWORD;
64- if (newSettings.provisionMode == settings.provisionMode && newSettings.ssid .equals (settings.ssid ) &&
65- newSettings.password .equals (settings.password )) {
84+
85+ JsonUtils::readIP (root, " local_ip" , newSettings.localIP , FACTORY_AP_LOCAL_IP);
86+ JsonUtils::readIP (root, " gateway_ip" , newSettings.gatewayIP , FACTORY_AP_GATEWAY_IP);
87+ JsonUtils::readIP (root, " subnet_mask" , newSettings.subnetMask , FACTORY_AP_SUBNET_MASK);
88+
89+ if (newSettings == settings) {
6690 return StateUpdateResult::UNCHANGED;
6791 }
6892 settings = newSettings;
0 commit comments