From e507e41ac3d51d0d2edc7dc321a3db1379e7fba1 Mon Sep 17 00:00:00 2001 From: morgan Date: Mon, 3 Aug 2026 19:17:35 -0700 Subject: [PATCH] better(?) handling of signals around init and loading, config/handle separation is needed --- include/configulator.h | 4 +++- src/configulator.c | 21 +++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/include/configulator.h b/include/configulator.h index 685969d..a43e5c1 100644 --- a/include/configulator.h +++ b/include/configulator.h @@ -8,9 +8,11 @@ #define CFGLR_SIGNALERS_MAX (04) typedef enum { - CFGLR_SIGNAL_LOADED = 0, + CFGLR_SIGNAL_INIT = 0, + CFGLR_SIGNAL_LOADED, CFGLR_SIGNAL_CHANGE, CFGLR_SIGNAL_DELETE, + CFGLR_SIGNAL_FAILED, } cfglr_signal_e; typedef enum { diff --git a/src/configulator.c b/src/configulator.c index c2968c1..296642c 100644 --- a/src/configulator.c +++ b/src/configulator.c @@ -13,13 +13,14 @@ uint8_t cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) { CFGLR_LOGI(TAG, "size: %d", element->datatype_size); element->handle = handle; + if(element->data == NULL) { element->data = (void*)malloc(element->datatype_size); bzero(element->data, 0); CFGLR_LOGD(TAG, "malloc: %d @ %p", element->datatype_size, element->data); } - //CFGLR_LOGI(TAG, "element->data: %p", element->data); + CFGLR_LOGD(TAG, "Initializing %d Signalers", element->signaler_count); while((signaler = &element->signalers[element->signaler_count])) { if(signaler->init == NULL && signaler->dispatch == NULL) break; @@ -31,23 +32,23 @@ uint8_t cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) { element->signaler_count++; } - bool dispatch = false; + cfglr_signal_e signal; if(handle->backend.get(&handle->backend, element, handle) == 0) { - dispatch = true; + signal = CFGLR_SIGNAL_LOADED; } else { CFGLR_LOGI(TAG, "failed to load %s, setting default", element->key); memcpy((void*)&element->data, (void*)&element->default_data, element->default_size); - if(handle->backend.set(&handle->backend, element, handle) == 0) { - dispatch = true; + signal = CFGLR_SIGNAL_INIT; + + if(handle->backend.set(&handle->backend, element, handle) != 0) { + signal = CFGLR_SIGNAL_FAILED; } } - if(dispatch) { - for(uint8_t i = 0; i < element->signaler_count; i++) { - element->signalers[i].dispatch(&element->signalers[i], element, CFGLR_SIGNAL_LOADED); - } + for(uint8_t i = 0; i < element->signaler_count; i++) { + element->signalers[i].dispatch(&element->signalers[i], element, signal); } return ++handle->element_count; @@ -88,7 +89,7 @@ uint16_t cfglr_commit(cfglr_element_t *element) { uint16_t cfglr_commit_data(cfglr_backend_t *backend, cfglr_element_t *element, cfglr_handle_t *handle) { uint16_t ret = backend->set(backend, element, handle); - CFGLR_LOGI(TAG, "%s = %d (ret %d) %p", element->key, (uint8_t)&element->data, ret, element->data); + CFGLR_LOGI(TAG, "commit: %s->%s", handle->namespace, element->key); if(ret == 0) { for(uint8_t i = 0; i < element->signaler_count; i++) {