diff options
Diffstat (limited to 'label-exp/main.go')
| -rw-r--r-- | label-exp/main.go | 46 | 
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  | 
