aboutsummaryrefslogtreecommitdiff
path: root/robo.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-05-15 02:33:38 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-05-15 02:33:38 +0200
commite3cae1b64560df748350dc4c0b11a95ac3a1d4f6 (patch)
tree37a1a054c63606132f3efa505ea2e6d3f06d3c2e /robo.go
parentd1326521abfa16c0d5e1dd7891540d0a8f61a922 (diff)
Restructure code
Diffstat (limited to 'robo.go')
-rw-r--r--robo.go110
1 files changed, 110 insertions, 0 deletions
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)
+}