use RTC_NOINIT_ATTR to boot into wifimanager config portal

This commit is contained in:
technyon
2022-07-08 22:53:23 +02:00
parent a99668b8ae
commit e9fa988918
8 changed files with 12 additions and 67 deletions

View File

@@ -43,7 +43,6 @@ file(GLOB SRCFILES
WebCfgServer.cpp WebCfgServer.cpp
PresenceDetection.cpp PresenceDetection.cpp
PreferencesKeys.h PreferencesKeys.h
SpiffsCookie.cpp
Gpio.cpp Gpio.cpp
Version.h Version.h
# include/RTOS.h # include/RTOS.h

View File

@@ -7,7 +7,6 @@
#include <Preferences.h> #include <Preferences.h>
#include <vector> #include <vector>
#include "NukiConstants.h" #include "NukiConstants.h"
#include "SpiffsCookie.h"
#include "NukiLockConstants.h" #include "NukiLockConstants.h"
#include "Network.h" #include "Network.h"

View File

@@ -7,7 +7,6 @@
#include <Preferences.h> #include <Preferences.h>
#include <vector> #include <vector>
#include "NukiConstants.h" #include "NukiConstants.h"
#include "SpiffsCookie.h"
#include "NukiOpenerConstants.h" #include "NukiOpenerConstants.h"
#include "NetworkLock.h" #include "NetworkLock.h"

View File

@@ -1,43 +0,0 @@
#include "SpiffsCookie.h"
#include "FS.h"
#include "SPIFFS.h"
SpiffsCookie::SpiffsCookie()
{
if(!SPIFFS.begin(true))
{
Serial.println(F("SPIFFS Mount Failed"));
}
}
void SpiffsCookie::set()
{
File file = SPIFFS.open("/cookie", FILE_WRITE);
if(!file)
{
Serial.println(F("- failed to open file for writing"));
return;
}
if(file.write('#'))
{
Serial.println(F("- file written"));
} else {
Serial.println(F("- write failed"));
}
file.close();
}
void SpiffsCookie::clear()
{
if(!SPIFFS.remove("/cookie"))
{
Serial.println(F("Failed to remove file"));
}
}
const bool SpiffsCookie::isSet()
{
return SPIFFS.exists("/cookie");
}

View File

@@ -1,13 +0,0 @@
#pragma once
class SpiffsCookie
{
public:
SpiffsCookie();
virtual ~SpiffsCookie() = default;
void set();
void clear();
const bool isSet();
};

View File

@@ -173,8 +173,8 @@ void setup()
restartTs = preferences->getInt(preference_restart_timer) * 60 * 1000; restartTs = preferences->getInt(preference_restart_timer) * 60 * 1000;
} }
// const NetworkDeviceType networkDevice = NetworkDeviceType::WiFi; const NetworkDeviceType networkDevice = NetworkDeviceType::WiFi;
const NetworkDeviceType networkDevice = digitalRead(NETWORK_SELECT) == HIGH ? NetworkDeviceType::WiFi : NetworkDeviceType::W5500; // const NetworkDeviceType networkDevice = digitalRead(NETWORK_SELECT) == HIGH ? NetworkDeviceType::WiFi : NetworkDeviceType::W5500;
network = new Network(networkDevice, preferences); network = new Network(networkDevice, preferences);
network->initialize(); network->initialize();

View File

@@ -2,9 +2,15 @@
#include "WifiDevice.h" #include "WifiDevice.h"
#include "../PreferencesKeys.h" #include "../PreferencesKeys.h"
RTC_NOINIT_ATTR char WiFiDevice_reconfdetect[17];
WifiDevice::WifiDevice(const String& hostname, Preferences* _preferences) WifiDevice::WifiDevice(const String& hostname, Preferences* _preferences)
: NetworkDevice(hostname) : NetworkDevice(hostname)
{ {
WiFiDevice_reconfdetect[16] = 0x00;
_startAp = strcmp(WiFiDevice_reconfdetect, "reconfigure_wifi") == 0;
memset(WiFiDevice_reconfdetect, 0, sizeof WiFiDevice_reconfdetect);
_restartOnDisconnect = _preferences->getBool(preference_restart_on_disconnect); _restartOnDisconnect = _preferences->getBool(preference_restart_on_disconnect);
size_t caLength = _preferences->getString(preference_mqtt_ca,_ca,TLS_CA_MAX_SIZE); size_t caLength = _preferences->getString(preference_mqtt_ca,_ca,TLS_CA_MAX_SIZE);
@@ -52,10 +58,9 @@ void WifiDevice::initialize()
bool res = false; bool res = false;
if(_cookie.isSet()) if(_startAp)
{ {
Serial.println(F("Opening WiFi configuration portal.")); Serial.println(F("Opening WiFi configuration portal."));
_cookie.clear();
res = _wm.startConfigPortal(); res = _wm.startConfigPortal();
} }
else else
@@ -86,8 +91,7 @@ void WifiDevice::initialize()
void WifiDevice::reconfigure() void WifiDevice::reconfigure()
{ {
_cookie.set(); strcpy(WiFiDevice_reconfdetect, "reconfigure_wifi");
delay(200);
ESP.restart(); ESP.restart();
} }

View File

@@ -4,7 +4,6 @@
#include <WiFiClientSecure.h> #include <WiFiClientSecure.h>
#include <Preferences.h> #include <Preferences.h>
#include "NetworkDevice.h" #include "NetworkDevice.h"
#include "../SpiffsCookie.h"
#include "WiFiManager.h" #include "WiFiManager.h"
class WifiDevice : public NetworkDevice class WifiDevice : public NetworkDevice
@@ -30,8 +29,9 @@ private:
WiFiClient* _wifiClient = nullptr; WiFiClient* _wifiClient = nullptr;
WiFiClientSecure* _wifiClientSecure = nullptr; WiFiClientSecure* _wifiClientSecure = nullptr;
PubSubClient* _mqttClient = nullptr; PubSubClient* _mqttClient = nullptr;
SpiffsCookie _cookie; // SpiffsCookie _cookie;
bool _restartOnDisconnect = false; bool _restartOnDisconnect = false;
bool _startAp = false;
char _ca[TLS_CA_MAX_SIZE]; char _ca[TLS_CA_MAX_SIZE];
char _cert[TLS_CERT_MAX_SIZE]; char _cert[TLS_CERT_MAX_SIZE];