aboutsummaryrefslogtreecommitdiff
path: root/elegoo.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-12-13 01:18:14 +0100
committerDimitri Sokolyuk <demon@dim13.org>2017-12-13 01:18:14 +0100
commit732860bb71bc8295de46dbed539672a22a60d87d (patch)
treefe254dbf0d1696b42237880858c4cbd2b7d37154 /elegoo.go
parent156a9a2271d47934a97ff00f33b8a61c8a49f125 (diff)
Add NewComm
Diffstat (limited to 'elegoo.go')
-rw-r--r--elegoo.go30
1 files changed, 19 insertions, 11 deletions
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
}