diff -r 37623517e0ef -r c06190a58f22 thermferm/rdconfig.c --- a/thermferm/rdconfig.c Sun May 25 23:29:07 2014 +0200 +++ b/thermferm/rdconfig.c Mon May 26 23:25:48 2014 +0200 @@ -37,6 +37,8 @@ #ifdef HAVE_WIRINGPI_H static int getrcs(char **); #endif +static int getuch(char **); +static int getfloat(char **); //static int getbyt(char **); //static int gethex(char **); @@ -47,12 +49,22 @@ * System configuration table */ key_list keytab[] = { - {(char *)"w1therm", getw1, (char **)&Config.w1therms}, - {(char *)"lcd_cols", getint, (char **)&Config.lcd_cols}, - {(char *)"lcd_rows", getint, (char **)&Config.lcd_rows}, - {(char *)"tx433", getint, (char **)&Config.tx433}, - {(char *)"rcswitch", getrcs, (char **)&Config.rcswitch}, - {NULL, NULL, NULL} + {(char *)"w1therm", getw1, (char **)&Config.w1therms}, + {(char *)"lcd_cols", getint, (char **)&Config.lcd_cols}, + {(char *)"lcd_rows", getint, (char **)&Config.lcd_rows}, + {(char *)"tx433", getint, (char **)&Config.tx433}, + {(char *)"rcswitch", getrcs, (char **)&Config.rcswitch}, + {(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.cc_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} }; @@ -96,6 +108,7 @@ Config.rcswitch = NULL; defaultControlSettings(); + defaultControlConstants(); } @@ -149,6 +162,24 @@ } 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.cc_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); @@ -362,6 +393,41 @@ #endif + +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) {