5#include <ArduinoJson.h>
6#include <StreamUtils.hpp>
15 s.
kv(
"source",
"manual_debug_log");
17 serializeJson(thing, Serial);
30 target[
"version"] = version;
31 for (
auto const &sys : subsystems) {
32 sys->toJson(target.createNestedObject(sys->name()), c);
33 if (!target[sys->name()].size())
34 target.remove(sys->name());
39 for (
auto const &sys : subsystems) {
40 if (target.containsKey(sys->name()))
41 sys->fromJson(target[sys->name()], c);
47 for (
auto const &sys : subsystems)
48 sys->reset_defaults();
49 if (do_write_to_eeprom)
54 DynamicJsonDocument deserialized_conf_doc(
eeprom_size);
56 auto error = use_messagepack ? deserializeMsgPack(deserialized_conf_doc, eepromStream)
57 : deserializeJson(deserialized_conf_doc, eepromStream);
60 "nvmconfig::PersistentSettingsWriter::read_from_eeprom(): Failure, will fall back to default values.");
61 LOG4(
"DeserializationError code: ", error.code(),
" and explanation: ", error.c_str());
64 if(deserialized_conf_doc.isNull()) {
65 LOG_ERROR(
"EEPROM JSON Document is empty");
68 auto deserialized_conf = deserialized_conf_doc.as<JsonObject>();
73 version = deserialized_conf[
"version"];
78 LOG_ERROR(
"PersistentSettingsWriter::read_from_eeprom(): Invalid Magic, falling back to default values.");
79 LOG4(
"Required magic byte values: ",
required_magic,
" Read magic byte values: ", version);
80 reset_defaults(
false);
85 DynamicJsonDocument serialized_conf_doc(
eeprom_size);
86 auto serialized_conf = serialized_conf_doc.to<JsonObject>();
89 size_t consumed_size = use_messagepack ? serializeMsgPack(serialized_conf, eepromStream)
90 : serializeJson(serialized_conf, eepromStream);
96 LOGMEV(
"Consumed %d Bytes from %d available ones (%.2f%%); Serialization: %s\n", consumed_size,
eeprom_size,
97 100.0 * consumed_size /
eeprom_size, use_messagepack ?
"Messagepack" :
"JSON");
void fromJson(JsonObjectConst src, Context c)
This will only call the respective fromJson call in the subsystem if its key is given in the object.
void info(JsonObject target)
size_t write_to_eeprom()
serialize configuration to eeprom,
void toJson(JsonObject target, Context c)
Note that empty subsystems get removed, i.e.
void reset_defaults(bool write_to_eeprom=true)
void read_from_eeprom()
read configuration from eeprom
The Streaming JSON API provides a way of constructing (writing) JSON messages without RAM overhead.
void kv(const char *_key, V _val)
void key(const char *str, char quote='"')
#define LOG_ERROR(message)
#define LOGMEV(message,...)
static constexpr int eeprom_size
static constexpr uint32_t required_magic
static constexpr int eeprom_address
@ Flash
Flash-Facing (writing/reading)
FLASHMEM void debug_print_json(JsonObjectConst thing)