| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package main
- import (
- "fmt"
- "log"
- "net"
- "os"
- "strconv"
- "strings"
- )
- func main() {
- const BrotherPort int = 54921
- BrotherIP := os.Args[1]
- resolution := os.Args[2]
- color := os.Args[3]
- if net.ParseIP(BrotherIP) == nil {
- fmt.Fprintf(os.Stderr, "Invalid IP address. Usage: %s <scanner ip>", os.Args[0])
- os.Exit(0)
- }
- log.Println("Valid IP address, opening socket...")
- conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", BrotherIP, BrotherPort))
- handleError(err)
- sendRequest(conn, resolution, color)
- defer conn.Close()
- }
- func sendRequest(conn net.Conn, _resolution string, _mode string) {
- reply := make([]byte, 128)
- resolution := checkResolution(_resolution)
- mode, compression := checkMode(_mode)
- log.Println("Reading scanner status...")
- _, err := conn.Read(reply)
- handleError(err)
- if "+OK 200" != string(reply[:7]) {
- handleError(fmt.Errorf("Invalid reply from scanner: %s", reply))
- }
- log.Println("Leasing options...")
- resp := []byte(fmt.Sprintf("\x1bI\nR=%d,%d\nM=%s\n\x80", resolution, resolution, mode))
- _, err = conn.Write(resp)
- handleError(err)
- _, err = conn.Read(reply)
- handleError(err)
- response := strings.Split(string(reply), ",")
- log.Println("Sending scan request...")
- scanRequestFormat := "\x1bX\nR=%v,%v\nM=%s\nC=%s\nJ=MID\nB=50\nN=50\nA=0,0,%v,%v\n\x80"
- resp = []byte(fmt.Sprintf(scanRequestFormat, response[1], response[1], mode, compression, response[5], response[6]))
- _, err = conn.Write(resp)
- handleError(err)
- }
- func checkResolution(_resolution string) int {
- resolution, err := strconv.Atoi(_resolution)
- if err != nil && resolution < 100 {
- resolution = 300
- }
- return resolution
- }
- func checkMode(_mode string) (string, string) {
- if _mode == "GRAY64" {
- return _mode, "NONE"
- } else {
- return "CGRAY", "JPEG"
- }
- }
- func handleError(err error) {
- if err != nil {
- log.Fatal(err)
- os.Exit(1)
- }
- }
|