1#include "nvmconfig/persistent.h"
3#include <ArduinoJson.h>
4#include <StreamUtils.hpp>
6#include "utils/logging.h"
7#include "utils/streaming_json.h"
9void nvmconfig::PersistentSettingsWriter::read_from_eeprom() {
10 DynamicJsonDocument deserialized_conf_doc(eeprom_size);
11 StreamUtils::EepromStream eepromStream(eeprom_address, eeprom_size);
12 auto error = use_messagepack ? deserializeMsgPack(deserialized_conf_doc, eepromStream)
13 : deserializeJson(deserialized_conf_doc, eepromStream);
16 "nvmconfig::PersistentSettingsWriter::read_from_eeprom(): Failure, will fall back to default values.");
17 LOG4(
"DeserializationError code: ", error.code(),
" and explanation: ", error.c_str());
20 if (deserialized_conf_doc.isNull()) {
21 LOG_ERROR(
"EEPROM JSON Document is empty");
24 auto deserialized_conf = deserialized_conf_doc.as<JsonObject>();
27 version = deserialized_conf[
"version"];
29 if (!error && version >= required_magic) {
30 fromJson(deserialized_conf, Context::Flash);
32 LOG_ERROR(
"PersistentSettingsWriter::read_from_eeprom(): Invalid Magic, falling back to default values.");
33 LOG4(
"Required magic byte values: ", required_magic,
" Read magic byte values: ", version);
34 reset_defaults(
false);
38size_t nvmconfig::PersistentSettingsWriter::write_to_eeprom() {
39 DynamicJsonDocument serialized_conf_doc(eeprom_size);
40 auto serialized_conf = serialized_conf_doc.to<JsonObject>();
41 toJson(serialized_conf, Context::Flash);
42 StreamUtils::EepromStream eepromStream(eeprom_address, eeprom_size);
43 size_t consumed_size = use_messagepack ? serializeMsgPack(serialized_conf, eepromStream)
44 : serializeJson(serialized_conf, eepromStream);
50 LOGMEV(
"Consumed %d Bytes from %d available ones (%.2f%%); Serialization: %s\n", consumed_size, eeprom_size,
51 100.0 * consumed_size / eeprom_size, use_messagepack ?
"Messagepack" :
"JSON");
if(((src) >=(0x60000000) &&(src)<(0x60000000)+(0x800000)))