kopia lustrzana https://gitlab.com/sane-project/backends
307 wiersze
9.5 KiB
C
307 wiersze
9.5 KiB
C
/* epson.h - SANE library for Epson flatbed scanners.
|
|
|
|
based on Kazuhiro Sasayama previous
|
|
Work on epson.[ch] file from the SANE package.
|
|
|
|
original code taken from sane-0.71
|
|
Copyright (C) 1997 Hypercore Software Design, Ltd.
|
|
|
|
modifications
|
|
Copyright (C) 1998-1999 Christian Bucher <bucher@vernetzt.at>
|
|
Copyright (C) 1998-1999 Kling & Hautzinger GmbH
|
|
Copyright (C) 1999 Norihiko Sawa <sawa@yb3.so-net.ne.jp>
|
|
Copyright (C) 2000 Karl Heinz Kremer <khk@khk.net>
|
|
|
|
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.
|
|
|
|
As a special exception, the authors of SANE give permission for
|
|
additional uses of the libraries contained in this release of SANE.
|
|
|
|
The exception is that, if you link a SANE library with other files
|
|
to produce an executable, this does not by itself cause the
|
|
resulting executable to be covered by the GNU General Public
|
|
License. Your use of that executable is in no way restricted on
|
|
account of linking the SANE library code into it.
|
|
|
|
This exception does not, however, invalidate any other reasons why
|
|
the executable file might be covered by the GNU General Public
|
|
License.
|
|
|
|
If you submit changes to SANE to the maintainers to be included in
|
|
a subsequent release, you agree by submitting the changes that
|
|
those changes may be distributed with this exception intact.
|
|
|
|
If you write modifications of your own for SANE, it is your choice
|
|
whether to permit this exception to apply to your modifications.
|
|
If you do not wish that, delete this exception notice. */
|
|
|
|
#ifndef epson_h
|
|
#define epson_h
|
|
|
|
#include <sys/ioctl.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
/* some string constants that are used in the config file */
|
|
|
|
#define SANE_EPSON_CONFIG_USB "usb"
|
|
#define SANE_EPSON_CONFIG_PIO "pio"
|
|
|
|
/* for experimental IOCTL support */
|
|
#ifdef TEST_IOCTL
|
|
#define IOCTL_SCANNER_VENDOR _IOR('u', 0xa0, int)
|
|
#define IOCTL_SCANNER_PRODUCT _IOR('u', 0xa1, int)
|
|
|
|
#define SANE_EPSON_VENDOR_ID (0x4b8)
|
|
#define PRODUCT_PERFECTION_636 (0x101)
|
|
#define PRODUCT_PERFECTION_610 (0x103)
|
|
#define PRODUCT_PERFECTION_640 (0x10c)
|
|
#define PRODUCT_PERFECTION_1200 (0x104)
|
|
#define PRODUCT_PERFECTION_1240 (0x10b)
|
|
#define PRODUCT_STYLUS_SCAN_2500 (0x106)
|
|
#define PRODUCT_PERFECTION_1640 (0x10a)
|
|
#define PRODUCT_EXPRESSION_1600 (0x107)
|
|
#define PRODUCT_EXPRESSION_1680 (0x10e)
|
|
#define PRODUCT_PERFECTION_1650 (0x110)
|
|
#define PRODUCT_PERFECTION_2450 (0x112)
|
|
#endif
|
|
|
|
/* string constants for GUI elements that are not defined SANE-wide */
|
|
|
|
#define SANE_NAME_GAMMA_CORRECTION "gamma-correction"
|
|
#define SANE_TITLE_GAMMA_CORRECTION SANE_I18N("Gamma Correction")
|
|
#define SANE_DESC_GAMMA_CORRECTION SANE_I18N("Selectes the gamma correction value from a list of pre-defined devices or the user defined table, which can be downloaded to the scanner")
|
|
|
|
#define SANE_EPSON_FOCUS_NAME "focus-position"
|
|
#define SANE_EPSON_FOCUS_TITLE SANE_I18N("Focus Position")
|
|
#define SANE_EPSON_FOCUS_DESC SANE_I18N("Sets the focus position to either the glass or 2.5mm above the glass")
|
|
#define SANE_EPSON_WAIT_FOR_BUTTON_NAME "wait-for-button"
|
|
#define SANE_EPSON_WAIT_FOR_BUTTON_TITLE SANE_I18N("Wait for Button")
|
|
#define SANE_EPSON_WAIT_FOR_BUTTON_DESC SANE_I18N("After sending the scan command, wait until the button on the scanner is pressed to actually start the scan process.");
|
|
|
|
|
|
#define LINES_SHUFFLE_MAX (17) /* 2 x 8 lines plus 1 */
|
|
|
|
typedef struct {
|
|
char * level;
|
|
|
|
unsigned char request_identity;
|
|
unsigned char request_identity2; /* new request identity command for Dx command level */
|
|
unsigned char request_status;
|
|
unsigned char request_condition;
|
|
unsigned char set_color_mode;
|
|
unsigned char start_scanning;
|
|
unsigned char set_data_format;
|
|
unsigned char set_resolution;
|
|
unsigned char set_zoom;
|
|
unsigned char set_scan_area;
|
|
unsigned char set_bright;
|
|
SANE_Range bright_range;
|
|
unsigned char set_gamma;
|
|
unsigned char set_halftoning;
|
|
unsigned char set_color_correction;
|
|
unsigned char initialize_scanner;
|
|
unsigned char set_speed; /* B4 and later */
|
|
unsigned char set_lcount;
|
|
unsigned char mirror_image; /* B5 and later */
|
|
unsigned char set_gamma_table; /* B4 and later */
|
|
unsigned char set_outline_emphasis; /* B4 and later */
|
|
unsigned char set_dither; /* B4 and later */
|
|
unsigned char set_color_correction_coefficients; /* B3 and later */
|
|
unsigned char request_extension_status; /* for extension control */
|
|
unsigned char control_an_extension; /* for extension control */
|
|
unsigned char eject; /* for extension control */
|
|
unsigned char request_push_button_status;
|
|
unsigned char control_auto_area_segmentation;
|
|
unsigned char set_film_type; /* for extension control */
|
|
unsigned char set_exposure_time; /* F5 only */
|
|
unsigned char set_bay; /* F5 only */
|
|
unsigned char set_threshold;
|
|
unsigned char set_focus_position; /* B8 only */
|
|
unsigned char request_focus_position; /* B8 only */
|
|
} EpsonCmdRec, * EpsonCmd;
|
|
|
|
enum
|
|
{ OPT_NUM_OPTS = 0
|
|
, OPT_MODE_GROUP
|
|
, OPT_MODE
|
|
, OPT_BIT_DEPTH
|
|
, OPT_HALFTONE
|
|
, OPT_DROPOUT
|
|
, OPT_BRIGHTNESS
|
|
, OPT_SHARPNESS
|
|
, OPT_GAMMA_CORRECTION
|
|
, OPT_COLOR_CORRECTION
|
|
, OPT_RESOLUTION
|
|
, OPT_THRESHOLD
|
|
, OPT_ADVANCED_GROUP
|
|
, OPT_MIRROR
|
|
, OPT_SPEED
|
|
, OPT_AAS
|
|
, OPT_ZOOM
|
|
/* , OPT_GAMMA_VECTOR */
|
|
, OPT_GAMMA_VECTOR_R
|
|
, OPT_GAMMA_VECTOR_G
|
|
, OPT_GAMMA_VECTOR_B
|
|
, OPT_WAIT_FOR_BUTTON
|
|
, OPT_CCT_GROUP
|
|
, OPT_CCT_1
|
|
, OPT_CCT_2
|
|
, OPT_CCT_3
|
|
, OPT_CCT_4
|
|
, OPT_CCT_5
|
|
, OPT_CCT_6
|
|
, OPT_CCT_7
|
|
, OPT_CCT_8
|
|
, OPT_CCT_9
|
|
, OPT_PREVIEW_GROUP
|
|
, OPT_PREVIEW
|
|
, OPT_PREVIEW_SPEED
|
|
, OPT_GEOMETRY_GROUP
|
|
, OPT_TL_X
|
|
, OPT_TL_Y
|
|
, OPT_BR_X
|
|
, OPT_BR_Y
|
|
, OPT_QUICK_FORMAT
|
|
, OPT_EQU_GROUP
|
|
, OPT_SOURCE
|
|
, OPT_AUTO_EJECT
|
|
, OPT_FILM_TYPE
|
|
, OPT_FOCUS
|
|
, OPT_BAY
|
|
, OPT_EJECT
|
|
, NUM_OPTIONS
|
|
};
|
|
|
|
typedef enum { /* hardware connection to the scanner */
|
|
SANE_EPSON_NODEV, /* default, no HW specified yet */
|
|
SANE_EPSON_SCSI, /* SCSI interface */
|
|
SANE_EPSON_PIO, /* parallel interface */
|
|
SANE_EPSON_USB /* USB interface */
|
|
} Epson_Connection_Type;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
u_short opt_resolution;
|
|
u_char sensor;
|
|
u_char scan_order;
|
|
u_char line_dist1;
|
|
u_char line_dist2;
|
|
|
|
u_short main_res1;
|
|
u_short main_res2;
|
|
u_short main_res3;
|
|
u_short main_res4;
|
|
u_short main_res5;
|
|
u_short main_res6;
|
|
u_short main_res7;
|
|
|
|
u_short sub_res1;
|
|
u_short sub_res2;
|
|
u_short sub_res3;
|
|
u_short sub_res4;
|
|
u_short sub_res5;
|
|
u_short sub_res6;
|
|
} Epson_Identity2;
|
|
|
|
|
|
struct Epson_Device {
|
|
struct Epson_Device *next;
|
|
SANE_Device sane;
|
|
SANE_Int level;
|
|
SANE_Range dpi_range;
|
|
|
|
SANE_Range * x_range; /* x range w/out extension */
|
|
SANE_Range * y_range; /* y range w/out extension */
|
|
|
|
SANE_Range fbf_x_range; /* flattbed x range */
|
|
SANE_Range fbf_y_range; /* flattbed y range */
|
|
SANE_Range adf_x_range; /* autom. document feeder x range */
|
|
SANE_Range adf_y_range; /* autom. document feeder y range */
|
|
SANE_Range tpu_x_range; /* transparency unit x range */
|
|
SANE_Range tpu_y_range; /* transparency unit y range */
|
|
|
|
Epson_Connection_Type connection;
|
|
/* hardware interface type */
|
|
|
|
SANE_Int *res_list; /* list of resolutions */
|
|
SANE_Int res_list_size; /* number of entries in this list */
|
|
SANE_Int last_res; /* last selected resolution */
|
|
SANE_Int last_res_preview; /* last selected preview resolution */
|
|
|
|
SANE_Word *resolution_list; /* for display purposes we store a second copy */
|
|
|
|
SANE_Bool extension; /* extension is installed */
|
|
SANE_Bool use_extension; /* use the installed extension */
|
|
SANE_Bool TPU; /* TPU is installed */
|
|
SANE_Bool ADF; /* ADF is installed */
|
|
SANE_Bool focusSupport; /* does this scanner have support for "set focus position" ? */
|
|
SANE_Bool color_shuffle; /* does this scanner need color shuffling */
|
|
SANE_Int maxDepth; /* max. color depth */
|
|
|
|
SANE_Int optical_res; /* optical resolution */
|
|
SANE_Int max_line_distance;
|
|
|
|
SANE_Bool need_double_vertical;
|
|
SANE_Bool need_color_reorder;
|
|
|
|
SANE_Bool wait_for_button; /* do we have to wait until the scanner button is pressed? */
|
|
|
|
EpsonCmd cmd;
|
|
};
|
|
|
|
typedef struct Epson_Device Epson_Device;
|
|
|
|
typedef union {
|
|
SANE_Word w;
|
|
SANE_Word * wa; /* word array */
|
|
SANE_String s;
|
|
} Option_Value;
|
|
|
|
|
|
|
|
struct Epson_Scanner {
|
|
struct Epson_Scanner *next;
|
|
int fd;
|
|
Epson_Device * hw;
|
|
SANE_Option_Descriptor opt [ NUM_OPTIONS];
|
|
Option_Value val [ NUM_OPTIONS];
|
|
SANE_Parameters params;
|
|
SANE_Bool block;
|
|
SANE_Bool eof;
|
|
SANE_Byte * buf, * end, * ptr;
|
|
SANE_Bool canceling;
|
|
SANE_Bool invert_image;
|
|
SANE_Bool focusOnGlass;
|
|
SANE_Byte currentFocusPosition;
|
|
/* SANE_Word gamma_table [ 4] [ 256]; */
|
|
SANE_Word gamma_table [ 3] [ 256];
|
|
SANE_Int retry_count;
|
|
SANE_Byte *line_buffer[LINES_SHUFFLE_MAX];
|
|
/* buffer lines for color shuffling */
|
|
SANE_Int color_shuffle_line; /* current line number for color shuffling */
|
|
SANE_Int line_distance; /* current line distance */
|
|
SANE_Int current_output_line; /* line counter when color shuffling */
|
|
SANE_Int lines_written; /* debug variable */
|
|
};
|
|
|
|
typedef struct Epson_Scanner Epson_Scanner;
|
|
|
|
#endif /* not epson_h */
|