diff -r 83502d2099eb -r 0d86f3c0a07b thermferm/server.c --- a/thermferm/server.c Wed Jul 30 19:39:50 2014 +0200 +++ b/thermferm/server.c Wed Jul 30 22:57:48 2014 +0200 @@ -22,6 +22,7 @@ #include "rdconfig.h" #include "thermferm.h" +#include "logger.h" #include "server.h" #include "xutil.h" @@ -491,6 +492,52 @@ */ int cmd_mode(char *buf) { + char *opt; + units_list *unit; + + opt = strtok(buf, " \0"); + opt = strtok(NULL, "\0"); + + if (opt == NULL) { + srv_send((char *)"502 Missing command option"); + return 1; + } + + if (current_unit == NULL) { + srv_send((char *)"401 No fermenter unit selected"); + return 1; + } + for (unit = Config.units; unit; unit = unit->next) { + if (strcmp(current_unit, unit->uuid) == 0) + break; + } + + if (strcmp(opt, (char *)"OFF") == 0) { + if (unit->mode != UNITMODE_OFF) { + unit->mode = UNITMODE_OFF; + syslog(LOG_NOTICE, "Unit %s mode set to OFF", unit->name); + } + srv_send((char *)"218 Unit mode to OFF"); + return 0; + + } else if (strcmp(opt, (char *)"NONE") == 0) { + if (unit->mode != UNITMODE_NONE) { + unit->mode = UNITMODE_NONE; + syslog(LOG_NOTICE, "Unit %s mode set to NONE", unit->name); + initlog(unit->name); + } + srv_send((char *)"218 Unit mode to NONE"); + return 0; + + } else if (strcmp(opt, (char *)"FRIDGE") == 0) { + + } else if (strcmp(opt, (char *)"BEER") == 0) { + + } else if (strcmp(opt, (char *)"PROFILE") == 0) { + + } + + srv_send((char *)"502 Unknown command option"); return 1; }