thermferm/rdconfig.c

changeset 54
c06190a58f22
parent 53
37623517e0ef
child 55
11d7cc3bdf31
--- 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)
 {

mercurial