All elements take pointers now, more work on loop checking with new lists

This commit is contained in:
morgan 2026-08-03 21:39:58 -07:00
parent bafffedd0c
commit 2e690a7864
3 changed files with 35 additions and 29 deletions

View file

@ -60,19 +60,7 @@ struct cfglr_element {
cfglr_signaler_t signalers[CFGLR_SIGNALERS_MAX];
};
#define CFGLR_ELEMENT(KEY, TYPE, SIZE, DEFAULT, DEF_SIZE, SIGNALERS...) (cfglr_element_t){\
.key = KEY,\
.datatype = TYPE,\
.datatype_size = SIZE,\
.default_data = (void*)DEFAULT,\
.default_size = DEF_SIZE,\
.signalers = {\
SIGNALERS,\
{ NULL }\
}\
}
#define CFGLR_ELEMENT_PTR(KEY, POINTER, TYPE, SIZE, DEFAULT, DEF_SIZE, SIGNALERS...) (cfglr_element_t){\
#define CFGLR_ELEMENT(KEY, POINTER, TYPE, SIZE, DEFAULT, DEF_SIZE, SIGNALERS...) (cfglr_element_t){\
.key = KEY,\
.data = POINTER,\
.datatype = TYPE,\
@ -85,16 +73,16 @@ struct cfglr_element {
}\
}
#define CFGLR_ELEMENT_U8(KEY, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, CFGLR_DATATYPE_U8, sizeof(uint8_t), DEFAULT, 1, SIGNALERS)
#define CFGLR_ELEMENT_I8(KEY, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, CFGLR_DATATYPE_I8, sizeof(int8_t), DEFAULT, 1, SIGNALERS)
#define CFGLR_ELEMENT_U16(KEY, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, CFGLR_DATATYPE_U16, sizeof(uint16_t), DEFAULT, 2, SIGNALERS)
#define CFGLR_ELEMENT_I16(KEY, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, CFGLR_DATATYPE_I16, sizeof(int16_t), DEFAULT, 2, SIGNALERS)
#define CFGLR_ELEMENT_U32(KEY, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, CFGLR_DATATYPE_U32, sizeof(uint32_t), DEFAULT, 4, SIGNALERS)
#define CFGLR_ELEMENT_I32(KEY, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, CFGLR_DATATYPE_I32, sizeof(int32_t), DEFAULT, 4, SIGNALERS)
#define CFGLR_ELEMENT_U64(KEY, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, CFGLR_DATATYPE_U64, sizeof(uint64_t), DEFAULT, 8, SIGNALERS)
#define CFGLR_ELEMENT_I64(KEY, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, CFGLR_DATATYPE_I64, sizeof(int64_t), DEFAULT, 8, SIGNALERS)
#define CFGLR_ELEMENT_BIN(KEY, SIZE, DEFAULT, DEF_SIZE, SIGNALERS...) CFGLR_ELEMENT(KEY, CFGLR_DATATYPE_BIN, SIZE, DEFAULT, DEF_SIZE, SIGNALERS)
#define CFGLR_ELEMENT_STR(KEY, POINTER, SIZE, DEFAULT, SIGNALERS...) CFGLR_ELEMENT_PTR(KEY, POINTER, CFGLR_DATATYPE_STR, SIZE, DEFAULT, strlen(DEFAULT), SIGNALERS)
#define CFGLR_ELEMENT_U8(KEY, POINTER, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_U8, sizeof(uint8_t), DEFAULT, 1, SIGNALERS)
#define CFGLR_ELEMENT_I8(KEY, POINTER, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_I8, sizeof(int8_t), DEFAULT, 1, SIGNALERS)
#define CFGLR_ELEMENT_U16(KEY, POINTER, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_U16, sizeof(uint16_t), DEFAULT, 2, SIGNALERS)
#define CFGLR_ELEMENT_I16(KEY, POINTER, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_I16, sizeof(int16_t), DEFAULT, 2, SIGNALERS)
#define CFGLR_ELEMENT_U32(KEY, POINTER, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_U32, sizeof(uint32_t), DEFAULT, 4, SIGNALERS)
#define CFGLR_ELEMENT_I32(KEY, POINTER, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_I32, sizeof(int32_t), DEFAULT, 4, SIGNALERS)
#define CFGLR_ELEMENT_U64(KEY, POINTER, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_U64, sizeof(uint64_t), DEFAULT, 8, SIGNALERS)
#define CFGLR_ELEMENT_I64(KEY, POINTER, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_I64, sizeof(int64_t), DEFAULT, 8, SIGNALERS)
#define CFGLR_ELEMENT_BIN(KEY, POINTER, SIZE, DEFAULT, DEF_SIZE, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_BIN, SIZE, DEFAULT, DEF_SIZE, SIGNALERS)
#define CFGLR_ELEMENT_STR(KEY, POINTER, SIZE, DEFAULT, SIGNALERS...) CFGLR_ELEMENT(KEY, POINTER, CFGLR_DATATYPE_STR, SIZE, DEFAULT, strlen(DEFAULT), SIGNALERS)
typedef struct cfglr_backend cfglr_backend_t;
@ -143,7 +131,8 @@ extern cfglr_handle_t *configulator;
uint8_t cfglr_init(cfglr_handle_t *handle);
uint8_t cfglr_fetch_data(cfglr_backend_t *backend, cfglr_element_t *element, cfglr_handle_t *handler);
cfglr_element_t * cfglr_get_element(cfglr_handle_t *handle, const char *name);
cfglr_element_t *cfglr_get_element(cfglr_handle_t *handle, const char *name);
cfglr_element_t *cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element);
#include "cfglr_log.h"
#include "cfglr_nvs.h"

