diff --git a/src/Homie/Config.cpp b/src/Homie/Config.cpp index da37f6d6..ec8beb92 100644 --- a/src/Homie/Config.cpp +++ b/src/Homie/Config.cpp @@ -4,21 +4,11 @@ using namespace HomieInternals; Config::Config() : _configStruct() - , _spiffsBegan(false) , _valid(false) { } bool Config::_spiffsBegin() { - if (!_spiffsBegan) { -#ifdef ESP32 - _spiffsBegan = SPIFFS.begin(true); -#elif defined(ESP8266) - _spiffsBegan = SPIFFS.begin(); -#endif - if (!_spiffsBegan) Interface::get().getLogger() << F("✖ Cannot mount filesystem") << endl; - } - - return _spiffsBegan; + return _fs._fsBegin(); } bool Config::load() { diff --git a/src/Homie/Config.hpp b/src/Homie/Config.hpp index 437f08ea..2ea1dd25 100644 --- a/src/Homie/Config.hpp +++ b/src/Homie/Config.hpp @@ -3,10 +3,7 @@ #include "Arduino.h" #include -#ifdef ESP32 -#include -#endif // ESP32 -#include "FS.h" +#include "FS.hpp" #include "Datatypes/Interface.hpp" #include "Datatypes/ConfigStruct.hpp" #include "Utils/DeviceId.hpp" @@ -34,7 +31,7 @@ class Config { private: ConfigStruct _configStruct; - bool _spiffsBegan; + FS _fs; bool _valid; bool _spiffsBegin(); diff --git a/src/Homie/Constants.hpp b/src/Homie/Constants.hpp index ed93903d..287ffaee 100644 --- a/src/Homie/Constants.hpp +++ b/src/Homie/Constants.hpp @@ -10,6 +10,26 @@ #define HOMIE_CONFIG 1 #endif +// config mode requires SPIFFS as ESP Async Webserver only works with SPIFFS +#if HOMIE_CONFIG +#define HOMIE_SPIFFS +#endif + +// default should be SPIFFS, except using LittleFS is explicitely defined +#ifndef HOMIE_LITTLEFS +#ifndef HOMIE_SPIFFS +#define HOMIE_SPIFFS +#endif +#endif + +// fail if none or both are defined +#if defined(HOMIE_SPIFFS) && defined(HOMIE_LITTLEFS) +#error "Only one of HOMIE_SPIFFS and HOMIE_LITTLEFS must be defined. HOMIE_CONFIG requires HOMIE_SPIFFS." +#endif +#if !(defined(HOMIE_SPIFFS) || defined(HOMIE_LITTLEFS)) +#error "At least one of HOMIE_SPIFFS or HOMIE_LITTLEFS needs to be defined." +#endif + namespace HomieInternals { const char HOMIE_VERSION[] = "3.0.1"; const char HOMIE_ESP8266_VERSION[] = "3.0.0"; diff --git a/src/Homie/FS.cpp b/src/Homie/FS.cpp new file mode 100644 index 00000000..cc2e0787 --- /dev/null +++ b/src/Homie/FS.cpp @@ -0,0 +1,31 @@ +#include "FS.hpp" +#include "Datatypes/Interface.hpp" + +HomieInternals::FS::FS() + : _fsBegan(false) { +} + +bool HomieInternals::FS::_fsBegin() { + if (!_fsBegan) { +#ifdef ESP32 +#ifdef HOMIE_SPIFFS + _fsBegan = SPIFFS.begin(true); +#elif defined(HOMIE_LITTLEFS) + _fsBegan = LittleFS.begin(); +#endif +#elif defined(ESP8266) +#ifdef HOMIE_SPIFFS + _fsBegan = SPIFFS.begin(); +#elif defined(HOMIE_LITTLEFS) + _fsBegan = LittleFS.begin(); +#endif +#endif + if (!_fsBegan) Interface::get().getLogger() << F("✖ Cannot mount filesystem") << endl; + } + + return _fsBegan; +} + +void HomieInternals::FS::doSomething() { + bool lala = false; +} diff --git a/src/Homie/FS.hpp b/src/Homie/FS.hpp new file mode 100644 index 00000000..c4ab816d --- /dev/null +++ b/src/Homie/FS.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "Constants.hpp" + +#ifdef ESP32 +#ifdef HOMIE_SPIFFS +#include +#endif +#ifdef HOMIE_LITTLEFS +#include +#endif +#elif defined(ESP8266) +#ifdef HOMIE_SPIFFS +#include "FS.h" +#elif defined(HOMIE_LITTLEFS) +#include "LittleFS.h" +#endif +#endif // ESP32 + +namespace HomieInternals { +class FS { + public: + FS(); + bool _fsBegin(); + static void doSomething(); + + private: + bool _fsBegan; +}; +} // namespace HomieInternals