thermferm/server.c

changeset 86
3d7a241329e2
parent 85
c3cc6e44d1a4
child 87
55f1315c94f1
--- a/thermferm/server.c	Tue Jul 01 21:53:03 2014 +0200
+++ b/thermferm/server.c	Tue Jul 01 23:14:57 2014 +0200
@@ -168,7 +168,7 @@
  */
 int cmd_list(char *buf)
 {
-    char		*cmd, *opt;
+    char		*cmd, *opt, *mypath;
     units_list		*unit;
     int			i;
     DIR			*fd;
@@ -186,33 +186,62 @@
 	}
 	srv_send((char *)".");
     } else if (strcmp(opt, (char *)"BUS") == 0) {
+	/*
+	 * 1-wire bus
+	 */
 	if ((fd = opendir((char *)"/sys/bus/w1/devices"))) {
-		srv_send((char *)"212 1-wire bus devices:");
-		while ((de = readdir(fd))) {
-		    if (de->d_name[0] != '.') {
-			if (strncmp(de->d_name, (char *)"w1", 2) == 0) {
-			    srv_send((char *)"%-15s       system device", de->d_name);
-			} else if (strncmp(de->d_name, (char *)"10", 2) == 0) {
-			    srv_send((char *)"%-15s 18S20 digital thermometer", de->d_name);
-			} else if (strncmp(de->d_name, (char *)"28", 2) == 0) {
-			    srv_send((char *)"%-15s 18B20 digital thermometer", de->d_name);
-			} else if (strncmp(de->d_name, (char *)"29", 2) == 0) {
-			    srv_send((char *)"%-15s 2408  8-channel addressable switch", de->d_name);
-			} else if (strncmp(de->d_name, (char *)"3a", 2) == 0) {
-			    srv_send((char *)"%-15s 2413  dual channel addressable switchs", de->d_name);
-			} else {
-		            srv_send((char *)"%-15s       unknown device", de->d_name);
-			}
+	    srv_send((char *)"212 1-wire bus devices:");
+	    while ((de = readdir(fd))) {
+		if (de->d_name[0] != '.') {
+		    if (strncmp(de->d_name, (char *)"w1", 2) == 0) {
+			srv_send((char *)"%-15s       system device", de->d_name);
+		    } else if (strncmp(de->d_name, (char *)"10", 2) == 0) {
+			srv_send((char *)"%-15s 18S20 digital thermometer", de->d_name);
+		    } else if (strncmp(de->d_name, (char *)"28", 2) == 0) {
+			srv_send((char *)"%-15s 18B20 digital thermometer", de->d_name);
+		    } else if (strncmp(de->d_name, (char *)"29", 2) == 0) {
+			srv_send((char *)"%-15s 2408  8-channel addressable switch/LCD", de->d_name);
+		    } else if (strncmp(de->d_name, (char *)"3a", 2) == 0) {
+			srv_send((char *)"%-15s 2413  dual channel addressable switchs", de->d_name);
+		    } else {
+			srv_send((char *)"%-15s       unknown device", de->d_name);
 		    }
 		}
-		srv_send((char *)".");
+	    }
+	    srv_send((char *)".");
 	    closedir(fd);
 	} else {
 	    srv_send((char *)"503 directory /sys/bus/w1/devices: %s", strerror(errno));
 	}
     } else if (strcmp(opt, (char *)"PROFILES") == 0) {
-
+	/*
+	 * User profiles directory
+	 */
+	if (getenv((char *)"USER") == NULL) {
+	    mypath = xstrcpy((char *)"/root");
+	} else {
+	    mypath = xstrcpy(getenv((char *)"HOME"));
+	}
+	mypath = xstrcat(mypath, (char *)"/.thermferm/profiles/");
+	mkdirs(mypath, 0755);
+	if ((fd = opendir(mypath))) {
+	    srv_send((char *)"212 profiles:");
+	    while ((de = readdir(fd))) {
+		if (de->d_name[0] != '.') {
+		    srv_send((char *)"%s", de->d_name);
+		}
+	    }
+	    srv_send((char *)".");
+	    closedir(fd);
+	} else {
+	    srv_send((char *)"503 directory %s: %s", mypath, strerror(errno));
+	}
+	free(mypath);
+	mypath = NULL;
     } else if (strcmp(opt, (char *)"UNIT") == 0) {
+	/*
+	 * List configured and selected fermenter unit
+	 */
 	if (current_unit == -1) {
 	    srv_send((char *)"401 No fermenter unit selected");
 	} else {

mercurial