thermferm/server.c

changeset 362
c92651a54969
parent 358
8b7ef338bf49
child 364
2f9bbbcd2407
--- a/thermferm/server.c	Thu May 14 22:03:35 2015 +0200
+++ b/thermferm/server.c	Sat May 16 17:39:30 2015 +0200
@@ -112,6 +112,50 @@
 
 
 /*
+ * Argument is a buffer of size SS_BUFSIZE.
+ * Return -1 if error, else the number of received
+ * character. \n is line end, ignore \r.
+ */
+int srv_recv(char *buffer)
+{
+    int			bytesloaded = 0;
+    ssize_t		ret;
+    unsigned char	buf;
+    socklen_t		fromlen;
+
+    memset(buffer, 0, SS_BUFSIZE);
+
+    while(1) {
+	/*
+	 * read a single byte
+	 */
+	fromlen = sizeof(peeraddr_in);
+	ret = recvfrom(s, &buf, 1, 0, (struct sockaddr *)&peeraddr_in, &fromlen);
+	if (ret < 1) {
+	    syslog(LOG_NOTICE, "recvfrom(): %s", strerror(errno));
+	    srv_send((char *)"518 recfrom(): %s", strerror(errno));
+	    return -1;	/* error */
+	}
+
+	if (buf == '\n')
+	    break;
+
+	if (buf != '\r') {
+	    buffer[bytesloaded] = buf; 
+	    bytesloaded++;
+	}
+    } 
+
+    if (debug) {
+	syslog(LOG_NOTICE, "recv: %d `%s'", bytesloaded, buffer);
+	fprintf(stdout, "recv: %d `%s'\n", bytesloaded, buffer);
+    }
+    return bytesloaded;
+}
+
+
+
+/*
  * Update the device inuse counter.
  */
 void device_count(int plus, char *uuid)
