From a084b871c5056403ffc7d520ccc4b285e263b9f9 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 20 Aug 2017 18:16:34 +0200 Subject: ... --- car/elegoo/main.go | 48 +++++++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/car/elegoo/main.go b/car/elegoo/main.go index e44fb6a..daf8262 100644 --- a/car/elegoo/main.go +++ b/car/elegoo/main.go @@ -12,22 +12,24 @@ import ( "github.com/tarm/serial" ) -func Write(w io.Writer, buf []byte) { - sz := proto.EncodeVarint(uint64(len(buf))) - w.Write(append(sz, buf...)) -} - -func Read(r io.Reader) []byte { - buf := make([]byte, 1) - r.Read(buf) - sz, _ := proto.DecodeVarint(buf) - nbuf := make([]byte, int(sz)) - io.ReadFull(r, nbuf) - return nbuf +func Write(w io.Writer, pb proto.Message) error { + buf := new(proto.Buffer) + err := buf.EncodeMessage(pb) + if err != nil { + return err + } + _, err = w.Write(buf.Bytes()) + return err } -func varint(b []byte) []byte { - return append([]byte{byte(len(b))}, b...) +func Read(r io.Reader, pb proto.Message) error { + buf := make([]byte, 80) + n, err := r.Read(buf) + if err != nil { + return err + } + log.Prinltn("got: % x", buf[:n]) // DEBUG + return proto.NewBuffer(buf[:n]).DecodeMessage(pb) } // /dev/cu.Elegoo-DevB @@ -44,25 +46,13 @@ func main() { } defer s.Close() - cmd := &Command{ - SetSpeed: &Speed{ - Left: 100, - Right: 120, - }, - } - buf, err := proto.Marshal(cmd) - if err != nil { - log.Fatal(err) - } - log.Printf("Send: %x", buf) - //Write(s, buf) + cmd := &Command{} + Write(s, cmd) go func() { for { - buf := Read(s) - log.Printf("Got: %x", buf) evt := &Event{} - proto.Unmarshal(buf, evt) + Read(s, evt) log.Println(evt) } }() -- cgit v1.2.3