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) } func GoHome(c *bufio.Writer) { send(c, "TT") } func Home(c *bufio.Writer) { send(c, "H") } func Origin(c *bufio.Writer) { send(c, "FJ") } func Calibrate(c *bufio.Writer) { send(c, "TB70") } func Calibration(c *bufio.ReadWriter) Point { send(c.Writer, "TB71") return NewPoint(recv(c.Reader)) }