aboutsummaryrefslogtreecommitdiff
path: root/brother-info
diff options
context:
space:
mode:
authorPřemysl Janouch <p@janouch.name>2019-04-12 02:15:28 +0200
committerPřemysl Janouch <p@janouch.name>2019-04-12 02:31:22 +0200
commitc9e5b4d1e9affe3309fc2eae2aed73bc554117b9 (patch)
tree0ce08688143cef43809fde4831639e486b8a5b43 /brother-info
parente605078d8932fd76979cad6e923257e4f190a89b (diff)
downloadsklad-c9e5b4d1e9affe3309fc2eae2aed73bc554117b9.tar.gz
sklad-c9e5b4d1e9affe3309fc2eae2aed73bc554117b9.tar.xz
sklad-c9e5b4d1e9affe3309fc2eae2aed73bc554117b9.zip
Create a package for the printer
Diffstat (limited to 'brother-info')
-rw-r--r--brother-info/main.go66
1 files changed, 9 insertions, 57 deletions
diff --git a/brother-info/main.go b/brother-info/main.go
index b65b1dc..a1584e1 100644
--- a/brother-info/main.go
+++ b/brother-info/main.go
@@ -1,10 +1,9 @@
package main
import (
- "io"
"log"
- "os"
- "time"
+
+ "janouch.name/sklad/ql"
)
func decodeBitfieldErrors(b byte, errors [8]string) []string {
@@ -19,25 +18,6 @@ func decodeBitfieldErrors(b byte, errors [8]string) []string {
// -----------------------------------------------------------------------------
-type brotherStatus struct {
- errors []string
-}
-
-// TODO: What exactly do we need? Probably extend as needed.
-func decodeStatusInformation(d []byte) brotherStatus {
- var status brotherStatus
- status.errors = append(status.errors, decodeBitfieldErrors(d[8], [8]string{
- "no media", "end of media", "cutter jam", "?", "printer in use",
- "printer turned off", "high-voltage adapter", "fan motor error"})...)
- status.errors = append(status.errors, decodeBitfieldErrors(d[9], [8]string{
- "replace media", "expansion buffer full", "communication error",
- "communication buffer full", "cover open", "cancel key",
- "media cannot be fed", "system error"})...)
- return status
-}
-
-// -----------------------------------------------------------------------------
-
func printStatusInformation(d []byte) {
if d[0] != 0x80 || d[1] != 0x20 || d[2] != 0x42 || d[3] != 0x34 {
log.Println("unexpected status fixed bytes")
@@ -157,51 +137,23 @@ func printStatusInformation(d []byte) {
}
func main() {
- // 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 {
log.Fatalln(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
- }
- }
-
- // Clear the print buffer.
- invalidate := make([]byte, 400)
- if _, err := f.Write(invalidate); err != nil {
- log.Fatalln(err)
+ if printer == nil {
+ log.Fatalln("no suitable printer found")
}
+ defer printer.Close()
- // Initialize.
- if _, err := f.WriteString("\x1b\x40"); err != nil {
+ if err := printer.Initialize(); err != nil {
log.Fatalln(err)
}
- // Request status information.
- if _, err := f.WriteString("\x1b\x69\x53"); err != nil {
+ status, err := printer.GetStatus()
+ if err != nil {
log.Fatalln(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 {
- log.Fatalln(err)
- } else if n < 32 {
- log.Fatalln("invalid read")
- } else {
- break
- }
- }
-
printStatusInformation(status)
}