From 8943ff362735bb57b927ebc244a49ff217d6940e Mon Sep 17 00:00:00 2001 From: Nonoo Date: Tue, 20 Oct 2020 23:26:05 +0200 Subject: [PATCH] Add serial stream --- controlstream.go | 1 + go.mod | 1 + go.sum | 2 ++ main.go | 3 +++ serialstream.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 62 insertions(+) create mode 100644 serialstream.go diff --git a/controlstream.go b/controlstream.go index 22a5213..df7c55e 100644 --- a/controlstream.go +++ b/controlstream.go @@ -195,6 +195,7 @@ func (s *controlStream) handleRead(r []byte) { s.requestSerialAndAudioTimeout.Stop() s.requestSerialAndAudioTimeout = nil } + go streams.serial.start() go streams.audio.start() s.serialAndAudioStreamOpened = true } diff --git a/go.mod b/go.mod index e5dd00b..8f8fe4b 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.14 require ( github.com/akosmarton/papipes v0.0.0-20201020060136-a13951732479 + github.com/google/goterm v0.0.0-20200907032337-555d40f16ae2 github.com/pborman/getopt v1.1.0 go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.16.0 diff --git a/go.sum b/go.sum index bd0bf9a..4f58f61 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,8 @@ github.com/akosmarton/papipes v0.0.0-20201020060136-a13951732479/go.mod h1:mdvQ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/goterm v0.0.0-20200907032337-555d40f16ae2 h1:CVuJwN34x4xM2aT4sIKhmeib40NeBPhRihNjQmpJsA4= +github.com/google/goterm v0.0.0-20200907032337-555d40f16ae2/go.mod h1:nOFQdrUlIlx6M6ODdSpBj1NVA+VgLC6kmw60mkw34H4= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= diff --git a/main.go b/main.go index 8ba08d4..ce0771d 100644 --- a/main.go +++ b/main.go @@ -10,6 +10,7 @@ import ( var streams struct { control controlStream + serial serialStream audio audioStream } @@ -19,6 +20,7 @@ func exit(err error) { } streams.audio.sendDisconnect() + streams.serial.deinit() streams.control.sendDisconnect() audio.deinit() @@ -46,6 +48,7 @@ func main() { audio.init() streams.audio.init() + streams.serial.init() streams.control.init() setupCloseHandler() diff --git a/serialstream.go b/serialstream.go new file mode 100644 index 0000000..c052521 --- /dev/null +++ b/serialstream.go @@ -0,0 +1,55 @@ +package main + +import ( + "github.com/google/goterm/term" + "github.com/nonoo/kappanhang/log" +) + +type serialStream struct { + common streamCommon + + pty *term.PTY +} + +func (s *serialStream) init() { + s.common.open("serial", 50002) + + var err error + s.pty, err = term.OpenPTY() + if err != nil { + exit(err) + } + n, err := s.pty.PTSName() + if err != nil { + exit(err) + } + log.Print("opened ", n) +} + +func (s *serialStream) handleRead(r []byte) { +} + +func (s *serialStream) start() { + s.common.sendPkt3() + s.common.waitForPkt4Answer() + s.common.sendPkt6() + s.common.waitForPkt6Answer() + + log.Print("stream started") + + s.common.pkt7.startPeriodicSend(&s.common, 1, false) + + for { + select { + case r := <-s.common.readChan: + s.handleRead(r) + } + } +} + +func (s *serialStream) deinit() { + s.common.sendDisconnect() + if s.pty != nil { + s.pty.Close() + } +}