Added selecting sensors.

Sun, 06 Dec 2015 19:34:39 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 06 Dec 2015 19:34:39 +0100
changeset 449
1277fb94999f
parent 448
7fe45f6e4f48
child 450
8fe99759c27f

Added selecting sensors.

brewco/brewco.h file | annotate | diff | comparison | revisions
brewco/rdconfig.c file | annotate | diff | comparison | revisions
brewco/setup.c file | annotate | diff | comparison | revisions
--- 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 		*/
--- 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);
         }
 
--- 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;

mercurial