REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
persistent.cpp
Go to the documentation of this file.
1#include "nvmconfig/persistent.h"
2
3#include <ArduinoJson.h>
4#include <StreamUtils.hpp>
5
6#include "utils/logging.h"
7#include "utils/streaming_json.h" // only for debugging
8
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);
14 if (error) {
15 LOG_ERROR(
16 "nvmconfig::PersistentSettingsWriter::read_from_eeprom(): Failure, will fall back to default values.");
17 LOG4("DeserializationError code: ", error.code(), " and explanation: ", error.c_str());
18 }
19
20 if (deserialized_conf_doc.isNull()) {
21 LOG_ERROR("EEPROM JSON Document is empty");
22 }
23
24 auto deserialized_conf = deserialized_conf_doc.as<JsonObject>();
25
26
27 version = deserialized_conf["version"];
28
29 if (!error && version >= required_magic) {
30 fromJson(deserialized_conf, Context::Flash);
31 } else {
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(/*write_to_eeprom*/ false);
35 }
36}
37
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);
45 eepromStream.flush();
46
47 // LOG_ALWAYS("PersistentSettingsWriter::write_to_eeprom has written to EEPROM...");
48 // debug_print_json(serialized_conf);
49
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");
52
53 return consumed_size;
54}
if(((src) >=(0x60000000) &&(src)<(0x60000000)+(0x800000)))
Definition flasher.cpp:177