Access point fixes (#137)

* add lingering mode to access point fix bug which prevents active access point from being re-configured
This commit is contained in:
rjwats
2020-05-30 09:47:24 +01:00
committed by GitHub
parent ddbb84454f
commit 555b3efd8d
9 changed files with 81 additions and 30 deletions

View File

@ -30,6 +30,12 @@
#define AP_SETTINGS_FILE "/config/apSettings.json"
#define AP_SETTINGS_SERVICE_PATH "/rest/apSettings"
enum APNetworkStatus {
ACTIVE = 0,
INACTIVE,
LINGERING
};
class APSettings {
public:
uint8_t provisionMode;
@ -43,17 +49,23 @@ class APSettings {
}
static StateUpdateResult update(JsonObject& root, APSettings& settings) {
settings.provisionMode = root["provision_mode"] | FACTORY_AP_PROVISION_MODE;
APSettings newSettings = {};
newSettings.provisionMode = root["provision_mode"] | FACTORY_AP_PROVISION_MODE;
switch (settings.provisionMode) {
case AP_MODE_ALWAYS:
case AP_MODE_DISCONNECTED:
case AP_MODE_NEVER:
break;
default:
settings.provisionMode = AP_MODE_ALWAYS;
newSettings.provisionMode = AP_MODE_ALWAYS;
}
settings.ssid = root["ssid"] | FACTORY_AP_SSID;
settings.password = root["password"] | FACTORY_AP_PASSWORD;
newSettings.ssid = root["ssid"] | FACTORY_AP_SSID;
newSettings.password = root["password"] | FACTORY_AP_PASSWORD;
if (newSettings.provisionMode == settings.provisionMode && newSettings.ssid.equals(settings.ssid) &&
newSettings.password.equals(settings.password)) {
return StateUpdateResult::UNCHANGED;
}
settings = newSettings;
return StateUpdateResult::CHANGED;
}
};
@ -64,6 +76,7 @@ class APSettingsService : public StatefulService<APSettings> {
void begin();
void loop();
APNetworkStatus getAPNetworkStatus();
private:
HttpEndpoint<APSettings> _httpEndpoint;
@ -73,7 +86,8 @@ class APSettingsService : public StatefulService<APSettings> {
DNSServer* _dnsServer;
// for the mangement delay loop
unsigned long _lastManaged;
volatile unsigned long _lastManaged;
volatile boolean _reconfigureAp;
void reconfigureAP();
void manageAP();