add more special commands

This commit is contained in:
Simon Waldherr
2018-11-06 17:18:12 +01:00
parent 798fa421de
commit a89d427a24
5 changed files with 150 additions and 22 deletions

1
.gitignore vendored
View File

@@ -4,3 +4,4 @@ cmd/zplgfa/zplgfa
zplgfa.coverprofile zplgfa.coverprofile
coverage.html coverage.html
test.zpl.bin* test.zpl.bin*
zplgfa.exe

View File

@@ -20,6 +20,8 @@ If you need a ready to use application and don't want to hassle around with sour
## example ## example
take a look at the [example application](https://github.com/SimonWaldherr/zplgfa/tree/master/cmd/zplgfa).
```go ```go
package main package main

View File

@@ -29,6 +29,19 @@ You can also use some effects, e.g. blur:
zplgfa -file label.png -edit blur | nc 192.168.178.42 9100 zplgfa -file label.png -edit blur | nc 192.168.178.42 9100
``` ```
or send special commands:
```sh
zplgfa -cmd feed -ip 192.168.178.42 -port 9100
```
you can also send multiple commands at once:
```sh
zplgfa -cmd cancel,calib,feed -ip 192.168.178.42 -port 9100
```
The ZPLGFA is actually just a demo application for the ZPLGFA package, The ZPLGFA is actually just a demo application for the ZPLGFA package,
if you need something for productive work, look at the source and build something, depending on your needs if you need something for productive work, look at the source and build something, depending on your needs

View File

@@ -19,29 +19,13 @@ import (
"simonwaldherr.de/go/zplgfa" "simonwaldherr.de/go/zplgfa"
) )
func main() { func specialCmds(zebraCmdFlag, networkIpFlag, networkPortFlag string) bool {
var filenameFlag string
var zebraCmdFlag string
var graphicTypeFlag string
var imageEditFlag string
var networkIpFlag string
var networkPortFlag string
var imageResizeFlag float64
var graphicType zplgfa.GraphicType
var cmdSent bool var cmdSent bool
if strings.Contains(zebraCmdFlag, "cancel") && networkIpFlag != "" {
flag.StringVar(&filenameFlag, "file", "", "filename to convert to zpl") if err := sendCancelCmdToZebra(networkIpFlag, networkPortFlag); err == nil {
flag.StringVar(&zebraCmdFlag, "cmd", "", "send special command to printer [calib,feed]") cmdSent = true
flag.StringVar(&graphicTypeFlag, "type", "CompressedASCII", "type of graphic field encoding") }
flag.StringVar(&imageEditFlag, "edit", "", "manipulate the image [invert,monochrome]") }
flag.StringVar(&networkIpFlag, "ip", "", "send zpl to printer")
flag.StringVar(&networkPortFlag, "port", "9100", "network port of printer")
flag.Float64Var(&imageResizeFlag, "resize", 1.0, "zoom/resize the image")
// load flag input arguments
flag.Parse()
// send special commands to printer
if strings.Contains(zebraCmdFlag, "calib") && networkIpFlag != "" { if strings.Contains(zebraCmdFlag, "calib") && networkIpFlag != "" {
if err := sendCalibCmdToZebra(networkIpFlag, networkPortFlag); err == nil { if err := sendCalibCmdToZebra(networkIpFlag, networkPortFlag); err == nil {
cmdSent = true cmdSent = true
@@ -52,6 +36,53 @@ func main() {
cmdSent = true cmdSent = true
} }
} }
if strings.Contains(zebraCmdFlag, "info") && networkIpFlag != "" {
info, err := getInfoFromZebra(networkIpFlag, networkPortFlag)
if err == nil {
fmt.Println(info)
cmdSent = true
}
}
if strings.Contains(zebraCmdFlag, "config") && networkIpFlag != "" {
info, err := getConfigFromZebra(networkIpFlag, networkPortFlag)
if err == nil {
fmt.Println(info)
cmdSent = true
}
}
if strings.Contains(zebraCmdFlag, "diag") && networkIpFlag != "" {
info, err := getDiagFromZebra(networkIpFlag, networkPortFlag)
if err == nil {
fmt.Println(info)
cmdSent = true
}
}
return cmdSent
}
func main() {
var filenameFlag string
var zebraCmdFlag string
var graphicTypeFlag string
var imageEditFlag string
var networkIpFlag string
var networkPortFlag string
var imageResizeFlag float64
var graphicType zplgfa.GraphicType
flag.StringVar(&filenameFlag, "file", "", "filename to convert to zpl")
flag.StringVar(&zebraCmdFlag, "cmd", "", "send special command to printer [cancel,calib,feed,info,config,diag]")
flag.StringVar(&graphicTypeFlag, "type", "CompressedASCII", "type of graphic field encoding")
flag.StringVar(&imageEditFlag, "edit", "", "manipulate the image [invert,monochrome]")
flag.StringVar(&networkIpFlag, "ip", "", "send zpl to printer")
flag.StringVar(&networkPortFlag, "port", "9100", "network port of printer")
flag.Float64Var(&imageResizeFlag, "resize", 1.0, "zoom/resize the image")
// load flag input arguments
flag.Parse()
// send special commands to printer
cmdSent := specialCmds(zebraCmdFlag, networkIpFlag, networkPortFlag)
// check input parameter // check input parameter
if filenameFlag == "" { if filenameFlag == "" {

View File

@@ -1,8 +1,10 @@
package main package main
import ( import (
"bufio"
"fmt" "fmt"
"net" "net"
"time"
) )
func sendDataToZebra(ip, port, str string) error { func sendDataToZebra(ip, port, str string) error {
@@ -25,3 +27,82 @@ func sendFeedCmdToZebra(ip, port string) error {
func sendCalibCmdToZebra(ip, port string) error { func sendCalibCmdToZebra(ip, port string) error {
return sendDataToZebra(ip, port, "~jc^xa^jus^xz") return sendDataToZebra(ip, port, "~jc^xa^jus^xz")
} }
func sendCancelCmdToZebra(ip, port string) error {
return sendDataToZebra(ip, port, "~ja")
}
func getInfoFromZebra(ip, port string) (string, error) {
tcpAddr, err := net.ResolveTCPAddr("tcp", ip+":"+port)
conn, err := net.DialTCP("tcp4", nil, tcpAddr)
if err == nil {
defer conn.Close()
reader := bufio.NewReader(conn)
conn.Write([]byte(fmt.Sprintf("%s\r\n\r\n", "~HI")))
message0, err := reader.ReadString('\n')
if err != nil {
return "", err
}
conn.Write([]byte(fmt.Sprintf("%s\r\n\r\n", "~HS")))
message1, err := reader.ReadString('\n')
if err != nil {
return "", err
}
message2, err := reader.ReadString('\n')
if err != nil {
return "", err
}
message3, err := reader.ReadString('\n')
if err != nil {
return "", err
}
return fmt.Sprint(message0, message1, message2, message3), err
}
return "", err
}
func getTerminalOutputFromZebra(ip, port, cmd string) (string, error) {
var config string
var lastInput time.Time
tcpAddr, err := net.ResolveTCPAddr("tcp", ip+":"+port)
conn, err := net.DialTCP("tcp4", nil, tcpAddr)
if err == nil {
defer conn.Close()
conn.Write([]byte(fmt.Sprintf("%s\r\n\r\n", cmd)))
scanner := bufio.NewScanner(conn)
ticker := time.NewTicker(300 * time.Millisecond)
input := make(chan string)
go func(scanner *bufio.Scanner, input chan string) {
for scanner.Scan() {
input <- scanner.Text()
}
}(scanner, input)
for {
select {
case i := <-input:
config += fmt.Sprintln(i)
lastInput = time.Now()
case <-ticker.C:
if time.Since(lastInput) > time.Duration(50*time.Millisecond) {
return config, nil
}
}
}
}
return "", err
}
func getConfigFromZebra(ip, port string) (string, error) {
return getTerminalOutputFromZebra(ip, port, "^XA^HH^XZ")
}
func getDiagFromZebra(ip, port string) (string, error) {
return getTerminalOutputFromZebra(ip, port, "~HD")
}