Main Page | Data Structures | Directories | File List | Data Fields | Globals

conf.c

Go to the documentation of this file.
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         // Read an empty configuration to get the default values
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 }

Generated on Thu Sep 6 13:13:11 2007 for driver by  doxygen 1.3.9.1