diff --git a/TeAmanagement/Makefile b/TeAmanagement/Makefile
new file mode 100644
index 0000000..a1e2f91
--- /dev/null
+++ b/TeAmanagement/Makefile
@@ -0,0 +1,56 @@
+# run `make DEF=...` to add extra defines
+PROGRAM := teacmd
+LDFLAGS := -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,--discard-all
+LDFLAGS += -lusefull_macros
+SRCS := $(wildcard *.c)
+DEFINES := $(DEF) -D_GNU_SOURCE -D_XOPEN_SOURCE=1111
+OBJDIR := mk
+CFLAGS += -O2 -Wall -Wextra -Wno-trampolines -std=gnu99
+OBJS := $(addprefix $(OBJDIR)/, $(SRCS:%.c=%.o))
+DEPS := $(OBJS:.o=.d)
+TARGFILE := $(OBJDIR)/TARGET
+CC = gcc
+
+ifeq ($(shell test -e $(TARGFILE) && echo -n yes),yes)
+ TARGET := $(file < $(TARGFILE))
+else
+ TARGET := RELEASE
+endif
+
+ifeq ($(TARGET), DEBUG)
+ .DEFAULT_GOAL := debug
+endif
+
+release: $(PROGRAM)
+
+debug: CFLAGS += -DEBUG -Werror
+debug: TARGET := DEBUG
+debug: $(PROGRAM)
+
+$(TARGFILE): $(OBJDIR)
+ @echo -e "\t\tTARGET: $(TARGET)"
+ @echo "$(TARGET)" > $(TARGFILE)
+
+$(PROGRAM) : $(TARGFILE) $(OBJS)
+ @echo -e "\t\tLD $(PROGRAM)"
+ $(CC) $(LDFLAGS) $(OBJS) -o $(PROGRAM)
+
+$(OBJDIR):
+ @mkdir $(OBJDIR)
+
+ifneq ($(MAKECMDGOALS),clean)
+-include $(DEPS)
+endif
+
+$(OBJDIR)/%.o: %.c
+ @echo -e "\t\tCC $<"
+ $(CC) -MD -c $(LDFLAGS) $(CFLAGS) $(DEFINES) -o $@ $<
+
+clean:
+ @echo -e "\t\tCLEAN"
+ @rm -rf $(OBJDIR) 2>/dev/null || true
+
+xclean: clean
+ @rm -f $(PROGRAM)
+
+.PHONY: clean xclean
diff --git a/TeAmanagement/Readme b/TeAmanagement/Readme
new file mode 100644
index 0000000..3382493
--- /dev/null
+++ b/TeAmanagement/Readme
@@ -0,0 +1,3 @@
+Client/server
+
+
diff --git a/TeAmanagement/TeAman.cflags b/TeAmanagement/TeAman.cflags
new file mode 100644
index 0000000..68d5165
--- /dev/null
+++ b/TeAmanagement/TeAman.cflags
@@ -0,0 +1 @@
+-std=c17
\ No newline at end of file
diff --git a/TeAmanagement/TeAman.config b/TeAmanagement/TeAman.config
new file mode 100644
index 0000000..c49fee0
--- /dev/null
+++ b/TeAmanagement/TeAman.config
@@ -0,0 +1,6 @@
+// Add predefined macros for your project here. For example:
+// #define THE_ANSWER 42
+#define EBUG
+#define _GNU_SOURCE
+#define _XOPEN_SOURCE=1111
+
diff --git a/TeAmanagement/TeAman.creator b/TeAmanagement/TeAman.creator
new file mode 100644
index 0000000..e94cbbd
--- /dev/null
+++ b/TeAmanagement/TeAman.creator
@@ -0,0 +1 @@
+[General]
diff --git a/TeAmanagement/TeAman.creator.user b/TeAmanagement/TeAman.creator.user
new file mode 100644
index 0000000..2810e57
--- /dev/null
+++ b/TeAmanagement/TeAman.creator.user
@@ -0,0 +1,163 @@
+
+
+
+
+
+ EnvironmentId
+ {cf63021e-ef53-49b0-b03b-2f2570cdf3b6}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ KOI8-R
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ false
+ false
+ false
+ 1
+ true
+ true
+ 0
+ 8
+ true
+ false
+ 2
+ true
+ true
+ true
+ *.md, *.MD, Makefile
+ true
+ true
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+ true
+ true
+ Builtin.DefaultTidyAndClazy
+ 4
+
+
+
+ true
+
+
+ true
+
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop
+ Desktop
+ Desktop
+ {91347f2c-5221-46a7-80b1-0a054ca02f79}
+ 0
+ 0
+ 0
+
+ /home/eddy/Docs/SAO/ELECTRONICS/CAN_controller/Socket_CANserver
+
+
+
+ all
+
+ true
+ GenericProjectManager.GenericMakeStep
+
+ 1
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+ clean
+
+ true
+ GenericProjectManager.GenericMakeStep
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Default
+ GenericProjectManager.GenericBuildConfiguration
+
+ 1
+
+
+ 0
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+
+ 2
+
+ ProjectExplorer.CustomExecutableRunConfiguration
+
+ false
+ true
+ false
+ true
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 22
+
+
+ Version
+ 22
+
+
diff --git a/TeAmanagement/TeAman.cxxflags b/TeAmanagement/TeAman.cxxflags
new file mode 100644
index 0000000..6435dfc
--- /dev/null
+++ b/TeAmanagement/TeAman.cxxflags
@@ -0,0 +1 @@
+-std=c++17
\ No newline at end of file
diff --git a/TeAmanagement/TeAman.files b/TeAmanagement/TeAman.files
new file mode 100644
index 0000000..88aa173
--- /dev/null
+++ b/TeAmanagement/TeAman.files
@@ -0,0 +1,7 @@
+cmdlnopts.c
+cmdlnopts.h
+main.c
+sersock.c
+sersock.h
+teacmd.c
+teacmd.h
diff --git a/TeAmanagement/TeAman.includes b/TeAmanagement/TeAman.includes
new file mode 100644
index 0000000..9c558e3
--- /dev/null
+++ b/TeAmanagement/TeAman.includes
@@ -0,0 +1 @@
+.
diff --git a/TeAmanagement/cmdlnopts.c b/TeAmanagement/cmdlnopts.c
new file mode 100644
index 0000000..c281ae0
--- /dev/null
+++ b/TeAmanagement/cmdlnopts.c
@@ -0,0 +1,106 @@
+/*
+ * This file is part of the TeAman project.
+ * Copyright 2022 Edward V. Emelianov .
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include // NAN
+#include
+#include
+
+#include "cmdlnopts.h"
+#include "usefull_macros.h"
+
+// default PID filename:
+#define DEFAULT_PIDFILE "/tmp/usbsock.pid"
+#define DEFAULT_PORT "1234"
+#define DEFAULT_SOCKPATH "\0TeA"
+
+static int help;
+static glob_pars G = {
+ .pidfile = DEFAULT_PIDFILE,
+ .speed = 9600,
+ .path = DEFAULT_SOCKPATH,
+ .minsteps = {-6150, -4100, -3700},
+ .maxsteps = {25000, 16000, 32500},
+ .x = NAN, .y = NAN, .z = NAN
+};
+
+/*
+ * Define command line options by filling structure:
+ * name has_arg flag val type argptr help
+*/
+static myoption cmdlnopts[] = {
+ {"help", NO_ARGS, NULL, 'h', arg_int, APTR(&help), _("show this help")},
+ {"devpath", NEED_ARG, NULL, 'd', arg_string, APTR(&G.devpath), _("serial device path")},
+ {"speed", NEED_ARG, NULL, 's', arg_int, APTR(&G.speed), _("serial device speed (default: 9600)")},
+ {"logfile", NEED_ARG, NULL, 'l', arg_string, APTR(&G.logfile), _("file to save logs (default: none)")},
+ {"pidfile", NEED_ARG, NULL, 'p', arg_string, APTR(&G.pidfile), _("pidfile (default: " DEFAULT_PIDFILE ")")},
+ {"client", NO_ARGS, NULL, 'c', arg_int, APTR(&G.client), _("run as client")},
+ {"sockpath",NEED_ARG, NULL, 'f', arg_string, APTR(&G.path), _("socket path (start from \\0 for no files, default: \0TeA)")},
+ {"verbose", NO_ARGS, NULL, 'v', arg_none, APTR(&G.verbose), _("increase log verbose level (default: LOG_WARN) and messages (default: none)")},
+ {"fitsheader",NEED_ARG, NULL, 'o', arg_string, APTR(&G.fitshdr), _("FITS header output file")},
+ {"terminal",NO_ARGS, NULL, 't', arg_int, APTR(&G.terminal), _("run as terminal client")},
+ {"xmin", NEED_ARG, NULL, 0, arg_int, APTR(&G.minsteps[0]),_("min position (steps) by X")},
+ {"xmax", NEED_ARG, NULL, 0, arg_int, APTR(&G.maxsteps[0]),_("max position (steps) by X")},
+ {"ymin", NEED_ARG, NULL, 0, arg_int, APTR(&G.minsteps[1]),_("min position (steps) by Y")},
+ {"ymax", NEED_ARG, NULL, 0, arg_int, APTR(&G.maxsteps[1]),_("max position (steps) by Y")},
+ {"zmin", NEED_ARG, NULL, 0, arg_int, APTR(&G.minsteps[2]),_("min position (steps) by Z")},
+ {"zmax", NEED_ARG, NULL, 0, arg_int, APTR(&G.maxsteps[2]),_("max position (steps) by Z")},
+ {"setx", NEED_ARG, NULL, 'x', arg_double, APTR(&G.x), _("move X-stage to this coordinate (mm)")},
+ {"sety", NEED_ARG, NULL, 'y', arg_double, APTR(&G.y), _("move Y-stage to this coordinate (mm)")},
+ {"setz", NEED_ARG, NULL, 'z', arg_double, APTR(&G.z), _("move Z-stage to this coordinate (mm)")},
+ {"wait", NO_ARGS, NULL, 'w', arg_int, APTR(&G.wait), _("wait end of operations")},
+ {"gotozero",NO_ARGS, NULL, '0', arg_int, APTR(&G.gotozero), _("init zero-position of all axis")},
+ end_option
+};
+
+/**
+ * Parse command line options and return dynamically allocated structure
+ * to global parameters
+ * @param argc - copy of argc from main
+ * @param argv - copy of argv from main
+ * @return allocated structure with global parameters
+ */
+glob_pars *parse_args(int argc, char **argv){
+ int i;
+ size_t hlen = 1024;
+ char helpstring[1024], *hptr = helpstring;
+ snprintf(hptr, hlen, "Usage: %%s [args]\n\n\tWhere args are:\n");
+ // format of help: "Usage: progname [args]\n"
+ change_helpstring(helpstring);
+ // parse arguments
+ parseargs(&argc, &argv, cmdlnopts);
+ for(i = 0; i < argc; i++)
+ printf("Ignore parameter\t%s\n", argv[i]);
+ if(help) showhelp(-1, cmdlnopts);
+ return &G;
+}
+
+/**
+ * @brief verbose - print additional messages depending of G.verbose (add '\n' at end)
+ * @param levl - message level
+ * @param fmt - message
+ */
+void verbose(int levl, const char *fmt, ...){
+ va_list ar;
+ if(levl > G.verbose) return;
+ //printf("%s: ", __progname);
+ va_start(ar, fmt);
+ vprintf(fmt, ar);
+ va_end(ar);
+ printf("\n");
+}
diff --git a/TeAmanagement/cmdlnopts.h b/TeAmanagement/cmdlnopts.h
new file mode 100644
index 0000000..ecc4247
--- /dev/null
+++ b/TeAmanagement/cmdlnopts.h
@@ -0,0 +1,48 @@
+/*
+ * This file is part of the TeAman project.
+ * Copyright 2022 Edward V. Emelianov .
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+#ifndef CMDLNOPTS_H__
+#define CMDLNOPTS_H__
+
+/*
+ * here are some typedef's for global data
+ */
+typedef struct{
+ char *devpath; // path to serial device
+ char *pidfile; // name of PID file
+ char *logfile; // logging to this file
+ char *path; // path to socket file
+ char *fitshdr; // path to file with FITS header output
+ int minsteps[3]; // min steps for each axe
+ int maxsteps[3];
+ int terminal; // run as terminal
+ int speed; // connection speed
+ int verbose; // verbose level: for messages & logging
+ int client; // ==1 if application runs in client mode
+ int wait; // wait for stop
+ int gotozero; // run 'gotoz' for all three axis
+ double x; // coordinates to set (when run as client)
+ double y;
+ double z;
+} glob_pars;
+
+glob_pars *parse_args(int argc, char **argv);
+void verbose(int levl, const char *fmt, ...);
+
+#endif // CMDLNOPTS_H__
diff --git a/TeAmanagement/log.log b/TeAmanagement/log.log
new file mode 100644
index 0000000..2742dc4
--- /dev/null
+++ b/TeAmanagement/log.log
@@ -0,0 +1,2506 @@
+[MSG] 2022/10/14-17:10:28 Started
+[MSG] 2022/10/14-17:10:28 Created child with pid 7133
+[MSG] 2022/10/14-17:10:29 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:29 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:29 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:10:29 SERIAL: state1=0
+[MSG] 2022/10/14-17:10:29 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:10:29 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:33 Connection, fd=6
+[MSG] 2022/10/14-17:10:33 CLIENT_6: abspos0=10000
+[MSG] 2022/10/14-17:10:33 SERIAL: abspos0=10000
+[MSG] 2022/10/14-17:10:33 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:33 SERIAL: state0=1
+[MSG] 2022/10/14-17:10:33 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:10:33 SERIAL: state1=0
+[MSG] 2022/10/14-17:10:33 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:10:33 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:33 CLIENT_6: abspos1=10000
+[MSG] 2022/10/14-17:10:33 SERIAL: abspos1=10000
+[MSG] 2022/10/14-17:10:33 CLIENT_6: abspos2=10000
+[MSG] 2022/10/14-17:10:33 SERIAL: abspos2=10000
+[MSG] 2022/10/14-17:10:33 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:10:33 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:34 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:34 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:34 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:34 SERIAL: state1=1
+[MSG] 2022/10/14-17:10:34 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:34 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:34 SERIAL: abspos1=768
+[MSG] 2022/10/14-17:10:34 SERIAL: state1=1
+[MSG] 2022/10/14-17:10:34 SERIAL: abspos2=463
+[MSG] 2022/10/14-17:10:34 SERIAL: te2=1
+[MSG] 2022/10/14-17:10:34 SERIAL: state2=1
+[MSG] 2022/10/14-17:10:34 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:34 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:34 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:34 SERIAL: state1=1
+[MSG] 2022/10/14-17:10:34 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:34 SERIAL: state2=1
+[MSG] 2022/10/14-17:10:35 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:35 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:35 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:35 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:35 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:35 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:35 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:35 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:35 SERIAL: abspos1=3425
+[MSG] 2022/10/14-17:10:35 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:35 SERIAL: abspos2=3236
+[MSG] 2022/10/14-17:10:35 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:35 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:35 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:35 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:35 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:35 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:35 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:36 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:36 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:36 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:36 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:36 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:36 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:36 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:36 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:36 SERIAL: abspos1=6467
+[MSG] 2022/10/14-17:10:36 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:36 SERIAL: abspos2=6792
+[MSG] 2022/10/14-17:10:36 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:36 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:36 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:36 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:36 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:36 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:36 SERIAL: state2=4
+[MSG] 2022/10/14-17:10:37 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:37 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:37 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:37 SERIAL: state1=4
+[MSG] 2022/10/14-17:10:37 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:37 SERIAL: state2=4
+[MSG] 2022/10/14-17:10:37 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:37 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:37 SERIAL: abspos1=9182
+[MSG] 2022/10/14-17:10:37 SERIAL: state1=4
+[MSG] 2022/10/14-17:10:37 SERIAL: abspos2=9561
+[MSG] 2022/10/14-17:10:37 SERIAL: state2=4
+[MSG] 2022/10/14-17:10:37 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:37 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:37 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:37 SERIAL: state1=4
+[MSG] 2022/10/14-17:10:37 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:37 SERIAL: state2=4
+[MSG] 2022/10/14-17:10:38 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:38 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:38 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:38 SERIAL: state1=0
+[MSG] 2022/10/14-17:10:38 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:38 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:38 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:38 SERIAL: abspos1=10000
+[MSG] 2022/10/14-17:10:38 SERIAL: state1=0
+[MSG] 2022/10/14-17:10:38 SERIAL: abspos2=10000state2
+[MSG] 2022/10/14-17:10:38 SERIAL:
+[MSG] 2022/10/14-17:10:38 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:38 CLIENT_6: gotoz0
+[MSG] 2022/10/14-17:10:38 CLIENT_6: gotoz1
+[MSG] 2022/10/14-17:10:38 CLIENT_6: gotoz2
+[MSG] 2022/10/14-17:10:38 SERIAL: gotoz0=0
+[MSG] 2022/10/14-17:10:38 SERIAL: gotoz1=1
+[MSG] 2022/10/14-17:10:38 SERIAL: gotoz2=2
+[MSG] 2022/10/14-17:10:39 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:39 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:39 SERIAL: abspos1=9133
+[MSG] 2022/10/14-17:10:39 SERIAL: state1=1
+[MSG] 2022/10/14-17:10:39 SERIAL: abspos2=8942
+[MSG] 2022/10/14-17:10:39 SERIAL: state2=1
+[MSG] 2022/10/14-17:10:39 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:39 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:39 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:39 SERIAL: state1=1
+[MSG] 2022/10/14-17:10:39 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:39 SERIAL: state2=1
+[MSG] 2022/10/14-17:10:39 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:39 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:39 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:40 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:40 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:40 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:40 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:40 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:40 SERIAL: abspos1=6437
+[MSG] 2022/10/14-17:10:40 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:40 SERIAL: abspos2=5701
+[MSG] 2022/10/14-17:10:40 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:40 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:40 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:40 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:40 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:40 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:40 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:40 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:40 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:40 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:41 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:41 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:41 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:41 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:41 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:41 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:41 SERIAL: abspos1=3392
+[MSG] 2022/10/14-17:10:41 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:41 SERIAL: abspos2=2142
+[MSG] 2022/10/14-17:10:41 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:41 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:41 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:41 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:41 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:41 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:41 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:41 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:41 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:41 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:41 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:41 SERIAL: state2=2
+[MSG] 2022/10/14-17:10:42 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:42 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:10:42 SERIAL: state0=5
+[MSG] 2022/10/14-17:10:42 SERIAL: state0=3
+[MSG] 2022/10/14-17:10:42 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:42 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:42 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:42 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:42 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:42 SERIAL: abspos1=356
+[MSG] 2022/10/14-17:10:42 SERIAL: state1=2
+[MSG] 2022/10/14-17:10:42 SERIAL: abspos2=-58
+[MSG] 2022/10/14-17:10:42 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:42 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:42 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:42 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:42 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:42 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:42 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:42 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:43 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:43 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:43 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:43 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:43 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:43 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:43 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:43 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:43 SERIAL: abspos1=-75
+[MSG] 2022/10/14-17:10:43 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:43 SERIAL: abspos2=-38
+[MSG] 2022/10/14-17:10:43 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:43 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:43 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:43 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:43 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:43 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:43 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:44 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:44 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:44 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:44 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:44 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:44 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:44 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:44 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:44 SERIAL: abspos1=-55
+[MSG] 2022/10/14-17:10:44 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:44 SERIAL: abspos2=-18
+[MSG] 2022/10/14-17:10:44 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:44 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:44 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:44 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:44 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:44 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:44 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:45 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:45 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:45 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:45 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:45 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:45 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:45 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:45 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:45 SERIAL: abspos1=-35
+[MSG] 2022/10/14-17:10:45 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:45 SERIAL: abspos2=2
+[MSG] 2022/10/14-17:10:45 SERIAL: state2=3
+[MSG] 2022/10/14-17:10:45 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:45 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:45 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:45 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:45 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:45 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:46 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:46 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:46 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:46 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:46 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:46 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:46 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:46 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:46 SERIAL: abspos1=-15
+[MSG] 2022/10/14-17:10:46 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:46 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:10:46 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:46 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:46 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:46 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:46 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:46 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:46 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:47 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:47 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:47 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:47 SERIAL: state1=3
+[MSG] 2022/10/14-17:10:47 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:47 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:47 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:47 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:47 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:10:47 SERIAL: state1=0
+[MSG] 2022/10/14-17:10:47 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:10:47 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:47 CLIENT_6: state0
+[MSG] 2022/10/14-17:10:47 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:47 CLIENT_6: state1
+[MSG] 2022/10/14-17:10:47 SERIAL: state1=0
+[MSG] 2022/10/14-17:10:47 CLIENT_6: state2
+[MSG] 2022/10/14-17:10:47 SERIAL: state2=0
+[MSG] 2022/10/14-17:10:47 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:10:47 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:47 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:10:48 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:10:48 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:10:48 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:10:48 Client fd=6 disconnected
+[MSG] 2022/10/14-17:10:48 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:10:48 SERIAL: state0=0
+[MSG] 2022/10/14-17:10:48 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:10:48 SERIAL: state1=0
+[MSG] 2022/10/14-17:10:48 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:10:48 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:20 Connection, fd=6
+[MSG] 2022/10/14-17:11:20 CLIENT_6: abspos0=10000
+[MSG] 2022/10/14-17:11:20 SERIAL: abspos0=10000
+[MSG] 2022/10/14-17:11:21 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:21 SERIAL: state0=1
+[MSG] 2022/10/14-17:11:21 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:21 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:21 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:11:21 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:21 CLIENT_6: abspos1=10000
+[MSG] 2022/10/14-17:11:21 SERIAL: abspos1=10000
+[MSG] 2022/10/14-17:11:21 CLIENT_6: abspos2=10000
+[MSG] 2022/10/14-17:11:21 SERIAL: abspos2=10000
+[MSG] 2022/10/14-17:11:21 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:11:21 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:21 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:21 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:21 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:21 SERIAL: state1=1
+[MSG] 2022/10/14-17:11:21 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:21 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:21 SERIAL: abspos1=747
+[MSG] 2022/10/14-17:11:22 SERIAL: state1=1
+[MSG] 2022/10/14-17:11:22 SERIAL: abspos2=444
+[MSG] 2022/10/14-17:11:22 SERIAL: state2=1
+[MSG] 2022/10/14-17:11:22 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:22 SERIAL: state2=1
+[MSG] 2022/10/14-17:11:22 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:22 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:22 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:22 SERIAL: state1=1
+[MSG] 2022/10/14-17:11:22 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:22 SERIAL: state2=1
+[MSG] 2022/10/14-17:11:22 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:22 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:22 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:22 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:22 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:22 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:22 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:23 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:23 SERIAL: abspos1=3386
+[MSG] 2022/10/14-17:11:23 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:23 SERIAL: abspos2=3187
+[MSG] 2022/10/14-17:11:23 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:23 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:23 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:23 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:23 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:23 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:23 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:23 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:23 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:23 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:23 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:23 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:23 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:24 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:24 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:24 SERIAL: abspos1=6431
+[MSG] 2022/10/14-17:11:24 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:24 SERIAL: abspos2=6747
+[MSG] 2022/10/14-17:11:24 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:24 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:24 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:24 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:24 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:24 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:24 SERIAL: state2=4
+[MSG] 2022/10/14-17:11:24 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:24 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:24 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:24 SERIAL: state1=4
+[MSG] 2022/10/14-17:11:24 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:24 SERIAL: state2=4
+[MSG] 2022/10/14-17:11:25 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:25 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:25 SERIAL: abspos1=9158
+[MSG] 2022/10/14-17:11:25 SERIAL: state1=4
+[MSG] 2022/10/14-17:11:25 SERIAL: abspos2=9555
+[MSG] 2022/10/14-17:11:25 SERIAL: state2=4
+[MSG] 2022/10/14-17:11:25 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:25 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:25 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:25 SERIAL: state1=4
+[MSG] 2022/10/14-17:11:25 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:25 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:25 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:25 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:25 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:25 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:25 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:26 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:26 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:26 SERIAL: abspos1=10000
+[MSG] 2022/10/14-17:11:26 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:26 SERIAL: abspos2=10000state2
+[MSG] 2022/10/14-17:11:26 SERIAL:
+[MSG] 2022/10/14-17:11:26 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:26 CLIENT_6: gotoz0
+[MSG] 2022/10/14-17:11:26 CLIENT_6: gotoz1
+[MSG] 2022/10/14-17:11:26 CLIENT_6: gotoz2
+[MSG] 2022/10/14-17:11:26 SERIAL: gotoz0=0
+[MSG] 2022/10/14-17:11:26 SERIAL: gotoz1=1
+[MSG] 2022/10/14-17:11:26 SERIAL: gotoz2=2
+[MSG] 2022/10/14-17:11:27 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:27 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:27 SERIAL: abspos1=9132
+[MSG] 2022/10/14-17:11:27 SERIAL: state1=1
+[MSG] 2022/10/14-17:11:27 SERIAL: abspos2=8944
+[MSG] 2022/10/14-17:11:27 SERIAL: state2=1
+[MSG] 2022/10/14-17:11:27 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:27 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:27 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:27 SERIAL: state1=1
+[MSG] 2022/10/14-17:11:27 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:27 SERIAL: state2=1
+[MSG] 2022/10/14-17:11:27 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:27 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:27 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:27 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:27 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:27 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:28 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:28 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:28 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:28 SERIAL: abspos1=6430
+[MSG] 2022/10/14-17:11:28 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:28 SERIAL: abspos2=5697
+[MSG] 2022/10/14-17:11:28 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:28 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:28 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:28 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:28 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:28 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:28 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:28 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:28 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:28 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:28 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:28 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:28 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:28 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:28 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:29 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:29 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:29 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:29 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:29 SERIAL: abspos1=3396
+[MSG] 2022/10/14-17:11:29 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:29 SERIAL: abspos2=2151
+[MSG] 2022/10/14-17:11:29 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:29 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:29 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:29 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:29 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:29 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:29 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:29 SERIAL: state2=2
+[MSG] 2022/10/14-17:11:29 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:29 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:11:29 SERIAL: state0=5
+[MSG] 2022/10/14-17:11:29 SERIAL: state0=3
+[MSG] 2022/10/14-17:11:29 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:30 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:30 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:30 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:30 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:30 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:30 SERIAL: abspos1=354
+[MSG] 2022/10/14-17:11:30 SERIAL: state1=2
+[MSG] 2022/10/14-17:11:30 SERIAL: abspos2=-226
+[MSG] 2022/10/14-17:11:30 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:30 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:30 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:30 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:30 SERIAL: state1=4
+[MSG] 2022/10/14-17:11:30 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:30 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:30 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:30 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:30 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:30 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:30 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:31 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:31 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:31 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:31 SERIAL: abspos1=-131
+[MSG] 2022/10/14-17:11:31 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:31 SERIAL: abspos2=-206
+[MSG] 2022/10/14-17:11:31 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:31 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:31 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:31 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:31 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:31 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:31 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:31 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:31 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:31 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:31 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:31 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:32 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:32 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:32 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:32 SERIAL: abspos1=-110
+[MSG] 2022/10/14-17:11:32 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:32 SERIAL: abspos2=-186
+[MSG] 2022/10/14-17:11:32 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:32 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:32 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:32 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:32 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:32 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:32 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:32 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:32 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:32 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:32 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:32 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:33 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:33 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:33 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:33 SERIAL: abspos1=-90
+[MSG] 2022/10/14-17:11:33 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:33 SERIAL: abspos2=-165
+[MSG] 2022/10/14-17:11:33 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:33 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:33 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:33 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:33 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:33 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:33 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:33 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:33 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:33 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:33 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:33 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:34 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:34 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:34 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:34 SERIAL: abspos1=-70
+[MSG] 2022/10/14-17:11:34 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:34 SERIAL: abspos2=-145
+[MSG] 2022/10/14-17:11:34 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:34 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:34 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:34 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:34 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:34 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:34 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:34 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:34 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:34 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:34 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:34 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:35 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:35 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:35 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:35 SERIAL: abspos1=-50
+[MSG] 2022/10/14-17:11:35 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:35 SERIAL: abspos2=-125
+[MSG] 2022/10/14-17:11:35 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:35 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:35 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:35 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:35 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:35 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:35 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:35 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:35 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:35 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:35 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:35 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:36 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:36 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:36 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:36 SERIAL: abspos1=-29
+[MSG] 2022/10/14-17:11:36 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:36 SERIAL: abspos2=-105
+[MSG] 2022/10/14-17:11:36 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:36 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:36 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:36 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:36 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:36 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:36 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:36 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:36 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:36 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:36 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:36 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:37 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:37 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:37 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:37 SERIAL: abspos1=-9
+[MSG] 2022/10/14-17:11:37 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:37 SERIAL: abspos2=-84
+[MSG] 2022/10/14-17:11:37 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:37 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:37 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:37 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:37 SERIAL: state1=3
+[MSG] 2022/10/14-17:11:37 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:37 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:37 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:37 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:37 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:37 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:37 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:38 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:38 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:38 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:38 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:38 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:38 SERIAL: abspos2=-64
+[MSG] 2022/10/14-17:11:38 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:38 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:38 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:38 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:38 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:38 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:38 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:38 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:38 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:38 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:38 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:38 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:39 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:39 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:39 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:39 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:39 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:39 SERIAL: abspos2=-44
+[MSG] 2022/10/14-17:11:39 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:39 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:39 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:39 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:39 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:39 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:39 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:39 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:39 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:39 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:39 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:39 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:40 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:40 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:40 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:40 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:40 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:40 SERIAL: abspos2=-24
+[MSG] 2022/10/14-17:11:40 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:40 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:40 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:40 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:40 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:40 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:40 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:40 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:40 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:40 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:40 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:40 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:41 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:41 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:41 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:41 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:41 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:41 SERIAL: abspos2=-3
+[MSG] 2022/10/14-17:11:41 SERIAL: state2=3
+[MSG] 2022/10/14-17:11:41 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:41 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:41 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:41 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:41 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:41 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:41 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:11:41 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:41 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:11:41 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:41 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:11:41 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:11:41 Client fd=6 disconnected
+[MSG] 2022/10/14-17:11:42 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:42 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:42 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:42 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:42 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:11:42 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:47 Connection, fd=6
+[MSG] 2022/10/14-17:11:47 CLIENT_6: abspos2=-199
+[MSG] 2022/10/14-17:11:48 SERIAL: abspos2=-199
+[MSG] 2022/10/14-17:11:48 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:48 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:48 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:48 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:48 SERIAL: abspos2=-19
+[MSG] 2022/10/14-17:11:48 SERIAL: state2=1
+[MSG] 2022/10/14-17:11:48 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:11:48 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:48 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:11:48 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:48 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:11:48 SERIAL: abspos2=-180
+[MSG] 2022/10/14-17:11:48 Client fd=6 disconnected
+[MSG] 2022/10/14-17:11:49 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:49 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:49 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:49 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:49 SERIAL: abspos2=-199
+[MSG] 2022/10/14-17:11:49 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:50 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:50 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:50 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:50 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:50 SERIAL: abspos2=-199
+[MSG] 2022/10/14-17:11:50 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:58 Connection, fd=6
+[MSG] 2022/10/14-17:11:58 CLIENT_6: abspos2=-999
+[MSG] 2022/10/14-17:11:58 SERIAL: abspos2=-999
+[MSG] 2022/10/14-17:11:58 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:58 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:58 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:58 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:58 SERIAL: abspos2=-218
+[MSG] 2022/10/14-17:11:58 SERIAL: state2=1
+[MSG] 2022/10/14-17:11:59 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:59 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:59 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:59 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:59 SERIAL: abspos2=-999
+[MSG] 2022/10/14-17:11:59 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:59 CLIENT_6: state0
+[MSG] 2022/10/14-17:11:59 SERIAL: state0=0
+[MSG] 2022/10/14-17:11:59 CLIENT_6: state1
+[MSG] 2022/10/14-17:11:59 SERIAL: state1=0
+[MSG] 2022/10/14-17:11:59 CLIENT_6: state2
+[MSG] 2022/10/14-17:11:59 SERIAL: state2=0
+[MSG] 2022/10/14-17:11:59 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:11:59 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:11:59 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:11:59 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:11:59 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:12:00 SERIAL: abspos2=-999
+[MSG] 2022/10/14-17:12:00 Client fd=6 disconnected
+[MSG] 2022/10/14-17:12:00 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:12:00 SERIAL: state0=0
+[MSG] 2022/10/14-17:12:00 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:12:00 SERIAL: state1=0
+[MSG] 2022/10/14-17:12:00 SERIAL: abspos2=-999
+[MSG] 2022/10/14-17:12:00 SERIAL: state2=0
+[WARN] 2022/10/14-17:13:10 Child killed with sig=2
+[ERR] 2022/10/14-17:13:10 Exit with signal 15
+[MSG] 2022/10/14-17:13:12 Started
+[MSG] 2022/10/14-17:13:12 Created child with pid 8603
+[MSG] 2022/10/14-17:13:13 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:13:13 SERIAL: state0=0
+[MSG] 2022/10/14-17:13:13 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:13:13 SERIAL: state1=0
+[MSG] 2022/10/14-17:13:13 SERIAL: abspos2=-999
+[MSG] 2022/10/14-17:13:13 SERIAL: state2=0
+[MSG] 2022/10/14-17:13:16 Connection, fd=6
+[MSG] 2022/10/14-17:13:16 CLIENT_6: abspos2=1000
+[MSG] 2022/10/14-17:13:16 SERIAL: abspos2=1000
+[MSG] 2022/10/14-17:13:16 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:13:16 SERIAL: state0=0
+[MSG] 2022/10/14-17:13:16 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:13:16 SERIAL: state1=0
+[MSG] 2022/10/14-17:13:16 SERIAL: abspos2=-979
+[MSG] 2022/10/14-17:13:16 SERIAL: state2=1
+[MSG] 2022/10/14-17:13:17 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:13:17 SERIAL: state0=0
+[MSG] 2022/10/14-17:13:17 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:13:17 SERIAL: state1=0
+[MSG] 2022/10/14-17:13:17 SERIAL: abspos2=463
+[MSG] 2022/10/14-17:13:17 SERIAL: state2=4
+[MSG] 2022/10/14-17:13:17 CLIENT_6: state0
+[MSG] 2022/10/14-17:13:17 SERIAL: state0=0
+[MSG] 2022/10/14-17:13:17 CLIENT_6: state1
+[MSG] 2022/10/14-17:13:18 SERIAL: state1=0
+[MSG] 2022/10/14-17:13:18 CLIENT_6: state2
+[MSG] 2022/10/14-17:13:18 SERIAL: state2=4
+[MSG] 2022/10/14-17:13:18 CLIENT_6: state0
+[MSG] 2022/10/14-17:13:18 SERIAL: state0=0
+[MSG] 2022/10/14-17:13:18 CLIENT_6: state1
+[MSG] 2022/10/14-17:13:18 SERIAL: state1=0
+[MSG] 2022/10/14-17:13:18 CLIENT_6: state2
+[MSG] 2022/10/14-17:13:18 SERIAL: state2=0
+[MSG] 2022/10/14-17:13:18 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:13:18 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:13:18 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:13:18 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:13:18 SERIAL: state0=0
+[MSG] 2022/10/14-17:13:18 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:13:18 SERIAL: state1=0
+[MSG] 2022/10/14-17:13:18 SERIAL: abspos2=1000
+[WARN] 2022/10/14-17:13:18 send() to fd=6 failed
+[MSG] 2022/10/14-17:13:18 SERIAL: state2=0
+[WARN] 2022/10/14-17:13:18 send() to fd=6 failed
+[MSG] 2022/10/14-17:13:18 Client fd=6 disconnected
+[MSG] 2022/10/14-17:13:18 SERIAL: os1=0
+[MSG] 2022/10/14-17:13:18 SERIAL: abspos2=1000
+[WARN] 2022/10/14-17:14:49 Child killed with sig=2
+[ERR] 2022/10/14-17:14:49 Exit with signal 15
+[MSG] 2022/10/14-17:14:51 Started
+[MSG] 2022/10/14-17:14:51 Created child with pid 9529
+[MSG] 2022/10/14-17:14:52 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:14:52 SERIAL: state0=0
+[MSG] 2022/10/14-17:14:52 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:14:52 SERIAL: state1=0
+[MSG] 2022/10/14-17:14:52 SERIAL: abspos2=1000
+[MSG] 2022/10/14-17:14:52 SERIAL: state2=0
+[MSG] 2022/10/14-17:15:00 Connection, fd=6
+[MSG] 2022/10/14-17:15:00 CLIENT_6: abspos2=20000
+[MSG] 2022/10/14-17:15:01 SERIAL: abspos2=20000
+[MSG] 2022/10/14-17:15:01 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:15:01 SERIAL: state0=0
+[MSG] 2022/10/14-17:15:01 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:15:01 SERIAL: state1=0
+[MSG] 2022/10/14-17:15:01 SERIAL: abspos2=1019
+[MSG] 2022/10/14-17:15:01 SERIAL: state2=1
+[MSG] 2022/10/14-17:15:02 CLIENT_6: state0
+[MSG] 2022/10/14-17:15:02 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:15:02 SERIAL: state0=0
+[MSG] 2022/10/14-17:15:02 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:15:02 SERIAL: state1=0
+[MSG] 2022/10/14-17:15:02 SERIAL: abspos2=2606
+[MSG] 2022/10/14-17:15:02 SERIAL: state2=1
+[MSG] 2022/10/14-17:15:02 SERIAL: state0=0
+[MSG] 2022/10/14-17:15:02 CLIENT_6: state1
+[MSG] 2022/10/14-17:15:02 CLIENT_6: state2
+[MSG] 2022/10/14-17:15:02 SERIAL: state1=0
+[MSG] 2022/10/14-17:15:02 SERIAL: state2=1
+[WARN] 2022/10/14-17:15:02 Child killed with sig=2
+[ERR] 2022/10/14-17:15:02 Exit with signal 15
+[MSG] 2022/10/14-17:18:33 Started
+[MSG] 2022/10/14-17:18:33 Created child with pid 11601
+[MSG] 2022/10/14-17:18:34 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:18:34 SERIAL: state0=0
+[MSG] 2022/10/14-17:18:34 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:18:34 SERIAL: state1=0
+[MSG] 2022/10/14-17:18:34 SERIAL: abspos2=20000
+[MSG] 2022/10/14-17:18:34 SERIAL: state2=0
+[MSG] 2022/10/14-17:18:38 Connection, fd=6
+[MSG] 2022/10/14-17:18:38 CLIENT_6: abspos2=0
+[MSG] 2022/10/14-17:18:38 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:18:38 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:18:38 SERIAL: state0=0
+[MSG] 2022/10/14-17:18:38 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:18:38 SERIAL: state1=0
+[MSG] 2022/10/14-17:18:38 SERIAL: abspos2=19980
+[MSG] 2022/10/14-17:18:38 SERIAL: state2=1
+[WARN] 2022/10/14-17:18:39 Child killed with sig=2
+[ERR] 2022/10/14-17:18:39 Exit with signal 15
+[MSG] 2022/10/14-17:18:44 Started
+[MSG] 2022/10/14-17:18:44 Created child with pid 11713
+[MSG] 2022/10/14-17:18:45 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:18:45 SERIAL: state0=0
+[MSG] 2022/10/14-17:18:45 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:18:45 SERIAL: state1=0
+[MSG] 2022/10/14-17:18:45 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:18:45 SERIAL: state2=0
+[MSG] 2022/10/14-17:18:57 Connection, fd=6
+[MSG] 2022/10/14-17:18:57 CLIENT_6: abspos0=10000
+[MSG] 2022/10/14-17:18:57 SERIAL: abspos0=10000
+[MSG] 2022/10/14-17:18:57 CLIENT_6: abspos1=10000
+[MSG] 2022/10/14-17:18:57 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:18:57 SERIAL: state0=1
+[MSG] 2022/10/14-17:18:57 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:18:58 SERIAL: state1=0
+[MSG] 2022/10/14-17:18:58 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:18:58 SERIAL: state2=0
+[MSG] 2022/10/14-17:18:58 SERIAL: abspos1=10000
+[MSG] 2022/10/14-17:18:58 CLIENT_6: abspos2=10000
+[MSG] 2022/10/14-17:18:58 SERIAL: abspos2=10000
+[MSG] 2022/10/14-17:18:58 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:18:58 SERIAL: state0=5
+[MSG] 2022/10/14-17:18:58 CLIENT_6: state0
+[MSG] 2022/10/14-17:18:58 CLIENT_6: state1
+[MSG] 2022/10/14-17:18:58 SERIAL: state0=5
+[MSG] 2022/10/14-17:18:58 SERIAL: state1=1
+[MSG] 2022/10/14-17:18:58 CLIENT_6: state2
+[MSG] 2022/10/14-17:18:58 SERIAL: state2=1
+[MSG] 2022/10/14-17:18:58 CLIENT_6: state0
+[MSG] 2022/10/14-17:18:58 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:18:58 SERIAL: state0=5
+[MSG] 2022/10/14-17:18:58 SERIAL: abspos1=1017
+[MSG] 2022/10/14-17:18:58 SERIAL: state1=1
+[MSG] 2022/10/14-17:18:58 SERIAL: abspos2=849
+[MSG] 2022/10/14-17:18:58 SERIAL: state2=1
+[MSG] 2022/10/14-17:18:58 SERIAL: state0=5
+[MSG] 2022/10/14-17:18:58 CLIENT_6: state1
+[MSG] 2022/10/14-17:18:58 CLIENT_6: state2
+[MSG] 2022/10/14-17:18:59 SERIAL: state1=1
+[MSG] 2022/10/14-17:18:59 SERIAL: state2=1
+[MSG] 2022/10/14-17:18:59 CLIENT_6: state0
+[MSG] 2022/10/14-17:18:59 SERIAL: state0=5
+[MSG] 2022/10/14-17:18:59 CLIENT_6: state1
+[MSG] 2022/10/14-17:18:59 SERIAL: state1=1
+[MSG] 2022/10/14-17:18:59 CLIENT_6: state2
+[MSG] 2022/10/14-17:18:59 SERIAL: state2=1
+[MSG] 2022/10/14-17:18:59 CLIENT_6: state0
+[MSG] 2022/10/14-17:18:59 SERIAL: state0=5
+[MSG] 2022/10/14-17:18:59 CLIENT_6: state1
+[MSG] 2022/10/14-17:18:59 SERIAL: state1=2
+[MSG] 2022/10/14-17:18:59 CLIENT_6: state2
+[MSG] 2022/10/14-17:18:59 SERIAL: state2=2
+[MSG] 2022/10/14-17:18:59 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:18:59 SERIAL: state0=5
+[MSG] 2022/10/14-17:18:59 SERIAL: abspos1=3810
+[MSG] 2022/10/14-17:18:59 SERIAL: state1=2
+[MSG] 2022/10/14-17:18:59 SERIAL: abspos2=3978
+[MSG] 2022/10/14-17:18:59 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:00 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:00 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:00 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:00 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:00 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:00 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:00 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:00 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:00 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:00 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:00 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:00 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:00 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:00 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:00 SERIAL: abspos1=6854
+[MSG] 2022/10/14-17:19:00 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:00 SERIAL: abspos2=7538
+[MSG] 2022/10/14-17:19:00 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:01 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:01 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:01 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:01 SERIAL: state1=4
+[MSG] 2022/10/14-17:19:01 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:01 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:01 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:01 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:01 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:01 SERIAL: state1=4
+[MSG] 2022/10/14-17:19:01 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:01 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:01 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:01 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:01 SERIAL: abspos1=9400
+[MSG] 2022/10/14-17:19:01 SERIAL: state1=4
+[MSG] 2022/10/14-17:19:01 SERIAL: abspos2=9829
+[MSG] 2022/10/14-17:19:01 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:02 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:02 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:02 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:02 SERIAL: state1=4
+[MSG] 2022/10/14-17:19:02 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:02 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:02 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:02 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:02 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:02 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:02 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:02 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:02 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:02 SERIAL: abspos1=10000
+[MSG] 2022/10/14-17:19:02 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:02 SERIAL: abspos2=10000state2
+[MSG] 2022/10/14-17:19:02 SERIAL:
+[MSG] 2022/10/14-17:19:02 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:02 CLIENT_6: gotoz0
+[MSG] 2022/10/14-17:19:03 CLIENT_6: gotoz1
+[MSG] 2022/10/14-17:19:03 CLIENT_6: gotoz2
+[MSG] 2022/10/14-17:19:03 SERIAL: gotoz0=0
+[MSG] 2022/10/14-17:19:03 SERIAL: gotoz1=1
+[MSG] 2022/10/14-17:19:03 SERIAL: gotoz2=2
+[MSG] 2022/10/14-17:19:03 SERIAL: state2
+[MSG] 2022/10/14-17:19:04 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:04 SERIAL: abspos1=9147
+[MSG] 2022/10/14-17:19:04 SERIAL: state1=1
+[MSG] 2022/10/14-17:19:04 SERIAL: abspos2=8963
+[MSG] 2022/10/14-17:19:04 SERIAL: state2=1
+[MSG] 2022/10/14-17:19:04 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:04 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:04 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:04 SERIAL: state1=1
+[MSG] 2022/10/14-17:19:04 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:04 SERIAL: state2=1
+[MSG] 2022/10/14-17:19:04 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:04 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:04 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:04 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:04 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:04 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:05 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:05 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:05 SERIAL: abspos1=6434
+[MSG] 2022/10/14-17:19:05 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:05 SERIAL: abspos2=5702
+[MSG] 2022/10/14-17:19:05 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:05 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:05 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:05 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:05 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:05 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:05 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:05 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:05 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:05 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:05 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:05 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:05 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:06 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:06 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:06 SERIAL: abspos1=3390
+[MSG] 2022/10/14-17:19:06 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:06 SERIAL: abspos2=2145
+[MSG] 2022/10/14-17:19:06 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:06 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:06 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:06 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:06 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:06 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:06 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:06 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:06 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:06 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:06 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:06 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:06 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:06 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:19:06 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:07 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:07 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:07 SERIAL: abspos1=350
+[MSG] 2022/10/14-17:19:07 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:07 SERIAL: abspos2=-104
+[MSG] 2022/10/14-17:19:07 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:07 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:07 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:07 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:07 SERIAL: state1=4
+[MSG] 2022/10/14-17:19:07 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:07 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:07 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:07 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:07 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:07 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:07 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:07 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:08 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:08 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:08 SERIAL: abspos1=-126
+[MSG] 2022/10/14-17:19:08 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:08 SERIAL: abspos2=-84
+[MSG] 2022/10/14-17:19:08 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:08 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:08 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:08 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:08 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:08 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:08 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:08 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:08 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:08 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:08 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:08 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:08 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:09 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:09 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:09 SERIAL: abspos1=-106
+[MSG] 2022/10/14-17:19:09 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:09 SERIAL: abspos2=-64
+[MSG] 2022/10/14-17:19:09 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:09 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:09 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:09 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:09 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:09 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:09 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:09 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:09 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:09 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:09 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:09 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:09 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:10 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:10 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:10 SERIAL: abspos1=-85
+[MSG] 2022/10/14-17:19:10 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:10 SERIAL: abspos2=-43
+[MSG] 2022/10/14-17:19:10 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:10 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:10 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:10 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:10 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:10 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:10 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:10 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:10 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:10 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:10 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:10 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:10 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:11 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:11 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:11 SERIAL: abspos1=-65
+[MSG] 2022/10/14-17:19:11 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:11 SERIAL: abspos2=-23
+[MSG] 2022/10/14-17:19:11 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:11 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:11 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:11 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:11 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:11 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:11 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:11 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:11 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:11 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:11 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:11 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:11 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:12 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:12 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:12 SERIAL: abspos1=-45
+[MSG] 2022/10/14-17:19:12 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:12 SERIAL: abspos2=-3
+[MSG] 2022/10/14-17:19:12 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:12 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:12 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:12 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:12 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:12 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:12 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:12 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:12 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:12 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:12 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:12 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:12 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:13 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:13 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:13 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:13 SERIAL: abspos1=-25
+[MSG] 2022/10/14-17:19:13 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:13 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:19:13 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:13 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:13 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:13 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:13 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:13 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:13 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:13 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:13 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:13 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:13 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:13 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:13 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:14 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:14 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:14 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:14 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:14 SERIAL: abspos1=-4
+[MSG] 2022/10/14-17:19:14 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:14 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:19:14 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:14 SERIAL: =3
+[MSG] 2022/10/14-17:19:14 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:14 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:14 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:14 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:14 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:14 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:14 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:14 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:19:14 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:14 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:19:14 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:14 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:19:14 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:19:14 Client fd=6 disconnected
+[MSG] 2022/10/14-17:19:15 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:15 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:15 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:15 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:15 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:19:15 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:39 Connection, fd=6
+[MSG] 2022/10/14-17:19:39 CLIENT_6: abspos0=10000
+[MSG] 2022/10/14-17:19:39 SERIAL: abspos0=10000
+[MSG] 2022/10/14-17:19:39 CLIENT_6: abspos1=10000
+[MSG] 2022/10/14-17:19:39 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:39 SERIAL: state0=1
+[MSG] 2022/10/14-17:19:39 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:39 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:39 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:19:39 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:40 SERIAL: abspos1=10000
+[MSG] 2022/10/14-17:19:40 CLIENT_6: abspos2=10000
+[MSG] 2022/10/14-17:19:40 SERIAL: abspos2=10000
+[MSG] 2022/10/14-17:19:40 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:40 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:19:40 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:40 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:40 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:40 SERIAL: state1=1
+[MSG] 2022/10/14-17:19:40 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:40 SERIAL: state2=1
+[MSG] 2022/10/14-17:19:40 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:40 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:40 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:40 SERIAL: abspos1=1035
+[MSG] 2022/10/14-17:19:40 SERIAL: state1=1
+[MSG] 2022/10/14-17:19:40 SERIAL: abspos2=867
+[MSG] 2022/10/14-17:19:40 SERIAL: state2=1
+[MSG] 2022/10/14-17:19:40 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:40 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:40 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:41 SERIAL: state1=1
+[MSG] 2022/10/14-17:19:41 SERIAL: state2=1
+[MSG] 2022/10/14-17:19:41 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:41 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:41 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:41 SERIAL: state1=1
+[MSG] 2022/10/14-17:19:41 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:41 SERIAL: state2=1
+[MSG] 2022/10/14-17:19:41 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:41 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:41 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:41 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:41 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:41 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:41 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:41 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:41 SERIAL: abspos1=3836
+[MSG] 2022/10/14-17:19:41 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:41 SERIAL: abspos2=4008
+[MSG] 2022/10/14-17:19:41 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:42 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:42 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:42 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:42 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:42 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:42 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:42 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:42 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:42 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:42 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:42 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:42 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:42 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:42 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:42 SERIAL: abspos1=6882
+[MSG] 2022/10/14-17:19:42 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:42 SERIAL: abspos2=7569
+[MSG] 2022/10/14-17:19:42 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:43 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:43 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:43 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:43 SERIAL: state1=4
+[MSG] 2022/10/14-17:19:43 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:43 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:43 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:43 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:43 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:43 SERIAL: state1=4
+[MSG] 2022/10/14-17:19:43 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:43 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:43 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:43 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:43 SERIAL: abspos1=9415
+[MSG] 2022/10/14-17:19:43 SERIAL: state1=4
+[MSG] 2022/10/14-17:19:43 SERIAL: abspos2=9838
+[MSG] 2022/10/14-17:19:43 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:44 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:44 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:44 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:44 SERIAL: state1=4
+[MSG] 2022/10/14-17:19:44 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:44 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:44 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:44 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:44 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:44 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:44 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:44 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:44 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:44 SERIAL: abspos1=10000
+[MSG] 2022/10/14-17:19:44 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:44 SERIAL: abspos2=10000state2
+[MSG] 2022/10/14-17:19:44 SERIAL:
+[MSG] 2022/10/14-17:19:44 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:44 CLIENT_6: gotoz0
+[MSG] 2022/10/14-17:19:44 CLIENT_6: gotoz1
+[MSG] 2022/10/14-17:19:44 CLIENT_6: gotoz2
+[MSG] 2022/10/14-17:19:45 SERIAL: gotoz0=0
+[MSG] 2022/10/14-17:19:45 SERIAL: gotoz1=1
+[MSG] 2022/10/14-17:19:45 SERIAL: gotoz2=2
+[MSG] 2022/10/14-17:19:45 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:45 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:45 SERIAL: abspos1=9115
+[MSG] 2022/10/14-17:19:45 SERIAL: state1=1
+[MSG] 2022/10/14-17:19:45 SERIAL: abspos2=8921
+[MSG] 2022/10/14-17:19:45 SERIAL: state2=1
+[MSG] 2022/10/14-17:19:45 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:46 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:46 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:46 SERIAL: state1=1
+[MSG] 2022/10/14-17:19:46 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:46 SERIAL: state2=1
+[MSG] 2022/10/14-17:19:46 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:46 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:46 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:46 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:46 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:46 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:46 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:46 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:46 SERIAL: abspos1=6408
+[MSG] 2022/10/14-17:19:46 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:46 SERIAL: abspos2=5671
+[MSG] 2022/10/14-17:19:46 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:46 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:47 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:47 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:47 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:47 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:47 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:47 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:47 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:47 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:47 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:47 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:47 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:47 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:47 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:47 SERIAL: abspos1=3363
+[MSG] 2022/10/14-17:19:47 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:47 SERIAL: abspos2=2111
+[MSG] 2022/10/14-17:19:47 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:47 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:48 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:48 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:48 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:48 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:48 SERIAL: state2=2
+[MSG] 2022/10/14-17:19:48 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:48 SERIAL: state0=3
+[MSG] 2022/10/14-17:19:48 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:48 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:48 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:48 SERIAL: state2=4
+[MSG] 2022/10/14-17:19:48 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:19:48 SERIAL: state0=5
+[MSG] 2022/10/14-17:19:48 SERIAL: abspos2
+[MSG] 2022/10/14-17:19:48 SERIAL: state2
+[MSG] 2022/10/14-17:19:48 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:49 SERIAL: abspos1=327
+[MSG] 2022/10/14-17:19:49 SERIAL: state1=2
+[MSG] 2022/10/14-17:19:49 SERIAL: abspos2=-137
+[MSG] 2022/10/14-17:19:49 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:49 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:49 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:49 SERIAL: state1=1
+[MSG] 2022/10/14-17:19:49 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:49 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:49 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:49 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:49 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:49 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:49 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:49 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:49 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:49 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:49 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:50 SERIAL: abspos1=-27
+[MSG] 2022/10/14-17:19:50 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:50 SERIAL: abspos2=-117
+[MSG] 2022/10/14-17:19:50 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:50 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:50 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:50 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:50 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:50 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:50 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:50 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:50 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:50 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:50 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:50 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:50 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:50 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:50 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:50 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:50 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:50 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:50 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:50 SERIAL: abspos1=-7
+[MSG] 2022/10/14-17:19:50 SERIAL: state1=3
+[MSG] 2022/10/14-17:19:50 SERIAL: abspos2=-97
+[MSG] 2022/10/14-17:19:50 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:51 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:51 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:51 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:51 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:51 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:51 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:51 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:51 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:51 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:51 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:51 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:51 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:51 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:51 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:51 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:51 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:51 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:51 SERIAL: abspos2=-77
+[MSG] 2022/10/14-17:19:52 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:52 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:52 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:52 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:52 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:52 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:52 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:52 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:52 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:52 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:52 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:52 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:52 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:53 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:53 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:53 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:53 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:53 SERIAL: abspos2=-57
+[MSG] 2022/10/14-17:19:53 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:53 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:53 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:53 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:53 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:53 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:53 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:53 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:53 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:53 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:53 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:53 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:53 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:54 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:54 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:54 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:54 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:54 SERIAL: abspos2=-36
+[MSG] 2022/10/14-17:19:54 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:54 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:54 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:54 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:54 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:54 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:54 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:54 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:54 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:54 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:54 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:54 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:54 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:55 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:55 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:55 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:55 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:55 SERIAL: abspos2=-16
+[MSG] 2022/10/14-17:19:55 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:55 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:55 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:55 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:55 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:55 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:55 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:55 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:55 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:55 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:55 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:55 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:55 SERIAL: state2=3
+[MSG] 2022/10/14-17:19:56 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:56 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:56 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:56 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:56 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:19:56 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:56 CLIENT_6: state0
+[MSG] 2022/10/14-17:19:56 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:56 CLIENT_6: state1
+[MSG] 2022/10/14-17:19:56 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:56 CLIENT_6: state2
+[MSG] 2022/10/14-17:19:56 SERIAL: state2=0
+[MSG] 2022/10/14-17:19:56 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:19:56 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:56 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:19:56 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:56 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:19:56 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:19:56 Client fd=6 disconnected
+[MSG] 2022/10/14-17:19:57 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:19:57 SERIAL: state0=0
+[MSG] 2022/10/14-17:19:57 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:19:57 SERIAL: state1=0
+[MSG] 2022/10/14-17:19:57 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:19:57 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:01 Connection, fd=6
+[MSG] 2022/10/14-17:20:01 CLIENT_6: abspos0=-200
+[MSG] 2022/10/14-17:20:01 SERIAL: abspos0=-200
+[MSG] 2022/10/14-17:20:01 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:20:01 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:01 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:01 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:01 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:01 SERIAL: abspos2=0
+[WARN] 2022/10/14-17:20:01 send() to fd=6 failed
+[MSG] 2022/10/14-17:20:01 SERIAL: state2=0
+[WARN] 2022/10/14-17:20:01 send() to fd=6 failed
+[MSG] 2022/10/14-17:20:01 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:01 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:20:01 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:20:01 Client fd=6 disconnected
+[MSG] 2022/10/14-17:20:01 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:01 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:02 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:20:02 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:02 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:02 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:02 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:02 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:02 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:02 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:03 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:03 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:03 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:03 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:03 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:03 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:04 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:04 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:04 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:04 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:04 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:04 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:05 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:05 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:05 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:05 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:05 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:05 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:06 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:06 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:06 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:06 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:06 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:06 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:07 Connection, fd=6
+[MSG] 2022/10/14-17:20:07 CLIENT_6: abspos0=200
+[MSG] 2022/10/14-17:20:07 SERIAL: abspos0=200
+[MSG] 2022/10/14-17:20:07 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:20:07 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:07 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:07 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:07 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:07 SERIAL: abspos2=0
+[WARN] 2022/10/14-17:20:07 send() to fd=6 failed
+[MSG] 2022/10/14-17:20:07 SERIAL: state2=0
+[WARN] 2022/10/14-17:20:07 send() to fd=6 failed
+[MSG] 2022/10/14-17:20:07 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:07 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:20:07 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:20:07 Client fd=6 disconnected
+[MSG] 2022/10/14-17:20:07 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:07 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:08 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:08 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:08 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:08 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:08 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:08 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:09 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:20:09 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:09 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:09 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:09 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:09 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:10 SERIAL: abspos0=12
+[MSG] 2022/10/14-17:20:10 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:10 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:10 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:10 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:10 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:10 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:20:10 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:11 SERIAL: abspos0=8
+[MSG] 2022/10/14-17:20:11 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:11 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:11 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:11 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:11 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:12 SERIAL: abspos0=57
+[MSG] 2022/10/14-17:20:12 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:12 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:12 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:12 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:12 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:13 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:13 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:13 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:13 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:13 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:13 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:14 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:14 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:14 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:14 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:14 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:14 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:15 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:15 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:15 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:15 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:15 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:15 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:16 Connection, fd=6
+[MSG] 2022/10/14-17:20:16 CLIENT_6: abspos0=20000
+[MSG] 2022/10/14-17:20:16 SERIAL: abspos0=20000
+[MSG] 2022/10/14-17:20:16 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:20:16 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:20:16 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:16 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:20:16 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:16 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:20:16 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:16 Client fd=6 disconnected
+[MSG] 2022/10/14-17:20:16 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:16 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:16 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:16 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:16 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:16 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:17 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:17 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:17 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:17 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:17 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:17 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:18 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:18 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:18 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:18 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:18 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:18 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:19 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:19 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:19 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:19 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:19 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:19 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:20 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:20 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:20 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:20 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:20 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:20 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:21 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:21 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:21 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:21 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:21 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:21 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:22 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:22 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:22 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:22 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:22 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:22 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:23 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:23 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:23 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:23 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:23 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:23 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:24 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:24 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:24 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:24 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:24 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:24 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:26 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:26 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:26 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:26 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:26 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:26 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:27 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:27 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:27 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:27 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:27 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:27 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:28 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:28 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:28 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:28 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:28 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:28 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:29 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:29 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:29 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:29 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:29 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:29 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:29 Connection, fd=6
+[MSG] 2022/10/14-17:20:30 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:30 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:30 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:30 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:30 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:30 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:31 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:31 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:31 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:31 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:31 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:31 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:32 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:32 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:32 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:32 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:32 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:32 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:33 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:33 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:33 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:33 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:33 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:33 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:34 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:34 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:34 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:34 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:34 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:34 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:35 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:35 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:35 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:35 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:35 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:35 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:36 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:36 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:36 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:36 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:36 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:36 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:37 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:37 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:37 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:37 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:37 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:37 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:38 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:38 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:38 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:38 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:38 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:38 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:39 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:39 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:39 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:39 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:39 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:39 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:40 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:40 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:40 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:40 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:40 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:40 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:41 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:41 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:41 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:41 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:41 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:41 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:42 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:42 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:42 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:42 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:42 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:42 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:43 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:43 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:43 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:43 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:43 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:43 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:44 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:44 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:44 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:44 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:44 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:44 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:45 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:45 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:45 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:45 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:45 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:45 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:46 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:46 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:46 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:46 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:46 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:46 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:47 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:47 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:47 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:47 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:47 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:47 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:48 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:48 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:48 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:48 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:48 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:48 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:49 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:49 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:49 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:49 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:49 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:49 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:49 CLIENT_6: abspos0=-100
+[MSG] 2022/10/14-17:20:49 SERIAL: abspos0=-100
+[MSG] 2022/10/14-17:20:50 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:50 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:50 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:50 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:50 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:50 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:51 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:51 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:51 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:51 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:51 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:51 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:51 CLIENT_6: [A
+[MSG] 2022/10/14-17:20:51 SERIAL: https://github.com/eddyem/stm32samples/tree/master/F0-nolib/3steppersLB build#167 @ 2022-06-17
+[MSG] 2022/10/14-17:20:51 SERIAL: Common commands format is cmd[ N[ = val]]
+[MSG] 2022/10/14-17:20:51 SERIAL: where N is command argument (0..127), val is its value
+[MSG] 2022/10/14-17:20:51 SERIAL: Different commands:
+[MSG] 2022/10/14-17:20:51 SERIAL: adc - get ADC values
+[MSG] 2022/10/14-17:20:51 SERIAL: button - get buttons state
+[MSG] 2022/10/14-17:20:51 SERIAL: buzzer - change buzzer state (1/0)
+[MSG] 2022/10/14-17:20:51 SERIAL: esw - get end switches state
+[MSG] 2022/10/14-17:20:51 SERIAL: ext - external outputs
+[MSG] 2022/10/14-17:20:51 SERIAL: mcut - get MCU T
+[MSG] 2022/10/14-17:20:51 SERIAL: mcuvdd - get MCU Vdd
+[MSG] 2022/10/14-17:20:51 SERIAL: ping - echo given command back
+[MSG] 2022/10/14-17:20:51 SERIAL: pwm - pwm value
+[MSG] 2022/10/14-17:20:51 SERIAL: relay - change relay state (1/0)
+[MSG] 2022/10/14-17:20:51 SERIAL: reset - reset MCU
+[MSG] 2022/10/14-17:20:51 SERIAL: time - get time from start
+[MSG] 2022/10/14-17:20:51 SERIAL: Confuguration:
+[MSG] 2022/10/14-17:20:51 SERIAL: accel - set/get accel/decel (steps/s^2)
+[MSG] 2022/10/14-17:20:51 SERIAL: encrev - set/get max encoder's pulses per revolution
+[MSG] 2022/10/14-17:20:51 SERIAL: encstepmax - maximal encoder ticks per step
+[MSG] 2022/10/14-17:20:51 SERIAL: encstepmin - minimal encoder ticks per step
+[MSG] 2022/10/14-17:20:51 SERIAL: eswreact - end-switches reaction
+[MSG] 2022/10/14-17:20:51 SERIAL: maxspeed - set/get max speed (steps per sec)
+[MSG] 2022/10/14-17:20:51 SERIAL: maxsteps - set/get max steps (from zero)
+[MSG] 2022/10/14-17:20:51 SERIAL: microsteps - set/get microsteps settings
+[MSG] 2022/10/14-17:20:51 SERIAL: minspeed - set/get min speed (steps per sec)
+[MSG] 2022/10/14-17:20:51 SERIAL: motflags - set/get motorN flags
+[MSG] 2022/10/14-17:20:51 SERIAL: saveconf - save current configuration
+[MSG] 2022/10/14-17:20:51 SERIAL: speedlimit - get limiting speed for current microsteps
+[MSG] 2022/10/14-17:20:51 SERIAL: Motors' commands:
+[MSG] 2022/10/14-17:20:51 SERIAL: abspos - move to/get absolute position (in steps)
+[MSG] 2022/10/14-17:20:51 SERIAL: emerg - emergency stop all motors
+[MSG] 2022/10/14-17:20:51 SERIAL: emstop - emergency stop motor (right now)
+[MSG] 2022/10/14-17:20:51 SERIAL: encpos - set/get encoder's position
+[MSG] 2022/10/14-17:20:51 SERIAL: gotoz - find zero position & refresh counters
+[MSG] 2022/10/14-17:20:51 SERIAL: motreinit - re-init motors after configuration changed
+[MSG] 2022/10/14-17:20:51 SERIAL: relpos - set relative steps, get remaining
+[MSG] 2022/10/14-17:20:51 SERIAL: relslow - set relative steps @ lowest speed
+[MSG] 2022/10/14-17:20:51 SERIAL: setpos - set/get absolute position (in steps)
+[MSG] 2022/10/14-17:20:51 SERIAL: state - get motor state
+[MSG] 2022/10/14-17:20:51 SERIAL: stop - smooth motor stopping
+[MSG] 2022/10/14-17:20:51 SERIAL: USB-only commands:
+[MSG] 2022/10/14-17:20:51 SERIAL: canid - get/set CAN ID
+[MSG] 2022/10/14-17:20:51 SERIAL: canspeed - CAN bus speed
+[MSG] 2022/10/14-17:20:51 SERIAL: delignlist - delete ignore list
+[MSG] 2022/10/14-17:20:51 SERIAL: dfu - activate DFU mode
+[MSG] 2022/10/14-17:20:51 SERIAL: dumperr - dump error codes
+[MSG] 2022/10/14-17:20:51 SERIAL: dumpcmd - dump command codes
+[MSG] 2022/10/14-17:20:51 SERIAL: dumpconf - dump current configuration
+[MSG] 2022/10/14-17:20:51 SERIAL: filter - add/modify filter, format: bank# FIFO# mode(M/I) num0 [num1 [num2 [num3]]]
+[MSG] 2022/10/14-17:20:51 SERIAL: getctr - get TIM1/2/3 counters
+[MSG] 2022/10/14-17:20:51 SERIAL: ignbuf - print ignore buffer
+[MSG] 2022/10/14-17:20:51 SERIAL: ignore - add ID to ignore list (max 10 IDs)
+[MSG] 2022/10/14-17:20:51 SERIAL: listfilters - list all active filters
+[MSG] 2022/10/14-17:20:51 SERIAL: pause - pause IN packets displaying
+[MSG] 2022/10/14-17:20:51 SERIAL: resume - resume IN packets displaying
+[MSG] 2022/10/14-17:20:51 SERIAL: send - send data over CAN: send ID byte0 .. byteN
+[MSG] 2022/10/14-17:20:51 SERIAL: eraseflash - erase flash data storage
+[MSG] 2022/10/14-17:20:51 SERIAL: wd - check watchdog
+[MSG] 2022/10/14-17:20:52 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:52 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:52 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:52 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:52 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:52 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:52 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:20:52 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:53 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:53 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:53 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:53 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:53 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:53 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:54 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:54 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:54 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:54 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:54 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:54 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:54 CLIENT_6: abspos0=100
+[MSG] 2022/10/14-17:20:54 SERIAL: abspos0=100
+[MSG] 2022/10/14-17:20:55 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:55 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:55 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:55 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:55 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:55 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:56 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:56 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:56 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:56 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:56 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:56 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:57 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:57 SERIAL: state0=1
+[MSG] 2022/10/14-17:20:57 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:57 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:57 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:57 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:58 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:20:58 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:58 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:58 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:58 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:58 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:58 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:58 SERIAL: state2=0
+[MSG] 2022/10/14-17:20:58 CLIENT_6: rela=1
+[MSG] 2022/10/14-17:20:58 SERIAL: https://github.com/eddyem/stm32samples/tree/master/F0-nolib/3steppersLB build#167 @ 2022-06-17
+[MSG] 2022/10/14-17:20:58 SERIAL: Common commands format is cmd[ N[ = val]]
+[MSG] 2022/10/14-17:20:58 SERIAL: where N is command argument (0..127), val is its value
+[MSG] 2022/10/14-17:20:58 SERIAL: Different commands:
+[MSG] 2022/10/14-17:20:58 SERIAL: adc - get ADC values
+[MSG] 2022/10/14-17:20:58 SERIAL: button - get buttons state
+[MSG] 2022/10/14-17:20:58 SERIAL: buzzer - change buzzer state (1/0)
+[MSG] 2022/10/14-17:20:58 SERIAL: esw - get end switches state
+[MSG] 2022/10/14-17:20:58 SERIAL: ext - external outputs
+[MSG] 2022/10/14-17:20:58 SERIAL: mcut - get MCU T
+[MSG] 2022/10/14-17:20:58 SERIAL: mcuvdd - get MCU Vdd
+[MSG] 2022/10/14-17:20:58 SERIAL: ping - echo given command back
+[MSG] 2022/10/14-17:20:58 SERIAL: pwm - pwm value
+[MSG] 2022/10/14-17:20:58 SERIAL: relay - change relay state (1/0)
+[MSG] 2022/10/14-17:20:58 SERIAL: reset - reset MCU
+[MSG] 2022/10/14-17:20:58 SERIAL: time - get time from start
+[MSG] 2022/10/14-17:20:58 SERIAL: Confuguration:
+[MSG] 2022/10/14-17:20:58 SERIAL: accel - set/get accel/decel (steps/s^2)
+[MSG] 2022/10/14-17:20:58 SERIAL: encrev - set/get max encoder's pulses per revolution
+[MSG] 2022/10/14-17:20:58 SERIAL: encstepmax - maximal encoder ticks per step
+[MSG] 2022/10/14-17:20:58 SERIAL: encstepmin - minimal encoder ticks per step
+[MSG] 2022/10/14-17:20:58 SERIAL: eswreact - end-switches reaction
+[MSG] 2022/10/14-17:20:58 SERIAL: maxspeed - set/get max speed (steps per sec)
+[MSG] 2022/10/14-17:20:58 SERIAL: maxsteps - set/get max steps (from zero)
+[MSG] 2022/10/14-17:20:58 SERIAL: microsteps - set/get microsteps settings
+[MSG] 2022/10/14-17:20:58 SERIAL: minspeed - set/get min speed (steps per sec)
+[MSG] 2022/10/14-17:20:58 SERIAL: motflags - set/get motorN flags
+[MSG] 2022/10/14-17:20:58 SERIAL: saveconf - save current configuration
+[MSG] 2022/10/14-17:20:58 SERIAL: speedlimit - get limiting speed for current microsteps
+[MSG] 2022/10/14-17:20:58 SERIAL: Motors' commands:
+[MSG] 2022/10/14-17:20:58 SERIAL: abspos - move to/get absolute position (in steps)
+[MSG] 2022/10/14-17:20:58 SERIAL: emerg - emergency stop all motors
+[MSG] 2022/10/14-17:20:58 SERIAL: emstop - emergency stop motor (right now)
+[MSG] 2022/10/14-17:20:58 SERIAL: encpos - set/get encoder's position
+[MSG] 2022/10/14-17:20:58 SERIAL: gotoz - find zero position & refresh counters
+[MSG] 2022/10/14-17:20:58 SERIAL: motreinit - re-init motors after configuration changed
+[MSG] 2022/10/14-17:20:58 SERIAL: relpos - set relative steps, get remaining
+[MSG] 2022/10/14-17:20:58 SERIAL: relslow - set relative steps @ lowest speed
+[MSG] 2022/10/14-17:20:58 SERIAL: setpos - set/get absolute position (in steps)
+[MSG] 2022/10/14-17:20:58 SERIAL: state - get motor state
+[MSG] 2022/10/14-17:20:58 SERIAL: stop - smooth motor stopping
+[MSG] 2022/10/14-17:20:58 SERIAL: USB-only commands:
+[MSG] 2022/10/14-17:20:58 SERIAL: canid - get/set CAN ID
+[MSG] 2022/10/14-17:20:58 SERIAL: canspeed - CAN bus speed
+[MSG] 2022/10/14-17:20:58 SERIAL: delignlist - delete ignore list
+[MSG] 2022/10/14-17:20:58 SERIAL: dfu - activate DFU mode
+[MSG] 2022/10/14-17:20:58 SERIAL: dumperr - dump error codes
+[MSG] 2022/10/14-17:20:58 SERIAL: dumpcmd - dump command codes
+[MSG] 2022/10/14-17:20:58 SERIAL: dumpconf - dump current configuration
+[MSG] 2022/10/14-17:20:58 SERIAL: filter - add/modify filter, format: bank# FIFO# mode(M/I) num0 [num1 [num2 [num3]]]
+[MSG] 2022/10/14-17:20:58 SERIAL: getctr - get TIM1/2/3 counters
+[MSG] 2022/10/14-17:20:58 SERIAL: ignbuf - print ignore buffer
+[MSG] 2022/10/14-17:20:58 SERIAL: ignore - add ID to ignore list (max 10 IDs)
+[MSG] 2022/10/14-17:20:58 SERIAL: listfilters - list all active filters
+[MSG] 2022/10/14-17:20:58 SERIAL: pause - pause IN packets displaying
+[MSG] 2022/10/14-17:20:59 SERIAL: resume - resume IN packets displaying
+[MSG] 2022/10/14-17:20:59 SERIAL: send - send data over CAN: send ID byte0 .. byteN
+[MSG] 2022/10/14-17:20:59 SERIAL: eraseflash - erase flash data storage
+[MSG] 2022/10/14-17:20:59 SERIAL: wd - check watchdog
+[MSG] 2022/10/14-17:20:59 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:20:59 SERIAL: state0=5
+[MSG] 2022/10/14-17:20:59 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:20:59 SERIAL: state1=0
+[MSG] 2022/10/14-17:20:59 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:20:59 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:00 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:00 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:00 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:00 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:00 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:00 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:01 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:01 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:01 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:01 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:01 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:01 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:02 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:02 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:02 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:02 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:02 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:02 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:02 CLIENT_6: relay=1
+[MSG] 2022/10/14-17:21:02 SERIAL: relay=1
+[MSG] 2022/10/14-17:21:03 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:03 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:03 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:03 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:03 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:03 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:04 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:04 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:04 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:04 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:04 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:04 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:05 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:05 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:05 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:05 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:05 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:05 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:06 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:06 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:06 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:06 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:06 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:06 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:07 CLIENT_6: relay=0
+[MSG] 2022/10/14-17:21:07 SERIAL: relay=0
+[MSG] 2022/10/14-17:21:07 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:07 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:07 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:07 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:07 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:07 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:08 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:08 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:08 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:08 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:08 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:08 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:09 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:09 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:09 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:09 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:09 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:09 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:10 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:10 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:10 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:10 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:10 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:10 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:11 CLIENT_6: abspos0=1000
+[MSG] 2022/10/14-17:21:11 SERIAL: abspos0=1000
+[MSG] 2022/10/14-17:21:11 SERIAL: ERRCODE=5
+[MSG] 2022/10/14-17:21:11 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:11 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:11 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:11 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:11 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:11 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:12 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:12 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:12 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:12 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:12 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:12 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:13 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:13 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:13 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:13 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:13 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:13 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:14 SERIAL: abspos0=36
+[MSG] 2022/10/14-17:21:14 SERIAL: state0=5
+[MSG] 2022/10/14-17:21:14 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:14 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:14 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:14 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:14 CLIENT_6: abspos0=-1000
+[MSG] 2022/10/14-17:21:14 SERIAL: abspos0=-1000
+[MSG] 2022/10/14-17:21:15 SERIAL: abspos0=-547
+[MSG] 2022/10/14-17:21:15 SERIAL: state0=4
+[MSG] 2022/10/14-17:21:15 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:15 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:15 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:15 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:16 SERIAL: abspos0=-1000
+[MSG] 2022/10/14-17:21:16 SERIAL: state0=0
+[MSG] 2022/10/14-17:21:16 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:16 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:16 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:16 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:17 SERIAL: abspos0=-1000
+[MSG] 2022/10/14-17:21:17 SERIAL: state0=0
+[MSG] 2022/10/14-17:21:17 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:17 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:17 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:17 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:18 CLIENT_6: abspos0=1000
+[MSG] 2022/10/14-17:21:18 SERIAL: abspos0=1000
+[MSG] 2022/10/14-17:21:18 SERIAL: abspos0=-988
+[MSG] 2022/10/14-17:21:18 SERIAL: state0=1
+[MSG] 2022/10/14-17:21:18 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:18 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:18 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:18 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:19 SERIAL: abspos0=-28
+[MSG] 2022/10/14-17:21:19 SERIAL: state0=1
+[MSG] 2022/10/14-17:21:19 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:19 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:19 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:19 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:20 SERIAL: abspos0=1000
+[MSG] 2022/10/14-17:21:20 SERIAL: state0=4
+[MSG] 2022/10/14-17:21:20 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:20 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:20 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:20 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:21 SERIAL: abspos0=1000
+[MSG] 2022/10/14-17:21:21 SERIAL: state0=0
+[MSG] 2022/10/14-17:21:21 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:21 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:21 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:21 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:22 SERIAL: abspos0=1000
+[MSG] 2022/10/14-17:21:22 SERIAL: state0=0
+[MSG] 2022/10/14-17:21:22 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:22 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:22 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:22 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:25 CLIENT_6:
+[MSG] 2022/10/14-17:21:27 Client fd=6 disconnected
+[MSG] 2022/10/14-17:21:35 Connection, fd=6
+[MSG] 2022/10/14-17:21:36 CLIENT_6: abspos0=20000
+[MSG] 2022/10/14-17:21:36 SERIAL: abspos0=20000
+[MSG] 2022/10/14-17:21:36 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:21:36 SERIAL: abspos0=1013
+[MSG] 2022/10/14-17:21:36 SERIAL: state0=1
+[MSG] 2022/10/14-17:21:36 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:36 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:36 SERIAL: abspos2=0
+[WARN] 2022/10/14-17:21:36 send() to fd=6 failed
+[MSG] 2022/10/14-17:21:36 SERIAL: state2=0
+[WARN] 2022/10/14-17:21:36 send() to fd=6 failed
+[WARN] 2022/10/14-17:21:36 send() to fd=6 failed
+[MSG] 2022/10/14-17:21:36 SERIAL: os0=1013
+[WARN] 2022/10/14-17:21:36 send() to fd=6 failed
+[MSG] 2022/10/14-17:21:36 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:36 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:21:36 Client fd=6 disconnected
+[MSG] 2022/10/14-17:21:36 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:37 SERIAL: abspos0=1974
+[MSG] 2022/10/14-17:21:37 SERIAL: state0=1
+[MSG] 2022/10/14-17:21:37 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:37 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:37 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:37 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:38 SERIAL: abspos0=4288
+[MSG] 2022/10/14-17:21:38 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:38 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:38 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:38 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:38 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:39 SERIAL: abspos0=6813
+[MSG] 2022/10/14-17:21:39 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:39 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:39 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:39 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:39 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:39 Connection, fd=6
+[MSG] 2022/10/14-17:21:40 SERIAL: abspos0=9337
+[MSG] 2022/10/14-17:21:40 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:40 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:40 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:40 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:40 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:40 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:40 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:40 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:41 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:41 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:41 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:41 SERIAL: abspos0=11848
+[MSG] 2022/10/14-17:21:41 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:41 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:41 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:41 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:41 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:41 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:41 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:41 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:41 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:41 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:41 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:41 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:41 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:41 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:42 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:42 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:42 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:42 SERIAL: abspos0=14378
+[MSG] 2022/10/14-17:21:42 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:42 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:42 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:42 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:42 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:42 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:42 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:42 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:42 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:42 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:42 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:42 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:42 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:42 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:43 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:43 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:43 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:43 SERIAL: abspos0=16905
+[MSG] 2022/10/14-17:21:43 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:43 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:43 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:43 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:43 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:43 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:43 SERIAL: state0=2
+[MSG] 2022/10/14-17:21:43 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:43 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:43 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:43 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:43 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:43 SERIAL: state0=4
+[MSG] 2022/10/14-17:21:43 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:44 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:44 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:44 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:44 SERIAL: abspos0=19171
+[MSG] 2022/10/14-17:21:44 SERIAL: state0=4
+[MSG] 2022/10/14-17:21:44 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:44 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:44 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:44 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:44 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:44 SERIAL: state0=4
+[MSG] 2022/10/14-17:21:44 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:44 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:44 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:44 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:44 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:44 SERIAL: state0=4
+[MSG] 2022/10/14-17:21:44 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:45 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:45 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:45 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:45 SERIAL: abspos0=20000
+[MSG] 2022/10/14-17:21:45 SERIAL: state0=0
+[MSG] 2022/10/14-17:21:45 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:45 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:45 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:45 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:45 CLIENT_6: state0
+[MSG] 2022/10/14-17:21:45 SERIAL: state0=0
+[MSG] 2022/10/14-17:21:45 CLIENT_6: state1
+[MSG] 2022/10/14-17:21:45 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:45 CLIENT_6: state2
+[MSG] 2022/10/14-17:21:45 SERIAL: state2=0
+[MSG] 2022/10/14-17:21:45 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:21:45 SERIAL: abspos0=20000
+[MSG] 2022/10/14-17:21:45 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:21:45 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:45 CLIENT_6: abspos2
+[MSG] 2022/10/14-17:21:45 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:45 Client fd=6 disconnected
+[MSG] 2022/10/14-17:21:46 SERIAL: abspos0=20000
+[MSG] 2022/10/14-17:21:46 SERIAL: state0=0
+[MSG] 2022/10/14-17:21:46 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:21:46 SERIAL: state1=0
+[MSG] 2022/10/14-17:21:46 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:21:46 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:06 Connection, fd=6
+[MSG] 2022/10/14-17:22:06 CLIENT_6: abspos0=0
+[MSG] 2022/10/14-17:22:06 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:22:06 SERIAL: abspos0=19987
+[MSG] 2022/10/14-17:22:06 SERIAL: state0=1
+[MSG] 2022/10/14-17:22:06 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:06 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:06 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:06 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:07 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:07 SERIAL: state0=1
+[MSG] 2022/10/14-17:22:07 SERIAL: abspos0=19023
+[MSG] 2022/10/14-17:22:07 SERIAL: state0=1
+[MSG] 2022/10/14-17:22:07 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:07 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:07 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:07 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:07 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:07 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:07 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:07 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:08 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:08 SERIAL: state0=1
+[MSG] 2022/10/14-17:22:08 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:08 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:08 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:08 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:08 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:08 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:08 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:08 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:08 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:08 SERIAL: abspos0=16692
+[MSG] 2022/10/14-17:22:08 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:08 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:08 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:08 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:08 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:08 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:09 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:09 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:09 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:09 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:09 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:09 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:09 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:09 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:09 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:09 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:09 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:09 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:09 SERIAL: abspos0=14163
+[MSG] 2022/10/14-17:22:09 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:09 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:09 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:09 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:09 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:10 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:10 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:10 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:10 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:10 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:10 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:10 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:10 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:10 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:10 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:10 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:10 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:10 SERIAL: abspos0=11636
+[MSG] 2022/10/14-17:22:10 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:10 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:10 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:10 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:10 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:11 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:11 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:11 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:11 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:11 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:11 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:11 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:11 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:11 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:11 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:11 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:11 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:11 SERIAL: abspos0=9109
+[MSG] 2022/10/14-17:22:11 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:11 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:11 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:11 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:11 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:12 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:12 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:12 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:12 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:12 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:12 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:12 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:12 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:12 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:12 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:12 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:12 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:12 SERIAL: abspos0=6581
+[MSG] 2022/10/14-17:22:12 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:12 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:12 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:12 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:12 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:13 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:13 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:13 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:13 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:13 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:13 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:13 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:13 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:13 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:13 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:13 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:13 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:13 SERIAL: abspos0=4053
+[MSG] 2022/10/14-17:22:13 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:13 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:13 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:13 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:13 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:14 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:14 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:14 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:14 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:14 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:14 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:14 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:14 SERIAL: state0=2
+[MSG] 2022/10/14-17:22:14 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:14 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:14 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:14 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:14 SERIAL: abspos0=1558
+[MSG] 2022/10/14-17:22:14 SERIAL: state0=4
+[MSG] 2022/10/14-17:22:14 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:14 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:14 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:14 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:15 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:15 SERIAL: state0=4
+[MSG] 2022/10/14-17:22:15 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:15 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:15 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:15 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:15 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:15 SERIAL: state0=4
+[MSG] 2022/10/14-17:22:15 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:15 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:15 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:15 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:15 SERIAL: abspos0=113
+[MSG] 2022/10/14-17:22:15 SERIAL: state0=4
+[MSG] 2022/10/14-17:22:15 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:15 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:15 SERIAL: abspos2=0
+[MSG] 2022/10/14-17:22:15 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:16 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:16 SERIAL: state0=4
+[MSG] 2022/10/14-17:22:16 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:16 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:16 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:16 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:16 CLIENT_6: state0
+[MSG] 2022/10/14-17:22:16 SERIAL: state0=0
+[MSG] 2022/10/14-17:22:16 CLIENT_6: state1
+[MSG] 2022/10/14-17:22:16 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:16 CLIENT_6: state2
+[MSG] 2022/10/14-17:22:16 SERIAL: state2=0
+[MSG] 2022/10/14-17:22:16 CLIENT_6: abspos0
+[MSG] 2022/10/14-17:22:16 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:22:16 CLIENT_6: abspos1
+[MSG] 2022/10/14-17:22:16 SERIAL: abspos0=0
+[MSG] 2022/10/14-17:22:16 SERIAL: state0=0
+[MSG] 2022/10/14-17:22:16 SERIAL: abspos1=0
+[MSG] 2022/10/14-17:22:16 SERIAL: state1=0
+[MSG] 2022/10/14-17:22:16 SERIAL: abspos2=0
+[WARN] 2022/10/14-17:22:16 send() to fd=6 failed
+[MSG] 2022/10/14-17:22:16 SERIAL: state2=0
+[WARN] 2022/10/14-17:22:16 send() to fd=6 failed
+[MSG] 2022/10/14-17:22:16 Client fd=6 disconnected
+[MSG] 2022/10/14-17:22:16 SERIAL: =0
+[MSG] 2022/10/14-17:22:17 SERIAL: abspos2=0
+[WARN] 2022/10/14-17:22:20 Child killed with sig=2
+[ERR] 2022/10/14-17:22:20 Exit with signal 15
diff --git a/TeAmanagement/main.c b/TeAmanagement/main.c
new file mode 100644
index 0000000..b9bd669
--- /dev/null
+++ b/TeAmanagement/main.c
@@ -0,0 +1,108 @@
+/*
+ * This file is part of the TeAman project.
+ * Copyright 2022 Edward V. Emelianov .
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "cmdlnopts.h"
+#include "sersock.h"
+#include "teacmd.h"
+
+static glob_pars *GP = NULL;
+static TTY_descr *dev = NULL;
+static pid_t childpid = 0;
+int server = 1;
+
+void signals(int sig){
+ if(childpid){ // slave process
+ DBG("Child killed with sig=%d", sig);
+ LOGWARN("Child killed with sig=%d", sig);
+ exit(sig);
+ }
+ // master process
+ DBG("Master process");
+ if(GP && GP->terminal) restore_console();
+ else if(dev) close_tty(&dev);
+ if(sig){
+ DBG("Exit with signal %d", sig);
+ signal(sig, SIG_IGN);
+ LOGERR("Exit with signal %d", sig);
+ }else LOGERR("Exit");
+ if(GP && GP->pidfile && server){
+ DBG("Unlink pid file");
+ unlink(GP->pidfile);
+ }
+ exit(sig);
+}
+
+int main(int argc, char **argv){
+ char *self = strdup(argv[0]);
+ initial_setup();
+ GP = parse_args(argc, argv);
+ if(!GP->client && GP->terminal) ERRX("Can't work as server and terminal client simultaneously");
+ if(GP->logfile){
+ int lvl = LOGLEVEL_WARN + GP->verbose;
+ DBG("level = %d", lvl);
+ if(lvl > LOGLEVEL_ANY) lvl = LOGLEVEL_ANY;
+ verbose(1, "Log file %s @ level %d\n", GP->logfile, lvl);
+ OPENLOG(GP->logfile, lvl, 1);
+ if(!globlog) WARNX("Can't create log file");
+ }
+ if(GP->client) server = 0;
+ else{
+ if(!GP->devpath){
+ LOGERR("You should point serial device path");
+ ERRX("You should point serial device path");
+ }
+ set_validator(GP);
+ }
+ if(server) check4running(self, GP->pidfile);
+ // signal reactions:
+ signal(SIGTERM, signals); // kill (-15) - quit
+ signal(SIGHUP, SIG_IGN); // hup - ignore
+ signal(SIGINT, signals); // ctrl+C - quit
+ signal(SIGQUIT, signals); // ctrl+\ - quit
+ signal(SIGTSTP, SIG_IGN); // ignore ctrl+Z
+ LOGMSG("Started");
+#ifndef EBUG
+ if(server){
+ unsigned int pause = 5;
+ while(1){
+ childpid = fork();
+ if(childpid){ // master
+ double t0 = dtime();
+ LOGMSG("Created child with pid %d", childpid);
+ wait(NULL);
+ LOGWARN("Child %d died", childpid);
+ if(dtime() - t0 < 1.) pause += 5;
+ else pause = 1;
+ if(pause > 900) pause = 900;
+ sleep(pause); // wait a little before respawn
+ }else{ // slave
+ prctl(PR_SET_PDEATHSIG, SIGTERM); // send SIGTERM to child when parent dies
+ break;
+ }
+ }
+ }
+#endif
+ return start_socket(server, GP, &dev);
+}
diff --git a/TeAmanagement/out.fits b/TeAmanagement/out.fits
new file mode 100644
index 0000000..f4dd8ff
--- /dev/null
+++ b/TeAmanagement/out.fits
@@ -0,0 +1,7 @@
+INSTRUME= 'TeA - Telescope Analyzer' / Acquisition hardware
+XMM = 0 / Coordinate, mm
+YMM = 0 / Coordinate, mm
+ZMM = 0 / Coordinate, mm
+XSTAT = 'stop' / Status of given coordinate motor
+YSTAT = 'stop' / Status of given coordinate motor
+ZSTAT = 'stop' / Status of given coordinate motor
diff --git a/TeAmanagement/sersock.c b/TeAmanagement/sersock.c
new file mode 100644
index 0000000..5d18dcb
--- /dev/null
+++ b/TeAmanagement/sersock.c
@@ -0,0 +1,473 @@
+/*
+ * This file is part of the TeAman project.
+ * Copyright 2022 Edward V. Emelianov .
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include // unix socket
+
+#include "sersock.h"
+#include "teacmd.h"
+
+
+enum{
+ SENDSTAT_OK,
+ SENDSTAT_OUTOFRANGE,
+ SENDSTAT_NOECHO,
+ SENDSTAT_ERR,
+ SENDSTAT_SETTER // not an error
+
+};
+static const char *sendstatuses[] = {
+ [SENDSTAT_OK] = "OK\n",
+ [SENDSTAT_OUTOFRANGE] = "Steps out of range\n",
+ [SENDSTAT_NOECHO] = "No echo received\n",
+ [SENDSTAT_ERR] = "Error in write()\n",
+ [SENDSTAT_SETTER] = "OK\n"
+};
+
+static char *getserdata(TTY_descr *D, int *len);
+
+/**
+ * @brief sendcmd - validate & send command to device
+ * @param cmd - command (string with or without "\n" on the end)
+ * @param d - serial device
+ * @return SENDSTAT_OK if OK or error
+ */
+static int sendcmd(char *cmd, ssize_t len, TTY_descr *d){
+ int v = validate_cmd(cmd, len);
+ int ret = SENDSTAT_OK;
+ if(v < 0) return SENDSTAT_OUTOFRANGE;
+ if(v > 0) ret = SENDSTAT_SETTER; // is setter
+ if(len != write(d->comfd, cmd, len)){
+ WARN("write()");
+ LOGWARN("write()");
+ return SENDSTAT_ERR;
+ }
+ int l;
+ usleep(500);
+ char *ans = getserdata(d, &l);
+ if(ans) DBG("ans: '%s'", ans); else DBG("no ans");
+ if(ans && 0 == strcmp(ans, cmd)) return ret;
+ return SENDSTAT_NOECHO;
+}
+
+// work with single client, return -1 if disconnected or status of `sendcmd`
+static int handle_socket(int sock, TTY_descr *d){
+ char buff[BUFLEN];
+ ssize_t rd = read(sock, buff, BUFLEN-1);;
+ DBG("Got %zd bytes", rd);
+ if(rd <= 0){ // error or disconnect
+ DBG("Nothing to read from fd %d (ret: %zd)", sock, rd);
+ return -1;
+ }
+ // add trailing zero to be on the safe side
+ buff[rd] = 0;
+ DBG("GOT: %s", buff);
+ ssize_t blen = strlen(buff);
+ int s = sendcmd(buff, blen, d);
+ if(SENDSTAT_OK != s && SENDSTAT_SETTER != s){
+ int l = strlen(sendstatuses[s]);
+ if(l != send(sock, sendstatuses[s], l, MSG_NOSIGNAL)){
+ WARN("send()");
+ LOGWARN("send() to fd=%d failed", sock);
+ }
+ }else{
+ if(buff[blen-1] == '\n') buff[blen-1] = 0;
+ LOGMSG("CLIENT_%d: %s", sock, buff);
+ }
+ return s;
+}
+
+/**
+ * check data from fd
+ * @param fd - file descriptor
+ * @return 0 in case of timeout, 1 in case of fd have data, -1 if error
+ */
+int canberead(int fd){
+ fd_set fds;
+ struct timeval timeout;
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 10000; // wait for 10ms max
+ FD_ZERO(&fds);
+ FD_SET(fd, &fds);
+ do{
+ int rc = select(fd+1, &fds, NULL, NULL, &timeout);
+ if(rc < 0){
+ if(errno != EINTR){
+ LOGWARN("select()");
+ WARN("select()");
+ return -1;
+ }
+ continue;
+ }
+ break;
+ }while(1);
+ if(FD_ISSET(fd, &fds)){
+ //DBG("FD_ISSET");
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * @brief getserdata - read data (ending by '\n') from serial device
+ * @param D (i) - device
+ * @param len (o) - amount of butes read (-1 if disconnected)
+ * @return pointer to data buffer or NULL if none
+ */
+static char *getserdata(TTY_descr *D, int *len){
+ static char serbuf[BUFLEN], *ptr = serbuf;
+ static size_t blen = BUFLEN - 1;
+ if(!D || D->comfd < 0) return NULL;
+ char *nl = NULL;
+ do{
+ int s = canberead(D->comfd);
+ if(s == 0) break;
+ if(s < 0){ // interrupted?
+ if(len) *len = 0;
+ return NULL;
+ }
+ ssize_t l = read(D->comfd, ptr, blen);
+ if(l < 1){ // disconnected
+ DBG("device disconnected");
+ if(len) *len = -1;
+ return NULL;
+ }
+ ptr[l] = 0;
+ //DBG("GOT %zd bytes: '%s'", l, ptr);
+ nl = strchr(ptr, '\n');
+ ptr += l;
+ blen -= l;
+ if(nl){
+ //DBG("Got newline");
+ break;
+ }
+ }while(blen);
+ // recalculate newline from the beginning (what if old data stays there?)
+ nl = strchr(serbuf, '\n');
+ if(blen && !nl){
+ if(len) *len = 0;
+ return NULL;
+ }
+ // in case of overflow send buffer without trailing '\n'
+ int L;
+ if(nl) L = nl - serbuf + 1; // get line to '\n'
+ else L = strlen(serbuf); // get all buffer
+ if(len) *len = L;
+ memcpy(D->buf, serbuf, L); // copy all + trailing zero
+ D->buflen = L;
+ D->buf[L] = 0;
+ //DBG("Put to buf %d bytes: '%s'", L, D->buf);
+ if(nl){
+ L = ptr - nl - 1; // symbols after newline
+ if(L > 0){ // there's some data after '\n' -> put it into the beginning
+ memmove(serbuf, nl+1, L);
+ blen = BUFLEN - 1 - L;
+ ptr = serbuf + L;
+ *ptr = 0;
+ //DBG("now serbuf is '%s'", serbuf);
+ }else{
+ blen = BUFLEN - 1;
+ ptr = serbuf;
+ *ptr = 0;
+ }
+ }else{
+ blen = BUFLEN - 1;
+ ptr = serbuf;
+ *ptr = 0;
+ }
+ return D->buf;
+}
+
+static void run_server(int sock, TTY_descr *d, char *hdrfile){
+ if(listen(sock, MAXCLIENTS) == -1){
+ WARN("listen");
+ LOGWARN("listen");
+ return;
+ }
+ int enable = 1;
+ if(ioctl(sock, FIONBIO, (void *)&enable) < 0){ // make socket nonblocking
+ LOGERR("Can't make socket nonblocking");
+ ERRX("ioctl()");
+ }
+ int nfd = 1; // only one socket @start
+ struct pollfd poll_set[MAXCLIENTS+1];
+ bzero(poll_set, sizeof(poll_set));
+ // ZERO - listening server socket
+ poll_set[0].fd = sock;
+ poll_set[0].events = POLLIN;
+ int need2poll = 1; // one of motors is moving or in error state - check all
+ double tpoll = dtime(); // time of last device polling
+ while(1){
+ poll(poll_set, nfd, 1); // max timeout - 1ms
+ if(poll_set[0].revents & POLLIN){ // check main for accept()
+ struct sockaddr_in addr;
+ socklen_t len = sizeof(addr);
+ int client = accept(sock, (struct sockaddr*)&addr, &len);
+ DBG("New connection");
+ LOGMSG("Connection, fd=%d", client);
+ if(nfd == MAXCLIENTS + 1){
+ LOGWARN("Max amount of connections, disconnect fd=%d", client);
+ WARNX("Limit of connections reached");
+ close(client);
+ }else{
+ memset(&poll_set[nfd], 0, sizeof(struct pollfd));
+ poll_set[nfd].fd = client;
+ poll_set[nfd].events = POLLIN;
+ ++nfd;
+ }
+ }
+ // scan connections
+ for(int fdidx = 1; fdidx < nfd; ++fdidx){
+ if((poll_set[fdidx].revents & POLLIN) == 0) continue;
+ int fd = poll_set[fdidx].fd;
+ int h = handle_socket(fd, d);
+ if(h < 0){ // socket closed
+ DBG("Client fd=%d disconnected", fd);
+ LOGMSG("Client fd=%d disconnected", fd);
+ close(fd);
+ // move last FD to current position
+ poll_set[fdidx] = poll_set[nfd - 1];
+ --nfd;
+ }else if(h == SENDSTAT_SETTER){
+ DBG("NEED TO POLL!");
+ need2poll = 1; // should check state
+ usleep(110000); // wait for buffers put to USB
+ }
+ }
+ int l = -1;
+ char *serdata = NULL;
+ while((serdata = getserdata(d, &l))){
+ if(l < 0){
+ LOGERR("Serial device disconnected");
+ ERRX("Serial device disconnected");
+ }
+ for(int i = 1; i < nfd; ++i){
+ if(l != send(poll_set[i].fd, serdata, l, MSG_NOSIGNAL)){
+ LOGWARN("send() to fd=%d failed", poll_set[i].fd);
+ WARN("send()");
+ }
+ DBG("send 2 client %d", poll_set[i].fd);
+ }
+ // this call should be AFTER data sending as it changes value of `serdata`
+ if(parse_incoming_string(serdata, l, hdrfile)) need2poll = 1; // check later if something is moving
+ }
+ if(need2poll && dtime() - tpoll > 1.){ // check status once per second
+ char buff[BUFLEN];
+ for(int i = 0; i < 3; ++i){ // don't need to validate data here
+ snprintf(buff, BUFLEN, "%s%d\n", TEACMD_POSITION, i);
+ ssize_t blen = strlen(buff);
+ if(blen != write(d->comfd, buff, strlen(buff))) WARN("write()");
+ DBG("send '%s'", buff);
+ serdata = getserdata(d, &l); // clear echo
+ if(serdata){
+ DBG("ans: %s", serdata);
+ //parse_incoming_string(serdata, l, hdrfile);
+ }
+ snprintf(buff, BUFLEN, "%s%d\n", TEACMD_STATUS, i);
+ blen = strlen(buff);
+ if(blen != write(d->comfd, buff, strlen(buff))) WARN("write()");
+ DBG("send %s", buff);
+ serdata = getserdata(d, &l); // clear echo
+ if(serdata){
+ DBG("ans: %s", serdata);
+ //parse_incoming_string(serdata, l, hdrfile);
+ }
+ }
+ // now clear incoming buffer & process answers (don't spam client)
+ /*
+ DBG("clear buff, time=0");
+ tpoll = dtime();
+ while(dtime() - tpoll < 1. && !(serdata = getserdata(d, &l)));
+ do{
+ need2poll = parse_incoming_string(serdata, l, hdrfile);
+ usleep(20000);
+ }while((serdata = getserdata(d, &l)));
+ DBG("done, time=%g, need2poll=%d", dtime()-tpoll, need2poll);
+ */
+ need2poll = 0;
+ tpoll = dtime();
+ }
+ }
+}
+
+// read console char - for client
+static int rc(){
+ int rb;
+ struct timeval tv;
+ int retval;
+ fd_set rfds;
+ FD_ZERO(&rfds);
+ FD_SET(STDIN_FILENO, &rfds);
+ tv.tv_sec = 0; tv.tv_usec = 100;
+ retval = select(1, &rfds, NULL, NULL, &tv);
+ if(!retval) rb = 0;
+ else {
+ if(FD_ISSET(STDIN_FILENO, &rfds)) rb = getchar();
+ else rb = 0;
+ }
+ return rb;
+}
+
+/**
+ * @brief mygetline - silently and non-blocking getline
+ * @return zero-terminated string with '\n' at end (or without in case of overflow)
+ */
+static char *mygetline(){
+ static char buf[BUFLEN+1];
+ static int i = 0;
+ while(i < BUFLEN){
+ char rd = rc();
+ if(!rd) return NULL;
+ if(rd == 0x7f && i){ // backspace
+ buf[--i] = 0;
+ printf("\b \b");
+ }else{
+ buf[i++] = rd;
+ printf("%c", rd);
+ }
+ fflush(stdout);
+ if(rd == '\n') break;
+ }
+ buf[i] = 0;
+ i = 0;
+ return buf;
+}
+
+static void terminal_client(int sock){
+ setup_con(); // convert console mode into non-canon
+ int Bufsiz = BUFLEN;
+ char *recvBuff = MALLOC(char, Bufsiz);
+ while(1){
+ char *msg = mygetline();
+ if(msg){
+ ssize_t L = strlen(msg);
+ if(send(sock, msg, L, 0) != L){
+ WARN("send");
+ }else{
+ if(msg[L-1] == '\n') msg[L-1] = 0;
+ LOGMSG("TERMINAL: %s", msg);
+ }
+ }
+ if(1 != canberead(sock)) continue;
+ int n = read(sock, recvBuff, Bufsiz-1);
+ if(n == 0){
+ WARNX("Server disconnected");
+ signals(0);
+ }
+ recvBuff[n] = 0;
+ printf("%s", recvBuff);
+ if(recvBuff[n-1] == '\n') recvBuff[n-1] = 0;
+ LOGMSG("SERIAL: %s", recvBuff);
+ }
+}
+
+/**
+ * @brief openserialdev - open connection to serial device
+ * @param path (i) - path to device
+ * @param speed - connection speed
+ * @return pointer to device structure if all OK
+ */
+static TTY_descr *openserialdev(char *path, int speed){
+ TTY_descr *d = new_tty(path, speed, BUFLEN);
+ DBG("Device created");
+ if(!d || !(tty_open(d, 1))){
+ WARN("Can't open device %s", path);
+ LOGWARN("Can't open device %s", path);
+ return NULL;
+ }
+ DBG("device opened");
+ return d;
+}
+
+int start_socket(int server, glob_pars *P, TTY_descr **dev){
+ if(!P || !dev){
+ WARNX("Need parameters & device");
+ return 1;
+ }
+ char *hdrfile = NULL;
+ int realfile = 0;
+ char apath[128], *sockpath = P->path;
+ DBG("path: %s", sockpath);
+ if(*sockpath == 0){
+ DBG("convert name");
+ apath[0] = 0;
+ strncpy(apath+1, sockpath+1, 126);
+ }else if(strncmp("\\0", sockpath, 2) == 0){
+ DBG("convert name");
+ apath[0] = 0;
+ strncpy(apath+1, sockpath+2, 126);
+ }else{
+ strcpy(apath, sockpath);
+ realfile = 1;
+ }
+ if(server){
+ if(!dev) return 1;
+ if(!(*dev = openserialdev(P->devpath, P->speed))){
+ LOGERR("Can't open serial device %s", P->devpath);
+ ERR("Can't open serial device %s", P->devpath);
+ }
+ if(realfile) unlink(apath); // remove old socket
+ if(P->fitshdr){ // open file with header
+ FILE *hdrf = fopen(P->fitshdr, "w");
+ if(!hdrf){
+ WARNX("Can't create file %s", P->fitshdr);
+ LOGERR("Can't create file %s", P->fitshdr);
+ }else{
+ fclose(hdrf);
+ hdrfile = strdup(P->fitshdr);
+ }
+ }
+ }
+ int sock = -1;
+ int reuseaddr = 1;
+ struct sockaddr_un saddr = {0};
+ saddr.sun_family = AF_UNIX;
+ memcpy(saddr.sun_path, apath, 106); // if sun_path[0] == 0 we don't create a file
+ if((sock = socket(AF_UNIX, SOCK_SEQPACKET, 0)) < 0){ // or SOCK_STREAM?
+ LOGERR("socket()");
+ ERR("socket()");
+ }
+ if(server){
+ if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(int)) == -1){
+ LOGWARN("setsockopt");
+ WARN("setsockopt");
+ }
+ if(bind(sock, &saddr, sizeof(saddr)) == -1){
+ close(sock);
+ LOGERR("bind");
+ ERR("bind");
+ }
+ }else{
+ if(connect(sock, &saddr, sizeof(saddr)) == -1){
+ LOGERR("connect()");
+ ERR("connect()");
+ }
+ }
+ int ret = 0;
+ if(server) run_server(sock, *dev, hdrfile);
+ else if(P->terminal) terminal_client(sock);
+ else ret = client_proc(sock, P);
+ close(sock);
+ return ret;
+}
+
+
diff --git a/TeAmanagement/sersock.h b/TeAmanagement/sersock.h
new file mode 100644
index 0000000..1b01be7
--- /dev/null
+++ b/TeAmanagement/sersock.h
@@ -0,0 +1,34 @@
+/*
+ * This file is part of the TeAman project.
+ * Copyright 2022 Edward V. Emelianov .
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+#ifndef SERSOCK_H__
+#define SERSOCK_H__
+
+#define BUFLEN (1024)
+// Max amount of connections
+#define MAXCLIENTS (30)
+
+#include
+
+#include "cmdlnopts.h"
+
+int start_socket(int server, glob_pars *P, TTY_descr **dev);
+int canberead(int fd);
+
+#endif // SERSOCK_H__
diff --git a/TeAmanagement/teacmd.c b/TeAmanagement/teacmd.c
new file mode 100644
index 0000000..ea7964b
--- /dev/null
+++ b/TeAmanagement/teacmd.c
@@ -0,0 +1,435 @@
+/*
+ * This file is part of the TeAman project.
+ * Copyright 2022 Edward V. Emelianov .
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include // NAN
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "sersock.h"
+#include "teacmd.h"
+
+#define CMP(cmd, str) (0 == strncmp(cmd, str, sizeof(cmd)-1))
+
+static int min[3] = {0}, max[3] = {0}; // min/max positions (steps) for each axe
+static int pos[3] = {0}; // current position
+
+static char *get_keyval(char *keyval);
+
+void set_validator(glob_pars *P){
+ memcpy(min, P->minsteps, sizeof(min));
+ memcpy(max, P->maxsteps, sizeof(max));
+}
+
+static void clearbuf(int sock){
+ FNAME();
+ char buf[256];
+ int r = 0;
+ do{
+ r = canberead(sock);
+ DBG("r = %d", r);
+ if(r != 1) break;
+ r = read(sock, buf, 255);
+ }while(r > 0);
+}
+
+/**
+ * @brief movecmd - send command to move motor
+ * @param sock - socket fd
+ * @param n - motor number
+ * @param val - coordinate value
+ * @return FALSE if failed
+ */
+static int movecmd(int sock, int n, double val){
+ if(sock < 0 || n < 0 || n > 2) return FALSE;
+ char buf1[256], buf2[256];
+ if(isnan(val)) snprintf(buf1, 256, "%s%d\n", TEACMD_POSITION, n);
+ else snprintf(buf1, 256, "%s%d=%d\n", TEACMD_POSITION, n, TEAMM_STEPS(val));
+ ssize_t L = strlen(buf1);
+ clearbuf(sock);
+ if(send(sock, buf1, L, 0) != L){
+ buf1[L-1] = 0;
+ WARN("cant send \"%s\"", buf1);
+ return FALSE;
+ }
+ DBG("send %s", buf1);
+ double t0 = dtime();
+ // wait for a quater of second
+ do{
+ int r = canberead(sock);
+ if(r < 0){
+ WARNX("read error");
+ return FALSE;
+ }
+ if(!r) continue;
+ int N = read(sock, buf2, 255);
+ if(N == 0){
+ WARNX("Server disconnected");
+ return FALSE;
+ }
+ buf2[N] = 0;
+ buf1[L-1] = 0;
+ if(buf2[N-1] == '\n') buf2[N-1] = 0;
+ if(isnan(val)){
+ char *val = get_keyval(buf2);
+ if(val){
+ if(CMP(TEACMD_POSITION, buf2)){
+ int Nmot = buf2[strlen(buf2)-1] - '0'; // commandN
+ DBG("got Nmot=%d, need %d", Nmot, n);
+ if(Nmot == n){
+ const char *coords = "XYZ";
+ verbose(1, "%c=%g", coords[Nmot], TEASTEPS_MM(atoi(val)));
+ return TRUE;
+ }
+ }
+ }
+ continue;
+ }
+ if(strcmp(buf1, buf2)) WARNX("Cmd '%s' got answer '%s'", buf1, buf2);
+ else{
+ verbose(1, "Cmd '%s' OK", buf1);
+ return TRUE;
+ }
+ }while(dtime() - t0 < 0.25);
+ return FALSE;
+}
+
+// poll status; return -1 if can't get answer or status code
+static int pollcmd(int sock, int n){
+ if(sock < 0 || n < 0 || n > 2) return -1;
+ char buf[256];
+ snprintf(buf, 256, "%s%d\n", TEACMD_STATUS, n);
+ ssize_t L = strlen(buf);
+ clearbuf(sock);
+ if(send(sock, buf, L, 0) != L){
+ buf[L-1] = 0;
+ WARN("Can't send \"%s\"", buf);
+ return -1;
+ }
+ double t0 = dtime();
+ do{
+ int r = canberead(sock);
+ if(r < 0){
+ WARNX("read error");
+ return -1;
+ }
+ if(!r) continue;
+ int N = read(sock, buf, 255);
+ if(N == 0){
+ WARNX("Server disconnected");
+ return -1;
+ }
+ buf[N] = 0;
+ DBG("got: %s", buf);
+ char *val = get_keyval(buf);
+ DBG("val='%s', buf='%s'", val, buf);
+ if(val){
+ if(CMP(TEACMD_STATUS, buf)){
+ int Nmot = buf[strlen(buf)-1] - '0'; // commandN
+ DBG("Nmot=%d", Nmot);
+ if(Nmot == n) return atoi(val);
+ }
+ }
+ }while(dtime() - t0 < 1.);
+ WARNX("Timeout");
+ return -1;
+}
+
+static int waitmoving(int sock){
+ int stall = 0, error = 0, ret = 0;
+ do{
+ int stop = 1;
+ for(int i = 0; i < 3; ++i){
+ int st = pollcmd(sock, i);
+ if(st < 0) ERRX("Server disconnected");
+ DBG("pollcmd returns %d", st);
+ switch(st){
+ case STP_RELAX:
+ break;
+ case STP_ACCEL:
+ case STP_MOVE:
+ case STP_MVSLOW:
+ case STP_DECEL:
+ stop = 0;
+ break;
+ case STP_STALL:
+ stall = 1;
+ break;
+ default:
+ error = 1;
+ }
+ }
+ if(stop) break;
+ usleep(250000);
+ }while(1);
+ if(stall){ WARNX("At least one of motors stalled"); ret = 2;}
+ if(error){ WARNX("At least on of motors in error state"); ret = 3;}
+ verbose(1, "Stop");
+ return ret;
+}
+
+static int gotozcmd(int sock, int n){
+ char buf[256];
+ snprintf(buf, 256, "%s%d\n", TEACMD_GOTOZERO, n);
+ ssize_t L = strlen(buf);
+ clearbuf(sock);
+ if(send(sock, buf, L, 0) != L){
+ buf[L-1] = 0;
+ WARN("cant send \"%s\"", buf);
+ return FALSE;
+ }
+ DBG("%d -> 0", n);
+ return TRUE;
+}
+
+/**
+ * @brief client_proc - process client parameters and send data to server
+ * @param sock - socket fd
+ * @param P - parameters
+ * @return error code
+ */
+int client_proc(int sock, glob_pars *P){
+ if(sock < 0 || !P) return 1;
+ int wouldmove = 0, ret = 0;
+ if(!isnan(P->x)){if(movecmd(sock, 0, P->x)){ wouldmove = 1;} else ret = 1;}
+ if(!isnan(P->y)){if(movecmd(sock, 1, P->y)){ wouldmove = 1;} else ret = 1;}
+ if(!isnan(P->z)){if(movecmd(sock, 2, P->z)){ wouldmove = 1;} else ret = 1;}
+ DBG("Send gotoz\n\n");
+ if(P->gotozero){
+ if(wouldmove){
+ usleep(250000);
+ ret += waitmoving(sock);
+ }
+ for(int i = 0; i < 3; ++i){
+ int ntries = 0;
+ for(; ntries < 5; ++i){
+ if(gotozcmd(sock, i)){
+ DBG("OK, gotoz%d", i);
+ break;
+ }
+ }
+ if(ntries == 5) return 11;
+ }
+ }
+ if(P->wait){
+ DBG("wait a little\n\n");
+ sleep(1);
+ ret += waitmoving(sock);
+ }
+ // get current coordinates
+ for(int i = 0; i < 3; ++i) movecmd(sock, i, NAN);
+ return ret;
+}
+#if 0
+static void terminal_client(int sock){
+ setup_con(); // convert console mode into non-canon
+ int Bufsiz = BUFLEN;
+ char *recvBuff = MALLOC(char, Bufsiz);
+ while(1){
+ char *msg = mygetline();
+ if(msg){
+ ssize_t L = strlen(msg);
+ if(send(sock, msg, L, 0) != L){
+ WARN("send");
+ }else{
+ if(msg[L-1] == '\n') msg[L-1] = 0;
+ LOGMSG("TERMINAL: %s", msg);
+ }
+ }
+ if(1 != canberead(sock)) continue;
+ int n = read(sock, recvBuff, Bufsiz-1);
+ if(n == 0){
+ WARNX("Server disconnected");
+ signals(0);
+ }
+ recvBuff[n] = 0;
+ printf("%s", recvBuff);
+ if(recvBuff[n-1] == '\n') recvBuff[n-1] = 0;
+ LOGMSG("SERIAL: %s", recvBuff);
+ }
+}
+#endif
+
+/**
+ * @brief printhdr - write FITS record into output file
+ * @param fd - fd to write
+ * @param key - key
+ * @param val - value
+ * @param cmnt - comment
+ * @return 0 if all OK
+ */
+static int printhdr(int fd, const char *key, const char *val, const char *cmnt){
+ char tmp[81];
+ char tk[9];
+ if(strlen(key) > 8){
+ strncpy(tk, key, 8);
+ key = tk;
+ }
+ if(cmnt){
+ snprintf(tmp, 81, "%-8s= %-21s / %s", key, val, cmnt);
+ }else{
+ snprintf(tmp, 81, "%-8s= %s", key, val);
+ }
+ size_t l = strlen(tmp);
+ tmp[l] = '\n';
+ ++l;
+ if(write(fd, tmp, l) != (ssize_t)l){
+ WARN("write()");
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * @brief get_keyval - get value of `key = val`
+ * @param keyval (io) - pair `key = val`, return `key`
+ * @return `val`
+ */
+static char *get_keyval(char *keyval){
+ // remove starting spaces in key
+ while(isspace(*keyval)) ++keyval;
+ char *val = strchr(keyval, '=');
+ if(val){ // got value: remove starting spaces in val
+ *val++ = 0;
+ while(isspace(*val)) ++val;
+ }
+ // remove trailing spaces in key
+ char *e = keyval + strlen(keyval) - 1; // last key symbol
+ while(isspace(*e) && e > keyval) --e;
+ e[1] = 0;
+ // now we have key (`str`) and val (or NULL)
+ //DBG("key=%s, val=%s", keyval, val);
+ return val;
+}
+
+
+/**
+ * @brief parse_incoming_string - parse server string (answer from device)
+ * @param str - string with data
+ * @param l - strlen(str)
+ * @param hdrname - filename with FITS header
+ * @return 1 if one of motors not in STP_RELAX
+ */
+int parse_incoming_string(char *str, int l, char *hdrname){
+ if(!str || l < 1 || !hdrname) goto chkstate;
+ DBG("Got string %s", str);
+ static int status[3] = {0}; // statuses
+ if(str[l-1] == '\n') str[l-1] = 0;
+ LOGMSG("SERIAL: %s", str);
+ char *value = get_keyval(str);
+ if(!value) goto chkstate;
+#define POS(cmd) (sizeof(cmd)-1)
+ int Nmot = str[strlen(str)-1] - '0'; // commandN
+ DBG("Nmot=%d", Nmot);
+ if(Nmot < 0 || Nmot > 3) goto chkstate;
+ int valI = atoi(value); // integer value of parameter
+ DBG("val=%d", valI);
+ if(CMP(TEACMD_POSITION, str)){ // got position
+ DBG("Got position[%d]=%d", Nmot, valI);
+ pos[Nmot] = valI;
+ }else if(CMP(TEACMD_STATUS, str)){ // got state
+ DBG("Got status[%d]=%d", Nmot, valI);
+ status[Nmot] = valI;
+ }else goto chkstate; // nothing interesting
+ // now all OK: we got something new - refresh FITS header
+ char val[23];//, comment[71];
+ //double dtmp;
+#define WRHDR(k, v, c) do{if(printhdr(fd, k, v, c)){goto returning;}}while(0)
+#define COMMENT(...) do{snprintf(comment, 70, __VA_ARGS__);}while(0)
+#define VAL(fmt, x) do{snprintf(val, 22, fmt, x);}while(0)
+#define VALD(x) VAL("%.10g", x)
+#define VALS(x) VAL("'%s'", x)
+ l = strlen(hdrname) + 7;
+ char *aname = MALLOC(char, l);
+ snprintf(aname, l, "%sXXXXXX", hdrname);
+ int fd = mkstemp(aname);
+ if(fd < 0){
+ WARN("Can't write header file, mkstemp()");
+ LOGWARN("Can't write header file, mkstemp()");
+ FREE(aname);
+ goto chkstate;
+ }
+ fchmod(fd, 0644);
+ WRHDR("INSTRUME", "'TeA - Telescope Analyzer'", "Acquisition hardware");
+ const char *coords[3] = {"XMM", "YMM", "ZMM"};
+ for(int i = 0; i < 3; ++i){
+ VALD(TEASTEPS_MM(pos[i]));
+ WRHDR(coords[i], val, "Coordinate, mm");
+ }
+ const char *states[STP_AMOUNT] = {
+ [STP_RELAX] = "stop",
+ [STP_ACCEL] = "acceleration",
+ [STP_MOVE] = "fast moving",
+ [STP_MVSLOW] = "slow moving",
+ [STP_DECEL] = "deceleration",
+ [STP_STALL] = "stall",
+ [STP_ERR] = "error"
+ };
+ const char *coordsst[3] = {"XSTAT", "YSTAT", "ZSTAT"};
+ for(int i = 0; i < 3; ++i){
+ VALS(states[status[i]]);
+ WRHDR(coordsst[i], val, "Status of given coordinate motor");
+ }
+returning:
+ close(fd);
+ rename(aname, hdrname);
+ DBG("file %s ready", hdrname);
+ FREE(aname);
+chkstate:
+ for(int i = 0; i < 3; ++i) if(status[i] != STP_RELAX) return 1;
+ return 0;
+}
+
+/**
+ * @brief validate_cmd - test if command won't move motor out of range
+ * @param str - cmd
+ * @return -1 if out of range, 0 if all OK, 1 if str is position setter
+ */
+int validate_cmd(char *str, int l){
+ char buff[256];
+ if(l > 255) return -1; // too long - can't check
+ strcpy(buff, str);
+ int ret = 0;
+ char *value = get_keyval(buff);
+ if(!value) return 0; // getter?
+ int Nmot = buff[strlen(buff)-1] - '0'; // commandN
+ if(Nmot < 0 || Nmot > 2) return 0; // something like relay?
+ int valI = atoi(value); // integer value of parameter
+ if(CMP(TEACMD_POSITION, buff)){ // user asks for absolute position
+ if(valI < min[Nmot] || valI > max[Nmot]){
+ WARNX("%d out of range [%d, %d]", valI, min[Nmot], max[Nmot]);
+ return -1;
+ }
+ ret = 1;
+ }else if(CMP(TEACMD_RELPOSITION, buff) || CMP(TEACMD_SLOWMOVE, buff)){
+ int tagpos = valI + pos[Nmot];
+ if(tagpos < min[Nmot] || tagpos > max[Nmot]){
+ WARNX("%d out of range [%d, %d]", tagpos, min[Nmot], max[Nmot]);
+ return -1;
+ }
+ ret = 1;
+ }else if(CMP(TEACMD_SETPOS, buff)){
+ WARNX("Forbidden to set position");
+ return -1; // forbidden command
+ }
+ return ret;
+}
diff --git a/TeAmanagement/teacmd.h b/TeAmanagement/teacmd.h
new file mode 100644
index 0000000..a515519
--- /dev/null
+++ b/TeAmanagement/teacmd.h
@@ -0,0 +1,50 @@
+/*
+ * This file is part of the TeAman project.
+ * Copyright 2022 Edward V. Emelianov .
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include "cmdlnopts.h"
+
+int client_proc(int sock, glob_pars *P);
+void set_validator(glob_pars *P);
+int parse_incoming_string(char *str, int l, char *hdrname);
+int validate_cmd(char *str, int l);
+
+
+// steps into MM and vice versa
+#define TEASTEPS_MM(steps) (steps/200.)
+#define TEAMM_STEPS(mm) ((int)(mm * 200.))
+
+// tea commands
+#define TEACMD_POSITION "abspos"
+#define TEACMD_RELPOSITION "relpos"
+#define TEACMD_SLOWMOVE "relslow"
+#define TEACMD_SETPOS "setpos"
+#define TEACMD_GOTOZERO "gotoz"
+#define TEACMD_STATUS "state"
+
+typedef enum{
+ STP_RELAX, // 0 - no moving
+ STP_ACCEL, // 1 - start moving with acceleration
+ STP_MOVE, // 2 - moving with constant speed
+ STP_MVSLOW, // 3 - moving with slowest constant speed (end of moving)
+ STP_DECEL, // 4 - moving with deceleration
+ STP_STALL, // 5 - stalled
+ STP_ERR, // 6 - wrong/error state
+ STP_AMOUNT
+} teastate;