From e3cae1b64560df748350dc4c0b11a95ac3a1d4f6 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 15 May 2015 02:33:38 +0200 Subject: Restructure code --- main.go | 13 ++++++-- robo.go | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 robo.go diff --git a/main.go b/main.go index 2dd7e5a..217d049 100644 --- a/main.go +++ b/main.go @@ -49,7 +49,16 @@ func main() { c.Send(*cmd) //log.Println(c.returnString()) } else { - c.DrawPic() +// c.PrintStdin() + //c.DrawPic() } - + //Point{100, 200}.Move(c.Writer) + //Point{100, 1000}.Draw(c.Writer) + Path{ + Point{1000, 1000}, + Point{1000, 2000}, + Point{2000, 1000}, + Point{2000, 2000}, + }.Curve(c.Writer, 1) + log.Println(Version(c.ReadWriter)) } diff --git a/robo.go b/robo.go new file mode 100644 index 0000000..a57807f --- /dev/null +++ b/robo.go @@ -0,0 +1,110 @@ +package main + +import ( + "bufio" + "fmt" +) + +func etx(c *bufio.Writer) { + c.WriteByte(ETX) + c.Flush() +} + +func (p Point) send(c *bufio.Writer, a ...interface{}) { + fmt.Fprint(c, a[0], p) + for _, arg := range a[1:] { + fmt.Fprint(c, arg) + } + etx(c) +} + +func (p Point) Draw(c *bufio.Writer) { p.send(c, "D") } +func (p Point) DrawRelative(c *bufio.Writer) { p.send(c, "E") } +func (p Point) Move(c *bufio.Writer) { p.send(c, "M") } +func (p Point) MoveRelative(c *bufio.Writer) { p.send(c, "O") } +func (p Point) Offset(c *bufio.Writer) { p.send(c, "^") } +func (p Point) LowerLeft(c *bufio.Writer) { p.send(c, "\\") } +func (p Point) UpperRight(c *bufio.Writer) { p.send(c, "Z") } +func (p Point) CuttingArea(c *bufio.Writer) { p.send(c, "FU") } +func (p Point) Calibration(c *bufio.Writer) { p.send(c, "TB72,") } + +/* +func (p Point) SearchMarks(c *bufio.ReadWriter) bool { + send(c, "TB99") + send(c, "TB55,1") + send(c, "TB123,", p) + return true // == 0 +} + +func (ph Path) send(c *bufio.Writer, cmd string) { + defer etx(c) + fmt.Fprint(c, "D") + for _, p := range ph { + fmt.Fprint(c, p, ",") + } +} +*/ + +func (ph Path) send(c *bufio.Writer, a ...interface{}) { + fmt.Fprint(c, a...) + for _, p := range ph { + fmt.Fprint(c, p, ",") + } + etx(c) +} + +func (ph Path) Draw(c *bufio.Writer) { ph.send(c, "D") } +func (ph Path) DrawRelative(c *bufio.Writer) { ph.send(c, "E") } +func (ph Path) Curve(c *bufio.Writer, a int) { ph.send(c, "Y", a, ",") } +func (ph Path) CurveRelative(c *bufio.Writer, a int) { ph.send(c, "_", a, ",") } + +func (u Unit) send(c *bufio.Writer, a ...interface{}) { + fmt.Fprint(c, a[0], u) + for _, arg := range a[1:] { + fmt.Fprint(c, arg) + } + etx(c) +} + +func (u Unit) Origin(c *bufio.Writer) { u.send(c, "SO") } +func (u Unit) LineType(c *bufio.Writer) { u.send(c, "L") } +func (u Unit) LineScale(c *bufio.Writer) { u.send(c, "B") } +func (u Unit) Media(c *bufio.Writer) { u.send(c, "FW") } +func (u Unit) Speed(c *bufio.Writer) { u.send(c, "!") } +func (u Unit) Force(c *bufio.Writer) { u.send(c, "FX") } +func (u Unit) Overcut(c *bufio.Writer) { u.send(c, "FC") } +func (u Unit) UnknownFE(c *bufio.Writer) { u.send(c, "FE") } +func (u Unit) DistanceCorrection(c *bufio.Writer) { u.send(c, "FB", ",0") } + +func esc(c *bufio.Writer, bytes ...byte) { + c.WriteByte(ESC) + for _, b := range bytes { + c.WriteByte(b) + } + c.Flush() +} + +func Init(c *bufio.Writer) { esc(c, 4) } + +func Ready(c *bufio.ReadWriter) bool { + esc(c.Writer, 5) + return NewUnit(recv(c.Reader)) == 0 +} + +func recv(c *bufio.Reader) string { + ans, err := c.ReadString(ETX) + if err != nil { + panic(err) + } + return ans[:len(ans)-1] +} + +func send(c *bufio.Writer, a ...interface{}) { + fmt.Fprint(c, a...) + etx(c) +} + +func Version(c *bufio.ReadWriter) string { + send(c.Writer, "FG") + return recv(c.Reader) +} -- cgit v1.2.3