/* sane - Scanner Access Now Easy. Copyright (C) 1996, 1997 David Mosberger-Tang Copyright (C) 1997 R.E.Wolff@BitWizard.nl This file is part of the SANE package. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef tamarack_h #define tamarack_h #include #define TAMARACK_FLAG_TA (1 << 3) /* transparency adapter */ enum Tamarack_Option { OPT_NUM_OPTS = 0, OPT_MODE_GROUP, OPT_MODE, #define OPT_MODE_DEFAULT 2 OPT_RESOLUTION, #define OPT_RESOLUTION_DEFAULT 100 #if 0 OPT_SPEED, OPT_SOURCE, OPT_BACKTRACK, #endif OPT_PREVIEW, OPT_GRAY_PREVIEW, OPT_GEOMETRY_GROUP, OPT_TL_X, /* top-left x */ OPT_TL_Y, /* top-left y */ OPT_BR_X, /* bottom-right x */ OPT_BR_Y, /* bottom-right y */ OPT_ENHANCEMENT_GROUP, OPT_TRANS, OPT_BRIGHTNESS, OPT_CONTRAST, OPT_THRESHOLD, #if 0 OPT_CUSTOM_GAMMA, /* use custom gamma tables? */ /* The gamma vectors MUST appear in the order gray, red, green, blue. */ OPT_GAMMA_VECTOR, OPT_GAMMA_VECTOR_R, OPT_GAMMA_VECTOR_G, OPT_GAMMA_VECTOR_B, OPT_HALFTONE_DIMENSION, OPT_HALFTONE_PATTERN, #endif /* must come last: */ NUM_OPTIONS }; typedef struct Tamarack_Device { struct Tamarack_Device *next; SANE_Device sane; SANE_Range dpi_range; SANE_Range x_range; SANE_Range y_range; unsigned flags; } Tamarack_Device; typedef struct Tamarack_Scanner { /* all the state needed to define a scan request: */ struct Tamarack_Scanner *next; SANE_Option_Descriptor opt[NUM_OPTIONS]; Option_Value val[NUM_OPTIONS]; SANE_Int gamma_table[4][256]; #if 0 SANE_Int halftone_pattern[64]; #endif int scanning; int pass; /* pass number */ int line; /* current line number */ SANE_Parameters params; /* Parsed option values and variables that are valid only during actual scanning: */ int mode; #if 0 int one_pass_color_scan; int resolution_code; #endif int fd; /* SCSI filedescriptor */ SANE_Pid reader_pid; /* process id of reader */ int pipe; /* pipe to reader process */ int reader_pipe; /* pipe from reader process */ /* scanner dependent/low-level state: */ Tamarack_Device *hw; #if 0 /* line-distance correction related state: */ struct { int max_value; int peak_res; struct { int dist; /* line distance */ int Qk; } c[3]; /* these are used in the MLD_MFS mode only: */ char *red_buf; char *green_buf; } ld; #endif } Tamarack_Scanner; #define TAM_ADF_ON 0x80 #define TAM_DOUBLE_ON 0x40 #define TAM_TRANS_ON 0x20 #define TAM_INVERSE_ON 0x20 #define THRESHOLDED 0 #define DITHERED 1 #define GREYSCALE 2 #define TRUECOLOR 3 /* Some Tamarack driver internal defines */ #define WINID 0 /* SCSI commands that the Tamarack scanners understand: */ #define TAMARACK_SCSI_TEST_UNIT_READY 0x00 #define TAMARACK_SCSI_INQUIRY 0x12 #define TAMARACK_SCSI_MODE_SELECT 0x15 #define TAMARACK_SCSI_START_STOP 0x1b #define TAMARACK_SCSI_AREA_AND_WINDOWS 0x24 #define TAMARACK_SCSI_READ_SCANNED_DATA 0x28 #define TAMARACK_SCSI_GET_DATA_STATUS 0x34 /* The structures that you have to send to the tamarack to get it to do various stuff... */ struct win_desc_header { unsigned char pad0[6]; unsigned char wpll[2]; }; struct win_desc_block { unsigned char winid; unsigned char pad0; unsigned char xres[2]; unsigned char yres[2]; unsigned char ulx[4]; unsigned char uly[4]; unsigned char width[4]; unsigned char length[4]; unsigned char brightness; unsigned char thresh; unsigned char contrast; unsigned char image_comp; unsigned char bpp; unsigned char halftone[2]; unsigned char pad_type; unsigned char exposure; unsigned char pad3; unsigned char compr_type; unsigned char pad4[5]; }; struct command_header { unsigned char opc; unsigned char pad0[3]; unsigned char len; unsigned char pad1; }; struct command_header_10 { unsigned char opc; unsigned char pad0[5]; unsigned char len[3]; unsigned char pad1; }; struct def_win_par { struct command_header_10 dwph; struct win_desc_header wdh; struct win_desc_block wdb; }; struct page_header{ char pad0[4]; char code; char length; }; struct tamarack_page { char gamma; unsigned char thresh; unsigned char masks; char delay; char features; char pad0; }; /* set SCSI highended variables. Declare them as an array of chars */ /* endianness-safe, int-size safe... */ #define set_double(var,val) var[0] = ((val) >> 8) & 0xff; \ var[1] = ((val) ) & 0xff; #define set_triple(var,val) var[0] = ((val) >> 16) & 0xff; \ var[1] = ((val) >> 8 ) & 0xff; \ var[2] = ((val) ) & 0xff; #define set_quad(var,val) var[0] = ((val) >> 24) & 0xff; \ var[1] = ((val) >> 16) & 0xff; \ var[2] = ((val) >> 8 ) & 0xff; \ var[3] = ((val) ) & 0xff; #endif /* tamarack_h */