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