diff -r d48299405980 -r f99e9d6deff5 thermferm/rdconfig.c --- 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; -} -*/ - -