thermferm/rdconfig.c

changeset 83
f99e9d6deff5
parent 82
d48299405980
child 86
3d7a241329e2
--- a/thermferm/rdconfig.c	Thu Jun 26 21:00:21 2014 +0200
+++ b/thermferm/rdconfig.c	Thu Jun 26 21:26:33 2014 +0200
@@ -25,48 +25,13 @@
 
 int		debug = FALSE;
 static char	*mypath;
-static char	*k, *v;
-static int	linecnt = 0;
 sys_config	Config;			/* System configuration		*/
 
 #define MY_ENCODING "utf-8"
 
 const char      UNITMODE[5][8] = { "OFF", "NONE", "FRIDGE", "BEER", "PROFILE" };
 
-//static int getstr(char **);
-static int getw1(char **);
-#ifdef HAVE_WIRINGPI_H
-static int getint(char **);
-#endif
-static int getuch(char **);
-static int getfloat(char **);
-//static int getbyt(char **);
-//static int gethex(char **);
 
-#define XSTR(x) #x
-#define STR(x) XSTR(x)
-
-/*
- * System configuration table
- */
-key_list keytab[] = {
-    {(char *)"w1therm",			getw1,		(char **)&Config.w1therms},
-#ifdef HAVE_WIRINGPI_H
-    {(char *)"lcd_cols",		getint,		(char **)&Config.lcd_cols},
-    {(char *)"lcd_rows",		getint,		(char **)&Config.lcd_rows},
-#endif
-    {(char *)"cs_mode",			getuch,		(char **)&Config.cs_mode},
-    {(char *)"cs_beerSet",		getfloat,	(char **)&Config.cs_beerSet},
-    {(char *)"cs_fridgeSet",		getfloat,	(char **)&Config.cs_fridgeSet},
-    {(char *)"cs_heatEstimator",	getfloat,	(char **)&Config.cs_heatEstimator},
-    {(char *)"cs_coolEstimator",	getfloat,	(char **)&Config.cs_coolEstimator},
-    {(char *)"cc_tempFormat",		getuch,		(char **)&Config.tempFormat},
-    {(char *)"cc_tempSetMin",		getfloat,	(char **)&Config.cc_tempSetMin},
-    {(char *)"cc_tempSetMax",		getfloat,	(char **)&Config.cc_tempSetMax},
-    {(char *)"cc_idleRangeH",		getfloat,	(char **)&Config.cc_idleRangeH},
-    {(char *)"cc_idleRangeL",		getfloat,	(char **)&Config.cc_idleRangeL},
-    {NULL,				NULL,		NULL}
-};
 
 
 
@@ -123,7 +88,7 @@
 
 
 
