use RTC_NOINIT_ATTR to boot into wifimanager config portal
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
class SpiffsCookie
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SpiffsCookie();
|
|
||||||
virtual ~SpiffsCookie() = default;
|
|
||||||
|
|
||||||
void set();
|
|
||||||
void clear();
|
|
||||||
const bool isSet();
|
|
||||||
|
|
||||||
};
|
|
||||||
4
main.cpp
4
main.cpp
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
Reference in New Issue
Block a user