Compare commits
No commits in common. "5aeff5d0ce651a98a9a80f0e281fe55a5863e688" and "425d7789dd386a58043ff743790f05d5d64c605c" have entirely different histories.
5aeff5d0ce
...
425d7789dd
1 changed files with 42 additions and 50 deletions
|
|
@ -4,54 +4,10 @@
|
||||||
|
|
||||||
#define TAG "CFGLR"
|
#define TAG "CFGLR"
|
||||||
|
|
||||||
uint8_t cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) {
|
|
||||||
cfglr_signaler_t *signaler;
|
|
||||||
|
|
||||||
CFGLR_LOGI(TAG, "Initializing element: %s", element->key);
|
|
||||||
CFGLR_LOGI(TAG, "size: %d", element->datatype_size);
|
|
||||||
|
|
||||||
element->handle = handle;
|
|
||||||
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);
|
|
||||||
|
|
||||||
while((signaler = &element->signalers[element->signaler_count])) {
|
|
||||||
if(signaler->init == NULL && signaler->dispatch == NULL) break;
|
|
||||||
|
|
||||||
if(signaler->init != NULL) {
|
|
||||||
signaler->init(signaler, element, handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
element->signaler_count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool dispatch = false;
|
|
||||||
|
|
||||||
if(handle->backend.get(&handle->backend, element, handle) == 0) {
|
|
||||||
dispatch = true;
|
|
||||||
} 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(dispatch) {
|
|
||||||
for(uint8_t i = 0; i < element->signaler_count; i++) {
|
|
||||||
element->signalers[i].dispatch(&element->signalers[i], element, CFGLR_SIGNAL_LOADED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ++handle->element_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t cfglr_init(cfglr_handle_t *handle) {
|
uint8_t cfglr_init(cfglr_handle_t *handle) {
|
||||||
cfglr_backend_t *backend = &handle->backend;
|
cfglr_backend_t *backend = &handle->backend;
|
||||||
cfglr_element_t *element;
|
cfglr_element_t *element;
|
||||||
|
cfglr_signaler_t *signaler;
|
||||||
|
|
||||||
handle->element_count = 0;
|
handle->element_count = 0;
|
||||||
|
|
||||||
|
|
@ -67,7 +23,46 @@ uint8_t cfglr_init(cfglr_handle_t *handle) {
|
||||||
while((element = &handle->elements[handle->element_count])) {
|
while((element = &handle->elements[handle->element_count])) {
|
||||||
if(element->key == NULL) break;
|
if(element->key == NULL) break;
|
||||||
|
|
||||||
cfglr_add_element(handle, element);
|
CFGLR_LOGI(TAG, "Initializing element: %s", element->key);
|
||||||
|
CFGLR_LOGI(TAG, "size: %d", element->datatype_size);
|
||||||
|
|
||||||
|
element->handle = handle;
|
||||||
|
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);
|
||||||
|
|
||||||
|
while((signaler = &element->signalers[element->signaler_count])) {
|
||||||
|
if(signaler->init == NULL && signaler->dispatch == NULL) break;
|
||||||
|
|
||||||
|
if(signaler->init != NULL) {
|
||||||
|
signaler->init(signaler, element, handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
element->signaler_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dispatch = false;
|
||||||
|
|
||||||
|
if(handle->backend.get(&handle->backend, element, handle) == 0) {
|
||||||
|
dispatch = true;
|
||||||
|
} 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(dispatch) {
|
||||||
|
for(uint8_t i = 0; i < element->signaler_count; i++) {
|
||||||
|
element->signalers[i].dispatch(&element->signalers[i], element, CFGLR_SIGNAL_LOADED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++handle->element_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -99,10 +94,7 @@ cfglr_element_t * cfglr_get_element(cfglr_handle_t *handle, const char *name) {
|
||||||
cfglr_element_t *element;
|
cfglr_element_t *element;
|
||||||
|
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
for(; i < handle->element_count; i++) {
|
while((element = &handle->elements[i++]) != NULL) {
|
||||||
element = &handle->elements[i];
|
|
||||||
|
|
||||||
CFGLR_LOGI(TAG, "element: %s @ %p", element->key, element);
|
|
||||||
if(strcmp(element->key, name) == 0) return element;
|
if(strcmp(element->key, name) == 0) return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue