From 58f446de81d16b9f6fdae190258cdbfe40420e94 Mon Sep 17 00:00:00 2001 From: Hendrik van Wyk Date: Sat, 16 Sep 2017 13:13:23 +0200 Subject: [PATCH] Add channel based interface. --- cmd/invertercli/invertercli.go | 5 ++--- mk2if/mk2.go | 10 ++++++++++ mk2if/mk2interface.go | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/cmd/invertercli/invertercli.go b/cmd/invertercli/invertercli.go index e5fc11b..55bd695 100644 --- a/cmd/invertercli/invertercli.go +++ b/cmd/invertercli/invertercli.go @@ -9,7 +9,6 @@ import ( "log" "net" "sync" - "time" ) // Basic CLI to serve as example lib usage @@ -49,13 +48,13 @@ func main() { if err != nil { panic(err) } + c := mk2.C() wg.Add(1) for { - tmp := mk2.GetMk2Info() + tmp := <-c if tmp.Valid { PrintInfo(tmp) } - time.Sleep(2 * time.Second) } log.Printf("Closing connection") wg.Wait() diff --git a/mk2if/mk2.go b/mk2if/mk2.go index a344d52..ec1d35d 100644 --- a/mk2if/mk2.go +++ b/mk2if/mk2.go @@ -24,6 +24,7 @@ type mk2Ser struct { run chan struct{} locked bool sync.RWMutex + infochan chan *Mk2Info } func NewMk2Connection(dev io.ReadWriter) (Mk2If, error) { @@ -36,6 +37,7 @@ func NewMk2Connection(dev io.ReadWriter) (Mk2If, error) { mk2.sc = make([]scaling, 0) mk2.setTarget() mk2.run = make(chan struct{}) + mk2.infochan = make(chan *Mk2Info) go mk2.frameLock() return mk2, nil } @@ -97,6 +99,10 @@ func (mk2 *mk2Ser) GetMk2Info() *Mk2Info { return mk2.report } +func (mk2 *mk2Ser) C() chan *Mk2Info { + return mk2.infochan +} + func (mk2 *mk2Ser) readByte() byte { buffer := make([]byte, 1) _, err := io.ReadFull(mk2.p, buffer) @@ -121,6 +127,10 @@ func (mk2 *mk2Ser) updateReport() { mk2.Lock() defer mk2.Unlock() mk2.report = mk2.info + select { + case mk2.infochan <- mk2.info: + default: + } mk2.info = &Mk2Info{} } diff --git a/mk2if/mk2interface.go b/mk2if/mk2interface.go index f707d3c..589f8b9 100644 --- a/mk2if/mk2interface.go +++ b/mk2if/mk2interface.go @@ -55,5 +55,6 @@ type Mk2Info struct { type Mk2If interface { GetMk2Info() *Mk2Info + C() chan *Mk2Info Close() }