root/scsi/ss_mustek.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    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_ */

/* [<][>][^][v][top][bottom][index][help] */