1999-08-09 18:06:01 +00:00
|
|
|
/* --------------------------------------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
/* umax.h - headerfile for SANE-backend for umax scanners
|
|
|
|
|
2002-03-07 19:47:15 +00:00
|
|
|
(C) 1997-2002 Oliver Rauch
|
1999-08-09 18:06:01 +00:00
|
|
|
|
|
|
|
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 umax_h
|
|
|
|
#define umax_h
|
|
|
|
|
|
|
|
#include "sys/types.h"
|
|
|
|
|
2000-03-05 13:57:25 +00:00
|
|
|
/* --------------------------------------------------------------------------------------------------------- */
|
|
|
|
/* COMPILER OPTIONS: */
|
|
|
|
|
2002-03-07 19:47:15 +00:00
|
|
|
#define UMAX_ENABLE_USB
|
2000-03-05 13:57:25 +00:00
|
|
|
#define UMAX_HIDE_UNUSED
|
|
|
|
|
2002-03-07 19:47:15 +00:00
|
|
|
/* #define SANE_UMAX_DEBUG_S12 */
|
2000-03-05 13:57:25 +00:00
|
|
|
/* #define UMAX_CALIBRATION_MODE_SELECTABLE */
|
|
|
|
|
2000-10-02 10:17:46 +00:00
|
|
|
/* --------------------------------------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
#define SANE_UMAX_SCSI_MAXQUEUE 8
|
|
|
|
|
1999-08-09 18:06:01 +00:00
|
|
|
/* --------------------------------------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
enum Umax_Option
|
|
|
|
{
|
|
|
|
OPT_NUM_OPTS = 0,
|
|
|
|
|
|
|
|
/* ------------------------------------------- */
|
|
|
|
|
|
|
|
OPT_MODE_GROUP,
|
|
|
|
OPT_MODE,
|
|
|
|
OPT_SOURCE,
|
|
|
|
OPT_X_RESOLUTION,
|
|
|
|
OPT_Y_RESOLUTION,
|
|
|
|
|
|
|
|
OPT_RESOLUTION_BIND, /* bind x and y resolution */
|
|
|
|
OPT_NEGATIVE,
|
|
|
|
|
|
|
|
/* ------------------------------------------- */
|
|
|
|
|
|
|
|
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_BIT_DEPTH, /* output bit depth */
|
|
|
|
OPT_QUALITY, /* quality calibration */
|
|
|
|
OPT_DOR, /* double optical resolution */
|
|
|
|
OPT_WARMUP,
|
|
|
|
OPT_RGB_BIND, /* use same rgb-values for each color in color-mode */
|
|
|
|
|
|
|
|
OPT_BRIGHTNESS,
|
|
|
|
OPT_CONTRAST,
|
|
|
|
OPT_THRESHOLD,
|
|
|
|
|
|
|
|
OPT_HIGHLIGHT, /* highlight */
|
|
|
|
OPT_HIGHLIGHT_R,
|
|
|
|
OPT_HIGHLIGHT_G,
|
|
|
|
OPT_HIGHLIGHT_B,
|
|
|
|
|
|
|
|
OPT_SHADOW, /* shadow */
|
|
|
|
OPT_SHADOW_R,
|
|
|
|
OPT_SHADOW_G,
|
|
|
|
OPT_SHADOW_B,
|
|
|
|
|
|
|
|
OPT_ANALOG_GAMMA, /* analog gamma */
|
|
|
|
OPT_ANALOG_GAMMA_R,
|
|
|
|
OPT_ANALOG_GAMMA_G,
|
|
|
|
OPT_ANALOG_GAMMA_B,
|
|
|
|
|
|
|
|
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,
|
|
|
|
|
|
|
|
/* ------------------------------------------- */
|
|
|
|
|
|
|
|
OPT_ADVANCED_GROUP,
|
|
|
|
|
|
|
|
OPT_CAL_EXPOS_TIME, /* exposure time for calibration */
|
|
|
|
OPT_CAL_EXPOS_TIME_R,
|
|
|
|
OPT_CAL_EXPOS_TIME_G,
|
|
|
|
OPT_CAL_EXPOS_TIME_B,
|
|
|
|
OPT_SCAN_EXPOS_TIME, /* exposure time for scan */
|
|
|
|
OPT_SCAN_EXPOS_TIME_R,
|
|
|
|
OPT_SCAN_EXPOS_TIME_G,
|
|
|
|
OPT_SCAN_EXPOS_TIME_B,
|
|
|
|
|
2001-03-04 22:05:41 +00:00
|
|
|
OPT_DISABLE_PRE_FOCUS,
|
|
|
|
OPT_MANUAL_PRE_FOCUS,
|
|
|
|
OPT_FIX_FOCUS_POSITION,
|
|
|
|
OPT_LENS_CALIBRATION_DOC_POS,
|
|
|
|
OPT_HOLDER_FOCUS_POS_0MM,
|
|
|
|
|
1999-08-09 18:06:01 +00:00
|
|
|
OPT_CAL_LAMP_DEN,
|
|
|
|
OPT_SCAN_LAMP_DEN,
|
|
|
|
|
|
|
|
OPT_SELECT_EXPOSURE_TIME,
|
2002-09-07 10:11:17 +00:00
|
|
|
OPT_SELECT_CAL_EXPOSURE_TIME,
|
1999-08-09 18:06:01 +00:00
|
|
|
OPT_SELECT_LAMP_DENSITY,
|
|
|
|
|
2000-10-02 10:17:46 +00:00
|
|
|
OPT_LAMP_ON,
|
|
|
|
OPT_LAMP_OFF,
|
|
|
|
OPT_LAMP_OFF_AT_EXIT,
|
|
|
|
|
2002-09-07 10:11:17 +00:00
|
|
|
OPT_BATCH_SCAN_START, /* start batch scan function */
|
|
|
|
OPT_BATCH_SCAN_LOOP, /* loop batch scan function */
|
|
|
|
OPT_BATCH_SCAN_END, /* end batch scan function */
|
|
|
|
OPT_BATCH_NEXT_TL_Y, /* batch scan function next y position */
|
|
|
|
|
2000-03-05 13:57:25 +00:00
|
|
|
#ifdef UMAX_CALIBRATION_MODE_SELECTABLE
|
1999-08-09 18:06:01 +00:00
|
|
|
OPT_CALIB_MODE,
|
2000-03-05 13:57:25 +00:00
|
|
|
#endif
|
|
|
|
|
1999-08-09 18:06:01 +00:00
|
|
|
OPT_PREVIEW, /* preview, sets preview-bit and bind x/y-resolution */
|
|
|
|
|
|
|
|
/* must come last: */
|
|
|
|
NUM_OPTIONS
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
|
|
|
|
typedef union
|
|
|
|
{
|
|
|
|
SANE_Word w; /* word */
|
|
|
|
SANE_Word *wa; /* word array */
|
|
|
|
SANE_String s; /* string */
|
|
|
|
} Option_Value;
|
|
|
|
|
|
|
|
|
|
|
|
/* -------------------------------------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
|
|
|
|
/* LIST OF AVAILABLE SCANNERS, THE VALUES LISTED HERE ARE THE SAME FOR DIFFERENT APPLICATIONS
|
|
|
|
THAT USE THE SAME DEVICE */
|
2002-03-07 19:47:15 +00:00
|
|
|
|
2000-10-02 10:17:46 +00:00
|
|
|
/* Umax_Device contains values relevant for the device that are not intersting for the sane interface */
|
1999-08-09 18:06:01 +00:00
|
|
|
|
|
|
|
typedef struct Umax_Device
|
|
|
|
{
|
|
|
|
struct Umax_Device *next;
|
|
|
|
SANE_Device sane;
|
2002-03-07 19:47:15 +00:00
|
|
|
|
|
|
|
int connection_type;
|
|
|
|
#define SANE_UMAX_UNKNOWN 0
|
|
|
|
#define SANE_UMAX_SCSI 1
|
|
|
|
#define SANE_UMAX_USB 2
|
|
|
|
|
1999-08-09 18:06:01 +00:00
|
|
|
SANE_Range x_dpi_range;
|
|
|
|
SANE_Range y_dpi_range;
|
|
|
|
SANE_Range x_range;
|
|
|
|
SANE_Range y_range;
|
|
|
|
SANE_Range analog_gamma_range;
|
|
|
|
unsigned flags;
|
|
|
|
|
2000-10-02 10:17:46 +00:00
|
|
|
unsigned char *buffer[SANE_UMAX_SCSI_MAXQUEUE]; /* buffer used for scsi-transfer */
|
|
|
|
void *queue_id[SANE_UMAX_SCSI_MAXQUEUE]; /* scsi queue id */
|
2002-04-21 13:26:17 +00:00
|
|
|
size_t length_queued[SANE_UMAX_SCSI_MAXQUEUE]; /* length of queued data */
|
|
|
|
size_t length_read[SANE_UMAX_SCSI_MAXQUEUE]; /* length of returned data */
|
1999-08-09 18:06:01 +00:00
|
|
|
unsigned int bufsize;
|
|
|
|
unsigned int row_bufsize;
|
2001-03-04 22:05:41 +00:00
|
|
|
unsigned int request_scsi_maxqueue;
|
|
|
|
unsigned int request_preview_lines;
|
|
|
|
unsigned int request_scan_lines;
|
2001-05-17 21:17:39 +00:00
|
|
|
unsigned int handle_bad_sense_error;
|
2001-03-04 22:05:41 +00:00
|
|
|
unsigned int execute_request_sense;
|
|
|
|
unsigned int force_preview_bit_rgb;
|
|
|
|
unsigned int scsi_buffer_size_min;
|
|
|
|
unsigned int scsi_buffer_size_max;
|
|
|
|
unsigned int scsi_maxqueue;
|
1999-08-09 18:06:01 +00:00
|
|
|
|
|
|
|
unsigned char *pixelbuffer; /* buffer used for pixel ordering */
|
|
|
|
unsigned int pixelline_max; /* number of lines that fit into pixelbuffer */
|
|
|
|
unsigned int pixelline_ready[3]; /* finished absolute line for each color */
|
|
|
|
unsigned int pixelline_next[3]; /* next line to write for each color */
|
|
|
|
unsigned int pixelline_del[3]; /* next line to delete in opt_res for col */
|
|
|
|
unsigned int pixelline_optic[3]; /* scanned line in opt_res for each color */
|
|
|
|
unsigned int pixelline_opt_res; /* number of scanned line in optical res */
|
|
|
|
unsigned int pixelline_read; /* number of read pixel-lines */
|
|
|
|
unsigned int pixelline_written; /* number of written pixel-lines */
|
|
|
|
unsigned int CCD_distance; /* color line distance in optical resolution */
|
|
|
|
unsigned int CCD_color[9]; /* color order */
|
|
|
|
/* 0 / 1 2 / 3 4 5 / 6 7 / 8 */
|
|
|
|
# define CCD_color_red 0
|
|
|
|
# define CCD_color_green 1
|
|
|
|
# define CCD_color_blue 2
|
|
|
|
|
|
|
|
char *devicename; /* name of the scanner device */
|
|
|
|
int sfd; /* output file descriptor, scanner device */
|
|
|
|
|
|
|
|
char vendor[9]; /* will be UMAX */
|
|
|
|
char product[17]; /* e.g. "SuperVista_S12" or so */
|
|
|
|
char version[5]; /* e.g. V1.3 */
|
|
|
|
|
|
|
|
int three_pass; /* used in RGB-mode if 3-pass => 1 */
|
|
|
|
int three_pass_color; /* select color for scanning in 3pass mode */
|
|
|
|
unsigned int row_len; /* len of one scan-line in bytes */
|
2001-03-04 22:05:41 +00:00
|
|
|
unsigned int lines_max; /* maximum number of lines to scan */
|
1999-08-09 18:06:01 +00:00
|
|
|
unsigned int max_value; /* used for pnm-file */
|
|
|
|
|
|
|
|
/* data defined by inquiry */
|
|
|
|
int inquiry_len; /* length of inquiry return block */
|
|
|
|
int inquiry_wdb_len; /* length of window descriptor block */
|
2000-08-12 15:11:46 +00:00
|
|
|
int inquiry_vidmem; /* size of video memory */
|
2000-03-05 13:57:25 +00:00
|
|
|
int inquiry_optical_res; /* optical resolution */
|
1999-08-09 18:06:01 +00:00
|
|
|
int inquiry_x_res; /* maximum x-resolution */
|
|
|
|
int inquiry_y_res; /* maximum y-resolution */
|
2000-03-05 13:57:25 +00:00
|
|
|
int inquiry_dor_optical_res; /* optical resolution for dor mode */
|
|
|
|
int inquiry_dor_x_res; /* maximum x-resolution for dor mode */
|
|
|
|
int inquiry_dor_y_res; /* maximum y-resolution for dor mode */
|
1999-08-09 18:06:01 +00:00
|
|
|
double inquiry_fb_width; /* flatbed width in inches */
|
|
|
|
double inquiry_fb_length; /* flatbed length in inches */
|
|
|
|
double inquiry_uta_width; /* transparency width in inches */
|
|
|
|
double inquiry_uta_length; /* transparency length in inches */
|
2001-06-17 22:49:17 +00:00
|
|
|
double inquiry_uta_x_off; /* transparency x offset in inches */
|
|
|
|
double inquiry_uta_y_off; /* transparency y offset in inches */
|
1999-08-09 18:06:01 +00:00
|
|
|
double inquiry_dor_width; /* double resolution width in inches */
|
|
|
|
double inquiry_dor_length; /* double resolution length in inches */
|
2000-03-05 13:57:25 +00:00
|
|
|
double inquiry_dor_x_off; /* double resolution x offset in inches */
|
|
|
|
double inquiry_dor_y_off; /* double resolution y offset in inches */
|
1999-08-09 18:06:01 +00:00
|
|
|
|
|
|
|
int inquiry_exposure_adj; /* 1 if exposure adjust is supported */
|
|
|
|
int inquiry_exposure_time_step_unit; /* exposure time unit in micro sec */
|
|
|
|
int inquiry_exposure_time_max; /* exposure time maximum */
|
|
|
|
int inquiry_exposure_time_l_min; /* exposure tine minimum for lineart */
|
|
|
|
int inquiry_exposure_time_l_fb_def; /* exposure time default for lineart/flatbed */
|
|
|
|
int inquiry_exposure_time_l_uta_def; /* exposure time default for lineart/uta */
|
|
|
|
int inquiry_exposure_time_h_min; /* exposure tine minimum for halftone */
|
|
|
|
int inquiry_exposure_time_h_fb_def; /* exposure time default for halftone/flatbed */
|
|
|
|
int inquiry_exposure_time_h_uta_def; /* exposure time default for halftone/uta */
|
|
|
|
int inquiry_exposure_time_g_min; /* exposure tine minimum for grayscale */
|
|
|
|
int inquiry_exposure_time_g_fb_def; /* exposure time default for grayscale/flatbed */
|
|
|
|
int inquiry_exposure_time_g_uta_def; /* exposure time default for grayscale/uta */
|
|
|
|
int inquiry_exposure_time_c_min; /* exposure tine minimum for color */
|
|
|
|
int inquiry_exposure_time_c_fb_def_r; /* exposure time default for color red/flatbed */
|
|
|
|
int inquiry_exposure_time_c_fb_def_g; /* exposure time default for color green/flatbed */
|
|
|
|
int inquiry_exposure_time_c_fb_def_b; /* exposure time default for color blue/flatbed */
|
|
|
|
int inquiry_exposure_time_c_uta_def_r; /* exposure time default for color red/uta */
|
|
|
|
int inquiry_exposure_time_c_uta_def_g; /* exposure time default for color green/uta */
|
|
|
|
int inquiry_exposure_time_c_uta_def_b; /* exposure time default for color blue/uta */
|
|
|
|
|
|
|
|
int inquiry_max_warmup_time; /* maximum lamp warmup time in sec */
|
|
|
|
int inquiry_cbhs; /* 50, 255, 255+autoexp. */
|
|
|
|
int inquiry_cbhs_min; /* minimum value for cbhs */
|
|
|
|
int inquiry_cbhs_max; /* maximum value for cbhs */
|
2000-03-05 13:57:25 +00:00
|
|
|
int inquiry_contrast_min; /* minimum value for c */
|
|
|
|
int inquiry_contrast_max; /* maximum value for c */
|
|
|
|
int inquiry_brightness_min; /* minimum value for b */
|
|
|
|
int inquiry_brightness_max; /* maximum value for b */
|
|
|
|
int inquiry_threshold_min; /* minimum value for t */
|
|
|
|
int inquiry_threshold_max; /* maximum value for t */
|
|
|
|
int inquiry_highlight_min; /* minimum value for h */
|
|
|
|
int inquiry_highlight_max; /* maximum value for h */
|
|
|
|
int inquiry_shadow_min; /* minimum value for s */
|
|
|
|
int inquiry_shadow_max; /* maximum value for s */
|
1999-08-09 18:06:01 +00:00
|
|
|
|
|
|
|
int inquiry_quality_ctrl; /* 1 = supported */
|
2002-09-07 10:11:17 +00:00
|
|
|
int inquiry_batch_scan; /* 1 = supported */
|
1999-08-09 18:06:01 +00:00
|
|
|
int inquiry_preview; /* 1 = supported */
|
|
|
|
int inquiry_lamp_ctrl; /* 1 = supported */
|
|
|
|
int inquiry_transavail; /* 1 = uta available */
|
|
|
|
int inquiry_adfmode; /* 1 = adf available */
|
|
|
|
int inquiry_uta; /* 1 = uta supported */
|
|
|
|
int inquiry_adf; /* 1 = adf supported */
|
|
|
|
int inquiry_dor; /* 1 = dor supported */
|
|
|
|
int inquiry_reverse; /* 1 = 1 bit reverse supported */
|
|
|
|
int inquiry_reverse_multi; /* 1 = multi bit reverse supported */
|
|
|
|
int inquiry_analog_gamma; /* 1 = analog gamma supported */
|
2000-08-12 15:11:46 +00:00
|
|
|
int inquiry_lineart_order; /* 1 = LSB first, 0 = MSB first */
|
2001-03-04 22:05:41 +00:00
|
|
|
|
|
|
|
int inquiry_lens_cal_in_doc_pos; /* 1 = lens calibration in doc pos supported */
|
|
|
|
int inquiry_manual_focus; /* 1 = manual focus supported */
|
|
|
|
int inquiry_sel_uta_lens_cal_pos; /* 1 = selection of lens calib pos for uta supported */
|
|
|
|
|
1999-08-09 18:06:01 +00:00
|
|
|
int inquiry_gamma_dwload; /* 1 = gamma download supported */
|
|
|
|
int inquiry_gamma_DCF; /* gamma download curve format */
|
|
|
|
|
|
|
|
int inquiry_one_pass_color; /* 1 = 1 pass supported */
|
|
|
|
int inquiry_three_pass_color; /* 1 = 3 pass supported */
|
|
|
|
int inquiry_color; /* 1 = color mode supported */
|
|
|
|
int inquiry_gray; /* 1 = grayscale mode supported */
|
|
|
|
int inquiry_halftone; /* 1 = halftone mode supported */
|
|
|
|
int inquiry_lineart; /* 1 = lineart mode supported */
|
|
|
|
|
|
|
|
int inquiry_calibration; /* 1 = calibration mode control supported */
|
|
|
|
int inquiry_highlight; /* 1 = highlight supported */
|
|
|
|
int inquiry_shadow; /* 1 = shadow supported */
|
|
|
|
int inquiry_GIB; /* gamma input bits */
|
|
|
|
int inquiry_GOB; /* gamma output bits */
|
|
|
|
int inquiry_max_calib_lines; /* maximum calibration lines */
|
|
|
|
int inquiry_color_order; /* color ordering support */
|
|
|
|
int inquiry_CCD_line_distance; /* color line distance */
|
|
|
|
int inquiry_fb_uta_color_arrangement; /* line arrangement for fb & uta */
|
|
|
|
int inquiry_adf_color_arrangement; /* line arrangement for adf */
|
|
|
|
|
2000-08-12 15:11:46 +00:00
|
|
|
unsigned int relevant_optical_res; /* optical resolution */
|
|
|
|
unsigned int relevant_max_x_res; /* maximum x-resolution */
|
|
|
|
unsigned int relevant_max_y_res; /* maximum y-resolution */
|
2000-03-05 13:57:25 +00:00
|
|
|
|
1999-08-09 18:06:01 +00:00
|
|
|
/* selected data */
|
|
|
|
|
|
|
|
int use_exposure_time_min; /* exposure tine minimum */
|
|
|
|
int use_exposure_time_def_r; /* exposure time default */
|
|
|
|
int use_exposure_time_def_g; /* exposure time default */
|
|
|
|
int use_exposure_time_def_b; /* exposure time default */
|
|
|
|
|
|
|
|
int wdb_len; /* use this length of WDB */
|
2000-03-05 13:57:25 +00:00
|
|
|
unsigned int width_in_pixels; /* thats the wanted width in pixels */
|
|
|
|
unsigned int length_in_pixels; /* thats the wanted length in pixels */
|
|
|
|
unsigned int scanwidth; /* thats the width in pixels at x_coordinate_base dpi */
|
|
|
|
unsigned int scanlength; /* thats the length in pixels at y_coordinate_base dpi */
|
|
|
|
unsigned int bytes_per_color; /* bytes per each color */
|
|
|
|
|
|
|
|
unsigned int x_resolution; /* scan-resolution for x in dpi */
|
|
|
|
unsigned int y_resolution; /* scan-resolution for y in dpi */
|
1999-08-09 18:06:01 +00:00
|
|
|
double scale_x; /* x-scaling of optical resolution */
|
|
|
|
double scale_y; /* y-scaling of optical resolution */
|
|
|
|
int upper_left_x; /* thats the left edge in points at 1200pt/inch */
|
|
|
|
int upper_left_y; /* thats the top edge in points at 1200pt/inch */
|
|
|
|
|
2000-03-05 13:57:25 +00:00
|
|
|
unsigned int x_coordinate_base; /* x base in pixels/inch, normaly 1200 */
|
|
|
|
unsigned int y_coordinate_base; /* y base in pixels/inch, normaly 1200 */
|
1999-08-09 18:06:01 +00:00
|
|
|
|
2000-03-05 13:57:25 +00:00
|
|
|
unsigned int bits_per_pixel; /* number of bits per pixel */
|
1999-08-09 18:06:01 +00:00
|
|
|
int bits_per_pixel_code; /* 1 = 24bpp, 4 = 30 bpp, 8 = 36 bpp */
|
|
|
|
int gamma_input_bits_code; /* 1 = 24bpp, 4 = 30 bpp, 8 = 36 bpp */
|
|
|
|
int set_auto; /* 0 or 1, don't know what it is */
|
|
|
|
int preview; /* 1 if preview */
|
2002-09-07 10:11:17 +00:00
|
|
|
int batch_scan; /* 1 = batch scan, 0 = normal scan */
|
|
|
|
int batch_end; /* 1 = reposition scanhead */
|
|
|
|
int batch_next_tl_y; /* top left y position for next batch scan */
|
1999-08-09 18:06:01 +00:00
|
|
|
int quality; /* 1 = quality_calibration, 0 = fast */
|
|
|
|
int reverse; /* 1: exchange black and white */
|
|
|
|
int reverse_multi; /* 1: invert color values */
|
|
|
|
int WD_speed; /* is a combination of slow and smear */
|
|
|
|
int slow; /* 1: slow scan speed */
|
|
|
|
int smear; /* 1: don't care about image smearing problem */
|
|
|
|
int dor; /* double resolution */
|
|
|
|
int cbhs_range; /* 50,255 or 255+autoexposure */
|
2001-03-04 22:05:41 +00:00
|
|
|
int fix_focus_position; /* fix focus position */
|
|
|
|
int lens_cal_in_doc_pos; /* lens calibration in document position */
|
|
|
|
int disable_pre_focus; /* disable pre focus */
|
|
|
|
int holder_focus_pos_0mm; /* 0.6mm <-> 0.0mm holder focus position */
|
|
|
|
int manual_focus; /* automatic <-> manual focus */
|
1999-08-09 18:06:01 +00:00
|
|
|
int warmup; /* 1=set warmup-bit */
|
|
|
|
int module; /* flatbed or transparency */
|
|
|
|
int adf; /* 1 if ADF turned on */
|
|
|
|
int uta; /* 1 if UTA turned on */
|
|
|
|
int calibration; /* calibration :0=ignore, 1=driver, 2=by image */
|
|
|
|
int low_byte_first; /* 10 bit mode: 0=high byte frist, 1=low byte frist */
|
|
|
|
int colormode; /* LINEART, HALFTONE, GRAYSCALE or RGB */
|
|
|
|
# define LINEART 1
|
|
|
|
# define HALFTONE 2
|
|
|
|
# define GRAYSCALE 3
|
|
|
|
# define RGB_LINEART 4
|
|
|
|
# define RGB_HALFTONE 5
|
|
|
|
# define RGB 6
|
|
|
|
|
|
|
|
int exposure_time_calibration_r; /* red exposure time for calibration */
|
|
|
|
int exposure_time_calibration_g; /* green exposure time for calibration */
|
|
|
|
int exposure_time_calibration_b; /* blue exposure time for calibration */
|
|
|
|
int exposure_time_scan_r; /* red exposure time for scan */
|
|
|
|
int exposure_time_scan_g; /* green exposure time for scan */
|
|
|
|
int exposure_time_scan_b; /* bue exposure time for scan */
|
|
|
|
|
|
|
|
int c_density; /* next calibration lamp density */
|
|
|
|
int s_density; /* next scan lamp density */
|
|
|
|
|
|
|
|
int threshold; /* (128) 0-255, lineart mode */
|
|
|
|
int brightness; /* (128) cbhs_range 0-255, halftone mode */
|
|
|
|
int contrast; /* (128) cbhs_range 0-255, halftone-mode */
|
|
|
|
int highlight_r; /* (255) cbhs_range 1-255, each mode */
|
|
|
|
int highlight_g; /* (255) cbhs_range 1-255, each mode */
|
|
|
|
int highlight_b; /* (255) cbhs_range 1-255, each mode */
|
|
|
|
int shadow_r; /* (0) cbhs_range 0-254, each mode */
|
|
|
|
int shadow_g; /* (0) cbhs_range 0-254, each mode */
|
|
|
|
int shadow_b; /* (0) cbhs_range 0-254, each mode */
|
|
|
|
int halftone; /* halftone pattern select */
|
|
|
|
|
|
|
|
int digital_gamma_r; /* gamma-select for red and gray */
|
|
|
|
int digital_gamma_g; /* gamma-select value for green */
|
|
|
|
int digital_gamma_b; /* gamma-select value for blue */
|
|
|
|
|
|
|
|
int analog_gamma_r; /* analog gamma red and gray */
|
|
|
|
int analog_gamma_g; /* analog gamma green */
|
|
|
|
int analog_gamma_b; /* analog gamma blue */
|
|
|
|
|
|
|
|
int calib_lines; /* request calibration lines */
|
|
|
|
|
|
|
|
int do_calibration; /* 1: do calibration by driver */
|
|
|
|
int do_color_ordering; /* 1: order line-mode to pixel-mode */
|
|
|
|
|
2000-10-02 10:17:46 +00:00
|
|
|
int button0_pressed; /* scan-button 0 on scanner is pressed => 1 */
|
|
|
|
int button1_pressed; /* scan-button 1 on scanner is pressed => 1 */
|
|
|
|
int button2_pressed; /* scan-button 2 on scanner is pressed => 1 */
|
1999-08-09 18:06:01 +00:00
|
|
|
|
2000-03-05 13:57:25 +00:00
|
|
|
int calibration_area; /* define calibration area if no area is given */
|
2000-08-12 15:11:46 +00:00
|
|
|
int calibration_width_offset; /* some scanners do calibrate with some additional pixels */
|
2002-09-07 10:11:17 +00:00
|
|
|
int calibration_width_offset_batch; /* the same for batch scanning */
|
2000-10-02 10:17:46 +00:00
|
|
|
int calibration_bytespp; /* correction of bytespp if driver knows about it */
|
2002-09-07 10:11:17 +00:00
|
|
|
int exposure_time_rgb_bind; /* exposure time can not be defined for each color */
|
2001-03-04 22:05:41 +00:00
|
|
|
int invert_shading_data; /* invert shading data before sending it to the scanner */
|
2000-10-02 10:17:46 +00:00
|
|
|
int common_xy_resolutions; /* do not allow different x and y resolution */
|
2000-03-05 13:57:25 +00:00
|
|
|
int pause_for_color_calibration; /* pause between start_scan and do_calibration in ms */
|
|
|
|
int pause_for_gray_calibration; /* pause between start_scan and do_calibration in ms */
|
|
|
|
int pause_after_calibration; /* pause between do_calibration and read data in ms */
|
|
|
|
int pause_after_reposition; /* pause for repositioning in ms */
|
|
|
|
int pause_for_moving; /* pause for moving scanhead over full scanarea in ms */
|
2000-10-02 10:17:46 +00:00
|
|
|
int lamp_control_available; /* is set when scanner supportes lamp control */
|
2002-01-05 17:23:53 +00:00
|
|
|
int gamma_lsb_padded; /* 16 bit gamma data is padded to lsb */
|
2002-09-07 10:11:17 +00:00
|
|
|
int force_quality_calibration; /* always set quality calibration */
|
1999-08-09 18:06:01 +00:00
|
|
|
} Umax_Device;
|
|
|
|
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
|
|
|
|
/* LIST OF OPEND DEVICES, A DEVICE MAY BE OPEND TWICE, ALL VALUES LISTED HERE MAY BE
|
|
|
|
DIFFERENT FOR DIFFERENT APPLICATIONS */
|
|
|
|
|
2000-10-02 10:17:46 +00:00
|
|
|
/* Umax_Scanner contains values relevant for the sane interface */
|
|
|
|
|
1999-08-09 18:06:01 +00:00
|
|
|
typedef struct Umax_Scanner
|
|
|
|
{
|
|
|
|
struct Umax_Scanner *next;
|
|
|
|
Umax_Device *device;
|
|
|
|
|
|
|
|
SANE_Option_Descriptor opt[NUM_OPTIONS];
|
|
|
|
Option_Value val[NUM_OPTIONS];
|
|
|
|
SANE_Int *gamma_table[4];
|
|
|
|
SANE_Int halftone_pattern[64];
|
|
|
|
SANE_Range gamma_range;
|
2000-08-12 15:11:46 +00:00
|
|
|
unsigned int gamma_length;
|
1999-08-09 18:06:01 +00:00
|
|
|
SANE_Range output_range;
|
2000-08-12 15:11:46 +00:00
|
|
|
unsigned int output_bytes;
|
1999-08-09 18:06:01 +00:00
|
|
|
SANE_Range exposure_time_range;
|
|
|
|
|
|
|
|
int scanning;
|
|
|
|
SANE_Parameters params;
|
|
|
|
|
|
|
|
pid_t reader_pid;
|
|
|
|
int pipe;
|
|
|
|
} Umax_Scanner;
|
|
|
|
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------------------- */
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* umax-sane_h */
|