add more special commands
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,3 +4,4 @@ cmd/zplgfa/zplgfa
|
|||||||
zplgfa.coverprofile
|
zplgfa.coverprofile
|
||||||
coverage.html
|
coverage.html
|
||||||
test.zpl.bin*
|
test.zpl.bin*
|
||||||
|
zplgfa.exe
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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 == "" {
|
||||||
|
|||||||
@@ -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")
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user