00001 #include <config.h>
00002
00003 #include <conf.h>
00004 #include <string.h>
00005
00006 #include <drivers/drivers.h>
00007 #include <confuse.h>
00008
00010 conf_t conf;
00011
00013
00017 static int set_conf_driver_by_name(char *name) {
00018 size_t i;
00019
00020 for(i = 0; drivers[i].name != NULL; i++) {
00021 if(strcasecmp(name, drivers[i].name) == 0) {
00022 conf.driver = &(drivers[i]);
00023 return 0;
00024 }
00025 }
00026
00027 return -1;
00028 }
00029
00031
00035 int read_conf(char *filename) {
00036 int result;
00037 cfg_t *cfg;
00038
00039 cfg_opt_t opts[] = {
00040 CFG_STR("driver", "null", CFGF_NONE),
00041
00042 CFG_STR("server", "192.168.1.200", CFGF_NONE),
00043 CFG_INT("port", 5000, CFGF_NONE),
00044
00045 CFG_STR("recording_prefix", "recording", CFGF_NONE),
00046
00047 CFG_FLOAT("steering_offset", 0.0, CFGF_NONE),
00048
00049 CFG_END()
00050 };
00051
00052 cfg = cfg_init(opts, CFGF_NOCASE);
00053 if(filename == NULL) {
00054
00055 result = cfg_parse_buf(cfg, "");
00056 } else {
00057 result = cfg_parse(cfg, filename);
00058 }
00059 if(result == CFG_FILE_ERROR) {
00060 perror("Error reading configuration file: ");
00061 return -1;
00062 } else if(result == CFG_PARSE_ERROR) {
00063 fprintf(stderr, "Error parsing configuration file\n");
00064 return -1;
00065 }
00066
00067 #define CONF_STR(name) conf.name = strdup(cfg_getstr(cfg, #name));
00068 #define CONF_INT(name) conf.name = cfg_getint(cfg, #name);
00069 #define CONF_FLOAT(name) conf.name = cfg_getfloat(cfg, #name);
00070 #define CONF_BOOL(name) conf.name = cfg_getbool(cfg, #name);
00071
00072 result = set_conf_driver_by_name(cfg_getstr(cfg, "driver"));
00073 if(result < 0) {
00074 fprintf(stderr, "Invalid driver name in configuration file\n");
00075 return -1;
00076 }
00077
00078 CONF_STR(server);
00079 CONF_INT(port);
00080
00081 CONF_STR(recording_prefix);
00082
00083 CONF_FLOAT(steering_offset);
00084
00085 cfg_free(cfg);
00086 return 0;
00087 }