-int wrconfig(char *config, char *confxml)
+int wrconfig(char *confxml)
 {
     int			rc = 0;
     FILE		*fp;
@@ -132,66 +97,6 @@
     w1_therm    	*tmp1;
     units_list		*tmp3;
 
-    if (getenv((char *)"USER") == NULL) {
-	mypath = xstrcpy((char *)"/root");
-    } else {
-    	mypath = xstrcpy(getenv((char *)"HOME"));
-    }
-    mypath = xstrcat(mypath, (char *)"/mbsepi-apps/");
-    mypath = xstrcat(mypath, config);
-
-    if (debug)
-	fprintf(stdout, "Writing %s\n", mypath);
-
-    if ((fp = fopen(mypath, "w")) == NULL) {
-	syslog(LOG_NOTICE, "could not rewrite %s", mypath);
-	return 1;
-    }
-
-    fprintf(fp, "# Configuration file for thermferm %s\n", VERSION);
-    fprintf(fp, "\n");
-
-#ifdef HAVE_WIRINGPI_H
-    fprintf(fp, "# LCD display\n");
-    fprintf(fp, "#\n");
-    fprintf(fp, "lcd_cols	%d\n", Config.lcd_cols);
-    fprintf(fp, "lcd_rows	%d\n", Config.lcd_rows);
-    fprintf(fp, "\n");
-#endif
-
-    fprintf(fp, "# DS18B20 temperature sensors on the 1-wire bus.\n");
-    fprintf(fp, "#\n");
-    fprintf(fp, "# kwd		master		bus	name		alias\n");
-    for (tmp1 = Config.w1therms; tmp1; tmp1 = tmp1->next) {
-	fprintf(fp, "w1therm		%s	%d	%s	%s\n", tmp1->master, tmp1->bus, tmp1->name, tmp1->alias);
-    }
-    fprintf(fp, "\n");
-
-    fprintf(fp, "# Control Settings.\n");
-    fprintf(fp, "#\n");
-    fprintf(fp, "cs_mode			%c\n", Config.cs_mode);
-    fprintf(fp, "cs_beerSet		%.1f\n", Config.cs_beerSet);
-    fprintf(fp, "cs_fridgeSet		%.1f\n", Config.cs_fridgeSet);
-    fprintf(fp, "cs_heatEstimator	%.1f\n", Config.cs_heatEstimator);
-    fprintf(fp, "cs_coolEstimator	%.1f\n", Config.cs_coolEstimator);
-    fprintf(fp, "\n");
-
-    fprintf(fp, "# Control Constants.\n");
-    fprintf(fp, "#\n");
-    fprintf(fp, "cc_tempFormat		%c\n", Config.tempFormat);
-    fprintf(fp, "cc_tempSetMin		%.1f\n", Config.cc_tempSetMin);
-    fprintf(fp, "cc_tempSetMax		%.1f\n", Config.cc_tempSetMax);
-    fprintf(fp, "cc_idleRangeH		%.1f\n", Config.cc_idleRangeH);
-    fprintf(fp, "cc_idleRangeL		%.1f\n", Config.cc_idleRangeL);
-    fprintf(fp, "\n");
-
-    fprintf(fp, "# End of generated configuration\n");
-    fclose(fp);
-    syslog(LOG_NOTICE, "Written %s rc=%d", mypath, rc);
-    free(mypath);
-    mypath = NULL;
-
-
     /* 
      * Create a new XML buffer, to which the XML document will be written
      */
@@ -776,16 +681,12 @@
 
 int rdconfig(char *config) 
 {
-//    char	buf[256], *p;
-//    FILE	*fp;
-//    int		i, rc = 0;
     int		rc = 0, ival;
     xmlDocPtr	doc;
     xmlNodePtr	cur;
     xmlChar	*key;
 
     killconfig();
-
     syslog(LOG_NOTICE, "HOME='%s' USER='%s' LOGNAME='%s'", MBSE_SS(getenv((char *)"HOME")), MBSE_SS(getenv((char *)"USER")), MBSE_SS(getenv((char *)"LOGNAME")));
 
     /*
@@ -799,7 +700,6 @@
     mypath = xstrcat(mypath, (char *)"/mbsepi-apps/");
     mypath = xstrcat(mypath, config);
     if ((doc = xmlParseFile(mypath)) == NULL) {
-    //if ((fp = fopen(mypath, "r")) == NULL) {
 	/*
 	 * Not in the users home directory
 	 */
@@ -807,7 +707,6 @@
 	mypath = xstrcpy((char *)"/etc/mbsepi-apps/");
 	mypath = xstrcat(mypath, config);
 	if ((doc = xmlParseFile(mypath)) == NULL) {
-	//if ((fp = fopen(mypath, "r")) == NULL) {
 	    /*
 	     * Try /usr/local/etc
 	     */
@@ -815,7 +714,6 @@
 	    mypath = xstrcpy((char *)"/usr/local/etc/mbsepi-apps/");
 	    mypath = xstrcat(mypath, config);
 	    if ((doc = xmlParseFile(mypath)) == NULL) {
-	    //if ((fp = fopen(mypath, "r")) == NULL) {
 		syslog(LOG_NOTICE, "rdconfig: could not parse %s", config);
 		return 1;
 	    }
@@ -829,7 +727,7 @@
 	return 1;
     }
     if (xmlStrcmp(cur->name, (const xmlChar*)"THERMFERM")) {
-	syslog(LOG_NOTICE, "XML file %s is not a valid configuration file.\n", mypath);
+	syslog(LOG_NOTICE, "XML file %s is not a valid configuration file.", mypath);
 	xmlFreeDoc(doc);
 	return 1;
     }
@@ -839,10 +737,15 @@
      */
     cur = cur->xmlChildrenNode;
     while (cur != NULL) {
-	    // VERSION LISTEN_PORT TEMPFORMAT LCDS FERMENTERS
-//	if ((!xmlStrcmp(cur->name, (const xmlChar *)"VERSION"))) {
-//	    recipe->name = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
-//	}
+	if ((!xmlStrcmp(cur->name, (const xmlChar *)"VERSION"))) {
+	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
+	    if (xmlStrcmp(key, (const xmlChar *)"1")) {
+		xmlFree(key);
+		syslog(LOG_NOTICE, "XML file %s is not a valid version", mypath);
+		return 1;
+	    }
+	    xmlFree(key);
+	}
 	if ((!xmlStrcmp(cur->name, (const xmlChar *)"LISTEN_PORT"))) {
 	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 	    if (sscanf((const char *)key, "%d", &ival) == 1)
@@ -869,50 +772,6 @@
     }
     xmlFreeDoc(doc);
 
-    /*
-    linecnt = 0;
-    while (fgets(buf, sizeof(buf) -1, fp)) {
-	linecnt++;
-	if (*(p = buf + strlen(buf) -1) != '\n') {
-	    syslog(LOG_NOTICE, "rdconfig: %s(%d): \"%s\" - line too long", mypath, linecnt, buf);
-	    rc = 1;
-	    break;
-	}
-	*p-- = '\0';
-	while ((p >= buf) && isspace(*p))
-	    *p-- = '\0';
-	k = buf;
-	while (*k && isspace(*k))
-	    k++;
-	p = k;
-	while (*p && !isspace(*p))
-	    p++;
-	*p++='\0';
-	v = p;
-	while (*v && isspace(*v)) 
-	    v++;
-
-	if ((*k == '\0') || (*k == '#')) {
-	    continue;
-	}
-
-	for (i = 0; keytab[i].key; i++)
-	    if (strcasecmp(k,keytab[i].key) == 0)
-		break;
-
-	if (keytab[i].key == NULL) {
-	    syslog(LOG_NOTICE, "rdconfig: %s(%d): %s %s - unknown keyword", mypath, linecnt, MBSE_SS(k), MBSE_SS(v));
-	    rc = 1;
-	    break;
-	} else if ((keytab[i].prc(keytab[i].dest))) {
-	    rc = 1;
-	    break;
-	}
-
-    }
-    fclose(fp);
-    */
-
     free(mypath);
     mypath = NULL;
 
@@ -921,149 +780,3 @@
 
 
 
-/*
-static int getstr(char **dest)
-{
-    if (debug)
-	syslog(LOG_NOTICE, "rdconfig: getstr: %s(%d): %s %s", mypath, linecnt, MBSE_SS(k), MBSE_SS(v));
-
-    *dest = xstrcpy(v);
-    return 0;
-}
-*/
-
-
-
-#ifdef HAVE_WIRINGPI_H
-static int getint(char **dest)
-{
-    if (debug)
-	syslog(LOG_NOTICE, "rdconfig: getint: %s(%d): %s %s", mypath, linecnt, MBSE_SS(k), MBSE_SS(v));
-
-    if (strspn(v,"0123456789") != strlen(v)) 
-	syslog(LOG_NOTICE, "rdconfig: %s(%d): %s %s - bad numeric", mypath, linecnt, MBSE_SS(k), MBSE_SS(v));
-    else 
-	*((int*)dest)=atoi(v);
-    return 0;
-}
-#endif
-
-
-
-static int getw1(char **dest)
-{
-    char	*p, *q = NULL, *r = NULL;
-    w1_therm	**tmpm;
-    int		rc = 0, tmpp;
-
-    for (p = v; *p && !isspace(*p); p++);
-    if (*p)
-	*p++ = '\0';
-    while (*p && isspace(*p))
-	p++;
-    if (*p == '\0') {
-	syslog(LOG_NOTICE, "rdconfig: %s(%d): less then two tokens", mypath, linecnt);
-	return 1;
-    }
-
-    for (q = p; *q && !isspace(*q); q++);
-    if (*q && isspace(*q)) {
-	if (*q)
-	    *q++ = '\0';
-	while (*q && isspace(*q))
-	    q++;
-
-	for (r = q; *r && !isspace(*r); r++);
-	if (*r)
-	    *r++ = '\0';
-	rc = sscanf(p, "%d", &tmpp);
-	if (rc != 1) {
-	    syslog(LOG_NOTICE, "rdconfig: getw1: %s(%d): %s is not a integer value", mypath, linecnt, p);
-	    return 1;
-	}
-	if (debug)
-	    syslog(LOG_NOTICE, "rdconfig: getw1: %s(%d): %s %d %s %s", mypath, linecnt, v, tmpp, q, r);
-    }
-
-    for (tmpm = (w1_therm**)dest; *tmpm; tmpm=&((*tmpm)->next));
-    (*tmpm) = (w1_therm *) xmalloc(sizeof(w1_therm));
-    (*tmpm)->next = NULL;
-    (*tmpm)->master = xstrcpy(v);
-    (*tmpm)->bus = tmpp;
-    (*tmpm)->name = xstrcpy(q);
-    (*tmpm)->alias = xstrcpy(r);
-    (*tmpm)->present = 0;
-    (*tmpm)->lastval = 0;
-    (*tmpm)->update = 0;
-
-    return 0;
-}
-
-
-
-static int getuch(char **dest)
-{
-    if (debug)
-	syslog(LOG_NOTICE, "rdconfig: getuch: %s(%d): %s %s", mypath, linecnt, MBSE_SS(k), MBSE_SS(v));
-
-    if (isalnum(v[0])) {
-	*((unsigned char*)dest) = v[0];
-    } else {
-	syslog(LOG_NOTICE, "rdconfig: %s(%d): %s %s - bad character", mypath, linecnt, MBSE_SS(k), MBSE_SS(v));
-    }
-    return 0;
-}
-
-
-
-static int getfloat(char **dest)
-{
-    float	val = 0.0;
-    int		rc;
-
-    if (debug)
-	syslog(LOG_NOTICE, "rdconfig: getfloat: %s(%d): %s %s", mypath, linecnt, MBSE_SS(k), MBSE_SS(v));
-
-    rc = sscanf(v, "%f", &val);
-    if (rc != 1) {
-	syslog(LOG_NOTICE, "rdconfig: %s(%d): %s %s - bad float value", mypath, linecnt, MBSE_SS(k), MBSE_SS(v));
-	return 1;
-    }
-    *((float*)dest) = val;
-
-    return 0;
-}
-
-
-/*
-static int getbyt(char **dest)
-{
-    Log_Msg("[rdconfig] getbyt: %s(%d): %s %s", mypath, linecnt, k, v);
-    if (strspn(v,"0123456789") != strlen(v))
-	Log_Msg("[rdconfig] %s(%d): %s %s - bad numeric", mypath, linecnt, S(k), S(v));
-    else
-	*((Uint8*)dest)=atoi(v);
-    return 0;
-}
-*/
-
-
-/*
-static int gethex(char **dest)
-{
-    unsigned int    val = 0;
-    int		    rc;
-
-    Log_Msg("[rdconfig] gethex: %s(%d): %s %s", mypath, linecnt, k, v);
-    rc = sscanf(v, "%08x", &val);
-    if (rc != 1) {
-	Log_Msg("[rdconfig] %s(%d): %s %s - bad hex value", mypath, linecnt, S(k), S(v));
-	return 1;
-    }
-    *((int*)dest) = val;
-
-    return 0;
-}
-*/
-
-

mercurial