4#include <zephyr/kernel.h>
7#include <zephyr/settings/settings.h>
13static const char *
const TAG =
"preferences";
16 this->data.resize(
len);
17 std::memcpy(this->data.data(),
data,
len);
18 ESP_LOGVV(TAG,
"save key: %" PRIu32
", len: %zu", this->
type_, len);
23 if (
len != this->data.size()) {
24 char key_buf[KEY_BUFFER_SIZE];
26 ESP_LOGE(TAG,
"size of setting key %s changed, from: %zu, to: %zu", key_buf, this->data.size(),
len);
29 std::memcpy(
data, this->data.data(),
len);
30 ESP_LOGVV(TAG,
"load key: %" PRIu32
", len: %zu", this->
type_, len);
35 int err = settings_subsys_init();
37 ESP_LOGE(TAG,
"Failed to initialize settings subsystem, err: %d", err);
41 static struct settings_handler settings_cb = {
42 .name = ESPHOME_SETTINGS_KEY,
47 err = settings_register(&settings_cb);
49 ESP_LOGE(TAG,
"setting_register failed, err, %d", err);
53 err = settings_load_subtree(ESPHOME_SETTINGS_KEY);
55 ESP_LOGE(TAG,
"Cannot load settings, err: %d", err);
58 ESP_LOGD(TAG,
"Loaded %zu settings.", this->
backends_.size());
63 if (backend->get_type() ==
type) {
68 char key_buf[KEY_BUFFER_SIZE];
69 pref->format_key(key_buf,
sizeof(key_buf));
70 ESP_LOGD(TAG,
"Add new setting %s.", key_buf);
71 this->backends_.push_back(pref);
76 ESP_LOGD(TAG,
"Save settings");
77 int err = settings_save();
79 ESP_LOGE(TAG,
"Cannot save settings, err: %d", err);
86 ESP_LOGD(TAG,
"Reset settings");
89 backend->data.clear();
97 if (!
type.has_value()) {
98 std::string full_name(ESPHOME_SETTINGS_KEY);
102 settings_delete(full_name.c_str());
105 std::vector<uint8_t> data(
len);
106 int err = read_cb(cb_arg, data.data(),
len);
108 ESP_LOGD(TAG,
"load setting, name: %s(%" PRIu32
"), len %zu, err %d", name, *
type,
len, err);
116 char name[KEY_BUFFER_SIZE];
117 backend->format_key(name,
sizeof(name));
118 int err = cb(name, backend->data.data(), backend->data.size());
119 ESP_LOGD(TAG,
"save in flash, name %s, len %zu, err %d", name, backend->data.size(), err);
130 s_preferences.
open();
std::vector< uint8_t > data
bool load(uint8_t *data, size_t len)
void format_key(char *buf, size_t size) const
bool save(const uint8_t *data, size_t len)
ESPPreferenceObject make_preference(size_t length, uint32_t type, bool in_flash)
static int load_setting(const char *name, size_t len, settings_read_cb read_cb, void *cb_arg)
std::vector< ZephyrPreferenceBackend * > backends_
static int export_settings(int(*cb)(const char *name, const void *value, size_t val_len))
ZephyrPreferences * get_preferences()
Providing packet encoding functions for exchanging data with a remote host.
Preferences ESPPreferences
size_t parse_hex(const char *str, size_t length, uint8_t *data, size_t count)
Parse bytes from a hex-encoded string into a byte array.
ESPPreferences * global_preferences