brewco/rdconfig.c

changeset 438
7d1ec160d751
parent 435
4b1ed6897d80
child 441
bde74a8f2ad7
--- a/brewco/rdconfig.c	Fri Nov 27 22:00:23 2015 +0100
+++ b/brewco/rdconfig.c	Fri Nov 27 22:56:00 2015 +0100
@@ -42,9 +42,6 @@
 {
     units_list          *unit;
     devices_list        *device;
-#ifdef USE_SIMULATOR
-    simulator_list      *simulator;
-#endif
 
     if (Config.name)
 	free(Config.name);
@@ -95,14 +92,9 @@
     Config.devices = NULL;
 
 #ifdef USE_SIMULATOR
-    for (simulator = Config.simulators; simulator; simulator = simulator->next) {
-        if (simulator->uuid)
-            free(simulator->uuid);
-        if (simulator->name)
-            free(simulator->name);
-        free(simulator);
-    }
-    Config.simulators = NULL;
+    if (Config.simulator)
+	free(Config.simulator);
+    Config.simulator = NULL;
 #endif
 }
 
@@ -118,9 +110,6 @@
     xmlBufferPtr	buf;
     units_list		*unit;
     devices_list	*device;
-#ifdef USE_SIMULATOR
-    simulator_list      *simulator;
-#endif
 
     /* 
      * Create a new XML buffer, to which the XML document will be written
@@ -602,34 +591,66 @@
     }
 
 #ifdef USE_SIMULATOR
-    if (Config.simulators) {
-        if ((rc = xmlTextWriterStartElement(writer, BAD_CAST "SIMULATORS")) < 0) {
-            syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterStartElement");
+    if (Config.simulator) {
+        if ((rc = xmlTextWriterStartElement(writer, BAD_CAST "SIMULATOR")) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterStartElement");
+	    return 1;
+        }
+        if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ROOM_TEMPERATURE", "%f", Config.simulator->room_temperature)) < 0) {
+            syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
             return 1;
         }
-        for (simulator = Config.simulators; simulator; simulator = simulator->next) {
-            if ((rc = xmlTextWriterStartElement(writer, BAD_CAST "SIMULATOR")) < 0) {
-                syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterStartElement");
-                return 1;
-            }
-            if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "VERSION", "%d", simulator->version)) < 0) {
-                syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
-                return 1;
-            }
-            if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "UUID", "%s", simulator->uuid)) < 0) {
-                syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement");
-                return 1;
-            }
-            if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "NAME", "%s", simulator->name)) < 0) {
-                syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement");
-                return 1;
-            }
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_TEMPERATURE", "%f", Config.simulator->hlt_temperature)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_HEATER_TEMP", "%f", Config.simulator->hlt_heater_temp)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_HEATER_TIME", "%d", Config.simulator->hlt_heater_time)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_HEATER_SIZE", "%f", Config.simulator->hlt_heater_size)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_HEATER_STATE", "%d", Config.simulator->hlt_heater_state)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
 
-            if ((rc = xmlTextWriterEndElement(writer)) < 0) {
-                syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterEndElement");
-                return 1;
-            }
-        }
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_TEMPERATURE", "%f", Config.simulator->mlt_temperature)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_HEATER_TEMP", "%f", Config.simulator->mlt_heater_temp)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_HEATER_TIME", "%d", Config.simulator->mlt_heater_time)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}                                       
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_HEATER_SIZE", "%f", Config.simulator->mlt_heater_size)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_HEATER_STATE", "%d", Config.simulator->mlt_heater_state)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "S_HLT_TEMP", "%f", Config.simulator->s_hlt_temp)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+	if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "S_MLT_TEMP", "%f", Config.simulator->s_mlt_temp)) < 0) {
+	    syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteElement");
+	    return 1;
+	}
+
         if ((rc = xmlTextWriterEndElement(writer)) < 0) {
             syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterEndElement");
             return 1;
@@ -1299,142 +1320,104 @@
 int parseSimulator(xmlDocPtr doc, xmlNodePtr cur)
 {
     xmlChar             *key;
-    simulator_list      *simulator, *tmp;
     int                 ival;
     float               fval;
 
-    simulator = (simulator_list *)malloc(sizeof(simulator_list));
-    simulator->next = NULL;
-    simulator->version = 1;
-    simulator->uuid = simulator->name = NULL;
-    simulator->room_temperature = simulator->hlt_heater_temp = simulator->mlt_heater_temp = simulator->s_hlt_temp = simulator->s_mlt_temp = 20.0;
-    simulator->hlt_heater_temp = simulator->hlt_heater_size = simulator->mlt_heater_temp = simulator->mlt_heater_size = 0.0;
-    simulator->hlt_heater_time = simulator->mlt_heater_time = simulator->hlt_heater_state = simulator->mlt_heater_state = 0;
-    simulator->s_hlt_temp = simulator->s_mlt_temp = 0.0;
+    /*
+     * First time, allocate memory and set defaults.
+     */
+    if (! Config.simulator) {
+	Config.simulator = (simulator_var *)malloc(sizeof(simulator_var));
+	Config.simulator->room_temperature = Config.simulator->hlt_temperature = Config.simulator->hlt_heater_temp = \
+		Config.simulator->mlt_temperature = Config.simulator->mlt_heater_temp = \
+		Config.simulator->s_hlt_temp = Config.simulator->s_mlt_temp = 0.0;
+	Config.simulator->hlt_heater_size = Config.simulator->mlt_heater_size = 0.0;
+	Config.simulator->hlt_heater_time = Config.simulator->mlt_heater_time = Config.simulator->hlt_heater_state = Config.simulator->mlt_heater_state = 0;
+    }
 
     cur = cur->xmlChildrenNode;
     while (cur != NULL) {
-        if ((!xmlStrcmp(cur->name, (const xmlChar *)"VERSION"))) {
-            key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
-            if (xmlStrcmp(key, (const xmlChar *)"1")) {
-                xmlFree(key);
-                return 1;
-            }
-            simulator->version = 1;
-            xmlFree(key);
-        }
-        if ((!xmlStrcmp(cur->name, (const xmlChar *)"UUID"))) {
-            simulator->uuid = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
-        }
-        if ((!xmlStrcmp(cur->name, (const xmlChar *)"NAME"))) {
-            simulator->name = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
-        }
 	if ((!xmlStrcmp(cur->name, (const xmlChar *)"ROOM_TEMPERATURE"))) {
 	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 	    if (sscanf((const char *)key, "%f", &fval) == 1)
-		simulator->room_temperature = fval;
+		Config.simulator->room_temperature = fval;
 	    xmlFree(key);
 	}
 	if ((!xmlStrcmp(cur->name, (const xmlChar *)"HLT_TEMPERATURE"))) {
 	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 	    if (sscanf((const char *)key, "%f", &fval) == 1)
-		simulator->hlt_temperature = fval;
+		Config.simulator->hlt_temperature = fval;
 	    xmlFree(key);
 	}
 	if ((!xmlStrcmp(cur->name, (const xmlChar *)"HLT_HEATER_TEMP"))) {
 	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 	    if (sscanf((const char *)key, "%f", &fval) == 1)
-		simulator->hlt_heater_temp = fval;
+		Config.simulator->hlt_heater_temp = fval;
 	    xmlFree(key);
 	}
 	if ((!xmlStrcmp(cur->name, (const xmlChar *)"HLT_HEATER_TIME"))) {
 	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 	    if (sscanf((const char *)key, "%d", &ival) == 1)
-		simulator->hlt_heater_time = ival;
+		Config.simulator->hlt_heater_time = ival;
 	    xmlFree(key);
 	}
 	if ((!xmlStrcmp(cur->name, (const xmlChar *)"HLT_HEATER_SIZE"))) {
 	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 	    if (sscanf((const char *)key, "%f", &fval) == 1)
-		simulator->hlt_heater_size = fval;
+		Config.simulator->hlt_heater_size = fval;
 	    xmlFree(key);
 	}
 	if ((!xmlStrcmp(cur->name, (const xmlChar *)"HLT_HEATER_STATE"))) {
 	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 	    if (sscanf((const char *)key, "%d", &ival) == 1)
-		simulator->hlt_heater_state = ival;
+		Config.simulator->hlt_heater_state = ival;
 	    xmlFree(key);
 	}
         if ((!xmlStrcmp(cur->name, (const xmlChar *)"MLT_TEMPERATURE"))) {
             key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
             if (sscanf((const char *)key, "%f", &fval) == 1)
-                simulator->mlt_temperature = fval;
+                Config.simulator->mlt_temperature = fval;
             xmlFree(key);
         }
         if ((!xmlStrcmp(cur->name, (const xmlChar *)"MLT_HEATER_TEMP"))) {
             key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
             if (sscanf((const char *)key, "%f", &fval) == 1)
-                simulator->mlt_heater_temp = fval;
+                Config.simulator->mlt_heater_temp = fval;
             xmlFree(key);
         }
         if ((!xmlStrcmp(cur->name, (const xmlChar *)"MLT_HEATER_TIME"))) {
             key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
             if (sscanf((const char *)key, "%d", &ival) == 1)
-                simulator->mlt_heater_time = ival;
+                Config.simulator->mlt_heater_time = ival;
             xmlFree(key);
         }
         if ((!xmlStrcmp(cur->name, (const xmlChar *)"MLT_HEATER_SIZE"))) {
             key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
             if (sscanf((const char *)key, "%f", &fval) == 1)
-                simulator->mlt_heater_size = fval;
+                Config.simulator->mlt_heater_size = fval;
             xmlFree(key);
         }
         if ((!xmlStrcmp(cur->name, (const xmlChar *)"MLT_HEATER_STATE"))) {
             key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
             if (sscanf((const char *)key, "%d", &ival) == 1)
-                simulator->mlt_heater_state = ival;
+                Config.simulator->mlt_heater_state = ival;
             xmlFree(key);
         }
 	if ((!xmlStrcmp(cur->name, (const xmlChar *)"S_HLT_TEMP"))) {
 	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 	    if (sscanf((const char *)key, "%f", &fval) == 1)
-		simulator->s_hlt_temp = fval;
+		Config.simulator->s_hlt_temp = fval;
 	    xmlFree(key);
 	}
 	if ((!xmlStrcmp(cur->name, (const xmlChar *)"S_MLT_TEMP"))) {
 	    key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
 	    if (sscanf((const char *)key, "%f", &fval) == 1)
-		simulator->s_mlt_temp = fval;
+		Config.simulator->s_mlt_temp = fval;
 	    xmlFree(key);
 	}
         cur = cur->next;
     }
 
