Files
2026-08-13 16:50:52 +08:00

176 lines
3.3 KiB
C

#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include "lisa_log.h"
#include "sysheap.h"
#include "easyflash.h"
#include "lisa_kv_utils.h"
static int lisa_kv_set_small_data(const char *key, const void *data, int len)
{
assert(key);
assert(data);
assert(len);
return ef_set_env_blob(key, data, len);
}
static int lisa_kv_get_small_data(const char *key, void *data, int len)
{
assert(key);
assert(data);
assert(len);
int old_len;
ef_get_env_blob(key, NULL, 0, &old_len);
if (old_len == 0) {
LOGE("lisa_kv_get_small_data(key: %s) fail, old_len is 0", key);
return -1;
}
ef_get_env_blob(key, data, len, &len);
if(len == 0){
LOGW("lisa_kv_get_small_data fail(key: %s), size is 0", key);
return -1;
}
return 0;
}
int lisa_kv_init(void)
{
static bool inited = false;
if (inited) {
return 0;
}
inited = true;
int r = easyflash_init();
if (r != 0) {
LOGE("lisa_kv_init fail, easyflash_init fail, error: %d", r);
return -1;
}
return 0;
}
int lisa_kv_del(const char *key)
{
return ef_del_env(key);
}
void lisa_kv_free(void *value)
{
LISA_KV_FREE(value);
}
void lisa_kv_dump(void)
{
ef_print_env();
}
int lisa_kv_set_int(const char *key, int value)
{
return lisa_kv_set_small_data(key, &value, sizeof(int));
}
int lisa_kv_get_int(const char *key, int *value)
{
return lisa_kv_get_small_data(key, value, sizeof(int));
}
int lisa_kv_set_bool(const char *key, bool value)
{
return lisa_kv_set_small_data(key, &value, sizeof(bool));
}
int lisa_kv_get_bool(const char *key, bool *value)
{
return lisa_kv_get_small_data(key, value, sizeof(bool));
}
int lisa_kv_get_blob(const char *key, uint8_t **data, int *len)
{
assert(key);
assert(data);
assert(len);
int old_len;
ef_get_env_blob(key, NULL, 0, &old_len);
if (old_len == 0) {
LOGE("lisa_kv_get_blob fail(key: %s), old_len is 0", key);
return -1;
}
uint8_t *p = LISA_KV_MALLOC(old_len);
if (!p) {
LOGE("lisa_kv_get_blob LISA_KV_MALLOC fail");
return -1;
}
*len = ef_get_env_blob(key, p, old_len, NULL);
if (*len == 0) {
LOGE("lisa_kv_get_blob fail(key: %s), len is 0", key);
LISA_KV_FREE(p);
return -1;
}
*data = p;
return 0;
}
int lisa_kv_set_blob(const char *key, uint8_t *data, int len)
{
assert(key);
assert(data);
assert(len);
int r = ef_set_env_blob(key, data, len);
if (r != 0) {
LOGE("lisa_kv_set_blob fail(key: %s), ef_set_env_blob fail, error: %d", key, r);
return -1;
}
return 0;
}
int lisa_kv_set_string(const char *key, const char *value)
{
assert(key);
assert(value);
return lisa_kv_set_blob(key, (uint8_t *)value, strlen(value) + 1);
}
int lisa_kv_get_string(const char *key, char **value)
{
int len;
assert(value);
assert(key);
return lisa_kv_get_blob(key, (uint8_t **)value, &len);
}
int lisa_kv_clear(void)
{
int r = ef_env_set_default();
if (r != 0) {
LOGE("lisa_kv_clear fail, ef_env_set_default fail, error: %d", r);
return -1;
}
return 0;
}
int lisa_kv_save(void)
{
int r = ef_save_env();
if (r != 0) {
LOGE("lisa_kv_save fail, ef_save_env fail, error: %d", r);
return -1;
}
return 0;
}