aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Allen <axlecrusher@gmail.com>2017-03-08 21:17:50 -0500
committerJoshua Allen <axlecrusher@gmail.com>2017-03-08 21:17:50 -0500
commitd69cf82a079f93ae1109f70fd011a0efa75b44b5 (patch)
tree3de2e5df69576f67e9db2a3861d5571b85415f3d
parent26f55787820874629519c589f7c7c1ba1334ef54 (diff)
downloadlibsurvive-d69cf82a079f93ae1109f70fd011a0efa75b44b5.tar.gz
libsurvive-d69cf82a079f93ae1109f70fd011a0efa75b44b5.tar.bz2
shoehorn configuration into SurviveContext
-rw-r--r--calibrate.c1
-rw-r--r--calibrate_client.c4
-rw-r--r--include/libsurvive/survive.h5
-rw-r--r--src/survive.c21
-rw-r--r--src/survive_cal.c2
-rw-r--r--src/survive_config.c45
-rw-r--r--src/survive_config.h20
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 <string.h>
#include <zlib.h>
+#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;i<cg->max_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);