# HG changeset patch # User Michiel Broek # Date 1449426879 -3600 # Node ID 1277fb94999f09aca2bd45c63e15d89d9161f10e # Parent 7fe45f6e4f484a98a1229654232635236b515d4e Added selecting sensors. diff -r 7fe45f6e4f48 -r 1277fb94999f brewco/brewco.h --- a/brewco/brewco.h Sun Dec 06 14:29:37 2015 +0100 +++ b/brewco/brewco.h Sun Dec 06 19:34:39 2015 +0100 @@ -91,7 +91,7 @@ * Sensor strcuture */ typedef struct _sensor_var { - char uuid[37]; /* sensor uuid */ + char *uuid; /* sensor uuid */ int state; /* sensor state */ int value; /* sensor value */ } sensor_var; @@ -121,10 +121,10 @@ char *name; /* Unit name */ int number; /* Unit number */ int active; /* 0/1 active unit */ - sensor_var *hlt_sensor; /* HLT sensor */ + sensor_var hlt_sensor; /* HLT sensor */ switch_var *hlt_heater; /* HLT heater */ int hlt_heater_mltfirst; /* HLT heater MLT high priority */ - sensor_var *mlt_sensor; /* MLT sensor */ + sensor_var mlt_sensor; /* MLT sensor */ switch_var *mlt_heater; /* MLT heater */ switch_var *mlt_pump; /* MLT pump */ int pump_cycle; /* 5..15 minutes */ diff -r 7fe45f6e4f48 -r 1277fb94999f brewco/rdconfig.c --- a/brewco/rdconfig.c Sun Dec 06 14:29:37 2015 +0100 +++ b/brewco/rdconfig.c Sun Dec 06 19:34:39 2015 +0100 @@ -61,10 +61,10 @@ free(unit->uuid); if (unit->name) free(unit->name); - if (unit->hlt_sensor) - free(unit->hlt_sensor); - if (unit->mlt_sensor) - free(unit->mlt_sensor); + if (unit->hlt_sensor.uuid) + free(unit->hlt_sensor.uuid); + if (unit->mlt_sensor.uuid) + free(unit->mlt_sensor.uuid); if (unit->hlt_heater) free(unit->hlt_heater); if (unit->mlt_heater) @@ -273,19 +273,17 @@ return 1; } - if (unit->hlt_sensor) { - if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_SENSOR_UUID", "%s", unit->hlt_sensor->uuid)) < 0)) { - syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); - return 1; - } - if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_SENSOR_STATE", "%d", unit->hlt_sensor->state)) < 0)) { - syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); - return 1; - } - if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_SENSOR_VALUE", "%d", unit->hlt_sensor->value)) < 0)) { - syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); - return 1; - } + if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_SENSOR_UUID", "%s", unit->hlt_sensor.uuid)) < 0)) { + syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); + return 1; + } + if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_SENSOR_STATE", "%d", unit->hlt_sensor.state)) < 0)) { + syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); + return 1; + } + if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "HLT_SENSOR_VALUE", "%d", unit->hlt_sensor.value)) < 0)) { + syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); + return 1; } if (unit->hlt_heater) { @@ -308,19 +306,17 @@ return 1; } - if (unit->mlt_sensor) { - if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_SENSOR_UUID", "%s", unit->mlt_sensor->uuid)) < 0)) { - syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); - return 1; - } - if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_SENSOR_STATE", "%d", unit->mlt_sensor->state)) < 0)) { - syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); - return 1; - } - if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_SENSOR_VALUE", "%d", unit->mlt_sensor->value)) < 0)) { - syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); - return 1; - } + if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_SENSOR_UUID", "%s", unit->mlt_sensor.uuid)) < 0)) { + syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); + return 1; + } + if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_SENSOR_STATE", "%d", unit->mlt_sensor.state)) < 0)) { + syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); + return 1; + } + if (((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MLT_SENSOR_VALUE", "%d", unit->mlt_sensor.value)) < 0)) { + syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); + return 1; } if (unit->mlt_heater) { @@ -728,7 +724,12 @@ unit->uuid = unit->name = NULL; unit->number = 0; unit->active = 0; - unit->hlt_sensor = unit->mlt_sensor = NULL; + unit->hlt_sensor.uuid = xstrcpy((char *)"00000000-0000-0000-0000-000000000000"); + unit->hlt_sensor.state = 0; + unit->hlt_sensor.value = 0; + unit->mlt_sensor.uuid = xstrcpy((char *)"00000000-0000-0000-0000-000000000000"); + unit->mlt_sensor.state = 0; + unit->mlt_sensor.value = 0; unit->hlt_heater = unit->mlt_heater = unit->mlt_pump = NULL; unit->hlt_heater_mltfirst = 0; unit->pump_cycle = 7; @@ -779,24 +780,18 @@ } if ((!xmlStrcmp(cur->name, (const xmlChar *)"HLT_SENSOR_UUID"))) { - if (unit->hlt_sensor == NULL) { - unit->hlt_sensor = (sensor_var *)malloc(sizeof(sensor_var)); - unit->hlt_sensor->uuid[0] = '\0'; - unit->hlt_sensor->state = 1; // missing - unit->hlt_sensor->value = 0; - } - snprintf(unit->hlt_sensor->uuid, 36, "%s", xmlNodeListGetString(doc, cur->xmlChildrenNode, 1)); + unit->hlt_sensor.uuid = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); } if ((!xmlStrcmp(cur->name, (const xmlChar *)"HLT_SENSOR_STATE"))) { key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); if (sscanf((const char *)key, "%d", &ival) == 1) - unit->hlt_sensor->state = ival; + unit->hlt_sensor.state = ival; xmlFree(key); } if ((!xmlStrcmp(cur->name, (const xmlChar *)"HLT_SENSOR_VALUE"))) { key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); if (sscanf((const char *)key, "%d", &ival) == 1) - unit->hlt_sensor->value = ival; + unit->hlt_sensor.value = ival; xmlFree(key); } @@ -830,24 +825,18 @@ } if ((!xmlStrcmp(cur->name, (const xmlChar *)"MLT_SENSOR_UUID"))) { - if (unit->mlt_sensor == NULL) { - unit->mlt_sensor = (sensor_var *)malloc(sizeof(sensor_var)); - unit->mlt_sensor->uuid[0] = '\0'; - unit->mlt_sensor->state = 1; // missing - unit->mlt_sensor->value = 0; - } - snprintf(unit->mlt_sensor->uuid, 36, "%s", xmlNodeListGetString(doc, cur->xmlChildrenNode, 1)); + unit->mlt_sensor.uuid = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); } if ((!xmlStrcmp(cur->name, (const xmlChar *)"MLT_SENSOR_STATE"))) { key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); if (sscanf((const char *)key, "%d", &ival) == 1) - unit->mlt_sensor->state = ival; + unit->mlt_sensor.state = ival; xmlFree(key); } if ((!xmlStrcmp(cur->name, (const xmlChar *)"MLT_SENSOR_VALUE"))) { key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); if (sscanf((const char *)key, "%d", &ival) == 1) - unit->mlt_sensor->value = ival; + unit->mlt_sensor.value = ival; xmlFree(key); } diff -r 7fe45f6e4f48 -r 1277fb94999f brewco/setup.c --- a/brewco/setup.c Sun Dec 06 14:29:37 2015 +0100 +++ b/brewco/setup.c Sun Dec 06 19:34:39 2015 +0100 @@ -284,13 +284,129 @@ +void editSensor(char *uuid, char *text) +{ + char pmpt[81]; + int i, old, choices, index = 1, key; + devices_list *device; + + if (debug) + fprintf(stdout, "editSensor(%s, %s)\n", uuid, text); + + old = 1; // 1d0e5bb8-7408-48b9-abb4-e9041d7b99fe + if ((i = strcmp((char *)"00000000-0000-0000-0000-000000000000", uuid))) { + for (device = Config.devices; device; device = device->next) { + if (device->direction == DEVDIR_IN_ANALOG) { + old++; + if (strcmp(device->uuid, uuid) == 0) + break; + } + } + } + + if (debug) + fprintf(stdout, "editSensor(%s) old sensor index=%d\n", text, old); + + for (;;) { + prompt(0, NULL); + snprintf(pmpt, Config.lcd_cols + 1, "Edit %s", text); + prompt(100, pmpt); + + /* + * Count valid sensors + */ + choices = 1; + if (old == 1) { + snprintf(pmpt, Config.lcd_cols + 1, "N/A"); + } + for (device = Config.devices; device; device = device->next) { + if (device->direction == DEVDIR_IN_ANALOG) { + choices++; + if (choices == old) { + snprintf(pmpt, Config.lcd_cols + 1, "%s", device->description); + } + } + } + prompt(200, pmpt); /* Display current sensor */ + i = 1; + if (index == 1) { + snprintf(pmpt, Config.lcd_cols + 1, "N/A"); + } else { + for (device = Config.devices; device; device = device->next) { + if (device->direction == DEVDIR_IN_ANALOG) { + i++; + if (i == index) { + snprintf(pmpt, Config.lcd_cols + 1, "%s", device->description); + } + } + } + } + prompt(300, pmpt); /* Display possible new sensor */ + + + if (choices == 1) + prompt(405, NULL); + else if (index == 1) + prompt(402, NULL); + else if (index == choices) + prompt(404, NULL); + else + prompt(403, NULL); + + key = keywait(); + if ((key == KEY_RETURN) || my_shutdown) { + if (debug) + fprintf(stdout, "End editSensor\n"); + return; + } + + if ((key == KEY_UP) && (index > 1)) + index--; + if ((key == KEY_DOWN) && (index < choices)) + index++; + + if ((key == KEY_ENTER) && (index != old)) { + /* + * Select new sensor. + */ + if (index == 1) { + /* + * Disable the sensor + */ + strncpy(uuid, (char *)"00000000-0000-0000-0000-000000000000", 36); + old = index; + } else { + i = 1; + for (device = Config.devices; device; device = device->next) { + if (device->direction == DEVDIR_IN_ANALOG) { + i++; + if (i == index) { + strncpy(uuid, device->uuid, 36); + break; + } + } + } + old = index; + } + } + } +} + + + +void editRelay(switch_var *relay, char *text) +{ +} + + + /* * Edit a single unit */ void editUnit(units_list *unit) { int index = 1, key; - char pmpt[81]; + char pmpt[81], *uuid; uLong ocrc, ncrc; if (debug) @@ -399,15 +515,21 @@ switch(index) { case 1: // name break; - case 2: // HLT sensor + case 2: uuid = xstrcpy(unit->hlt_sensor.uuid); + editSensor(uuid, (char *)"HLT sensor"); + strncpy(unit->hlt_sensor.uuid, uuid, 36); + free(uuid); break; - case 3: // HLT heater + case 3: editRelay(unit->hlt_heater, (char *)"HLT heater"); break; - case 4: // MLT sensor + case 4: uuid = xstrcpy(unit->mlt_sensor.uuid); + editSensor(uuid, (char *)"MLT sensor"); + strncpy(unit->mlt_sensor.uuid, uuid, 36); + free(uuid); break; - case 5: // MLT heater + case 5: editRelay(unit->mlt_heater, (char *)"MLT heater"); break; - case 6: // MLT pump + case 6: editRelay(unit->mlt_pump, (char *)"MLT pump"); break; case 7: toggleYesNo(&unit->hlt_heater_mltfirst, (char *)"MLT heat b4 HLT"); break; @@ -467,7 +589,12 @@ unit->active = 1; else unit->active = 0; - unit->hlt_sensor = unit->mlt_sensor = NULL; + unit->hlt_sensor.uuid = xstrcpy((char *)"00000000-0000-0000-0000-000000000000"); + unit->hlt_sensor.state = DEVPRESENT_UNDEF; + unit->hlt_sensor.value = 0; + unit->mlt_sensor.uuid = xstrcpy((char *)"00000000-0000-0000-0000-000000000000"); + unit->mlt_sensor.state = DEVPRESENT_UNDEF; + unit->mlt_sensor.value = 0; unit->hlt_heater = unit->mlt_heater = unit->mlt_pump = NULL; unit->hlt_heater_mltfirst = 1; unit->pump_cycle = 7;