aboutsummaryrefslogtreecommitdiff
path: root/label-exp/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'label-exp/main.go')
-rw-r--r--label-exp/main.go46
1 files changed, 10 insertions, 36 deletions
diff --git a/label-exp/main.go b/label-exp/main.go
index b530f2f..d1c203f 100644
--- a/label-exp/main.go
+++ b/label-exp/main.go
@@ -18,6 +18,7 @@ import (
"github.com/boombuler/barcode/qr"
"janouch.name/sklad/bdf"
+ "janouch.name/sklad/ql"
)
// scaler is a scaling image.Image wrapper.
@@ -233,55 +234,28 @@ func printLabel(src image.Image) error {
// ---
- // Linux usblp module, located in /drivers/usb/class/usblp.c
- // (at least that's where the trails go, I don't understand the code)
- f, err := os.OpenFile("/dev/usb/lp0", os.O_RDWR, 0)
+ printer, err := ql.Open()
if err != nil {
return err
}
- defer f.Close()
-
- // Flush any former responses in the printer's queue.
- for {
- dummy := make([]byte, 32)
- if _, err := f.Read(dummy); err == io.EOF {
- break
- }
+ if printer == nil {
+ return errors.New("no suitable printer found")
}
+ defer printer.Close()
- // Clear the print buffer.
- invalidate := make([]byte, 400)
- if _, err := f.Write(invalidate); err != nil {
+ if err := printer.Initialize(); err != nil {
return err
}
- // Initialize.
- if _, err := f.WriteString("\x1b\x40"); err != nil {
- return err
- }
-
- // Request status information.
- if _, err := f.WriteString("\x1b\x69\x53"); err != nil {
+ status, err := printer.GetStatus()
+ if err != nil {
return err
}
- // We need to poll the device.
- status := make([]byte, 32)
- for {
- if n, err := f.Read(status); err == io.EOF {
- time.Sleep(10 * time.Millisecond)
- } else if err != nil {
- return err
- } else if n < 32 {
- return errors.New("invalid read")
- } else {
- break
- }
- }
printStatusInformation(status)
// Print the prepared data.
- if _, err := f.Write(data); err != nil {
+ if _, err := printer.File.Write(data); err != nil {
return err
}
@@ -294,7 +268,7 @@ func printLabel(src image.Image) error {
if time.Now().Sub(start) > 3*time.Second {
break
}
- if n, err := f.Read(status); err == io.EOF {
+ if n, err := printer.File.Read(status); err == io.EOF {
time.Sleep(100 * time.Millisecond)
} else if err != nil {
return err