-    if (Config.simulators == NULL) {
-        Config.simulators = simulator;
-    } else {
-        for (tmp = Config.simulators; tmp; tmp = tmp->next) {
-            if (tmp->next == NULL) {
-                tmp->next = simulator;
-                break;
-            }
-        }
-    }
-
-    return 0;
-}
-
-
-
-int parseSimulators(xmlDocPtr doc, xmlNodePtr cur)
-{
-    cur = cur->xmlChildrenNode;
-    while (cur != NULL) {
-        if ((!xmlStrcmp(cur->name, (const xmlChar *)"SIMULATOR"))) {
-            parseSimulator(doc, cur);
-        }
-        cur = cur->next;
-    }
     return 0;
 }
 #endif
@@ -1536,8 +1519,8 @@
 	    parseDevices(doc, cur);
 	}
 #ifdef USE_SIMULATOR
-	if ((!xmlStrcmp(cur->name, (const xmlChar *)"SIMULATORS"))) {
-	    parseSimulators(doc, cur);
+	if ((!xmlStrcmp(cur->name, (const xmlChar *)"SIMULATOR"))) {
+	    parseSimulator(doc, cur);
 	}
 #endif
 	cur = cur->next;
@@ -1547,6 +1530,21 @@
     free(mypath);
     mypath = NULL;
 
+#ifdef USE_SIMULATOR
+    /*
+     * If we didn't find any simulator values, initialize a new simulator.
+     */
+    if (! Config.simulator) {
+	Config.simulator = (simulator_var *)malloc(sizeof(simulator_var));
+	syslog(LOG_NOTICE, "rdconfig() init a new simulator");
+	Config.simulator->room_temperature = Config.simulator->hlt_temperature = Config.simulator->hlt_heater_temp = \
+		Config.simulator->mlt_temperature = Config.simulator->mlt_heater_temp = \
+		Config.simulator->s_hlt_temp = Config.simulator->s_mlt_temp = 20.0;
+	Config.simulator->hlt_heater_size = Config.simulator->mlt_heater_size = 0.0;
+	Config.simulator->hlt_heater_time = Config.simulator->mlt_heater_time = Config.simulator->hlt_heater_state = Config.simulator->mlt_heater_state = 0;
+    }
+#endif
+
     return rc;
 }
 

mercurial