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
PresenceDetection.cpp
PreferencesKeys.h
SpiffsCookie.cpp
Gpio.cpp
Version.h
# include/RTOS.h

View File

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

View File

@@ -7,7 +7,6 @@
#include <Preferences.h>
#include <vector>
#include "NukiConstants.h"
#include "SpiffsCookie.h"
#include "NukiOpenerConstants.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;
}
// const NetworkDeviceType networkDevice = NetworkDeviceType::WiFi;
const NetworkDeviceType networkDevice = digitalRead(NETWORK_SELECT) == HIGH ? NetworkDeviceType::WiFi : NetworkDeviceType::W5500;
const NetworkDeviceType networkDevice = NetworkDeviceType::WiFi;
// const NetworkDeviceType networkDevice = digitalRead(NETWORK_SELECT) == HIGH ? NetworkDeviceType::WiFi : NetworkDeviceType::W5500;
network = new Network(networkDevice, preferences);
network->initialize();

View File

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

View File

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