guess were doing link lists now
This commit is contained in:
parent
e507e41ac3
commit
7f44da58b5
3 changed files with 49 additions and 9 deletions
|
|
@ -1,5 +1,9 @@
|
||||||
set(REQUIRES "")
|
set(REQUIRES "")
|
||||||
set(SRCS src/configulator.c src/cfglr_signal_callback.c)
|
set(SRCS
|
||||||
|
src/configulator.c
|
||||||
|
src/cfglr_signal_callback.c
|
||||||
|
src/element_list.c
|
||||||
|
)
|
||||||
|
|
||||||
if(${ESP_PLATFORM})
|
if(${ESP_PLATFORM})
|
||||||
list(APPEND REQUIRES nvs_flash esp_event)
|
list(APPEND REQUIRES nvs_flash esp_event)
|
||||||
|
|
|
||||||
|
|
@ -30,9 +30,10 @@ typedef enum {
|
||||||
|
|
||||||
#define CFGLR_DATATYPE_COUNT (uint8_t)(CFGLR_DATATYPE_BIN - CFGLR_DATATYPE_U8)
|
#define CFGLR_DATATYPE_COUNT (uint8_t)(CFGLR_DATATYPE_BIN - CFGLR_DATATYPE_U8)
|
||||||
|
|
||||||
typedef struct cfglr_signaler cfglr_signaler_t;
|
typedef struct cfglr_config cfglr_config_t;
|
||||||
typedef struct cfglr_handle_struct cfglr_handle_t;
|
|
||||||
typedef struct cfglr_element cfglr_element_t;
|
typedef struct cfglr_element cfglr_element_t;
|
||||||
|
typedef struct cfglr_handle cfglr_handle_t;
|
||||||
|
typedef struct cfglr_signaler cfglr_signaler_t;
|
||||||
|
|
||||||
typedef void (*cfglr_signaler_init_t)(cfglr_signaler_t *signaler, cfglr_element_t *element, cfglr_handle_t *handle);
|
typedef void (*cfglr_signaler_init_t)(cfglr_signaler_t *signaler, cfglr_element_t *element, cfglr_handle_t *handle);
|
||||||
typedef void (*cfglr_signaler_dispatch_t)(cfglr_signaler_t *signaler, cfglr_element_t *element, cfglr_signal_e sig);
|
typedef void (*cfglr_signaler_dispatch_t)(cfglr_signaler_t *signaler, cfglr_element_t *element, cfglr_signal_e sig);
|
||||||
|
|
@ -120,16 +121,24 @@ struct cfglr_backend {
|
||||||
.set = SET,\
|
.set = SET,\
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cfglr_handle_struct {
|
struct cfglr_config {
|
||||||
const char *namespace;
|
const char *namespace;
|
||||||
// TODO cleanup, what is store_default for?
|
|
||||||
uint8_t store_default;
|
|
||||||
uint8_t backend_count;
|
uint8_t backend_count;
|
||||||
uint8_t element_count;
|
uint8_t element_count;
|
||||||
cfglr_backend_t backend;
|
cfglr_backend_t backend;
|
||||||
cfglr_element_t elements[CFGLR_ELEMENTS_MAX];
|
cfglr_element_t elements[CFGLR_ELEMENTS_MAX];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct cfglr_handle {
|
||||||
|
const char *namespace;
|
||||||
|
uint8_t backend_count;
|
||||||
|
uint8_t element_count;
|
||||||
|
cfglr_backend_t backend;
|
||||||
|
cfglr_element_t elements[CFGLR_ELEMENTS_MAX];
|
||||||
|
void *extra;
|
||||||
|
};
|
||||||
|
|
||||||
extern cfglr_handle_t *configulator;
|
extern cfglr_handle_t *configulator;
|
||||||
|
|
||||||
uint8_t cfglr_init(cfglr_handle_t *handle);
|
uint8_t cfglr_init(cfglr_handle_t *handle);
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,32 @@
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "configulator.h"
|
#include "configulator.h"
|
||||||
#include "cfglr_log.h"
|
#include "cfglr_log.h"
|
||||||
|
#include "element_list.h"
|
||||||
|
|
||||||
#define TAG "CFGLR"
|
#define TAG "CFGLR"
|
||||||
|
|
||||||
cfglr_handle_t *configulator;
|
cfglr_handle_t *configulator;
|
||||||
|
|
||||||
|
element_list_node_t *cfglr_element_list_add(cfglr_handle_t *handle, cfglr_element_t *element) {
|
||||||
|
element_list_node_t *node = malloc(sizeof(element_list_node_t));
|
||||||
|
bzero(node, sizeof(element_list_node_t));
|
||||||
|
|
||||||
|
node->element = element;
|
||||||
|
|
||||||
|
// initiaze the first node
|
||||||
|
// it is only first/last
|
||||||
|
if(handle->extra == NULL) {
|
||||||
|
handle->extra = node;
|
||||||
|
|
||||||
|
node->first = node;
|
||||||
|
node->last = node;
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
return element_list_add(handle->extra, node);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) {
|
uint8_t cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) {
|
||||||
cfglr_signaler_t *signaler;
|
cfglr_signaler_t *signaler;
|
||||||
|
|
||||||
|
|
@ -51,6 +72,8 @@ uint8_t cfglr_add_element(cfglr_handle_t *handle, cfglr_element_t *element) {
|
||||||
element->signalers[i].dispatch(&element->signalers[i], element, signal);
|
element->signalers[i].dispatch(&element->signalers[i], element, signal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cfglr_element_list_add(handle, element);
|
||||||
|
|
||||||
return ++handle->element_count;
|
return ++handle->element_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -102,13 +125,17 @@ uint16_t cfglr_commit_data(cfglr_backend_t *backend, cfglr_element_t *element, c
|
||||||
|
|
||||||
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 *element;
|
cfglr_element_t *element;
|
||||||
|
element_list_node_t *node = handle->extra;
|
||||||
|
node = node->first;
|
||||||
|
|
||||||
uint8_t i = 0;
|
while(node) {
|
||||||
for(; i < handle->element_count; i++) {
|
element = node->element;
|
||||||
element = &handle->elements[i];
|
|
||||||
|
|
||||||
CFGLR_LOGI(TAG, "element: %s @ %p", element->key, element);
|
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;
|
||||||
|
|
||||||
|
node = node->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue