diff --git a/include/configulator.h b/include/configulator.h index 970055d..10c19b6 100644 --- a/include/configulator.h +++ b/include/configulator.h @@ -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" diff --git a/src/cfglr_nvs.c b/src/cfglr_nvs.c index ab54876..6fca65a 100644 --- a/src/cfglr_nvs.c +++ b/src/cfglr_nvs.c @@ -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: diff --git a/src/configulator.c b/src/configulator.c index 1e97500..5321ee0 100644 --- a/src/configulator.c +++ b/src/configulator.c @@ -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); - memcpy((void*)&element->data, (void*)&element->default_data, element->default_size); + 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;