thermferm/server.c

changeset 696
fe042f9484ac
parent 693
3518c07737d8
child 698
92a080c1a5d5
--- 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 <CMD> [parameters]       List commands");
 		srv_send(s, (char *)"LIST HELP                     List help screen");
+		srv_send(s, (char *)"ONEWIRE <CMD> [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 <CMD> [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");
 

mercurial