summaryrefslogtreecommitdiff
path: root/backend/tamarack.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/tamarack.h')
-rw-r--r--backend/tamarack.h267
1 files changed, 267 insertions, 0 deletions
diff --git a/backend/tamarack.h b/backend/tamarack.h
new file mode 100644
index 0000000..65697ac
--- /dev/null
+++ b/backend/tamarack.h
@@ -0,0 +1,267 @@
+/* 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 <sys/types.h>
+
+#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 */