From d69cf82a079f93ae1109f70fd011a0efa75b44b5 Mon Sep 17 00:00:00 2001 From: Joshua Allen Date: Wed, 8 Mar 2017 21:17:50 -0500 Subject: shoehorn configuration into SurviveContext --- calibrate.c | 1 - calibrate_client.c | 4 ++-- include/libsurvive/survive.h | 5 +++++ src/survive.c | 21 ++++++++++++++++++++- src/survive_cal.c | 2 +- src/survive_config.c | 45 ++++++++++++++++++++++++++++++-------------- src/survive_config.h | 20 ++++++++++++-------- 7 files changed, 71 insertions(+), 27 deletions(-) diff --git a/calibrate.c b/calibrate.c index c557251..82da7a7 100644 --- a/calibrate.c +++ b/calibrate.c @@ -147,7 +147,6 @@ void * GuiThread( void * v ) int main() { ctx = survive_init( 0 ); - config_init(); survive_install_light_fn( ctx, my_light_process ); survive_install_imu_fn( ctx, my_imu_process ); diff --git a/calibrate_client.c b/calibrate_client.c index b15b9db..f28520b 100644 --- a/calibrate_client.c +++ b/calibrate_client.c @@ -141,7 +141,7 @@ void * GuiThread( void * v ) int main() { - +/* config_init(); config_read("config.json"); config_set_str(&global_config_values, "Hello","World!"); @@ -156,7 +156,7 @@ int main() // config_save("config.json"); - +*/ ctx = survive_init( 1 ); diff --git a/include/libsurvive/survive.h b/include/libsurvive/survive.h index 7fd6046..03249e9 100644 --- a/include/libsurvive/survive.h +++ b/include/libsurvive/survive.h @@ -77,6 +77,8 @@ struct BaseStationData FLT fcalgibmag[2]; }; +struct config_group; + struct SurviveContext { text_feedback_func faultfunction; @@ -85,6 +87,9 @@ struct SurviveContext imu_process_func imuproc; angle_process_func angleproc; + struct config_group* global_config_values; + struct config_group* lh_config; //lighthouse configs + //Calibration data: BaseStationData bsd[NUM_LIGHTHOUSES]; diff --git a/src/survive.c b/src/survive.c index efa5d82..09eb432 100644 --- a/src/survive.c +++ b/src/survive.c @@ -8,6 +8,8 @@ #include #include +#include "survive_config.h" + static void survivefault( struct SurviveContext * ctx, const char * fault ) { fprintf( stderr, "Error: %s\n", fault ); @@ -26,6 +28,14 @@ SurviveContext * survive_init( int headless ) int i = 0; SurviveContext * ctx = calloc( 1, sizeof( SurviveContext ) ); + ctx->global_config_values = malloc( sizeof(config_group) ); + ctx->lh_config = malloc( sizeof(config_group) * NUM_LIGHTHOUSES); + + init_config_group(ctx->global_config_values,10); + init_config_group(ctx->lh_config,10); + + config_read(ctx, "config.json"); + ctx->faultfunction = survivefault; ctx->notefunction = survivenote; @@ -43,7 +53,7 @@ SurviveContext * survive_init( int headless ) } i = 0; - const char * PreferredPoser = "PoserDummy"; //config_read_str( cg, "DefualtPoser", "PoserDummy" ); /XXX Axlecrusher, can you add config stuff for this? + const char * PreferredPoser = config_read_str( ctx->global_config_values, "DefualtPoser", "PoserDummy" ); PoserCB PreferredPoserCB = 0; const char * FirstPoser = 0; printf( "Available posers:\n" ); @@ -169,11 +179,20 @@ void survive_close( SurviveContext * ctx ) ctx->drivercloses[i]( ctx, ctx->drivers[i] ); } + + config_save(ctx, "config.json"); + + destroy_config_group(ctx->global_config_values); + destroy_config_group(ctx->lh_config); + free( ctx->objs ); free( ctx->drivers ); free( ctx->driverpolls ); free( ctx->drivermagics ); free( ctx->drivercloses ); + free( ctx->global_config_values ); + free( ctx->lh_config ); + free( ctx ); } diff --git a/src/survive_cal.c b/src/survive_cal.c index 2acf51c..06914eb 100644 --- a/src/survive_cal.c +++ b/src/survive_cal.c @@ -52,7 +52,7 @@ void ootx_packet_clbk_d(ootx_decoder_context *ct, ootx_packet* packet) b->fcalgibmag[1] = v6.fcal_1_gibmag; b->OOTXSet = 1; - config_set_lighthouse(b,id); + config_set_lighthouse(ctx->lh_config,b,id); // config_save("config.json"); } diff --git a/src/survive_config.c b/src/survive_config.c index 4de6a3a..de0530b 100644 --- a/src/survive_config.c +++ b/src/survive_config.c @@ -9,8 +9,8 @@ #define MAX_CONFIG_ENTRIES 100 #define MAX_LIGHTHOUSES 2 -config_group global_config_values; -config_group lh_config[MAX_LIGHTHOUSES]; //lighthouse configs +//config_group global_config_values; +//config_group lh_config[MAX_LIGHTHOUSES]; //lighthouse configs //static uint16_t used_entries = 0; @@ -40,6 +40,17 @@ void init_config_group(config_group *cg, uint16_t count) { } } +void destroy_config_group(config_group* cg) { + uint16_t i = 0; + if (cg->config_entries==NULL) return; + + for (i=0;imax_entries;++i) { + destroy_config_entry(cg->config_entries+i); + } + + free(cg->config_entries); +} + void resize_config_group(config_group *cg, uint16_t count) { uint16_t i = 0; @@ -57,6 +68,7 @@ void resize_config_group(config_group *cg, uint16_t count) { } } +/* void config_init() { uint16_t i = 0; init_config_group(&global_config_values, MAX_CONFIG_ENTRIES); @@ -64,9 +76,9 @@ void config_init() { init_config_group(lh_config+i, 9); } } +*/ - -void config_set_lighthouse(BaseStationData* bsd, uint8_t idx) { +void config_set_lighthouse(config_group* lh_config, BaseStationData* bsd, uint8_t idx) { config_group *cg = lh_config+idx; config_set_uint32(cg,"index", idx); config_set_uint32(cg,"id", bsd->BaseStationID); @@ -123,7 +135,7 @@ FLT config_read_float(config_group *cg, const char *tag, const FLT def) { return config_set_float(cg, tag, def); } -uint16_t config_read_float_array(config_group *cg, const char *tag, FLT** values, const FLT* def, uint16_t count) { +uint16_t config_read_float_array(config_group *cg, const char *tag, const FLT** values, const FLT* def, uint16_t count) { config_entry *cv = find_config_entry(cg, tag); if (cv != NULL) { @@ -236,14 +248,17 @@ void write_config_group(FILE* f, config_group *cg, char *tag) { } } -void config_save(const char* path) { +//struct SurviveContext; +SurviveContext* survive_context; + +void config_save(SurviveContext* sctx, const char* path) { uint16_t i = 0; FILE* f = fopen(path, "w"); - write_config_group(f,&global_config_values, NULL); - write_config_group(f,lh_config, "lighthouse0"); - write_config_group(f,lh_config+1, "lighthouse1"); + write_config_group(f,sctx->global_config_values, NULL); + write_config_group(f,sctx->lh_config, "lighthouse0"); + write_config_group(f,sctx->lh_config+1, "lighthouse1"); fclose(f); } @@ -261,11 +276,11 @@ uint8_t cg_stack_head = 0; void handle_config_group(char* tag) { cg_stack_head++; if (strcmp("lighthouse0",tag) == 0) { - cg_stack[cg_stack_head] = lh_config; + cg_stack[cg_stack_head] = survive_context->lh_config; } else if (strcmp("lighthouse1",tag) == 0) { - cg_stack[cg_stack_head] = lh_config+1; + cg_stack[cg_stack_head] = survive_context->lh_config+1; } else { - cg_stack[cg_stack_head] = &global_config_values; + cg_stack[cg_stack_head] = survive_context->global_config_values; } } @@ -343,12 +358,14 @@ void handle_tag_value(char* tag, char** values, uint16_t count) { // else if (count>1) config_set_str } -void config_read(const char* path) { +void config_read(SurviveContext* sctx, const char* path) { + survive_context = sctx; + json_begin_object = handle_config_group; json_end_object = pop_config_group; json_tag_value = handle_tag_value; - cg_stack[0] = &global_config_values; + cg_stack[0] = sctx->global_config_values; json_load_file(path); diff --git a/src/survive_config.h b/src/survive_config.h index cd16c76..c8c7762 100644 --- a/src/survive_config.h +++ b/src/survive_config.h @@ -26,29 +26,33 @@ typedef struct { uint32_t elements; } config_entry; -typedef struct { +typedef struct config_group { config_entry *config_entries; uint16_t used_entries; uint16_t max_entries; } config_group; -extern config_group global_config_values; -extern config_group lh_config[2]; //lighthouse configs +//extern config_group global_config_values; +//extern config_group lh_config[2]; //lighthouse configs +void init_config_group(config_group *cg, uint16_t count); +void destroy_config_group(config_group* cg); -void config_init(); +//void config_init(); //void config_open(const char* path, const char* mode); -void config_read(const char* path); + //void config_write_lighthouse(struct BaseStationData* bsd, uint8_t length); -void config_set_lighthouse(BaseStationData* bsd, uint8_t idx); +void config_set_lighthouse(config_group* lh_config, BaseStationData* bsd, uint8_t idx); + +void config_read(SurviveContext* sctx, const char* path); +void config_save(SurviveContext* sctx, const char* path); -void config_save(const char* path); const FLT config_set_float(config_group *cg, const char *tag, const FLT value); const uint32_t config_set_uint32(config_group *cg, const char *tag, const uint32_t value); const char* config_set_str(config_group *cg, const char *tag, const char* value); FLT config_read_float(config_group *cg, const char *tag, const FLT def); -uint16_t config_read_float_array(config_group *cg, const char *tag, FLT** values, const FLT* def, uint16_t count); +uint16_t config_read_float_array(config_group *cg, const char *tag, const FLT** values, const FLT* def, uint16_t count); uint32_t config_read_uint32(config_group *cg, const char *tag, const uint32_t def); const char* config_read_str(config_group *cg, const char *tag, const char *def); -- cgit v1.2.3