Sync from fork #1
@ -36,7 +36,6 @@ set(dependencies
|
||||
espwifistack
|
||||
date
|
||||
espchrono
|
||||
fmt
|
||||
nvs_flash
|
||||
)
|
||||
|
||||
|
@ -3,9 +3,7 @@
|
||||
// system includes
|
||||
#include <string>
|
||||
#include <expected>
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include <fmt/core.h>
|
||||
#include <format>
|
||||
|
||||
// local includes
|
||||
#include "configwrapper.h"
|
||||
@ -16,7 +14,7 @@ template<int MAX_LENGTH>
|
||||
ConfigConstraintReturnType StringMaxSize(const std::string &str)
|
||||
{
|
||||
if (str.size() > MAX_LENGTH)
|
||||
return std::unexpected(fmt::format("String length {} exceeds maximum {}", str.size(), MAX_LENGTH));
|
||||
return std::unexpected(std::format("String length {} exceeds maximum {}", str.size(), MAX_LENGTH));
|
||||
return {};
|
||||
}
|
||||
|
||||
@ -24,7 +22,7 @@ template<int MIN_LENGTH, int MAX_LENGTH>
|
||||
ConfigConstraintReturnType StringMinMaxSize(const std::string &str)
|
||||
{
|
||||
if (str.size() < MIN_LENGTH || str.size() > MAX_LENGTH)
|
||||
return std::unexpected(fmt::format("String length {} exceeds range {} to {}", str.size(), MIN_LENGTH, MAX_LENGTH));
|
||||
return std::unexpected(std::format("String length {} exceeds range {} to {}", str.size(), MIN_LENGTH, MAX_LENGTH));
|
||||
return {};
|
||||
}
|
||||
|
||||
@ -49,7 +47,7 @@ ConfigConstraintReturnType StringOr(const std::string &str)
|
||||
const auto result1 = callback1(str);
|
||||
if (result1)
|
||||
return {};
|
||||
return std::unexpected(fmt::format("None of the following 2 constraints succeded: {} | {}", result0.error(), result1.error()));
|
||||
return std::unexpected(std::format("None of the following 2 constraints succeded: {} | {}", result0.error(), result1.error()));
|
||||
}
|
||||
|
||||
template<ConfigWrapper<std::string>::ConstraintCallback callback0, ConfigWrapper<std::string>::ConstraintCallback callback1, ConfigWrapper<std::string>::ConstraintCallback callback2>
|
||||
@ -64,7 +62,7 @@ ConfigConstraintReturnType StringOr(const std::string &str)
|
||||
const auto result2 = callback2(str);
|
||||
if (result2)
|
||||
return {};
|
||||
return std::unexpected(fmt::format("None of the following 3 constraints succeded: {} | {} | {}", result0.error(), result1.error(), result2.error()));
|
||||
return std::unexpected(std::format("None of the following 3 constraints succeded: {} | {} | {}", result0.error(), result1.error(), result2.error()));
|
||||
}
|
||||
|
||||
template<ConfigWrapper<std::string>::ConstraintCallback callback0, ConfigWrapper<std::string>::ConstraintCallback callback1>
|
||||
@ -101,7 +99,7 @@ template<typename T, T MIN_VALUE>
|
||||
ConfigConstraintReturnType MinValue(typename ConfigWrapper<T>::value_t val)
|
||||
{
|
||||
if (val < MIN_VALUE)
|
||||
return std::unexpected(fmt::format("Value {} exceeds minimum {}", val, MIN_VALUE));
|
||||
return std::unexpected(std::format("Value {} exceeds minimum {}", val, MIN_VALUE));
|
||||
return {};
|
||||
}
|
||||
|
||||
@ -109,7 +107,7 @@ template<typename T, T MAX_VALUE>
|
||||
ConfigConstraintReturnType MaxValue(typename ConfigWrapper<T>::value_t val)
|
||||
{
|
||||
if (val > MAX_VALUE)
|
||||
return std::unexpected(fmt::format("Value {} exceeds maximum {}", val, MAX_VALUE));
|
||||
return std::unexpected(std::format("Value {} exceeds maximum {}", val, MAX_VALUE));
|
||||
return {};
|
||||
}
|
||||
|
||||
@ -117,7 +115,7 @@ template<typename T, T MIN_VALUE, T MAX_VALUE>
|
||||
ConfigConstraintReturnType MinMaxValue(typename ConfigWrapper<T>::value_t val)
|
||||
{
|
||||
if (val < MIN_VALUE || val > MAX_VALUE)
|
||||
return std::unexpected(fmt::format("Value {} exceeds range {} to {}", val, MIN_VALUE, MAX_VALUE));
|
||||
return std::unexpected(std::format("Value {} exceeds range {} to {}", val, MIN_VALUE, MAX_VALUE));
|
||||
return {};
|
||||
}
|
||||
|
||||
@ -125,7 +123,7 @@ template<typename T>
|
||||
ConfigConstraintReturnType MinMaxValue(typename ConfigWrapper<T>::value_t val, T MIN_VALUE, T MAX_VALUE)
|
||||
{
|
||||
if (val < MIN_VALUE || val > MAX_VALUE)
|
||||
return std::unexpected(fmt::format("Value {} exceeds range {} to {}", val, MIN_VALUE, MAX_VALUE));
|
||||
return std::unexpected(std::format("Value {} exceeds range {} to {}", val, MIN_VALUE, MAX_VALUE));
|
||||
return {};
|
||||
}
|
||||
|
||||
@ -133,7 +131,7 @@ template<typename T, T MIN_VALUE, T MAX_VALUE>
|
||||
ConfigConstraintReturnType MinMaxOrZeroValue(typename ConfigWrapper<T>::value_t val)
|
||||
{
|
||||
if (val != 0 && (val < MIN_VALUE || val > MAX_VALUE))
|
||||
return std::unexpected(fmt::format("Value {} exceeds constraint 0 or range {} to {}", val, MIN_VALUE, MAX_VALUE));
|
||||
return std::unexpected(std::format("Value {} exceeds constraint 0 or range {} to {}", val, MIN_VALUE, MAX_VALUE));
|
||||
return {};
|
||||
}
|
||||
} // namespace espconfig
|
||||
|
@ -1,12 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
// system includes
|
||||
#include <string>
|
||||
#include <expected>
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include <fmt/core.h>
|
||||
|
||||
// local includes
|
||||
#include "configwrapper.h"
|
||||
#include "espchrono.h"
|
||||
|
@ -2,12 +2,15 @@
|
||||
|
||||
#include "configmanager.h"
|
||||
|
||||
// system includes
|
||||
#include <format>
|
||||
|
||||
// esp-idf includes
|
||||
#include <esp_log.h>
|
||||
#include <nvs_flash.h>
|
||||
|
||||
// local includes
|
||||
#include "espchrono.h"
|
||||
// 3rdparty lib includes
|
||||
#include <espchrono.h>
|
||||
|
||||
#define INSTANTIATE_CONFIGMANAGER_TEMPLATES(Type) \
|
||||
namespace espconfig { \
|
||||
@ -45,7 +48,7 @@ esp_err_t ConfigManager<ConfigContainer>::init(const char *ns)
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#else // CONFIG_NVS_ENCRYPTION
|
||||
const esp_partition_t *key_part = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_NVS_KEYS, NULL);
|
||||
if (!key_part)
|
||||
{
|
||||
@ -87,7 +90,7 @@ esp_err_t ConfigManager<ConfigContainer>::init(const char *ns)
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif // CONFIG_NVS_ENCRYPTION
|
||||
|
||||
{
|
||||
const auto result = nvs_open_from_partition("nvs", ns, NVS_READWRITE, &nvs_handle_user);
|
||||
@ -119,12 +122,19 @@ esp_err_t ConfigManager<ConfigContainer>::loadFromFlash()
|
||||
|
||||
bool success = true;
|
||||
ConfigContainer::callForEveryConfig([&](ConfigWrapperInterface &config){
|
||||
if (strlen(config.nvsName()) > 15)
|
||||
{
|
||||
ESP_LOGW(TAG, "config key '%s' is longer than 15 characters", config.nvsName());
|
||||
success = false;
|
||||
return false; // don't abort loop
|
||||
}
|
||||
|
||||
if (const auto result = config.loadFromFlash(nvs_handle_user); !result)
|
||||
{
|
||||
ESP_LOGE(TAG, "config parameter %s failed to load: %.*s", config.nvsName(), result.error().size(), result.error().data());
|
||||
success = false;
|
||||
}
|
||||
return false; // dont abort the loop
|
||||
return false; // don't abort the loop
|
||||
});
|
||||
|
||||
const auto after = espchrono::millis_clock::now();
|
||||
@ -160,7 +170,7 @@ ConfigStatusReturnType ConfigManager<ConfigContainer>::reset()
|
||||
{
|
||||
if (!message.empty())
|
||||
message.append(", ");
|
||||
message.append(fmt::format("reset of {} failed: {}", config.nvsName(), result.error()));
|
||||
message.append(std::format("reset of {} failed: {}", config.nvsName(), result.error()));
|
||||
}
|
||||
return false; // dont abort loop
|
||||
});
|
||||
|
@ -39,7 +39,17 @@ public:
|
||||
|
||||
virtual ConfigConstraintReturnType checkValue(value_t value) const = 0;
|
||||
|
||||
const T &value() const { return m_value; }
|
||||
const T &value() const
|
||||
{
|
||||
#if defined(CONFIG_COMPILER_CXX_EXCEPTIONS) && CONFIG_COMPILER_CXX_EXCEPTIONS != 0
|
||||
if (!m_loaded)
|
||||
throw std::runtime_error("ConfigWrapper::value() called without loading first");
|
||||
#else
|
||||
#warning "COMPILER_CXX_EXCEPTIONS disabled, ConfigWrapper::value() called without loading first will assert"
|
||||
assert(m_loaded);
|
||||
#endif
|
||||
return m_value;
|
||||
}
|
||||
|
||||
private:
|
||||
ConfigStatusReturnType writeToFlash(nvs_handle_t nvsHandle, value_t value);
|
||||
|
@ -9,13 +9,11 @@
|
||||
// system includes
|
||||
#include <utility>
|
||||
#include <cassert>
|
||||
#include <format>
|
||||
|
||||
// esp-idf includes
|
||||
#include <esp_log.h>
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include <fmt/core.h>
|
||||
|
||||
// local includes
|
||||
#include "configwrapper.h"
|
||||
#include "cpputils.h"
|
||||
|
Reference in New Issue
Block a user