@@ -578,7 +622,6 @@
 {
     char		*opt, *param, *kwd, *val, ibuf[SS_BUFSIZE];
     devices_list	*device, *tmpd;
-    socklen_t		fromlen;
     int			i, rc, rlen, ival;
     uuid_t		uu;
 
@@ -711,31 +754,11 @@
 	for (device = Config.devices; device; device = device->next) {
 	    if (strcmp(device->uuid, param) == 0) {
 		while (1) {
-		    memset((char *)&ibuf, 0, SS_BUFSIZE);
-		    fromlen = sizeof(peeraddr_in);
-		    rlen = recvfrom(s, ibuf, sizeof(ibuf) -1, 0, (struct sockaddr *)&peeraddr_in, &fromlen);
-		    if (rlen == -1) {
-			syslog(LOG_NOTICE, "recvfrom(): %s", strerror(errno));
-			srv_send((char *)"518 recfrom(): %s", strerror(errno));
+		    rlen = srv_recv(ibuf);
+    		    if (rlen == -1) {
 			return 1;
 		    }
-		    for (i = 0; i < strlen(ibuf); i++) {
-			if (ibuf[i] == '\n')
-			    ibuf[i] = '\0';
-			if (ibuf[i] == '\r')
-			    ibuf[i] = '\0';
-		    }
-		    for (i = strlen(ibuf) -1; i > 0; i--) {
-			if (ibuf[i] == ' ')
-			    ibuf[i] = '\0';
-			else
-			    break;
-		    }
 		    if (strlen(ibuf)) {
-			if (debug) {
-			    syslog(LOG_NOTICE, "recv: \"%s\"", ibuf);
-			    fprintf(stdout, "recv: \"%s\"\n", ibuf);
-			}
 			if (strcmp(ibuf, (char *)".") == 0) {
 			    srv_send((char *)"219 Accepted Device record");
 			    return 0;
@@ -908,8 +931,7 @@
 int cmd_global(char *buf)
 {
     char	*opt, *kwd, *val, ibuf[SS_BUFSIZE];
-    int		ival, i, rlen;
-    socklen_t	fromlen;
+    int		ival, rlen;
 
     opt = strtok(buf, " \0");
     opt = strtok(NULL, "\0");
@@ -941,31 +963,11 @@
 
     if (strcmp(opt, (char *)"PUT") == 0) {
 	while (1) {
-	    memset((char *)&ibuf, 0, SS_BUFSIZE);
-	    fromlen = sizeof(peeraddr_in);
-	    rlen = recvfrom(s, ibuf, sizeof(ibuf) -1, 0, (struct sockaddr *)&peeraddr_in, &fromlen);
+	    rlen = srv_recv(ibuf);
 	    if (rlen == -1) {
-		syslog(LOG_NOTICE, "recvfrom(): %s", strerror(errno));
-		srv_send((char *)"518 recfrom(): %s", strerror(errno));
 		return 1;
 	    }
-	    for (i = 0; i < strlen(ibuf); i++) {
-		if (ibuf[i] == '\n')
-		    ibuf[i] = '\0';
-		if (ibuf[i] == '\r')
-		    ibuf[i] = '\0';
-	    }
-	    for (i = strlen(ibuf) -1; i > 0; i--) {
-		if (ibuf[i] == ' ')
-		    ibuf[i] = '\0';
-		else
-		    break;
-	    }
 	    if (strlen(ibuf)) {
-		if (debug) {
-		    syslog(LOG_NOTICE, "recv: \"%s\"", ibuf);
-		    fprintf(stdout, "recv: \"%s\"\n", ibuf);
-		}
 		if (strcmp(ibuf, (char *)".") == 0) {
 		    srv_send((char *)"219 Accepted Global record");
 		    return 0;
@@ -1206,9 +1208,8 @@
 int cmd_profile(char *buf)
 {
     char                ibuf[SS_BUFSIZE], *sstep, *rest, *targ, *param, *kwd, *val;
-    int                 i, j, rlen, istep, irest;
+    int                 j, rlen, istep, irest;
     float		ftarg, fval;
-    socklen_t           fromlen;
     char		*opt;
     profiles_list	*profile, *tmpp;
     prof_step		*step, *olds;
@@ -1298,31 +1299,11 @@
 	for (profile = Config.profiles; profile; profile = profile->next) {
 	    if (strcmp(profile->uuid, param) == 0) {
 		while (1) {
-		    memset((char *)&ibuf, 0, SS_BUFSIZE);
-		    fromlen = sizeof(peeraddr_in);
-		    rlen = recvfrom(s, ibuf, sizeof(ibuf) -1, 0, (struct sockaddr *)&peeraddr_in, &fromlen);
+		    rlen = srv_recv(ibuf);
 		    if (rlen == -1) {
-			syslog(LOG_NOTICE, "recvfrom(): %s", strerror(errno));
-			srv_send((char *)"518 recfrom(): %s", strerror(errno));
 			return 1;
 		    }
-		    for (i = 0; i < strlen(ibuf); i++) {
-			if (ibuf[i] == '\n')
-			    ibuf[i] = '\0';
-			if (ibuf[i] == '\r')
-			    ibuf[i] = '\0';
-		    }
-		    for (i = strlen(ibuf) -1; i > 0; i--) {
-			if (ibuf[i] == ' ')
-			    ibuf[i] = '\0';
-			else
-			    break;
-		    }
 		    if (strlen(ibuf)) {
-			if (debug) {
-			    syslog(LOG_NOTICE, "recv: \"%s\"", ibuf);
-			    fprintf(stdout, "recv: \"%s\"\n", ibuf);
-			}
 			if (strcmp(ibuf, (char *)".") == 0) {
 			    srv_send((char *)"219 Accepted Profile record");
 			    return 0;
@@ -1384,31 +1365,11 @@
 
 		j = 0;
             	while (1) {	
-	    	    memset((char *)&ibuf, 0, SS_BUFSIZE);
-            	    fromlen = sizeof(peeraddr_in);
-	    	    rlen = recvfrom(s, ibuf, sizeof(ibuf) -1, 0, (struct sockaddr *)&peeraddr_in, &fromlen);
+		    rlen = srv_recv(ibuf);
 	    	    if (rlen == -1) {
-	    	    	syslog(LOG_NOTICE, "recvfrom(): %s", strerror(errno));
-		    	srv_send((char *)"518 recfrom(): %s", strerror(errno));
 		    	return 1;
 	    	    } else {
-	    	    	for (i = 0; i < strlen(ibuf); i++) {
-		            if (ibuf[i] == '\n')
-		    	    	ibuf[i] = '\0';
-		    	    if (ibuf[i] == '\r')
-		    	    	ibuf[i] = '\0';
-	                }
-	                for (i = strlen(ibuf) -1; i > 0; i--) {
-		    	    if (ibuf[i] == ' ')
-		    	    	ibuf[i] = '\0';
-		    	    else
-		     	    	break;
-	    	    	}
 	    	    	if (strlen(ibuf)) {
-		    	    if (debug) {
-		    	    	syslog(LOG_NOTICE, "recv: \"%s\"", ibuf);
-		    	    	fprintf(stdout, "recv: \"%s\"\n", ibuf);
-		    	    }
 		    	    if (strcmp(ibuf, (char *)".") == 0) {
 
 		    	    	srv_send((char *)"219 Accepted Profile steps");
@@ -1506,8 +1467,7 @@
 {
     char		*opt, *param, *kwd, *val, ibuf[SS_BUFSIZE];
     simulator_list	*simulator, *tmps;
-    socklen_t		fromlen;
-    int			i, rc, rlen, ival;
+    int			rc, rlen, ival;
     float		fval;
     uuid_t		uu;
 
@@ -1624,31 +1584,11 @@
 	for (simulator = Config.simulators; simulator; simulator = simulator->next) {
 	    if (strcmp(simulator->uuid, param) == 0) {
 		while (1) {
-		    memset((char *)&ibuf, 0, SS_BUFSIZE);
-		    fromlen = sizeof(peeraddr_in);
-		    rlen = recvfrom(s, ibuf, sizeof(ibuf) -1, 0, (struct sockaddr *)&peeraddr_in, &fromlen);
+		    rlen = srv_recv(ibuf);
 		    if (rlen == -1) {
-			syslog(LOG_NOTICE, "recvfrom(): %s", strerror(errno));
-			srv_send((char *)"518 recfrom(): %s", strerror(errno));
 			return 1;
 		    }
-		    for (i = 0; i < strlen(ibuf); i++) {
-			if (ibuf[i] == '\n')
-			    ibuf[i] = '\0';
-			if (ibuf[i] == '\r')
-			    ibuf[i] = '\0';
-		    }
-		    for (i = strlen(ibuf) -1; i > 0; i--) {
-			if (ibuf[i] == ' ')
-			    ibuf[i] = '\0';
-			else
-			    break;
-		    }
 		    if (strlen(ibuf)) {
-			if (debug) {
-			    syslog(LOG_NOTICE, "recv: \"%s\"", ibuf);
-			    fprintf(stdout, "recv: \"%s\"\n", ibuf);
-			}
 			if (strcmp(ibuf, (char *)".") == 0) {
 			    srv_send((char *)"219 Accepted Simulator record");
 			    return 0;
@@ -1820,6 +1760,12 @@
 		if (current->profile)
 		    free(current->profile);
 		current->profile = NULL;
+		if (current->PID_cool)
+		    free(current->PID_cool);
+		current->PID_cool = NULL;
+		if (current->PID_heat)
+		    free(current->PID_heat);
+		current->PID_heat = NULL;
 		free(current);
 		return 1;
 	    } else {
@@ -1854,6 +1800,12 @@
 		if (current->profile)
 		    free(current->profile);
 		current->profile = NULL;
+		if (current->PID_cool)
+		    free(current->PID_cool);
+		current->PID_cool = NULL;
+		if (current->PID_heat)
+		    free(current->PID_heat);
+		current->PID_heat = NULL;
 		previous->next = current->next;
 		free(current);
 		current = previous->next;
@@ -1881,7 +1833,6 @@
     char                *opt, *param = NULL, *kwd, *val, ibuf[SS_BUFSIZE];
     units_list          *unit, *tmpu;
     uuid_t		uu;
-    socklen_t		fromlen;
     int			ival, i, rc, rlen;
     float		fval;
 
@@ -1931,11 +1882,12 @@
 	unit->heater_usage = unit->cooler_usage = unit->fan_usage = unit->light_usage = 0;
 	unit->temp_set_min = 1.0;
 	unit->temp_set_max = 30.0;
-	unit->idle_rangeH = 1.0;
-	unit->idle_rangeL = -1.0;
 	unit->prof_started = unit->prof_paused = unit->prof_primary_done = (time_t)0;
 	unit->prof_percent = 0;
-	unit->PID_dState = unit->PID_iState = unit->PID_Kp = unit->PID_Kd = unit->PID_Ki = 0.0;
+	unit->PID_cool = (pid_var *)malloc(sizeof(pid_var));
+	unit->PID_heat = (pid_var *)malloc(sizeof(pid_var));
+	InitPID(unit->PID_cool, PID_TYPE_COOL);
+	InitPID(unit->PID_heat, PID_TYPE_HEAT);
 
 	/*
 	 * Block main process
@@ -2011,10 +1963,24 @@
 		srv_send((char *)"HEATER_STATE,%d", unit->heater_state);
 		srv_send((char *)"HEATER_DELAY,%d", unit->heater_delay);
 		srv_send((char *)"HEATER_USAGE,%d", unit->heater_usage);
+		if (unit->PID_heat) {
+		    srv_send((char *)"PIDH_IMAX,%.1f", unit->PID_heat->iMax);
+		    srv_send((char *)"PIDH_PGAIN,%.2f", unit->PID_heat->pGain);
+		    srv_send((char *)"PIDH_IGAIN,%.2f", unit->PID_heat->iGain);
+		    srv_send((char *)"PIDH_DGAIN,%.2f", unit->PID_heat->dGain);
+		    srv_send((char *)"PIDH_IDLERANGE,%.2f", unit->PID_heat->idleRange);
+		}
 		srv_send((char *)"COOLER_ADDRESS,%s", unit->cooler_address);
 		srv_send((char *)"COOLER_STATE,%d", unit->cooler_state);
 		srv_send((char *)"COOLER_DELAY,%d", unit->cooler_delay);
 		srv_send((char *)"COOLER_USAGE,%d", unit->cooler_usage);
+		if (unit->PID_cool) {
+		    srv_send((char *)"PIDC_IMAX,%.1f", unit->PID_cool->iMax);
+		    srv_send((char *)"PIDC_PGAIN,%.2f", unit->PID_cool->pGain);
+		    srv_send((char *)"PIDC_IGAIN,%.2f", unit->PID_cool->iGain);
+		    srv_send((char *)"PIDC_DGAIN,%.2f", unit->PID_cool->dGain);
+		    srv_send((char *)"PIDC_IDLERANGE,%.2f", unit->PID_cool->idleRange);
+		}
 		srv_send((char *)"FAN_ADDRESS,%s", unit->fan_address);
 		srv_send((char *)"FAN_STATE,%d", unit->fan_state);
 		srv_send((char *)"FAN_DELAY,%d", unit->fan_delay);
@@ -2043,11 +2009,6 @@
 		srv_send((char *)"PROF_PRIMARY_DONE,%d", (int)unit->prof_primary_done);
 		srv_send((char *)"TEMP_SET_MIN,%.1f", unit->temp_set_min);
 		srv_send((char *)"TEMP_SET_MAX,%.1f", unit->temp_set_max);
-		srv_send((char *)"IDLE_RANGE_L,%.2f", unit->idle_rangeL);
-		srv_send((char *)"IDLE_RANGE_H,%.2f", unit->idle_rangeH);
-		srv_send((char *)"PID_KP,%.2f", unit->PID_Kp);
-		srv_send((char *)"PID_KI,%.2f", unit->PID_Ki);
-		srv_send((char *)"PID_KD,%.2f", unit->PID_Kd);
 		srv_send((char *)".");
 		return 1;
 	    }
@@ -2057,36 +2018,28 @@
     }
 
     if (strcmp(opt, (char *)"PUT") == 0) {
+	/*
+	 * Block main process
+	 */
+	run_pause = TRUE;
+	for (;;) {
+	    usleep(100000);
+	    if (run_hold)
+		break;
+	}
+
 	for (unit = Config.units ; unit; unit = unit->next) {
 	     if (strcmp(unit->uuid, param) == 0) {
 		while (1) {
-		    memset((char *)&ibuf, 0, SS_BUFSIZE);
-		    fromlen = sizeof(peeraddr_in);
-		    rlen = recvfrom(s, ibuf, sizeof(ibuf) -1, 0, (struct sockaddr *)&peeraddr_in, &fromlen);
+		    rlen = srv_recv(ibuf);
 		    if (rlen == -1) {
-			syslog(LOG_NOTICE, "recvfrom(): %s", strerror(errno));
-			srv_send((char *)"518 recfrom(): %s", strerror(errno));
+			run_pause = FALSE;
 			return 1;
 		    }
-		    for (i = 0; i < strlen(ibuf); i++) {
-			if (ibuf[i] == '\n')
-			    ibuf[i] = '\0';
-			if (ibuf[i] == '\r')
-			    ibuf[i] = '\0';
-		    }
-		    for (i = strlen(ibuf) -1; i > 0; i--) {
-			if (ibuf[i] == ' ')
-			    ibuf[i] = '\0';
-			else
-			    break;
-		    }
 		    if (strlen(ibuf)) {
-			if (debug) {
-			    syslog(LOG_NOTICE, "recv: \"%s\"", ibuf);
-			    fprintf(stdout, "recv: \"%s\"\n", ibuf);
-			}
 			if (strcmp(ibuf, (char *)".") == 0) {
 			    srv_send((char *)"219 Accepted Unit record");
+			    run_pause = FALSE;
 			    return 0;
 			}
 			kwd = strtok(ibuf, ",\0");
@@ -2281,7 +2234,8 @@
 					syslog(LOG_NOTICE, "Fermenter unit %s mode %s to %s", unit->uuid, UNITMODE[unit->mode], UNITMODE[i]);
 					unit->mode = i;
 					/* Allways turn everything off after a mode change */
-					unit->PID_iState = unit->PID_dState = 0.0;
+					unit->PID_cool->OutP = unit->PID_heat->OutP = 0.0;
+					unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_NONE;
 					unit->heater_state = unit->cooler_state = unit->fan_state = unit->light_state = 0;
 					unit->heater_wait = unit->cooler_wait = unit->fan_wait = unit->light_wait = 0;
 					device_out(unit->heater_address, unit->heater_state);
@@ -2313,25 +2267,74 @@
 				    unit->beer_set = fval;
 				}
 
-			    } else if (val && (strcmp(kwd, (char *)"PID_KP") == 0)) {
+			    } else if (val && (strcmp(kwd, (char *)"PIDC_IMAX") == 0)) {
+				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
+				    if (unit->PID_cool->iMax != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PID_cool iGain %.1f to %.1f", unit->uuid, unit->PID_cool->iMax, fval);
+				    unit->PID_cool->iMax = fval;
+				}
+
+			    } else if (val && (strcmp(kwd, (char *)"PIDC_PGAIN") == 0)) {
 				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
-				    if (unit->PID_Kp != fval)
-					syslog(LOG_NOTICE, "Fermenter unit %s PID Kp %.2f to %.2f", unit->uuid, unit->PID_Kp, fval);
-				    unit->PID_Kp = fval;
+				    if (unit->PID_cool->pGain != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PID_cool pGain %.2f to %.2f", unit->uuid, unit->PID_cool->pGain, fval);
+				    unit->PID_cool->pGain = fval;
+				}
+
+			    } else if (val && (strcmp(kwd, (char *)"PIDC_DGAIN") == 0)) {
+				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
+				    if (unit->PID_cool->dGain != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PID_cool dGain %.2f to %.2f", unit->uuid, unit->PID_cool->dGain, fval);
+				    unit->PID_cool->dGain = fval;
+				}
+	
+			    } else if (val && (strcmp(kwd, (char *)"PIDC_IGAIN") == 0)) {
+				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
+				    if (unit->PID_cool->iGain != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PID_cool iGain %.2f to %.2f", unit->uuid, unit->PID_cool->iGain, fval);
+				    unit->PID_cool->iGain = fval;
 				}
 
-			    } else if (val && (strcmp(kwd, (char *)"PID_KD") == 0)) {
+			    } else if (val && (strcmp(kwd, (char *)"PIDC_IDLERANGE") == 0)) {
+				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
+				    if (unit->PID_cool->idleRange != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PID_cool idleRange %.2f to %.2f", unit->uuid, unit->PID_cool->idleRange, fval);
+				    unit->PID_cool->idleRange = fval;
+				}
+
+			    } else if (val && (strcmp(kwd, (char *)"PIDH_IMAX") == 0)) {
 				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
-				    if (unit->PID_Kd != fval)
-					syslog(LOG_NOTICE, "Fermenter unit %s PID Kd %.2f to %.2f", unit->uuid, unit->PID_Kd, fval);
-				    unit->PID_Kd = fval;
+				    if (unit->PID_heat->iMax != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PID_heat iGain %.1f to %.1f", unit->uuid, unit->PID_heat->iMax, fval);
+				    unit->PID_heat->iMax = fval;
+				}
+
+			    } else if (val && (strcmp(kwd, (char *)"PIDH_PGAIN") == 0)) {
+				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
+				    if (unit->PID_heat->pGain != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PID_heat pGain %.2f to %.2f", unit->uuid, unit->PID_heat->pGain, fval);
+				    unit->PID_heat->pGain = fval;
 				}
-	
-			    } else if (val && (strcmp(kwd, (char *)"PID_KI") == 0)) {
+
+			    } else if (val && (strcmp(kwd, (char *)"PIDH_DGAIN") == 0)) {
+				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
+				    if (unit->PID_heat->dGain != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PID_heat dGain %.2f to %.2f", unit->uuid, unit->PID_heat->dGain, fval);
+				    unit->PID_heat->dGain = fval;
+				}
+
+			    } else if (val && (strcmp(kwd, (char *)"PIDH_IGAIN") == 0)) {
 				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
-				    if (unit->PID_Ki != fval)
-					syslog(LOG_NOTICE, "Fermenter unit %s PID Ki %.2f to %.2f", unit->uuid, unit->PID_Ki, fval);
-				    unit->PID_Ki = fval;
+				    if (unit->PID_heat->iGain != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PIH_heat iGain %.2f to %.2f", unit->uuid, unit->PID_heat->iGain, fval);
+				    unit->PID_heat->iGain = fval;
+				}
+
+			    } else if (val && (strcmp(kwd, (char *)"PIDH_IDLERANGE") == 0)) {
+				if ((sscanf(val, "%f", &fval) == 1) && (fval >= 0.0)) {
+				    if (unit->PID_heat->idleRange != fval)
+					syslog(LOG_NOTICE, "Fermenter unit %s PID_heat idleRange %.2f to %.2f", unit->uuid, unit->PID_heat->idleRange, fval);
+				    unit->PID_heat->idleRange = fval;
 				}
 
 			    } else if (strcmp(kwd, (char *)"PROFILE") == 0) {
@@ -2351,7 +2354,8 @@
 				    /*
 				     * Reset all output devices
 				     */
-				    unit->PID_iState = unit->PID_dState = 0.0;
+				    unit->PID_cool->OutP = unit->PID_heat->OutP = 0.0;
+				    unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_NONE;
 				    unit->heater_state = unit->cooler_state = unit->fan_state = unit->light_state = 0;
 				    unit->heater_wait = unit->cooler_wait = unit->fan_wait = unit->light_wait = 0;
 				    device_out(unit->heater_address, unit->heater_state);
@@ -2411,20 +2415,6 @@
 				    unit->temp_set_max = fval;
 				}
 
-			    } else if (val && (strcmp(kwd, (char *)"IDLE_RANGE_L") == 0)) {
-				if (sscanf(val, "%f", &fval) == 1) {
-				    if (unit->idle_rangeL != fval)
-					syslog(LOG_NOTICE, "Fermenter unit %s idle range low %.2f to %.2f", unit->uuid, unit->idle_rangeL, fval);
-				    unit->idle_rangeL = fval;
-				}
-
-			    } else if (val && (strcmp(kwd, (char *)"IDLE_RANGE_H") == 0)) {
-				if (sscanf(val, "%f", &fval) == 1) {
-				    if (unit->idle_rangeH != fval)
-					syslog(LOG_NOTICE, "Fermenter unit %s idle range high %.2f to %.2f", unit->uuid, unit->idle_rangeH, fval);
-				    unit->idle_rangeH = fval;
-				}
-
 			    }
 			}
 		    }
@@ -2432,6 +2422,7 @@
 	    }
 	}
 	srv_send((char *)"440 No such unit");
+	run_pause = FALSE;
 	return 1;
     }
 
@@ -2444,33 +2435,11 @@
 void cmd_server(void)
 {
     char                buf[SS_BUFSIZE];
-    int                 i, rlen;
-    socklen_t           fromlen;
+    int                 rlen;
 
-    memset((char *)&buf, 0, SS_BUFSIZE);
-    fromlen = sizeof(peeraddr_in);
-    rlen = recvfrom(s, buf, sizeof(buf) -1, 0, (struct sockaddr *)&peeraddr_in, &fromlen);
-    if (rlen == -1) {
-	syslog(LOG_NOTICE, "recvfrom(): %s", strerror(errno));
-    } else {		    
-	for (i = 0; i < strlen(buf); i++) {
-	    if (buf[i] == '\n')
-		buf[i] = '\0';
-	    if (buf[i] == '\r')
-	    	buf[i] = '\0';
-	}
-	for (i = strlen(buf) -1; i > 0; i--) {
-	    if (buf[i] == ' ')
-		buf[i] = '\0';
-	    else
-		break;
-	}
+    rlen = srv_recv(buf);
+    if (rlen != -1) {
 	if (strlen(buf)) {
-	    if (debug) {
-		syslog(LOG_NOTICE, "recv: \"%s\"", buf);
-		fprintf(stdout, "recv: \"%s\"\n", buf);
-	    }
-
 	    /*
 	     * Process commands from the client
 	     */

mercurial