14#if DETWS_ENABLE_CONFIG_STORE
20#include <Preferences.h>
34bool detws_config_begin(
const char *ns)
38 s_cfg.open = s_cfg.prefs.begin(ns,
false);
42bool detws_config_set_str(
const char *key,
const char *val)
49size_t detws_config_get_str(
const char *key,
char *out,
size_t out_cap,
const char *def)
51 if (!out || out_cap == 0)
53 if (!s_cfg.prefs.isKey(key))
55 size_t n = def ? strnlen(def, out_cap) : 0;
63 return s_cfg.prefs.getString(key, out, out_cap);
66bool detws_config_set_u32(
const char *key, uint32_t val)
68 return s_cfg.prefs.putUInt(key, val) ==
sizeof(uint32_t);
71uint32_t detws_config_get_u32(
const char *key, uint32_t def)
73 return s_cfg.prefs.getUInt(key, def);
76bool detws_config_set_blob(
const char *key,
const void *data,
size_t len)
80 return s_cfg.prefs.putBytes(key, data, len) == len;
83size_t detws_config_get_blob(
const char *key,
void *out,
size_t out_cap)
85 if (!out || !s_cfg.prefs.isKey(key))
87 return s_cfg.prefs.getBytes(key, out, out_cap);
90bool detws_config_erase(
const char *key)
92 return s_cfg.prefs.remove(key);
95bool detws_config_clear(
void)
97 return s_cfg.prefs.clear();
119bool key_ok(
const char *key)
125Entry *find(ConfigStoreCtx &c,
const char *key)
128 if (c.tbl[i].used && strcmp(c.tbl[i].key, key) == 0)
133Entry *find_or_alloc(ConfigStoreCtx &c,
const char *key)
135 Entry *e = find(c, key);
141 c.tbl[i].used =
true;
150bool store(ConfigStoreCtx &c,
const char *key,
const void *data,
size_t len)
154 Entry *e = find_or_alloc(c, key);
157 memcpy(e->val, data, len);
163bool detws_config_begin(
const char *ns)
169bool detws_config_set_str(
const char *key,
const char *val)
176size_t detws_config_get_str(
const char *key,
char *out,
size_t out_cap,
const char *def)
178 if (!out || out_cap == 0)
180 Entry *e = key_ok(key) ? find(s_cfg, key) : nullptr;
181 const char *src = e ? (
const char *)e->val : (def ? def :
"");
182 size_t n = strnlen(src, out_cap);
190bool detws_config_set_u32(
const char *key, uint32_t val)
192 uint8_t b[4] = {(uint8_t)val, (uint8_t)(val >> 8), (uint8_t)(val >> 16), (uint8_t)(val >> 24)};
193 return store(s_cfg, key, b,
sizeof(b));
196uint32_t detws_config_get_u32(
const char *key, uint32_t def)
198 Entry *e = key_ok(key) ? find(s_cfg, key) : nullptr;
199 if (!e || e->len < 4)
201 return (uint32_t)e->val[0] | ((uint32_t)e->val[1] << 8) | ((uint32_t)e->val[2] << 16) | ((uint32_t)e->val[3] << 24);
204bool detws_config_set_blob(
const char *key,
const void *data,
size_t len)
208 return store(s_cfg, key, data, len);
211size_t detws_config_get_blob(
const char *key,
void *out,
size_t out_cap)
213 Entry *e = key_ok(key) ? find(s_cfg, key) : nullptr;
216 size_t n = e->len < out_cap ? e->len : out_cap;
217 memcpy(out, e->val, n);
221bool detws_config_erase(
const char *key)
223 Entry *e = key_ok(key) ? find(s_cfg, key) : nullptr;
231bool detws_config_clear(
void)
234 s_cfg.tbl[i] = Entry{};
#define DETWS_CONFIG_KEY_MAX
Max key length incl. null (NVS caps keys at 15 chars).
#define DETWS_CONFIG_MAX_ENTRIES
Max key/value entries in the host (test) config backend.
#define DETWS_CONFIG_VAL_MAX
Max value bytes per entry in the host (test) config backend.
Typed NVS configuration store (DETWS_ENABLE_CONFIG_STORE).