diff -r ea20d8adbcaa -r fe042f9484ac thermferm/server.c --- a/thermferm/server.c Mon Apr 22 13:50:23 2024 +0200 +++ b/thermferm/server.c Mon Apr 22 15:12:27 2024 +0200 @@ -23,6 +23,7 @@ #include "rdconfig.h" #include "thermferm.h" #include "delay.h" +#include "one-wire.h" #include "devices.h" #include "server.h" #include "lcd-buffer.h" @@ -34,6 +35,7 @@ extern int run_pause; extern int run_hold; extern sys_config Config; +extern w1_list *w1_devices; extern const char UNITMODE[5][8]; extern const char UNITSTAGE[4][12]; extern const char DEVTYPE[8][6]; @@ -620,6 +622,62 @@ /* + * ONEWIRE JSON + */ +int cmd_onewire(int s, char *buf) +{ + char *opt, *param; + w1_list *dev_w1; + + opt = strtok(buf, " \0"); + opt = strtok(NULL, " \0"); + + if (opt == NULL) { + srv_send(s, (char *)"501 Subcommand missing"); + return 0; + } + param = strtok(NULL, "\0"); + + if (strcmp(opt, (char *)"HELP") == 0) { + srv_send(s, (char *)"100 Help text follows:"); + srv_send(s, (char *)"Recognized commands:"); + srv_send(s, (char *)"ONEWIRE JSON Json list all or a single one-wire device"); + srv_send(s, (char *)"."); + return 0; + } + + if (strcmp(opt, (char *)"JSON") == 0) { + char *payload = NULL, *payloadu = NULL; + bool comma = false; + + if (param == NULL) { + srv_send(s, (char *)"212 One-wire json list follows:"); + payload = xstrcpy((char *)"["); + for (dev_w1 = w1_devices; dev_w1; dev_w1 = dev_w1->next) { + if (comma) + payload = xstrcat(payload, (char *)","); + payloadu = one_wire_json(dev_w1); + payload = xstrcat(payload, payloadu); + comma = true; + free(payloadu); + payloadu = NULL; + } + payload = xstrcat(payload, (char *)"]"); + srv_send(s, payload); + srv_send(s, (char *)"."); + free(payload); + payload = NULL; + return 0; + } + } + + srv_send(s, (char *)"504 Subcommand error"); + return 0; +} + + + +/* * GLOBAL GET * GLOBAL PUT * GLOBAL JSON @@ -2221,6 +2279,8 @@ srv_send(s, (char *)"GLOBAL HELP Global help screen"); srv_send(s, (char *)"LIST [parameters] List commands"); srv_send(s, (char *)"LIST HELP List help screen"); + srv_send(s, (char *)"ONEWIRE [parameters] One-wire commands"); + srv_send(s, (char *)"ONEWIRE HELP One-wire help screen"); srv_send(s, (char *)"PING Check if server is alive"); #ifdef USE_SIMULATOR srv_send(s, (char *)"SIMULATOR [parameters] Simulator commands"); @@ -2233,6 +2293,9 @@ } else if (strncmp(buf, "LIST", 4) == 0) { cmd_list(s, buf); + } else if (strncmp(buf, "ONEWIRE", 7) == 0) { + cmd_onewire(s, buf); + } else if (strncmp(buf, "PING", 4) == 0) { srv_send(s, (char *)"101 PONG");