xref: /netbsd-src/sys/dev/scsipi/ss_mustek.h (revision 2a399c6883d870daece976daec6ffa7bb7f934ce)
1 /*	$NetBSD: ss_mustek.h,v 1.3 1997/08/27 11:27:07 bouyer Exp $	*/
2 
3 /*
4  * Copyright (c) 1995 Joachim Koenig-Baltes.  All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
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.
19  *
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.
30  */
31 
32 #ifndef	_SS_MUSTEK_H_
33 #define _SS_MUSTEK_H_ 1
34 
35 /*
36  * support for MUSTEK flatbed SCSI scanners MFS-06000CX and MFS-12000CX
37  * (600 and 1200 dpi horizontally resp), not conforming to the SCSI2 spec.
38  */
39 
40 /*
41  * Configuration section: describes the mode in which scanner is driven
42  * MUSTEK_INCH_SPEC: frame/window sizes are given in inches instead of
43  *     pixels, note: unit is 1/8th of an inch
44  * MUSTEK_WINDOWS: number of windows in a frame, up to 4 allowed,
45  *     not used yet, so set to 0
46  */
47 #define MUSTEK_INCH_SPEC		/* use inches to specify sizes */
48 #define MUSTEK_WINDOWS		0	/* no window support yet */
49 
50 /* mustek scsi commands */
51 #define MUSTEK_SET_WINDOW	0x04	/* set image area and windows */
52 #define MUSTEK_READ		0x08	/* read command */
53 #define MUSTEK_GET_STATUS	0x0f	/* image status */
54 #define MUSTEK_MODE_SELECT	0x15	/* set resolution, paper length, .. */
55 #define MUSTEK_ADF		0x10	/* ADF and backtracking selection */
56 #define MUSTEK_START_STOP	0x1b	/* start/stop scan */
57 #define MUSTEK_LUT		0x55	/* look up table download */
58 
59 /* the size spec is at the same bit position in different commands */
60 #define	MUSTEK_UNIT_INCHES		0x00
61 #define MUSTEK_UNIT_PIXELS		0x08
62 #ifdef MUSTEK_INCH_SPEC
63 #define MUSTEK_UNIT_SPEC	MUSTEK_UNIT_INCHES
64 #else
65 #define MUSTEK_UNIT_SPEC	MUSTEK_UNIT_PIXELS
66 #endif
67 
68 /*
69  * SCSI command formats
70  */
71 
72 struct mustek_set_window_cmd {
73 	u_int8_t opcode;		/* 0x04 */
74 	u_int8_t reserved[3];
75 	u_int8_t length;		/* in bytes */
76 	u_int8_t control;
77 };
78 
79 struct mustek_window {
80 	u_int8_t header;		/* unit-defines also apply */
81 	u_int8_t tl_x[2];		/* LSB */
82 	u_int8_t tl_y[2];
83 	u_int8_t br_x[2];
84 	u_int8_t br_y[2];
85 };
86 
87 struct mustek_set_window_data {
88 #define MUSTEK_LINEART_BACKGROUND	0x00
89 #define MUSTEK_HALFTONE_BACKGROUND	0x01
90 	struct	mustek_window frame;
91 #if MUSTEK_WINDOWS >= 1
92 #define MUSTEK_WINDOW_MASK	0x80
93 	struct	mustek_window window1;
94 #endif
95 #if MUSTEK_WINDOWS >= 2
96 	struct	mustek_window window2;
97 #endif
98 #if MUSTEK_WINDOWS >= 3
99 	struct	mustek_window window3;
100 #endif
101 #if MUSTEK_WINDOWS >= 4
102 	struct	mustek_window window4;
103 #endif
104 };
105 
106 struct mustek_read_cmd {
107 	u_int8_t opcode;		/* 0x08 */
108 	u_int8_t reserved;
109 	u_int8_t length[3];
110 	u_int8_t control;
111 };
112 
113 struct mustek_get_status_cmd {
114 	u_int8_t opcode;		/* 0x0f */
115 	u_int8_t reserved[3];
116 	u_int8_t length;		/* 0x06 */
117 	u_int8_t control;
118 };
119 
120 struct mustek_get_status_data {
121 #define MUSTEK_READY 0
122 #define MUSTEK_BUSY  -1
123 	u_int8_t ready_busy;		/* 0 = ready */
124 	u_int8_t bytes_per_line[2];	/* LSB */
125 	u_int8_t lines[3];		/* LSB */
126 };
127 
128 struct mustek_mode_select_cmd {
129 	u_int8_t opcode;		/* 0x15 */
130 	u_int8_t reserved[2];
131 	u_int8_t length[2];
132 	u_int8_t control;
133 };
134 
135 /*
136  * resolution settings:
137  *   MFS06000CX:
138  *   1% : 0x01 0x02 ... 0x64
139  *           3    6 ...  300 dpi
140  *   10%: 0x1e 0x3c 0x5a 0x14 0x32 0x50 0x0a 0x28 0x46 0x64
141  *         330  360  390  420  450  480  510  540  570  600 dpi
142  *   MFS12000CX:
143  *   1% : 0x01 0x02 ... 0x64
144  *           6   12 ...  600 dpi
145  *   10%: 0x1e 0x3c 0x5a 0x14 0x32 0x50 0x0a 0x28 0x46 0x64
146  *         660  720  780  840  900  960 1020 1080 1140 1200 dpi
147  */
148 struct mustek_mode_select_data {
149 #define MUSTEK_MODE_MASK		0x83
150 #define MUSTEK_HT_PATTERN_BUILTIN	0x00
151 #define MUSTEK_HT_PATTERN_DOWNLOADED	0x10
152 	u_int8_t mode;
153 	u_int8_t resolution;
154 	u_int8_t brightness;
155 	u_int8_t contrast;
156 	u_int8_t grain;			/* 0 = 8x8, .....  5 = 2x2  */
157 	u_int8_t velocity;		/* 0 = fast, ...., 4 = slow */
158 	u_int8_t reserved[2];
159 	u_int8_t paperlength[2];	/* LSB */
160 };
161 
162 struct mustek_start_scan_cmd {
163 	u_int8_t opcode;		/* 0x1b */
164 	u_int8_t reserved[3];
165 #define MUSTEK_SCAN_STOP	0x00
166 #define MUSTEK_SCAN_START	0x01
167 #define MUSTEK_GRAY_FILTER	0x00
168 #define MUSTEK_RED_FILTER	0x08
169 #define MUSTEK_GREEN_FILTER	0x10
170 #define MUSTEK_BLUE_FILTER	0x18
171 #define MUSTEK_GRAY_MODE	0x40
172 #define MUSTEK_BIT_MODE		0x00
173 #define MUSTEK_RES_STEP_1	0x00
174 #define MUSTEK_RES_STEP_10	0x80
175 	u_int8_t mode;
176 	u_int8_t control;
177 };
178 
179 #endif /* _SS_MUSTEK_H_ */
180