diff -r 5664743eaf2f -r 7d1ec160d751 brewco/rdconfig.c --- 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; }