1141cc406Sopenharmony_ci/* sane - Scanner Access Now Easy. 2141cc406Sopenharmony_ci Copyright (C) 1996, 1997 David Mosberger-Tang 3141cc406Sopenharmony_ci Copyright (C) 1997 R.E.Wolff@BitWizard.nl 4141cc406Sopenharmony_ci 5141cc406Sopenharmony_ci This file is part of the SANE package. 6141cc406Sopenharmony_ci 7141cc406Sopenharmony_ci This program is free software; you can redistribute it and/or 8141cc406Sopenharmony_ci modify it under the terms of the GNU General Public License as 9141cc406Sopenharmony_ci published by the Free Software Foundation; either version 2 of the 10141cc406Sopenharmony_ci License, or (at your option) any later version. 11141cc406Sopenharmony_ci 12141cc406Sopenharmony_ci This program is distributed in the hope that it will be useful, but 13141cc406Sopenharmony_ci WITHOUT ANY WARRANTY; without even the implied warranty of 14141cc406Sopenharmony_ci MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15141cc406Sopenharmony_ci General Public License for more details. 16141cc406Sopenharmony_ci 17141cc406Sopenharmony_ci You should have received a copy of the GNU General Public License 18141cc406Sopenharmony_ci along with this program. If not, see <https://www.gnu.org/licenses/>. 19141cc406Sopenharmony_ci 20141cc406Sopenharmony_ci */ 21141cc406Sopenharmony_ci 22141cc406Sopenharmony_ci#ifndef tamarack_h 23141cc406Sopenharmony_ci#define tamarack_h 24141cc406Sopenharmony_ci 25141cc406Sopenharmony_ci#include <sys/types.h> 26141cc406Sopenharmony_ci 27141cc406Sopenharmony_ci#define TAMARACK_FLAG_TA (1 << 3) /* transparency adapter */ 28141cc406Sopenharmony_ci 29141cc406Sopenharmony_ci 30141cc406Sopenharmony_cienum Tamarack_Option 31141cc406Sopenharmony_ci { 32141cc406Sopenharmony_ci OPT_NUM_OPTS = 0, 33141cc406Sopenharmony_ci 34141cc406Sopenharmony_ci OPT_MODE_GROUP, 35141cc406Sopenharmony_ci OPT_MODE, 36141cc406Sopenharmony_ci#define OPT_MODE_DEFAULT 2 37141cc406Sopenharmony_ci OPT_RESOLUTION, 38141cc406Sopenharmony_ci#define OPT_RESOLUTION_DEFAULT 100 39141cc406Sopenharmony_ci#if 0 40141cc406Sopenharmony_ci OPT_SPEED, 41141cc406Sopenharmony_ci OPT_SOURCE, 42141cc406Sopenharmony_ci OPT_BACKTRACK, 43141cc406Sopenharmony_ci#endif 44141cc406Sopenharmony_ci OPT_PREVIEW, 45141cc406Sopenharmony_ci OPT_GRAY_PREVIEW, 46141cc406Sopenharmony_ci 47141cc406Sopenharmony_ci OPT_GEOMETRY_GROUP, 48141cc406Sopenharmony_ci OPT_TL_X, /* top-left x */ 49141cc406Sopenharmony_ci OPT_TL_Y, /* top-left y */ 50141cc406Sopenharmony_ci OPT_BR_X, /* bottom-right x */ 51141cc406Sopenharmony_ci OPT_BR_Y, /* bottom-right y */ 52141cc406Sopenharmony_ci 53141cc406Sopenharmony_ci OPT_ENHANCEMENT_GROUP, 54141cc406Sopenharmony_ci OPT_TRANS, 55141cc406Sopenharmony_ci OPT_BRIGHTNESS, 56141cc406Sopenharmony_ci OPT_CONTRAST, 57141cc406Sopenharmony_ci OPT_THRESHOLD, 58141cc406Sopenharmony_ci#if 0 59141cc406Sopenharmony_ci OPT_CUSTOM_GAMMA, /* use custom gamma tables? */ 60141cc406Sopenharmony_ci /* The gamma vectors MUST appear in the order gray, red, green, 61141cc406Sopenharmony_ci blue. */ 62141cc406Sopenharmony_ci OPT_GAMMA_VECTOR, 63141cc406Sopenharmony_ci OPT_GAMMA_VECTOR_R, 64141cc406Sopenharmony_ci OPT_GAMMA_VECTOR_G, 65141cc406Sopenharmony_ci OPT_GAMMA_VECTOR_B, 66141cc406Sopenharmony_ci 67141cc406Sopenharmony_ci OPT_HALFTONE_DIMENSION, 68141cc406Sopenharmony_ci OPT_HALFTONE_PATTERN, 69141cc406Sopenharmony_ci#endif 70141cc406Sopenharmony_ci 71141cc406Sopenharmony_ci /* must come last: */ 72141cc406Sopenharmony_ci NUM_OPTIONS 73141cc406Sopenharmony_ci }; 74141cc406Sopenharmony_ci 75141cc406Sopenharmony_ci 76141cc406Sopenharmony_ci 77141cc406Sopenharmony_citypedef struct Tamarack_Device 78141cc406Sopenharmony_ci { 79141cc406Sopenharmony_ci struct Tamarack_Device *next; 80141cc406Sopenharmony_ci SANE_Device sane; 81141cc406Sopenharmony_ci SANE_Range dpi_range; 82141cc406Sopenharmony_ci SANE_Range x_range; 83141cc406Sopenharmony_ci SANE_Range y_range; 84141cc406Sopenharmony_ci unsigned flags; 85141cc406Sopenharmony_ci } 86141cc406Sopenharmony_ci 87141cc406Sopenharmony_ciTamarack_Device; 88141cc406Sopenharmony_ci 89141cc406Sopenharmony_citypedef struct Tamarack_Scanner 90141cc406Sopenharmony_ci { 91141cc406Sopenharmony_ci /* all the state needed to define a scan request: */ 92141cc406Sopenharmony_ci struct Tamarack_Scanner *next; 93141cc406Sopenharmony_ci 94141cc406Sopenharmony_ci SANE_Option_Descriptor opt[NUM_OPTIONS]; 95141cc406Sopenharmony_ci Option_Value val[NUM_OPTIONS]; 96141cc406Sopenharmony_ci SANE_Int gamma_table[4][256]; 97141cc406Sopenharmony_ci#if 0 98141cc406Sopenharmony_ci SANE_Int halftone_pattern[64]; 99141cc406Sopenharmony_ci#endif 100141cc406Sopenharmony_ci 101141cc406Sopenharmony_ci int scanning; 102141cc406Sopenharmony_ci int pass; /* pass number */ 103141cc406Sopenharmony_ci int line; /* current line number */ 104141cc406Sopenharmony_ci SANE_Parameters params; 105141cc406Sopenharmony_ci 106141cc406Sopenharmony_ci /* Parsed option values and variables that are valid only during 107141cc406Sopenharmony_ci actual scanning: */ 108141cc406Sopenharmony_ci int mode; 109141cc406Sopenharmony_ci#if 0 110141cc406Sopenharmony_ci int one_pass_color_scan; 111141cc406Sopenharmony_ci int resolution_code; 112141cc406Sopenharmony_ci#endif 113141cc406Sopenharmony_ci int fd; /* SCSI filedescriptor */ 114141cc406Sopenharmony_ci SANE_Pid reader_pid; /* process id of reader */ 115141cc406Sopenharmony_ci int pipe; /* pipe to reader process */ 116141cc406Sopenharmony_ci int reader_pipe; /* pipe from reader process */ 117141cc406Sopenharmony_ci 118141cc406Sopenharmony_ci /* scanner dependent/low-level state: */ 119141cc406Sopenharmony_ci Tamarack_Device *hw; 120141cc406Sopenharmony_ci 121141cc406Sopenharmony_ci#if 0 122141cc406Sopenharmony_ci /* line-distance correction related state: */ 123141cc406Sopenharmony_ci struct 124141cc406Sopenharmony_ci { 125141cc406Sopenharmony_ci int max_value; 126141cc406Sopenharmony_ci int peak_res; 127141cc406Sopenharmony_ci struct 128141cc406Sopenharmony_ci { 129141cc406Sopenharmony_ci int dist; /* line distance */ 130141cc406Sopenharmony_ci int Qk; 131141cc406Sopenharmony_ci } 132141cc406Sopenharmony_ci c[3]; 133141cc406Sopenharmony_ci /* these are used in the MLD_MFS mode only: */ 134141cc406Sopenharmony_ci char *red_buf; 135141cc406Sopenharmony_ci char *green_buf; 136141cc406Sopenharmony_ci } 137141cc406Sopenharmony_ci ld; 138141cc406Sopenharmony_ci#endif 139141cc406Sopenharmony_ci } 140141cc406Sopenharmony_ciTamarack_Scanner; 141141cc406Sopenharmony_ci 142141cc406Sopenharmony_ci 143141cc406Sopenharmony_ci 144141cc406Sopenharmony_ci#define TAM_ADF_ON 0x80 145141cc406Sopenharmony_ci#define TAM_DOUBLE_ON 0x40 146141cc406Sopenharmony_ci#define TAM_TRANS_ON 0x20 147141cc406Sopenharmony_ci 148141cc406Sopenharmony_ci#define TAM_INVERSE_ON 0x20 149141cc406Sopenharmony_ci 150141cc406Sopenharmony_ci 151141cc406Sopenharmony_ci 152141cc406Sopenharmony_ci 153141cc406Sopenharmony_ci#define THRESHOLDED 0 154141cc406Sopenharmony_ci#define DITHERED 1 155141cc406Sopenharmony_ci#define GREYSCALE 2 156141cc406Sopenharmony_ci#define TRUECOLOR 3 157141cc406Sopenharmony_ci 158141cc406Sopenharmony_ci 159141cc406Sopenharmony_ci 160141cc406Sopenharmony_ci/* Some Tamarack driver internal defines */ 161141cc406Sopenharmony_ci#define WINID 0 162141cc406Sopenharmony_ci 163141cc406Sopenharmony_ci 164141cc406Sopenharmony_ci/* SCSI commands that the Tamarack scanners understand: */ 165141cc406Sopenharmony_ci 166141cc406Sopenharmony_ci#define TAMARACK_SCSI_TEST_UNIT_READY 0x00 167141cc406Sopenharmony_ci#define TAMARACK_SCSI_INQUIRY 0x12 168141cc406Sopenharmony_ci#define TAMARACK_SCSI_MODE_SELECT 0x15 169141cc406Sopenharmony_ci#define TAMARACK_SCSI_START_STOP 0x1b 170141cc406Sopenharmony_ci#define TAMARACK_SCSI_AREA_AND_WINDOWS 0x24 171141cc406Sopenharmony_ci#define TAMARACK_SCSI_READ_SCANNED_DATA 0x28 172141cc406Sopenharmony_ci#define TAMARACK_SCSI_GET_DATA_STATUS 0x34 173141cc406Sopenharmony_ci 174141cc406Sopenharmony_ci 175141cc406Sopenharmony_ci/* The structures that you have to send to the tamarack to get it to 176141cc406Sopenharmony_ci do various stuff... */ 177141cc406Sopenharmony_ci 178141cc406Sopenharmony_cistruct win_desc_header { 179141cc406Sopenharmony_ci unsigned char pad0[6]; 180141cc406Sopenharmony_ci unsigned char wpll[2]; 181141cc406Sopenharmony_ci}; 182141cc406Sopenharmony_ci 183141cc406Sopenharmony_ci 184141cc406Sopenharmony_cistruct win_desc_block { 185141cc406Sopenharmony_ci unsigned char winid; 186141cc406Sopenharmony_ci unsigned char pad0; 187141cc406Sopenharmony_ci unsigned char xres[2]; 188141cc406Sopenharmony_ci unsigned char yres[2]; 189141cc406Sopenharmony_ci unsigned char ulx[4]; 190141cc406Sopenharmony_ci unsigned char uly[4]; 191141cc406Sopenharmony_ci unsigned char width[4]; 192141cc406Sopenharmony_ci unsigned char length[4]; 193141cc406Sopenharmony_ci unsigned char brightness; 194141cc406Sopenharmony_ci unsigned char thresh; 195141cc406Sopenharmony_ci unsigned char contrast; 196141cc406Sopenharmony_ci unsigned char image_comp; 197141cc406Sopenharmony_ci unsigned char bpp; 198141cc406Sopenharmony_ci unsigned char halftone[2]; 199141cc406Sopenharmony_ci unsigned char pad_type; 200141cc406Sopenharmony_ci unsigned char exposure; 201141cc406Sopenharmony_ci unsigned char pad3; 202141cc406Sopenharmony_ci unsigned char compr_type; 203141cc406Sopenharmony_ci unsigned char pad4[5]; 204141cc406Sopenharmony_ci}; 205141cc406Sopenharmony_ci 206141cc406Sopenharmony_ci 207141cc406Sopenharmony_ci 208141cc406Sopenharmony_cistruct command_header { 209141cc406Sopenharmony_ci unsigned char opc; 210141cc406Sopenharmony_ci unsigned char pad0[3]; 211141cc406Sopenharmony_ci unsigned char len; 212141cc406Sopenharmony_ci unsigned char pad1; 213141cc406Sopenharmony_ci}; 214141cc406Sopenharmony_ci 215141cc406Sopenharmony_ci 216141cc406Sopenharmony_cistruct command_header_10 { 217141cc406Sopenharmony_ci unsigned char opc; 218141cc406Sopenharmony_ci unsigned char pad0[5]; 219141cc406Sopenharmony_ci unsigned char len[3]; 220141cc406Sopenharmony_ci unsigned char pad1; 221141cc406Sopenharmony_ci}; 222141cc406Sopenharmony_ci 223141cc406Sopenharmony_ci 224141cc406Sopenharmony_ci 225141cc406Sopenharmony_ci 226141cc406Sopenharmony_cistruct def_win_par { 227141cc406Sopenharmony_ci struct command_header_10 dwph; 228141cc406Sopenharmony_ci struct win_desc_header wdh; 229141cc406Sopenharmony_ci struct win_desc_block wdb; 230141cc406Sopenharmony_ci}; 231141cc406Sopenharmony_ci 232141cc406Sopenharmony_ci 233141cc406Sopenharmony_cistruct page_header{ 234141cc406Sopenharmony_ci char pad0[4]; 235141cc406Sopenharmony_ci char code; 236141cc406Sopenharmony_ci char length; 237141cc406Sopenharmony_ci}; 238141cc406Sopenharmony_ci 239141cc406Sopenharmony_ci 240141cc406Sopenharmony_ci 241141cc406Sopenharmony_cistruct tamarack_page { 242141cc406Sopenharmony_ci char gamma; 243141cc406Sopenharmony_ci unsigned char thresh; 244141cc406Sopenharmony_ci unsigned char masks; 245141cc406Sopenharmony_ci char delay; 246141cc406Sopenharmony_ci char features; 247141cc406Sopenharmony_ci char pad0; 248141cc406Sopenharmony_ci}; 249141cc406Sopenharmony_ci 250141cc406Sopenharmony_ci 251141cc406Sopenharmony_ci/* set SCSI highended variables. Declare them as an array of chars */ 252141cc406Sopenharmony_ci/* endianness-safe, int-size safe... */ 253141cc406Sopenharmony_ci#define set_double(var,val) var[0] = ((val) >> 8) & 0xff; \ 254141cc406Sopenharmony_ci var[1] = ((val) ) & 0xff; 255141cc406Sopenharmony_ci 256141cc406Sopenharmony_ci#define set_triple(var,val) var[0] = ((val) >> 16) & 0xff; \ 257141cc406Sopenharmony_ci var[1] = ((val) >> 8 ) & 0xff; \ 258141cc406Sopenharmony_ci var[2] = ((val) ) & 0xff; 259141cc406Sopenharmony_ci 260141cc406Sopenharmony_ci#define set_quad(var,val) var[0] = ((val) >> 24) & 0xff; \ 261141cc406Sopenharmony_ci var[1] = ((val) >> 16) & 0xff; \ 262141cc406Sopenharmony_ci var[2] = ((val) >> 8 ) & 0xff; \ 263141cc406Sopenharmony_ci var[3] = ((val) ) & 0xff; 264141cc406Sopenharmony_ci 265141cc406Sopenharmony_ci#endif /* tamarack_h */ 266