mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
Wifi AP start after 10 sec, stay if not connected
This commit is contained in:
@@ -7,13 +7,43 @@ APSettingsService::APSettingsService(AsyncWebServer * server, FS * fs, SecurityM
|
|||||||
, _fsPersistence(APSettings::read, APSettings::update, this, fs, AP_SETTINGS_FILE)
|
, _fsPersistence(APSettings::read, APSettings::update, this, fs, AP_SETTINGS_FILE)
|
||||||
, _dnsServer(nullptr)
|
, _dnsServer(nullptr)
|
||||||
, _lastManaged(0)
|
, _lastManaged(0)
|
||||||
, _reconfigureAp(false) {
|
, _reconfigureAp(false)
|
||||||
|
, _connected(0) {
|
||||||
addUpdateHandler([&](const String & originId) { reconfigureAP(); }, false);
|
addUpdateHandler([&](const String & originId) { reconfigureAP(); }, false);
|
||||||
|
WiFi.onEvent(std::bind(&APSettingsService::WiFiEvent, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void APSettingsService::begin() {
|
void APSettingsService::begin() {
|
||||||
_fsPersistence.readFromFS();
|
_fsPersistence.readFromFS();
|
||||||
reconfigureAP();
|
// disabled for delayed start, first try station mode
|
||||||
|
// reconfigureAP();
|
||||||
|
}
|
||||||
|
|
||||||
|
// wait 10 sec on STA disconnect before starting AP
|
||||||
|
void APSettingsService::WiFiEvent(WiFiEvent_t event) {
|
||||||
|
uint8_t was_connected = _connected;
|
||||||
|
switch (event) {
|
||||||
|
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
||||||
|
_connected &= ~1;
|
||||||
|
break;
|
||||||
|
case ARDUINO_EVENT_ETH_DISCONNECTED:
|
||||||
|
_connected &= ~2;
|
||||||
|
break;
|
||||||
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
||||||
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
||||||
|
_connected |= 1;
|
||||||
|
break;
|
||||||
|
case ARDUINO_EVENT_ETH_GOT_IP:
|
||||||
|
case ARDUINO_EVENT_ETH_GOT_IP6:
|
||||||
|
_connected |= 2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// wait 10 sec before starting AP
|
||||||
|
if (was_connected && !_connected) {
|
||||||
|
_lastManaged = uuid::get_uptime();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void APSettingsService::reconfigureAP() {
|
void APSettingsService::reconfigureAP() {
|
||||||
@@ -34,12 +64,11 @@ void APSettingsService::loop() {
|
|||||||
|
|
||||||
void APSettingsService::manageAP() {
|
void APSettingsService::manageAP() {
|
||||||
WiFiMode_t currentWiFiMode = WiFi.getMode();
|
WiFiMode_t currentWiFiMode = WiFi.getMode();
|
||||||
bool network_connected = (emsesp::EMSESP::system_.ethernet_connected() || (WiFi.status() == WL_CONNECTED));
|
if (_state.provisionMode == AP_MODE_ALWAYS || (_state.provisionMode == AP_MODE_DISCONNECTED && !_connected)) {
|
||||||
if (_state.provisionMode == AP_MODE_ALWAYS || (_state.provisionMode == AP_MODE_DISCONNECTED && !network_connected)) {
|
|
||||||
if (_reconfigureAp || currentWiFiMode == WIFI_OFF || currentWiFiMode == WIFI_STA) {
|
if (_reconfigureAp || currentWiFiMode == WIFI_OFF || currentWiFiMode == WIFI_STA) {
|
||||||
startAP();
|
startAP();
|
||||||
}
|
}
|
||||||
} else if ((currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA) && (_reconfigureAp || !WiFi.softAPgetStationNum())) {
|
} else if ((currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA) && _connected && (_reconfigureAp || !WiFi.softAPgetStationNum())) {
|
||||||
stopAP();
|
stopAP();
|
||||||
}
|
}
|
||||||
_reconfigureAp = false;
|
_reconfigureAp = false;
|
||||||
|
|||||||
@@ -134,12 +134,14 @@ class APSettingsService : public StatefulService<APSettings> {
|
|||||||
// for the management delay loop
|
// for the management delay loop
|
||||||
volatile unsigned long _lastManaged;
|
volatile unsigned long _lastManaged;
|
||||||
volatile boolean _reconfigureAp;
|
volatile boolean _reconfigureAp;
|
||||||
|
uint8_t _connected;
|
||||||
|
|
||||||
void reconfigureAP();
|
void reconfigureAP();
|
||||||
void manageAP();
|
void manageAP();
|
||||||
void startAP();
|
void startAP();
|
||||||
void stopAP();
|
void stopAP();
|
||||||
void handleDNS();
|
void handleDNS();
|
||||||
|
void WiFiEvent(WiFiEvent_t event);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user