Просмотр исходного кода

chore(src): remove hardcoded constants

v0lp3 4 лет назад
Родитель
Сommit
89e4c045d0
3 измененных файлов с 67 добавлено и 20 удалено
  1. 12 16
      src/backend.go
  2. 51 0
      src/definitions.go
  3. 4 4
      src/utils.go

+ 12 - 16
src/backend.go

@@ -37,13 +37,13 @@ func sendRequest(socket net.Conn, resolution int, _mode string, adf bool) (int,
 
 
 	status := readPacket(socket)[:7]
 	status := readPacket(socket)[:7]
 
 
-	if status != "+OK 200" {
+	if status != scanner.ready {
 		HandleError(fmt.Errorf("invalid reply from scanner: %s", status))
 		HandleError(fmt.Errorf("invalid reply from scanner: %s", status))
 	}
 	}
 
 
 	log.Println("Leasing options...")
 	log.Println("Leasing options...")
 
 
-	request := []byte(fmt.Sprintf("\x1bI\nR=%d,%d\nM=%s\n\x80", resolution, resolution, mode))
+	request := []byte(fmt.Sprintf(formats.leaseRequest, resolution, resolution, mode))
 	sendPacket(socket, request)
 	sendPacket(socket, request)
 
 
 	offer := readPacket(socket)
 	offer := readPacket(socket)
@@ -51,7 +51,7 @@ func sendRequest(socket net.Conn, resolution int, _mode string, adf bool) (int,
 	if !adf {
 	if !adf {
 		log.Println("Disabling automatic document feeder (ADF)")
 		log.Println("Disabling automatic document feeder (ADF)")
 
 
-		request = []byte("\x1bD\nADF\n\x80")
+		request = []byte(formats.disableADF)
 		sendPacket(socket, request)
 		sendPacket(socket, request)
 
 
 		readPacket(socket)
 		readPacket(socket)
@@ -67,14 +67,13 @@ func sendRequest(socket net.Conn, resolution int, _mode string, adf bool) (int,
 	fmt.Sscanf(offer[3:], "%d,%d,%d,%d,%d,%d,%d", &dpiX, &dpiY, &adfStatus, &planeWidth, &width, &planeHeight, &height)
 	fmt.Sscanf(offer[3:], "%d,%d,%d,%d,%d,%d,%d", &dpiX, &dpiY, &adfStatus, &planeWidth, &width, &planeHeight, &height)
 
 
 	if planeHeight == 0 {
 	if planeHeight == 0 {
-		planeHeight = 294
+		planeHeight = scanner.A4height
 	}
 	}
 
 
 	width = mmToPixels(planeWidth, dpiX)
 	width = mmToPixels(planeWidth, dpiX)
 	height = mmToPixels(planeHeight, dpiY)
 	height = mmToPixels(planeHeight, dpiY)
 
 
-	requestFormat := "\x1bX\nR=%v,%v\nM=%s\nC=%s\nJ=MID\nB=50\nN=50\nA=0,0,%d,%d\n\x80"
-	request = []byte(fmt.Sprintf(requestFormat, dpiX, dpiY, mode, compression, width, height))
+	request = []byte(fmt.Sprintf(formats.scanRequest, dpiX, dpiY, mode, compression, width, height))
 
 
 	sendPacket(socket, request)
 	sendPacket(socket, request)
 
 
@@ -121,7 +120,7 @@ func SaveImage(data []byte, width int, height int, name string, color string) {
 
 
 	_, compression := getCompressionMode(color)
 	_, compression := getCompressionMode(color)
 
 
-	if compression != "JPEG" {
+	if compression != scanner.compression.jpeg {
 
 
 		img := image.NewGray(image.Rectangle{
 		img := image.NewGray(image.Rectangle{
 			image.Point{0, 0},
 			image.Point{0, 0},
@@ -149,8 +148,6 @@ func SaveImage(data []byte, width int, height int, name string, color string) {
 func removeHeaders(data []byte) [][]byte {
 func removeHeaders(data []byte) [][]byte {
 	log.Println("Removing headers from bytes...")
 	log.Println("Removing headers from bytes...")
 
 
-	const headerLen int = 12
-
 	pages := make([][]byte, 0)
 	pages := make([][]byte, 0)
 	page := make([]byte, 0)
 	page := make([]byte, 0)
 
 
@@ -159,11 +156,10 @@ func removeHeaders(data []byte) [][]byte {
 
 
 headersLoop:
 headersLoop:
 	for {
 	for {
-		if data[i] == 0x82 {
-			log.Println("Parsed page", currentPage)
+		if data[i] == scanner.endPage {
 			pages = append(pages, page)
 			pages = append(pages, page)
 
 
-			if len(data) > i+10 && data[i+10] == 0x80 {
+			if len(data) > i+10 && data[i+10] == scanner.endScan {
 				break headersLoop
 				break headersLoop
 			}
 			}
 
 
@@ -171,14 +167,14 @@ headersLoop:
 
 
 			currentPage++
 			currentPage++
 
 
-			i += headerLen - 2
+			i += scanner.headerLen - 2
 			continue headersLoop
 			continue headersLoop
 		}
 		}
 
 
-		payloadLen := binary.LittleEndian.Uint16(data[i+headerLen-2 : i+headerLen])
-		chunkSize := int(payloadLen) + headerLen
+		payloadLen := binary.LittleEndian.Uint16(data[i+scanner.headerLen-2 : i+scanner.headerLen])
+		chunkSize := int(payloadLen) + scanner.headerLen
 
 
-		page = append(page, data[i+headerLen:i+chunkSize]...)
+		page = append(page, data[i+scanner.headerLen:i+chunkSize]...)
 
 
 		i += chunkSize
 		i += chunkSize
 	}
 	}

+ 51 - 0
src/definitions.go

@@ -0,0 +1,51 @@
+package main
+
+type requests struct {
+	leaseRequest string
+	disableADF   string
+	scanRequest  string
+}
+
+type modes struct {
+	color     string
+	grayscale string
+}
+
+type encode struct {
+	jpeg string
+	none string
+}
+
+type constants struct {
+	ready       string
+	mode        modes
+	compression encode
+	headerLen   int
+	A4height    int
+	mmInch      float32
+	endPage     byte
+	endScan     byte
+}
+
+var scanner constants = constants{
+	ready: "+OK 200",
+	mode: modes{
+		color:     "CGRAY",
+		grayscale: "GRAY64",
+	},
+	compression: encode{
+		jpeg: "JPEG",
+		none: "NONE",
+	},
+	headerLen: 0xc,
+	A4height:  294,
+	mmInch:    25.4,
+	endPage:   0x82,
+	endScan:   0x80,
+}
+
+var formats requests = requests{
+	leaseRequest: "\x1bI\nR=%d,%d\nM=%s\n\x80",
+	disableADF:   "\x1bD\nADF\n\x80",
+	scanRequest:  "\x1bX\nR=%v,%v\nM=%s\nC=%s\nJ=MID\nB=50\nN=50\nA=0,0,%d,%d\n\x80",
+}

+ 4 - 4
src/utils.go

@@ -31,15 +31,15 @@ func HandleError(err error) {
 
 
 func getCompressionMode(_mode string) (string, string) {
 func getCompressionMode(_mode string) (string, string) {
 
 
-	if _mode == "GRAY64" {
-		return _mode, "NONE"
+	if _mode == scanner.mode.grayscale {
+		return _mode, scanner.compression.none
 	} else {
 	} else {
-		return "CGRAY", "JPEG"
+		return scanner.mode.color, scanner.compression.jpeg
 	}
 	}
 }
 }
 
 
 func mmToPixels(mm int, dpi int) int {
 func mmToPixels(mm int, dpi int) int {
-	return int(float64(mm*dpi) / 25.4)
+	return int(float32(mm*dpi) / scanner.mmInch)
 }
 }
 
 
 func colorToGray(value byte) color.Gray {
 func colorToGray(value byte) color.Gray {