From b5367338d26d16fda567653125c084e1811b77e9 Mon Sep 17 00:00:00 2001 From: Terekhin Alexandr Date: Mon, 4 Dec 2023 13:00:24 +0300 Subject: [PATCH] feat: YAB-1785: Group chars before send --- Dockerfile | 2 +- Makefile | 2 +- debian/debian/changelog | 11 ++++++++- debian/debian/control | 2 +- .../systemd/system/keyboard-reader.service | 2 +- keyboard-reader.go | 12 ++++------ rest.go | 24 ++++++++++++++++++- 7 files changed, 42 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index d778fa1..fbbede7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,4 +11,4 @@ ENV CGO_ENABLED=1 ADD ./ /data WORKDIR /data -CMD ["make", "docker-deb"] \ No newline at end of file +CMD ["make", "deb"] \ No newline at end of file diff --git a/Makefile b/Makefile index aadf825..10c9be9 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,6 @@ deb: clean build cd ./debian && dpkg-buildpackage -rfakeroot --no-sign --target-arch amd64 --host-arch amd64 docker-deb: clean - docker build -t ${BINARY_NAME} . + docker image build -t ${BINARY_NAME} . docker container run --name ${BINARY_NAME} ${BINARY_NAME} docker container cp ${BINARY_NAME}:/data ./build diff --git a/debian/debian/changelog b/debian/debian/changelog index 455ce43..63a343e 100644 --- a/debian/debian/changelog +++ b/debian/debian/changelog @@ -3,4 +3,13 @@ yablochkov-keyboard-reader (0.1.0) release; urgency=low [ Alexander Terekhin ] * Initial version - -- Alexander Terekhin Sun, 03 Dec 2023 17:01:00 +0600 \ No newline at end of file + -- Alexander Terekhin Sun, 03 Dec 2023 17:01:00 +0600 + + yablochkov-keyboard-reader (0.1.1) release; urgency=low + + [ Alexander Terekhin ] + * Group chars before sending + * Docker build bugfixes + * Change serial to model + + -- Alexander Terekhin Sun, 04 Dec 2023 12:35:00 +0300 \ No newline at end of file diff --git a/debian/debian/control b/debian/debian/control index c8a453e..187aaa4 100644 --- a/debian/debian/control +++ b/debian/debian/control @@ -4,7 +4,7 @@ Priority: optional Maintainer: Alexander Terekhin Package: yablochkov-keyboard-reader -Version: 0.1 +Version: 0.1.1 Architecture: amd64 Installed-Size: 5008848 Description: Yablochkov keyboard reader diff --git a/debian/etc/systemd/system/keyboard-reader.service b/debian/etc/systemd/system/keyboard-reader.service index a168990..e996691 100644 --- a/debian/etc/systemd/system/keyboard-reader.service +++ b/debian/etc/systemd/system/keyboard-reader.service @@ -9,7 +9,7 @@ WorkingDirectory=/opt/ocppc EnvironmentFile=/opt/conf/configuration_vars.env EnvironmentFile=/opt/conf/configuration_vars_model.env EnvironmentFile=/opt/conf/configuration_vars_personal.env -ExecStart=/opt/ocppc/bin/keyboard-reader --serial=OEM_TWN4_B1.64_NKF4.64_STD2.04 +ExecStart=/opt/ocppc/bin/keyboard-reader --model=TWN4_B1.64_NKF4.64_STD2.04 User=debian Group=input ExecStop=/bin/kill -TERM $MAINPID diff --git a/keyboard-reader.go b/keyboard-reader.go index f561d07..b71a8ce 100644 --- a/keyboard-reader.go +++ b/keyboard-reader.go @@ -15,7 +15,7 @@ const bufferLength = 32 func main() { device := flag.String("dev", "", "Keyboard device") vendor := flag.String("vendor", "", "Device vendor") - serial := flag.String("serial", "", "Device id serial") + model := flag.String("model", "", "Device id model") list := flag.Bool("list", false, "List input devices") connectorId := flag.Uint("connector", 0, "Connector id") timeout := flag.Int("timeout", 5, "Http timeout, sec") @@ -32,7 +32,7 @@ func main() { } } - if len(*vendor) == 0 && len(*device) == 0 && len(*serial) == 0 && !*list { + if len(*vendor) == 0 && len(*device) == 0 && len(*model) == 0 && !*list { flag.Usage() } @@ -40,8 +40,8 @@ func main() { device = getDevByProperty(*vendor, "ID_VENDOR") } - if len(*serial) > 0 { - device = getDevByProperty(*serial, "ID_SERIAL") + if len(*model) > 0 { + device = getDevByProperty(*model, "ID_MODEL") } if device == nil || len(*device) == 0 { @@ -87,9 +87,7 @@ func main() { } if sb.Len() > 0 { - id := sb.String() - log.Printf("Send '%s'", id) - client.Send(id) + client.Send(sb.String()) } } } diff --git a/rest.go b/rest.go index 7cfd2c8..876d7a8 100644 --- a/rest.go +++ b/rest.go @@ -9,9 +9,12 @@ import ( "log" "net/http" "strings" + "sync" "time" ) +const timeout = 1 * time.Second + type MonitorIdTag struct { ConnectorId uint `json:"connectorId"` IdTag string `json:"idTag"` @@ -32,6 +35,9 @@ type rest struct { connectorId uint url string timeout time.Duration + mutex sync.Mutex + timer *time.Timer + sb strings.Builder } func NewRest(connectorId uint, url string, timeout time.Duration) RestInterface { @@ -40,7 +46,23 @@ func NewRest(connectorId uint, url string, timeout time.Duration) RestInterface } func (r *rest) Send(id string) { - go r.send(id) + r.mutex.Lock() + defer r.mutex.Unlock() + + r.sb.WriteString(id) + + if r.timer != nil { + r.timer.Reset(timeout) + } else { + f := func() { + s := r.sb.String() + log.Printf("Send '%s'", s) + go r.send(s) + r.sb.Reset() + } + + r.timer = time.AfterFunc(timeout, f) + } } func (r *rest) send(id string) {