mirror of
https://github.com/esphome/esphome.git
synced 2026-10-17 19:52:50 +00:00
[zephyr] Fix preference log levels and report settings read/save errors (#20810)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
co-authored by
Claude Opus 5.5
J. Nick Koston
parent
a5a883fd19
commit
d2a1f7ee31
@@ -5,6 +5,7 @@
|
||||
#include "preferences.h"
|
||||
#include "esphome/core/log.h"
|
||||
#include <zephyr/settings/settings.h>
|
||||
#include <sys/types.h>
|
||||
#include <cinttypes>
|
||||
#include <cstring>
|
||||
|
||||
@@ -23,7 +24,11 @@ bool ZephyrPreferenceBackend::load(uint8_t *data, size_t len) {
|
||||
if (len != this->data.size()) {
|
||||
char key_buf[KEY_BUFFER_SIZE];
|
||||
this->format_key(key_buf, sizeof(key_buf));
|
||||
ESP_LOGE(TAG, "size of setting key %s changed, from: %zu, to: %zu", key_buf, this->data.size(), len);
|
||||
if (this->data.empty()) {
|
||||
ESP_LOGV(TAG, "setting key %s not found", key_buf);
|
||||
} else {
|
||||
ESP_LOGE(TAG, "size of setting key %s changed, from: %zu, to: %zu", key_buf, this->data.size(), len);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
std::memcpy(data, this->data.data(), len);
|
||||
@@ -87,7 +92,7 @@ bool ZephyrPreferences::load_from_key(uint32_t type, uint8_t *data, size_t len)
|
||||
}
|
||||
|
||||
bool ZephyrPreferences::sync() {
|
||||
ESP_LOGD(TAG, "Save settings");
|
||||
ESP_LOGV(TAG, "Save settings");
|
||||
int err = settings_save();
|
||||
if (err) {
|
||||
ESP_LOGE(TAG, "Cannot save settings, err: %d", err);
|
||||
@@ -117,22 +122,34 @@ int ZephyrPreferences::load_setting(const char *name, size_t len, settings_read_
|
||||
return 1;
|
||||
}
|
||||
std::vector<uint8_t> data(len);
|
||||
int err = read_cb(cb_arg, data.data(), len);
|
||||
ssize_t read_len = read_cb(cb_arg, data.data(), len);
|
||||
if (read_len != static_cast<ssize_t>(len)) {
|
||||
ESP_LOGE(TAG, "Cannot read setting %s, got %d of %zu", name, static_cast<int>(read_len), len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ESP_LOGD(TAG, "load setting, name: %s(%" PRIu32 "), len %zu, err %d", name, *type, len, err);
|
||||
ESP_LOGD(TAG, "load setting, name: %s(%" PRIu32 "), len %zu", name, *type, len);
|
||||
auto *pref = new ZephyrPreferenceBackend(*type, std::move(data)); // NOLINT(cppcoreguidelines-owning-memory)
|
||||
get_preferences()->backends_.push_back(pref);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ZephyrPreferences::export_settings(int (*cb)(const char *name, const void *value, size_t val_len)) {
|
||||
int first_err = 0;
|
||||
for (auto *backend : get_preferences()->backends_) {
|
||||
char name[KEY_BUFFER_SIZE];
|
||||
backend->format_key(name, sizeof(name));
|
||||
int err = cb(name, backend->data.data(), backend->data.size());
|
||||
ESP_LOGD(TAG, "save in flash, name %s, len %zu, err %d", name, backend->data.size(), err);
|
||||
if (err) {
|
||||
ESP_LOGE(TAG, "Cannot save setting %s, err %d", name, err);
|
||||
if (first_err == 0) {
|
||||
first_err = err;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
ESP_LOGV(TAG, "save in flash, name %s, len %zu", name, backend->data.size());
|
||||
}
|
||||
return 0;
|
||||
return first_err;
|
||||
}
|
||||
|
||||
static ZephyrPreferences s_preferences; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
||||
|
||||
Reference in New Issue
Block a user