1 /* $NetBSD: ss_mustek.h,v 1.5.48.2 2005/03/04 16:50:36 skrll Exp $ */
4 * Copyright (c) 1995 Joachim Koenig-Baltes. All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. All advertising materials mentioning features or use of this software
15 * must display the following acknowledgement:
16 * This product includes software developed by Joachim Koenig-Baltes.
17 * 4. The name of the author may not be used to endorse or promote products
18 * derived from this software without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 * support for MUSTEK flatbed SCSI scanners MFS-06000CX and MFS-12000CX
34 * (600 and 1200 dpi horizontally resp), not conforming to the SCSI2 spec.
38 * Configuration section: describes the mode in which scanner is driven
39 * MUSTEK_INCH_SPEC: frame/window sizes are given in inches instead of
40 * pixels, note: unit is 1/8th of an inch
41 * MUSTEK_WINDOWS: number of windows in a frame, up to 4 allowed,
42 * not used yet, so set to 0
44 #define MUSTEK_INCH_SPEC /* use inches to specify sizes */
45 #define MUSTEK_WINDOWS 0 /* no window support yet */
47 /* mustek scsi commands */
48 #define MUSTEK_SET_WINDOW 0x04 /* set image area and windows */
49 #define MUSTEK_READ 0x08 /* read command */
50 #define MUSTEK_GET_STATUS 0x0f /* image status */
51 #define MUSTEK_MODE_SELECT 0x15 /* set resolution, paper length, .. */
52 #define MUSTEK_ADF 0x10 /* ADF and backtracking selection */
53 #define MUSTEK_START_STOP 0x1b /* start/stop scan */
54 #define MUSTEK_LUT 0x55 /* look up table download */
56 /* the size spec is at the same bit position in different commands */
57 #define MUSTEK_UNIT_INCHES 0x00
58 #define MUSTEK_UNIT_PIXELS 0x08
59 #ifdef MUSTEK_INCH_SPEC
60 #define MUSTEK_UNIT_SPEC MUSTEK_UNIT_INCHES
62 #define MUSTEK_UNIT_SPEC MUSTEK_UNIT_PIXELS
66 * SCSI command formats
69 struct mustek_set_window_cmd
{
70 u_int8_t opcode
; /* 0x04 */
72 u_int8_t length
; /* in bytes */
76 struct mustek_window
{
77 u_int8_t header
; /* unit-defines also apply */
78 u_int8_t tl_x
[2]; /* LSB */
84 struct mustek_set_window_data
{
85 #define MUSTEK_LINEART_BACKGROUND 0x00
86 #define MUSTEK_HALFTONE_BACKGROUND 0x01
87 struct mustek_window frame
;
88 #if MUSTEK_WINDOWS >= 1
89 #define MUSTEK_WINDOW_MASK 0x80
90 struct mustek_window window1
;
92 #if MUSTEK_WINDOWS >= 2
93 struct mustek_window window2
;
95 #if MUSTEK_WINDOWS >= 3
96 struct mustek_window window3
;
98 #if MUSTEK_WINDOWS >= 4
99 struct mustek_window window4
;
103 struct mustek_read_cmd
{
104 u_int8_t opcode
; /* 0x08 */
110 struct mustek_get_status_cmd
{
111 u_int8_t opcode
; /* 0x0f */
112 u_int8_t reserved
[3];
113 u_int8_t length
; /* 0x06 */
117 struct mustek_get_status_data
{
118 #define MUSTEK_READY 0
119 #define MUSTEK_BUSY -1
120 u_int8_t ready_busy
; /* 0 = ready */
121 u_int8_t bytes_per_line
[2]; /* LSB */
122 u_int8_t lines
[3]; /* LSB */
125 struct mustek_mode_select_cmd
{
126 u_int8_t opcode
; /* 0x15 */
127 u_int8_t reserved
[2];
133 * resolution settings:
135 * 1% : 0x01 0x02 ... 0x64
137 * 10%: 0x1e 0x3c 0x5a 0x14 0x32 0x50 0x0a 0x28 0x46 0x64
138 * 330 360 390 420 450 480 510 540 570 600 dpi
140 * 1% : 0x01 0x02 ... 0x64
142 * 10%: 0x1e 0x3c 0x5a 0x14 0x32 0x50 0x0a 0x28 0x46 0x64
143 * 660 720 780 840 900 960 1020 1080 1140 1200 dpi
145 struct mustek_mode_select_data
{
146 #define MUSTEK_MODE_MASK 0x83
147 #define MUSTEK_HT_PATTERN_BUILTIN 0x00
148 #define MUSTEK_HT_PATTERN_DOWNLOADED 0x10
153 u_int8_t grain
; /* 0 = 8x8, ..... 5 = 2x2 */
154 u_int8_t velocity
; /* 0 = fast, ...., 4 = slow */
155 u_int8_t reserved
[2];
156 u_int8_t paperlength
[2]; /* LSB */
159 struct mustek_start_scan_cmd
{
160 u_int8_t opcode
; /* 0x1b */
161 u_int8_t reserved
[3];
162 #define MUSTEK_SCAN_STOP 0x00
163 #define MUSTEK_SCAN_START 0x01
164 #define MUSTEK_GRAY_FILTER 0x00
165 #define MUSTEK_RED_FILTER 0x08
166 #define MUSTEK_GREEN_FILTER 0x10
167 #define MUSTEK_BLUE_FILTER 0x18
168 #define MUSTEK_GRAY_MODE 0x40
169 #define MUSTEK_BIT_MODE 0x00
170 #define MUSTEK_RES_STEP_1 0x00
171 #define MUSTEK_RES_STEP_10 0x80