View file

@ -7,6 +7,8 @@ void cfglr_backend_nvs_open(cfglr_backend_t *backend, cfglr_handle_t *handle) {
esp_err_t err = nvs_open(handle->namespace, NVS_READWRITE, (nvs_handle_t*)&backend->handle);
CFGLR_LOGI(TAG, "backend->handle: %p", (nvs_handle_t*)&backend->handle);
ESP_ERROR_CHECK(err);
}
@ -81,7 +83,15 @@ uint16_t cfglr_backend_nvs_get(cfglr_backend_t *backend, cfglr_element_t *elemen
uint16_t cfglr_backend_nvs_set(cfglr_backend_t *backend, cfglr_element_t *element, cfglr_handle_t *handle) {
esp_err_t err = ESP_OK;
CFGLR_LOGI(TAG, "setting %s", element->key);
CFGLR_LOGD(TAG, "setting %s", element->key);
CFGLR_LOGD(TAG, "handle: %p", handle);
CFGLR_LOGD(TAG, "backend: %p", backend);
CFGLR_LOGD(TAG, "backend->handle: %p", backend->handle);
CFGLR_LOGD(TAG, "element: %p", element);
CFGLR_LOGD(TAG, "element->data: %p", element->data);
switch(element->datatype) {
case CFGLR_DATATYPE_U8:

View file

@ -27,7 +27,7 @@ element_list_node_t *cfglr_element_list_add(cfglr_handle_t *handle, cfglr_elemen
return element_list_add(handle->extra, node);
}
uint8_t cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) {
cfglr_element_t *cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) {
cfglr_signaler_t *signaler;
CFGLR_LOGI(TAG, "Initializing element: %s", element->key);
@ -60,7 +60,10 @@ uint8_t cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) {
} else {
CFGLR_LOGI(TAG, "failed to load %s, setting default", element->key);
if(element->data == NULL) {
memcpy((void*)&element->data, (void*)&element->default_data, element->default_size);
}
signal = CFGLR_SIGNAL_INIT;
if(handle->backend.set(&handle->backend, element, handle) != 0) {
@ -74,7 +77,7 @@ uint8_t cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) {
cfglr_element_list_add(handle, element);
return ++handle->element_count;
return element;
}
uint8_t cfglr_init(cfglr_handle_t *handle) {
@ -92,10 +95,14 @@ uint8_t cfglr_init(cfglr_handle_t *handle) {
CFGLR_LOGI(TAG, "initializing elements");
while((element = &handle->elements[handle->element_count])) {
uint8_t i = 0;
while((element = &handle->elements[i]) != NULL) {
if(element->key == NULL) break;
cfglr_add_element(handle, element);
i++;
}
return 0;