From 732860bb71bc8295de46dbed539672a22a60d87d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 13 Dec 2017 01:18:14 +0100 Subject: Add NewComm --- elegoo.go | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'elegoo.go') diff --git a/elegoo.go b/elegoo.go index c2d19c7..b13f4da 100644 --- a/elegoo.go +++ b/elegoo.go @@ -10,25 +10,33 @@ import ( //go:generate sh -c "protoc --go_out=. --nanopb_out=firmware/ *.proto" -func Send(w io.Writer, pb proto.Message) error { +type ProtoComm interface { + Send(pb proto.Message) error + Recv(pb proto.Message) error +} + +type Comm struct { + w *bufio.Writer + r *bufio.Reader +} + +func NewComm(rw io.ReadWriter) Comm { + return Comm{w: bufio.NewWriter(rw), r: bufio.NewReader(rw)} +} + +func (c Comm) Send(pb proto.Message) error { buf := new(proto.Buffer) if err := buf.EncodeMessage(pb); err != nil { return err } - _, err := w.Write(cobs.Encode(buf.Bytes())) - return err -} - -func RecvR(r io.Reader, pb proto.Message) error { - block, err := bufio.NewReader(r).ReadBytes(0) - if err != nil { + if _, err := c.w.Write(cobs.Encode(buf.Bytes())); err != nil { return err } - return proto.NewBuffer(cobs.Decode(block)).DecodeMessage(pb) + return c.w.Flush() } -func Recv(buf *bufio.Reader, pb proto.Message) error { - block, err := buf.ReadBytes(0) +func (c Comm) Recv(pb proto.Message) error { + block, err := c.r.ReadBytes(0) if err != nil { return err } -- cgit v1.2.3