Can list the 1-wire bus

Tue, 01 Jul 2014 21:41:31 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Tue, 01 Jul 2014 21:41:31 +0200
changeset 84
ef4c0032b51f
parent 83
f99e9d6deff5
child 85
c3cc6e44d1a4

Can list the 1-wire bus

thermferm/server.c file | annotate | diff | comparison | revisions
thermferm/thermferm.h file | annotate | diff | comparison | revisions
--- a/thermferm/server.c	Thu Jun 26 21:26:33 2014 +0200
+++ b/thermferm/server.c	Tue Jul 01 21:41:31 2014 +0200
@@ -162,15 +162,21 @@
 
 /*
  * LIST
+ * LIST BUS
+ * LIST PROFILES
+ * LIST UNIT
  */
 int cmd_list(char *buf)
 {
-    char	*cmd, *opt;
-    units_list	*unit;
-    int		i;
+    char		*cmd, *opt;
+    units_list		*unit;
+    int			i;
+    DIR			*fd;
+    struct dirent	*de;
 
     cmd = strtok(buf, " \0");
     opt = strtok(NULL, " \0");
+
     if (opt == NULL) {
 	srv_send((char *)"212 Fermenter list follows:");
 	i = 0;
@@ -179,7 +185,39 @@
 	    srv_send((char *)"%02d %s %-20s %-7s", i, unit->uuid, unit->name, UNITMODE[unit->mode]);
 	}
 	srv_send((char *)".");
-	return 0;
+    } else if (strcmp(opt, (char *)"BUS") == 0) {
+	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 *)"10", 2) == 0) {
+			    srv_send((char *)"18S20 digital thermometer            %s", de->d_name);
+			} else if (strncmp(de->d_name, (char *)"28", 2) == 0) {
+			    srv_send((char *)"18B20 digital thermometer            %s", de->d_name);
+			} else if (strncmp(de->d_name, (char *)"29", 2) == 0) {
+			    srv_send((char *)"2408 8-channel addressable switch    %s", de->d_name);
+			} else if (strncmp(de->d_name, (char *)"3a", 2) == 0) {
+			    srv_send((char *)"2413 dual channel addressable switch %s", de->d_name);
+			} else {
+		            srv_send((char *)"unknown device                       %s", de->d_name);
+			}
+		    }
+		}
+		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) {
+
+    } else if (strcmp(opt, (char *)"UNIT") == 0) {
+	if (current_unit == -1) {
+	    srv_send((char *)"401 No fermenter unit selected");
+	} else {
+
+	}
+    } else {
+	srv_send((char *)"502 Unknown command option");
     }
 
     return 0;
@@ -239,7 +277,7 @@
 		srv_send((char *)"ADD name                  Add a new unit with \"name\"");
 		srv_send((char *)"LCD                       Get LCD screen (allways 4 rows of 20 characters)");
 		srv_send((char *)"LIST                      List all fermenter units");
-//		srv_send((char *)"LIST BUS                  List 1-wire bus");
+		srv_send((char *)"LIST BUS                  List 1-wire bus");
 //		srv_send((char *)"LIST PROFILES             List available profiles");
 //		srv_send((char *)"LIST UNIT                 List fermenter unit");
 //		srv_send((char *)"MODE off|none|beer|fridge|profile");
@@ -250,6 +288,7 @@
 //		srv_send((char *)"SET IDLE LOW val          Set idle temperature low");
 //		srv_send((char *)"SET IDLE HIGH val         Set idle temperature high");
 //		srv_send((char *)"SET NAME name             Set name or beername for the unit");
+//		srv_send((char *)"SET NONE                  Set unit to none, but still logs");
 //		srv_send((char *)"SET OFF                   Set unit off");
 //		srv_send((char *)"SET PROFILE name          Set named profile");
 //		srv_send((char *)"SET TEMP MIN val          Set unit minimum temperature");
--- a/thermferm/thermferm.h	Thu Jun 26 21:26:33 2014 +0200
+++ b/thermferm/thermferm.h	Tue Jul 01 21:41:31 2014 +0200
@@ -28,6 +28,7 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <poll.h>
+#include <dirent.h>
 #include <uuid/uuid.h>
 #ifndef HAVE_WIRINGPI_H
 #include <pthread.h>

mercurial