# HG changeset patch # User Michiel Broek # Date 1404243691 -7200 # Node ID ef4c0032b51f83dd89235f4fefae190e03f13fc6 # Parent f99e9d6deff59b69250b79563f416fb3e5a0bbf3 Can list the 1-wire bus diff -r f99e9d6deff5 -r ef4c0032b51f thermferm/server.c --- 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"); diff -r f99e9d6deff5 -r ef4c0032b51f thermferm/thermferm.h --- 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 #include #include +#include #include #ifndef HAVE_WIRINGPI_H #include