ss_mustek.h revision 1.1 1 1.1 mycroft /* $NetBSD: ss_mustek.h,v 1.1 1996/02/18 20:32:48 mycroft Exp $ */
2 1.1 mycroft
3 1.1 mycroft /*
4 1.1 mycroft * Copyright (c) 1995 Joachim Koenig-Baltes. All rights reserved.
5 1.1 mycroft *
6 1.1 mycroft * Redistribution and use in source and binary forms, with or without
7 1.1 mycroft * modification, are permitted provided that the following conditions
8 1.1 mycroft * are met:
9 1.1 mycroft * 1. Redistributions of source code must retain the above copyright
10 1.1 mycroft * notice, this list of conditions and the following disclaimer.
11 1.1 mycroft * 2. Redistributions in binary form must reproduce the above copyright
12 1.1 mycroft * notice, this list of conditions and the following disclaimer in the
13 1.1 mycroft * documentation and/or other materials provided with the distribution.
14 1.1 mycroft * 3. All advertising materials mentioning features or use of this software
15 1.1 mycroft * must display the following acknowledgement:
16 1.1 mycroft * This product includes software developed by Joachim Koenig-Baltes.
17 1.1 mycroft * 4. The name of the author may not be used to endorse or promote products
18 1.1 mycroft * derived from this software without specific prior written permission.
19 1.1 mycroft *
20 1.1 mycroft * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 1.1 mycroft * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 1.1 mycroft * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 1.1 mycroft * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 1.1 mycroft * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 1.1 mycroft * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 1.1 mycroft * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 1.1 mycroft * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 1.1 mycroft * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 1.1 mycroft * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 1.1 mycroft */
31 1.1 mycroft
32 1.1 mycroft #ifndef _SS_MUSTEK_H_
33 1.1 mycroft #define _SS_MUSTEK_H_ 1
34 1.1 mycroft
35 1.1 mycroft /*
36 1.1 mycroft * support for MUSTEK flatbed SCSI scanners MFS-06000CX and MFS-12000CX
37 1.1 mycroft * (600 and 1200 dpi horizontally resp), not conforming to the SCSI2 spec.
38 1.1 mycroft */
39 1.1 mycroft
40 1.1 mycroft /*
41 1.1 mycroft * Configuration section: describes the mode in which scanner is driven
42 1.1 mycroft * MUSTEK_INCH_SPEC: frame/window sizes are given in inches instead of
43 1.1 mycroft * pixels, note: unit is 1/8th of an inch
44 1.1 mycroft * MUSTEK_WINDOWS: number of windows in a frame, up to 4 allowed,
45 1.1 mycroft * not used yet, so set to 0
46 1.1 mycroft */
47 1.1 mycroft #define MUSTEK_INCH_SPEC /* use inches to specify sizes */
48 1.1 mycroft #define MUSTEK_WINDOWS 0 /* no window support yet */
49 1.1 mycroft
50 1.1 mycroft /* mustek scsi commands */
51 1.1 mycroft #define MUSTEK_SET_WINDOW 0x04 /* set image area and windows */
52 1.1 mycroft #define MUSTEK_READ 0x08 /* read command */
53 1.1 mycroft #define MUSTEK_GET_STATUS 0x0f /* image status */
54 1.1 mycroft #define MUSTEK_MODE_SELECT 0x15 /* set resolution, paper length, .. */
55 1.1 mycroft #define MUSTEK_ADF 0x10 /* ADF and backtracking selection */
56 1.1 mycroft #define MUSTEK_START_STOP 0x1b /* start/stop scan */
57 1.1 mycroft #define MUSTEK_LUT 0x55 /* look up table download */
58 1.1 mycroft
59 1.1 mycroft /* the size spec is at the same bit position in different commands */
60 1.1 mycroft #define MUSTEK_UNIT_INCHES 0x00
61 1.1 mycroft #define MUSTEK_UNIT_PIXELS 0x08
62 1.1 mycroft #ifdef MUSTEK_INCH_SPEC
63 1.1 mycroft #define MUSTEK_UNIT_SPEC MUSTEK_UNIT_INCHES
64 1.1 mycroft #else
65 1.1 mycroft #define MUSTEK_UNIT_SPEC MUSTEK_UNIT_PIXELS
66 1.1 mycroft #endif
67 1.1 mycroft
68 1.1 mycroft /*
69 1.1 mycroft * SCSI command formats
70 1.1 mycroft */
71 1.1 mycroft
72 1.1 mycroft struct mustek_set_window_cmd {
73 1.1 mycroft u_char opcode; /* 0x04 */
74 1.1 mycroft u_char reserved[3];
75 1.1 mycroft u_char length; /* in bytes */
76 1.1 mycroft u_char control;
77 1.1 mycroft };
78 1.1 mycroft
79 1.1 mycroft struct mustek_set_window_data {
80 1.1 mycroft #define MUSTEK_LINEART_BACKGROUND 0x00
81 1.1 mycroft #define MUSTEK_HALFTONE_BACKGROUND 0x01
82 1.1 mycroft u_char frame_header; /* unit-defines also apply */
83 1.1 mycroft u_char frame_tl_x_0;
84 1.1 mycroft u_char frame_tl_x_1;
85 1.1 mycroft u_char frame_tl_y_0;
86 1.1 mycroft u_char frame_tl_y_1;
87 1.1 mycroft u_char frame_br_x_0;
88 1.1 mycroft u_char frame_br_x_1;
89 1.1 mycroft u_char frame_br_y_0;
90 1.1 mycroft u_char frame_br_y_1;
91 1.1 mycroft #if MUSTEK_WINDOWS >= 1
92 1.1 mycroft #define MUSTEK_WINDOW_MASK 0x80
93 1.1 mycroft u_char window1_header; /* unit-defines also apply */
94 1.1 mycroft u_char window1_tl_x_0;
95 1.1 mycroft u_char window1_tl_x_1;
96 1.1 mycroft u_char window1_tl_y_0;
97 1.1 mycroft u_char window1_tl_y_1;
98 1.1 mycroft u_char window1_br_x_0;
99 1.1 mycroft u_char window1_br_x_1;
100 1.1 mycroft u_char window1_br_y_0;
101 1.1 mycroft u_char window1_br_y_1;
102 1.1 mycroft #endif
103 1.1 mycroft #if MUSTEK_WINDOWS >= 2
104 1.1 mycroft u_char window2_header;
105 1.1 mycroft u_char window2_tl_x_0;
106 1.1 mycroft u_char window2_tl_x_1;
107 1.1 mycroft u_char window2_tl_y_0;
108 1.1 mycroft u_char window2_tl_y_1;
109 1.1 mycroft u_char window2_br_x_0;
110 1.1 mycroft u_char window2_br_x_1;
111 1.1 mycroft u_char window2_br_y_0;
112 1.1 mycroft u_char window2_br_y_1;
113 1.1 mycroft #endif
114 1.1 mycroft #if MUSTEK_WINDOWS >= 3
115 1.1 mycroft u_char window3_header;
116 1.1 mycroft u_char window3_tl_x_0;
117 1.1 mycroft u_char window3_tl_x_1;
118 1.1 mycroft u_char window3_tl_y_0;
119 1.1 mycroft u_char window3_tl_y_1;
120 1.1 mycroft u_char window3_br_x_0;
121 1.1 mycroft u_char window3_br_x_1;
122 1.1 mycroft u_char window3_br_y_0;
123 1.1 mycroft u_char window3_br_y_1;
124 1.1 mycroft #endif
125 1.1 mycroft #if MUSTEK_WINDOWS == 4
126 1.1 mycroft u_char window4_header;
127 1.1 mycroft u_char window4_tl_x_0;
128 1.1 mycroft u_char window4_tl_x_1;
129 1.1 mycroft u_char window4_tl_y_0;
130 1.1 mycroft u_char window4_tl_y_1;
131 1.1 mycroft u_char window4_br_x_0;
132 1.1 mycroft u_char window4_br_x_1;
133 1.1 mycroft u_char window4_br_y_0;
134 1.1 mycroft u_char window4_br_y_1;
135 1.1 mycroft #endif
136 1.1 mycroft };
137 1.1 mycroft
138 1.1 mycroft struct mustek_read_cmd {
139 1.1 mycroft u_char opcode; /* 0x08 */
140 1.1 mycroft u_char reserved;
141 1.1 mycroft u_char length_2; /* number of LINES to be read (MSB) */
142 1.1 mycroft u_char length_1; /* number of LINES to be read */
143 1.1 mycroft u_char length_0; /* number of LINES to be read (LSB) */
144 1.1 mycroft u_char control;
145 1.1 mycroft };
146 1.1 mycroft
147 1.1 mycroft struct mustek_get_status_cmd {
148 1.1 mycroft u_char opcode; /* 0x0f */
149 1.1 mycroft u_char reserved[3];
150 1.1 mycroft u_char length; /* 0x06 */
151 1.1 mycroft u_char control;
152 1.1 mycroft };
153 1.1 mycroft
154 1.1 mycroft struct mustek_get_status_data {
155 1.1 mycroft #define MUSTEK_READY 0
156 1.1 mycroft #define MUSTEK_BUSY -1
157 1.1 mycroft u_char ready_busy; /* 0 = ready */
158 1.1 mycroft u_char bytes_per_line_0; /* LSB */
159 1.1 mycroft u_char bytes_per_line_1; /* MSB */
160 1.1 mycroft u_char lines_0; /* LSB */
161 1.1 mycroft u_char lines_1;
162 1.1 mycroft u_char lines_2; /* MSB */
163 1.1 mycroft };
164 1.1 mycroft
165 1.1 mycroft struct mustek_mode_select_cmd {
166 1.1 mycroft u_char opcode; /* 0x15 */
167 1.1 mycroft u_char reserved[2];
168 1.1 mycroft u_char length_1; /* MSB */
169 1.1 mycroft u_char length_0; /* LSB */
170 1.1 mycroft u_char control;
171 1.1 mycroft };
172 1.1 mycroft
173 1.1 mycroft /*
174 1.1 mycroft * resolution settings:
175 1.1 mycroft * MFS06000CX:
176 1.1 mycroft * 1% : 0x01 0x02 ... 0x64
177 1.1 mycroft * 3 6 ... 300 dpi
178 1.1 mycroft * 10%: 0x1e 0x3c 0x5a 0x14 0x32 0x50 0x0a 0x28 0x46 0x64
179 1.1 mycroft * 330 360 390 420 450 480 510 540 570 600 dpi
180 1.1 mycroft * MFS12000CX:
181 1.1 mycroft * 1% : 0x01 0x02 ... 0x64
182 1.1 mycroft * 6 12 ... 600 dpi
183 1.1 mycroft * 10%: 0x1e 0x3c 0x5a 0x14 0x32 0x50 0x0a 0x28 0x46 0x64
184 1.1 mycroft * 660 720 780 840 900 960 1020 1080 1140 1200 dpi
185 1.1 mycroft */
186 1.1 mycroft struct mustek_mode_select_data {
187 1.1 mycroft #define MUSTEK_MODE_MASK 0x83
188 1.1 mycroft #define MUSTEK_HT_PATTERN_BUILTIN 0x00
189 1.1 mycroft #define MUSTEK_HT_PATTERN_DOWNLOADED 0x10
190 1.1 mycroft u_char mode;
191 1.1 mycroft u_char resolution;
192 1.1 mycroft u_char brightness;
193 1.1 mycroft u_char contrast;
194 1.1 mycroft u_char grain; /* 0 = 8x8, ..... 5 = 2x2 */
195 1.1 mycroft u_char velocity; /* 0 = fast, ...., 4 = slow */
196 1.1 mycroft u_char reserved[2];
197 1.1 mycroft u_char paperlength_0; /* LSB */
198 1.1 mycroft u_char paperlength_1; /* MSB */
199 1.1 mycroft };
200 1.1 mycroft
201 1.1 mycroft struct mustek_start_scan_cmd {
202 1.1 mycroft u_char opcode; /* 0x1b */
203 1.1 mycroft u_char reserved[3];
204 1.1 mycroft #define MUSTEK_SCAN_STOP 0x00
205 1.1 mycroft #define MUSTEK_SCAN_START 0x01
206 1.1 mycroft #define MUSTEK_GRAY_FILTER 0x00
207 1.1 mycroft #define MUSTEK_RED_FILTER 0x08
208 1.1 mycroft #define MUSTEK_GREEN_FILTER 0x10
209 1.1 mycroft #define MUSTEK_BLUE_FILTER 0x18
210 1.1 mycroft #define MUSTEK_GRAY_MODE 0x40
211 1.1 mycroft #define MUSTEK_BIT_MODE 0x00
212 1.1 mycroft #define MUSTEK_RES_STEP_1 0x00
213 1.1 mycroft #define MUSTEK_RES_STEP_10 0x80
214 1.1 mycroft u_char mode;
215 1.1 mycroft u_char control;
216 1.1 mycroft };
217 1.1 mycroft
218 1.1 mycroft #endif /* _SS_MUSTEK_H_ */
219