From 2b42f5a2a48bf0b237c72aef25eb7cb987f4dd0e Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Fri, 14 Oct 2022 17:24:48 +0300 Subject: [PATCH] added TeAmanagement --- TeAmanagement/Makefile | 56 + TeAmanagement/Readme | 3 + TeAmanagement/TeAman.cflags | 1 + TeAmanagement/TeAman.config | 6 + TeAmanagement/TeAman.creator | 1 + TeAmanagement/TeAman.creator.user | 163 ++ TeAmanagement/TeAman.cxxflags | 1 + TeAmanagement/TeAman.files | 7 + TeAmanagement/TeAman.includes | 1 + TeAmanagement/cmdlnopts.c | 106 ++ TeAmanagement/cmdlnopts.h | 48 + TeAmanagement/log.log | 2506 +++++++++++++++++++++++++++++ TeAmanagement/main.c | 108 ++ TeAmanagement/out.fits | 7 + TeAmanagement/sersock.c | 473 ++++++ TeAmanagement/sersock.h | 34 + TeAmanagement/teacmd.c | 435 +++++ TeAmanagement/teacmd.h | 50 + 18 files changed, 4006 insertions(+) create mode 100644 TeAmanagement/Makefile create mode 100644 TeAmanagement/Readme create mode 100644 TeAmanagement/TeAman.cflags create mode 100644 TeAmanagement/TeAman.config create mode 100644 TeAmanagement/TeAman.creator create mode 100644 TeAmanagement/TeAman.creator.user create mode 100644 TeAmanagement/TeAman.cxxflags create mode 100644 TeAmanagement/TeAman.files create mode 100644 TeAmanagement/TeAman.includes create mode 100644 TeAmanagement/cmdlnopts.c create mode 100644 TeAmanagement/cmdlnopts.h create mode 100644 TeAmanagement/log.log create mode 100644 TeAmanagement/main.c create mode 100644 TeAmanagement/out.fits create mode 100644 TeAmanagement/sersock.c create mode 100644 TeAmanagement/sersock.h create mode 100644 TeAmanagement/teacmd.c create mode 100644 TeAmanagement/teacmd.h 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:  +[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;