better(?) handling of signals around init and loading, config/handle separation is needed
This commit is contained in:
parent
fbedf09aaf
commit
e507e41ac3
2 changed files with 14 additions and 11 deletions
|
|
@ -8,9 +8,11 @@
|
||||||
#define CFGLR_SIGNALERS_MAX (04)
|
#define CFGLR_SIGNALERS_MAX (04)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CFGLR_SIGNAL_LOADED = 0,
|
CFGLR_SIGNAL_INIT = 0,
|
||||||
|
CFGLR_SIGNAL_LOADED,
|
||||||
CFGLR_SIGNAL_CHANGE,
|
CFGLR_SIGNAL_CHANGE,
|
||||||
CFGLR_SIGNAL_DELETE,
|
CFGLR_SIGNAL_DELETE,
|
||||||
|
CFGLR_SIGNAL_FAILED,
|
||||||
} cfglr_signal_e;
|
} cfglr_signal_e;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
CFGLR_LOGI(TAG, "size: %d", element->datatype_size);
|
||||||
|
|
||||||
element->handle = handle;
|
element->handle = handle;
|
||||||
|
|
||||||
if(element->data == NULL) {
|
if(element->data == NULL) {
|
||||||
element->data = (void*)malloc(element->datatype_size);
|
element->data = (void*)malloc(element->datatype_size);
|
||||||
bzero(element->data, 0);
|
bzero(element->data, 0);
|
||||||
CFGLR_LOGD(TAG, "malloc: %d @ %p", element->datatype_size, element->data);
|
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])) {
|
while((signaler = &element->signalers[element->signaler_count])) {
|
||||||
if(signaler->init == NULL && signaler->dispatch == NULL) break;
|
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++;
|
element->signaler_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dispatch = false;
|
cfglr_signal_e signal;
|
||||||
|
|
||||||
if(handle->backend.get(&handle->backend, element, handle) == 0) {
|
if(handle->backend.get(&handle->backend, element, handle) == 0) {
|
||||||
dispatch = true;
|
signal = CFGLR_SIGNAL_LOADED;
|
||||||
} else {
|
} else {
|
||||||
CFGLR_LOGI(TAG, "failed to load %s, setting default", element->key);
|
CFGLR_LOGI(TAG, "failed to load %s, setting default", element->key);
|
||||||
|
|
||||||
memcpy((void*)&element->data, (void*)&element->default_data, element->default_size);
|
memcpy((void*)&element->data, (void*)&element->default_data, element->default_size);
|
||||||
if(handle->backend.set(&handle->backend, element, handle) == 0) {
|
signal = CFGLR_SIGNAL_INIT;
|
||||||
dispatch = true;
|
|
||||||
|
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++) {
|
for(uint8_t i = 0; i < element->signaler_count; i++) {
|
||||||
element->signalers[i].dispatch(&element->signalers[i], element, CFGLR_SIGNAL_LOADED);
|
element->signalers[i].dispatch(&element->signalers[i], element, signal);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ++handle->element_count;
|
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 cfglr_commit_data(cfglr_backend_t *backend, cfglr_element_t *element, cfglr_handle_t *handle) {
|
||||||
uint16_t ret = backend->set(backend, element, 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) {
|
if(ret == 0) {
|
||||||
for(uint8_t i = 0; i < element->signaler_count; i++) {
|
for(uint8_t i = 0; i < element->signaler_count; i++) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue