Updated Microtek2 backend to version 0.9 build 20010828 (from

Karsten Festag <karsten.festag@t-online.de>).
Henning Meier-Geinitz <henning@meier-geinitz.de>
DEVEL_2_0_BRANCH-1
Henning Geinitz 2001-10-05 19:15:55 +00:00
rodzic b5045d4c86
commit 7c642ae706
2 zmienionych plików z 340 dodań i 301 usunięć

Wyświetl plik

@ -90,12 +90,12 @@
#define MICROTEK2_MAJOR 0
#define MICROTEK2_MINOR 9
#define MICROTEK2_BUILD "20010517"
#define MICROTEK2_BUILD "20010828"
#define MICROTEK2_CONFIG_FILE "microtek2.conf"
/******************************************************************************/
/* defines that ar common to all devices */
/* defines that are common to all devices */
/******************************************************************************/
#define MD_RESOLUTION_DEFAULT 72 << SANE_FIXED_SCALE_SHIFT
@ -193,7 +193,7 @@
d[4]=0x00; d[5]=0x00; d[6]=0x00; d[7]=0x00; \
d[8]=0x28; d[9]=0x00
#define RSA_CMD_L 10
#define RSA_SETMEDIA(d,p) d[5] |= ((p) & 0x77)
#define RSA_SETMEDIA(d,p) d[5] |= ((p) & 0x77)
#define RSA_TRANSFERLENGTH 40
#define RSA_COLOR(d,s) d = (((s)[0] >> 7) & 0x01)
@ -207,8 +207,9 @@
d[1] = (((s)[1] >> 4) & 0x03); \
d[2] = (((s)[1] >> 2) & 0x03); \
}
#define RSA_NIS(d,s) d = ((s)[1] & 0x02)
#define RSA_DATSEQ(d,s) d = ((s)[1] & 0x01)
#define RSA_CCDGAP(d,s) d = (s)[2]
#define RSA_CCDGAP(d,s) d = (s)[2]
#define RSA_MAX_XRESOLUTION(d,s) d = ((s)[3] << 8) + (s)[4]
#define RSA_MAX_YRESOLUTION(d,s) d = ((s)[5] << 8) + (s)[6]
#define RSA_GEOWIDTH(d,s) d = ((s)[7] << 8) + (s)[8]
@ -218,16 +219,16 @@
#define RSA_SCANMODE(d,s) d = (s)[13] & 0x0f
#define RSA_CCDPIXELS(d,s) d = ((s)[14] << 8) + (s)[15]
#define RSA_LUTCAP(d,s) d = (s)[16] & 0x1f
#define RSA_DNLDPTRN(d,s) d = (((s)[17] >> 7) & 0x01)
#define RSA_GRAINSLCT(d,s) d = (s)[17] & 0x7f
#define RSA_SUPPOPT(d,s) d = (s)[18] & 0xf3
#define RSA_DNLDPTRN(d,s) d = (((s)[17] >> 7) & 0x01)
#define RSA_GRAINSLCT(d,s) d = (s)[17] & 0x7f
#define RSA_SUPPOPT(d,s) d = (s)[18] & 0xf3
#define RSA_CALIBWHITE(d,s) d = ((s)[19] << 24) + ((s)[20] << 16) \
+ ((s)[21] << 8) + (s)[22]
#define RSA_CALIBSPACE(d,s) d = ((s)[23] << 24) + ((s)[24] << 16) \
+ ((s)[25] << 8) + (s)[26]
#define RSA_NLENS(d,s) d = (s)[27]
#define RSA_NWINDOWS(d,s) d = (s)[28]
#define RSA_SHTRNSFEREQU(d,s) d = (((s)[29] >> 2) & 0x3f)
#define RSA_SHTRNSFEREQU(d,s) d = (((s)[29] >> 2) & 0x3f)
#define RSA_SCNBTTN(d,s) d = (((s)[29] >> 1) & 0x01)
#define RSA_BUFTYPE(d,s) d = (s)[29] & 0x01
#define RSA_REDBALANCE(d,s) d = ((s)[30] << 8) | (s)[31]
@ -472,7 +473,7 @@
/* READ IMAGE STATUS */
#define RIS_SET_CMD(d) (d)[0] = 0x28; (d)[1] = 0x00; (d)[2] = 0x83; \
(d)[3] = 0x00; (d)[4] = 0x00; (d)[5] = 0x00; \
(d)[6] = 0x00; (d)[7] = 0x00; (d)[8] = 0x01; \
(d)[6] = 0x00; (d)[7] = 0x00; (d)[8] = 0x00; \
(d)[9] = 0x00
#define RIS_CMD_L 10
#define RIS_SET_PCORMAC(d,p) (d)[4] |= (((p) << 7) & 0x80)
@ -558,32 +559,38 @@ enum Microtek2_Option
/* these options must appear in exactly this order, */
/* sane_control_option relies on it */
OPT_CHANNEL,
OPT_SHADOW,
OPT_MIDTONE,
OPT_HIGHLIGHT,
OPT_SHADOW_R,
OPT_SHADOW,
OPT_MIDTONE,
OPT_HIGHLIGHT,
OPT_SHADOW_R,
OPT_MIDTONE_R,
OPT_HIGHLIGHT_R,
OPT_SHADOW_G,
OPT_MIDTONE_G,
OPT_HIGHLIGHT_G,
OPT_SHADOW_B,
OPT_MIDTONE_B,
OPT_HIGHLIGHT_B,
OPT_HIGHLIGHT_R,
OPT_SHADOW_G,
OPT_MIDTONE_G,
OPT_HIGHLIGHT_G,
OPT_SHADOW_B,
OPT_MIDTONE_B,
OPT_HIGHLIGHT_B,
OPT_EXPOSURE,
OPT_EXPOSURE_R,
OPT_EXPOSURE_G,
OPT_EXPOSURE_B,
/*48*/ OPT_SPECIAL,
/*49*/ OPT_SPECIAL,
OPT_RESOLUTION_BIND,
OPT_DISABLE_BACKTRACK,
OPT_CALIB_BACKEND,
OPT_LIGHTLID35,
OPT_TOGGLELAMP,
/*54*/ NUM_OPTIONS
};
/*55*/ OPT_COLORBALANCE,
OPT_BALANCE_R,
OPT_BALANCE_G,
OPT_BALANCE_B,
OPT_BALANCE_FW,
/*60*/ NUM_OPTIONS
};
/******************************************************************************/
/* value structure for scanner options */
@ -595,13 +602,124 @@ typedef union {
SANE_String s;
} Microtek2_Option_Value;
/******************************************************************************/
/* Description of options not included in saneopts.h */
/******************************************************************************/
#define M_NAME_NOBACKTRACK "no-backtracking"
#define M_TITLE_NOBACKTRACK "Disable backtracking"
#define M_DESC_NOBACKTRACK "If checked the scanner does not perform" \
" backtracking."
#define M_NAME_TOGGLELAMP "toggle-lamp"
#define M_TITLE_TOGGLELAMP "Toggle lamp of flatbed"
#define M_DESC_TOGGLELAMP "Toggles the lamp of the flatbed"
#define M_NAME_CALIBBACKEND "backend-calibration"
#define M_TITLE_CALIBBACKEND "Calibration by backend"
#define M_DESC_CALIBBACKEND "If checked the color calibration before" \
" a scan is done by the backend. Uncheck" \
" this option if you experience any problem."
#define M_NAME_LIGHTLID35 "lightlid35"
#define M_TITLE_LIGHTLID35 "Use the lightlid-35mm adapter"
#define M_DESC_LIGHTLID35 "This option turns off the lamp of the" \
" flatbed during a scan. Do not expect" \
" excellent results. Maybe this option will" \
" be removed in the future."
#define M_NAME_QUALITY_SCAN "quality_scan"
#define M_TITLE_QUALITY_SCAN "Quality scan"
#define M_DESC_QUALITY_SCAN "Highest quality but lower speed"
#define M_NAME_FAST_SCAN "fast_scan"
#define M_TITLE_FAST_SCAN "Fast scan"
#define M_DESC_FAST_SCAN "Highest speed but lower quality"
#define M_NAME_AUTOADJUST "lineart-auto-adjust"
#define M_TITLE_AUTOADJUST "Automatic adjustment of threshold value"
#define M_DESC_AUTOADJUST "If checked the backend automatically tries" \
" to determine an optimal value for the" \
" threshold."
#define M_NAME_GAMMA_MODE "gamma-correction"
#define M_TITLE_GAMMA_MODE "Gamma correction"
#define M_DESC_GAMMA_MODE "Selects the gamma correction mode."
#define M_NAME_GAMMA_BIND "bind-gamma"
#define M_TITLE_GAMMA_BIND "Bind gamma"
#define M_DESC_GAMMA_BIND "Use same gamma values for all colour channels."
#define M_NAME_GAMMA_SCALAR "scalar-gamma"
#define M_TITLE_GAMMA_SCALAR "Scalar gamma"
#define M_DESC_GAMMA_SCALAR "Selects a value for scalar gamma correction."
#define M_NAME_GAMMA_SCALAR_R "scalar-gamma-r"
#define M_TITLE_GAMMA_SCALAR_R "Scalar gamma red"
#define M_DESC_GAMMA_SCALAR_R "Selects a value for scalar gamma correction" \
" (red channel)"
#define M_NAME_GAMMA_SCALAR_G "scalar-gamma-g"
#define M_TITLE_GAMMA_SCALAR_G "Scalar gamma green"
#define M_DESC_GAMMA_SCALAR_G "Selects a value for scalar gamma correction" \
" (green channel)"
#define M_NAME_GAMMA_SCALAR_B "scalar-gamma-b"
#define M_TITLE_GAMMA_SCALAR_B "Scalar gamma blue"
#define M_DESC_GAMMA_SCALAR_B "Selects a value for scalar gamma correction" \
" (blue channel)"
#define M_NAME_CHANNEL "channel"
#define M_TITLE_CHANNEL "Channel"
#define M_DESC_CHANNEL "Selects the colour band, \"Master\" means," \
" that all colours are affected."
#define M_NAME_MIDTONE "midtone"
#define M_TITLE_MIDTONE "Midtone"
#define M_DESC_MIDTONE "Selects which radiance level should be" \
" considered \"50 % gray\"."
#define M_NAME_MIDTONE_R "midtone-r"
#define M_TITLE_MIDTONE_R "Midtone for red"
#define M_DESC_MIDTONE_R "Selects which radiance level should be" \
" considered \"50 % red\"."
#define M_NAME_MIDTONE_G "midtone-g"
#define M_TITLE_MIDTONE_G "Midtone for green"
#define M_DESC_MIDTONE_G "Selects which radiance level should be" \
" considered \"50 % green\"."
#define M_NAME_MIDTONE_B "midtone-b"
#define M_TITLE_MIDTONE_B "Midtone for blue"
#define M_DESC_MIDTONE_B "Selects which radiance level should be" \
" considered \"50 % blue\"."
#define M_NAME_BALANCE_R "balance-r"
#define M_TITLE_BALANCE_R "Red balance"
#define M_DESC_BALANCE_R "Balance factor for red. A value of 100% means " \
"no correction."
#define M_NAME_BALANCE_G "balance-g"
#define M_TITLE_BALANCE_G "Green balance"
#define M_DESC_BALANCE_G "Balance factor for green. A value of 100% "\
"means no correction."
#define M_NAME_BALANCE_B "balance-b"
#define M_TITLE_BALANCE_B "Blue balance"
#define M_DESC_BALANCE_B "Balance factor for blue. A value of 100% means " \
"no correction. "
#define M_NAME_BALANCE_FW "balance-fw"
#define M_TITLE_BALANCE_FW "Firmware balance"
#define M_DESC_BALANCE_FW "Sets the color balance values to the "\
"firmware provided values. "\
/******************************************************************************/
/* Structure that contains global options */
/******************************************************************************/
typedef struct Config_Options
{
{
double strip_height; /* inch */
char *no_backtracking; /* enable/disable option for */
/* backtracking */
@ -609,6 +727,7 @@ typedef struct Config_Options
char *toggle_lamp; /* enable/disable lightlid35 option */
char *backend_calibration; /* calibration by backend */
char *auto_adjust; /* automatically choose threshold */
char *colorbalance_adjust; /* color balance can be modified */
} Config_Options;
@ -621,7 +740,7 @@ typedef struct Config_Temp
{
struct Config_Temp *next;
char *device; /* possible device name */
Config_Options opts; /* options belonging to this device name */
Config_Options opts; /* options belonging to this device name */
} Config_Temp;
@ -641,9 +760,7 @@ typedef struct Microtek2_Info {
SANE_Char model[INQ_MODEL_L + 1];
SANE_Char revision[INQ_REV_L + 1];
SANE_Byte model_code;
/* from read scanner attributes */
/* #define MI_HAS_COLOR SANE_TRUE */
SANE_Bool color;
#define MI_HAS_ONEPASS SANE_TRUE
SANE_Bool onepass;
@ -654,7 +771,7 @@ typedef struct Microtek2_Info {
SANE_Byte scanner_type;
#define MI_HAS_FEPROM SANE_TRUE
SANE_Bool feprom;
/* MI_DATA_FORMAT_X must correspond to Byte 0 in READ SCANNER ATTRIBUTE */
/* MI_DATAFMT_X must correspond to Byte 0 in READ SCANNER ATTRIBUTE */
#define MI_DATAFMT_CHUNKY 1
#define MI_DATAFMT_LPLCONCAT 2
#define MI_DATAFMT_LPLSEGREG 3
@ -665,6 +782,7 @@ typedef struct Microtek2_Info {
#define MI_COLSEQ_BLUE 2
#define MI_COLSEQ_ILLEGAL 3
u_int8_t color_sequence[RSA_COLORSEQUENCE_L];
SANE_Bool new_image_status;
#define MI_DATSEQ_RTOL 1
u_int8_t direction;
SANE_Byte ccd_gap;
@ -692,7 +810,7 @@ typedef struct Microtek2_Info {
#define MI_LUTCAP_4096W 16
SANE_Byte lut_cap;
#define MI_HAS_DNLDPTRN SANE_TRUE
SANE_Bool has_dnldptrn;
SANE_Bool has_dnldptrn;
SANE_Byte grain_slct;
#define MI_OPTDEV_ADF 0x01
#define MI_OPTDEV_TMA 0x02
@ -716,11 +834,6 @@ typedef struct Microtek2_Info {
u_int16_t aps_maxframes;
} Microtek2_Info;
/******************************************************************************/
/* device structure (one for each device in config file) */
/******************************************************************************/
@ -735,14 +848,14 @@ typedef struct Microtek2_Device {
#define MD_SOURCE_STRIPE 4
Microtek2_Info info[5]; /* detailed scanner spec */
SANE_Device sane; /* SANE generic device block */
char name[PATH_MAX]; /* name from config file */
char name[PATH_MAX]; /* name from config file */
SANE_Int *custom_gamma_table[4]; /* used for the custom gamma */
/* values before a scan starts */
/* the following two are derived from lut_cap */
int max_lut_size; /* in bytes */
int lut_entry_size; /* word or byte transfer in LUT */
u_int8_t scan_source;
u_int8_t scan_source;
double revision;
/* basically the following two variables should go into the */
@ -757,13 +870,13 @@ typedef struct Microtek2_Device {
#define MD_FLAMP_ON 1
#define MD_NCALIB_ON 4
#define MD_NTRACK_ON 8
#define MD_STICK_ON 16
#define MD_STICK_ON 16
#define MD_RESERVED17_ON 128
#define MD_CURRENT_MODE_FLATBED 0
struct {
u_int8_t sskip;
u_int8_t sskip;
u_int8_t stick;
u_int8_t ntrack;
u_int8_t ntrack;
u_int8_t ncalib;
u_int8_t tlamp;
u_int8_t flamp;
@ -789,7 +902,7 @@ typedef struct Microtek2_Device {
/* by these defines */
u_int32_t model_flags;
#define MD_NO_SLIDE_MODE 1 /* indicates that it has slide */
/* mode, but it does not */
/* mode, but it does not */
#define MD_DATA_FORMAT_WRONG 2 /* X6 indicates wrong mode for TMA */
#define MD_NO_ENHANCEMENTS 4 /* image enhancements do not work */
/* (Brightness, contrast, .....) */
@ -837,7 +950,7 @@ typedef struct Microtek2_Device {
#define MD_SOURCESTRING_SLIDE "Slide"
SANE_String_Const scansource_list[MD_SOURCESTRING_NUMS + 1];
#define MD_HALFTONE_NUMS 12
#define MD_HALFTONE_NUMS 12
#define MD_HALFTONE0 "53-dot screen (53 gray levels)"
#define MD_HALFTONE1 "Horiz. screen (65 gray levels)"
#define MD_HALFTONE2 "Vert. screen (65 gray levels)"
@ -858,15 +971,15 @@ typedef struct Microtek2_Device {
#define MD_CHANNEL_GREEN "Green"
#define MD_CHANNEL_BLUE "Blue"
SANE_String_Const channel_list[MD_CHANNEL_NUMS + 1];
#define MD_GAMMAMODE_NUMS 3
#define MD_GAMMAMODE_LINEAR "None"
#define MD_GAMMAMODE_SCALAR "Scalar"
#define MD_GAMMAMODE_CUSTOM "Custom"
SANE_String_Const gammamode_list[MD_GAMMAMODE_NUMS + 1];
SANE_Range x_res_range_dpi; /* X resolution in dpi */
SANE_Range y_res_range_dpi; /* Y resolution in dpi */
SANE_Range x_res_range_dpi; /* X resolution in dpi */
SANE_Range y_res_range_dpi; /* Y resolution in dpi */
SANE_Range x_range_mm; /* scan width in mm */
SANE_Range y_range_mm; /* scan height in mm */
SANE_Range percentage_range; /* for brightness, shadow, ... */
@ -877,7 +990,8 @@ typedef struct Microtek2_Device {
SANE_Range exposure_range; /* for lengthening exposure time */
SANE_Range highlight_range; /* highlight of master channel */
SANE_Range threshold_range; /* 1 - 255 */
Config_Options opts; /* options from the config file */
SANE_Range balance_range; /* for user provided color balance */
Config_Options opts; /* options from the config file */
} Microtek2_Device;
@ -893,7 +1007,7 @@ typedef struct Microtek2_Scanner {
Microtek2_Option_Value val[NUM_OPTIONS + 1]; /* option values for session */
SANE_Parameters params; /* format, lastframe, lines, depth, ppl, bpl */
SANE_Option_Descriptor sod[NUM_OPTIONS + 1]; /* option list for session */
u_int8_t *gamma_table;
u_int8_t *shading_image; /* used for shading image */
u_int8_t *condensed_shading_w; /* used when a model uses "read */
@ -902,9 +1016,6 @@ typedef struct Microtek2_Scanner {
u_int8_t *temporary_buffer; /* used when automatic adjustment */
/* is selected */
char *gamma_mode; /* none, linear or custom */
/* the following defines must correspond to byte 25 of SET WINDOW body */
#define MS_MODE_LINEART 0x00
@ -965,11 +1076,12 @@ typedef struct Microtek2_Scanner {
u_int8_t lightlid35;
u_int8_t auto_adjust;
u_int8_t calib_backend;
int current_pass; /* current pass if 3-pass scan */
u_int8_t colorbalance_adjust;
int current_pass; /* current pass if 3-pass scan */
int lut_size; /* size of gamma lookup table */
int lut_entry_size; /* size of one entry in lookup table */
u_int16_t lut_size_bytes; /* size of LUT in bytes */
u_int8_t word; /* word transfer, used in some read cmds */
u_int8_t word; /* word transfer, used in some read cmds */
/* MS_COLOR_X must correspond to color field in READ IMAGE STATUS */
#define MS_COLOR_RED 0
#define MS_COLOR_GREEN 1
@ -977,7 +1089,7 @@ typedef struct Microtek2_Scanner {
#define MS_COLOR_ALL 3
u_int8_t current_color; /* for gamma calc. and 3-pass scanners */
u_int8_t current_read_color; /* dto, for RI and RIS */
u_int8_t dark; /* (KF) for dark shading */
u_int8_t dark; /* is 1 for reading dark shading */
u_int32_t ppl; /* pixels per line as returned by RII */
u_int32_t bpl; /* bytes per line as returned by RII */
u_int32_t remaining_bytes; /* remaining bytes as returned by RII */
@ -992,6 +1104,8 @@ typedef struct Microtek2_Scanner {
int bits_per_pixel_out; /* bits per pixel transf. to frontend */
u_int32_t src_buffer_size; /* size of the buffer */
int transfer_length; /* transfer length for RI command */
u_int8_t balance[3]; /* user provided balance factor for */
/* red, green and blue data */
struct {
u_int8_t *src_buffer[2]; /* two buffers because of CCD gap */
u_int8_t *src_buf;
@ -1018,99 +1132,6 @@ typedef struct Microtek2_Scanner {
} Microtek2_Scanner;
/******************************************************************************/
/* Description of options not included in saneopts.h */
/******************************************************************************/
#define M_NAME_NOBACKTRACK "no-backtracking"
#define M_TITLE_NOBACKTRACK "Disable backtracking"
#define M_DESC_NOBACKTRACK "If checked the scanner does not perform" \
" backtracking."
#define M_NAME_TOGGLELAMP "toggle-lamp"
#define M_TITLE_TOGGLELAMP "Toggle lamp of flatbed"
#define M_DESC_TOGGLELAMP "Toggles the lamp of the flatbed"
#define M_NAME_CALIBBACKEND "backend-calibration"
#define M_TITLE_CALIBBACKEND "Calibration by backend"
#define M_DESC_CALIBBACKEND "If checked the color calibration before" \
" a scan is done by the backend. Uncheck" \
" this option if you experience any problem."
#define M_NAME_LIGHTLID35 "lightlid35"
#define M_TITLE_LIGHTLID35 "Use the lightlid-35mm adapter"
#define M_DESC_LIGHTLID35 "This option turns off the lamp of the" \
" flatbed during a scan. Do not expect" \
" excellent results. Maybe this option will" \
" be removed in the future."
#define M_NAME_QUALITY_SCAN "quality_scan"
#define M_TITLE_QUALITY_SCAN "Quality scan"
#define M_DESC_QUALITY_SCAN "Highest quality but lower speed"
#define M_NAME_FAST_SCAN "fast_scan"
#define M_TITLE_FAST_SCAN "Fast scan"
#define M_DESC_FAST_SCAN "Highest speed but lower quality"
#define M_NAME_AUTOADJUST "lineart-auto-adjust"
#define M_TITLE_AUTOADJUST "Automatic adjustment of threshold value"
#define M_DESC_AUTOADJUST "If checked the backend automatically tries" \
" to determine an optimal value for the" \
" threshold."
#define M_NAME_GAMMA_MODE "gamma-correction"
#define M_TITLE_GAMMA_MODE "Gamma correction"
#define M_DESC_GAMMA_MODE "Selects the gamma correction mode."
#define M_NAME_GAMMA_BIND "bind-gamma"
#define M_TITLE_GAMMA_BIND "Bind gamma"
#define M_DESC_GAMMA_BIND "Use same gamma values for all colour channels."
#define M_NAME_GAMMA_SCALAR "scalar-gamma"
#define M_TITLE_GAMMA_SCALAR "Scalar gamma"
#define M_DESC_GAMMA_SCALAR "Selects a value for scalar gamma correction."
#define M_NAME_GAMMA_SCALAR_R "scalar-gamma-r"
#define M_TITLE_GAMMA_SCALAR_R "Scalar gamma red"
#define M_DESC_GAMMA_SCALAR_R "Selects a value for scalar gamma correction" \
" (red channel)"
#define M_NAME_GAMMA_SCALAR_G "scalar-gamma-g"
#define M_TITLE_GAMMA_SCALAR_G "Scalar gamma green"
#define M_DESC_GAMMA_SCALAR_G "Selects a value for scalar gamma correction" \
" (green channel)"
#define M_NAME_GAMMA_SCALAR_B "scalar-gamma-b"
#define M_TITLE_GAMMA_SCALAR_B "Scalar gamma blue"
#define M_DESC_GAMMA_SCALAR_B "Selects a value for scalar gamma correction" \
" (blue channel)"
#define M_NAME_CHANNEL "channel"
#define M_TITLE_CHANNEL "Channel"
#define M_DESC_CHANNEL "Selects the colour band, \"Master\" means," \
" that all colours are affected."
#define M_NAME_MIDTONE "midtone"
#define M_TITLE_MIDTONE "Midtone"
#define M_DESC_MIDTONE "Selects which radiance level should be" \
" considered \"50 % gray\"."
#define M_NAME_MIDTONE_R "midtone-r"
#define M_TITLE_MIDTONE_R "Midtone for red"
#define M_DESC_MIDTONE_R "Selects which radiance level should be" \
" considered \"50 % red\"."
#define M_NAME_MIDTONE_G "midtone-g"
#define M_TITLE_MIDTONE_G "Midtone for green"
#define M_DESC_MIDTONE_G "Selects which radiance level should be" \
" considered \"50 % green\"."
#define M_NAME_MIDTONE_B "midtone-b"
#define M_TITLE_MIDTONE_B "Midtone for blue"
#define M_DESC_MIDTONE_B "Selects which radiance level should be" \
" considered \"50 % blue\"."
/******************************************************************************/
/* Function prototypes */
/******************************************************************************/
@ -1215,15 +1236,16 @@ static SANE_Status
init_options(Microtek2_Scanner *, u_int8_t);
static SANE_Status
lineartfake_copy_pixels(Microtek2_Scanner *, u_int8_t *, u_int32_t, u_int8_t, int, FILE *);
lineartfake_copy_pixels(Microtek2_Scanner *, u_int8_t *, u_int32_t, u_int8_t,
int, FILE *);
static SANE_Status
static SANE_Status
lineartfake_proc_data(Microtek2_Scanner *);
static SANE_Status
lplconcat_copy_pixels(Microtek2_Scanner *, u_int8_t **, int, int);
static SANE_Status
static SANE_Status
lplconcat_proc_data(Microtek2_Scanner *ms);
static size_t
@ -1235,38 +1257,38 @@ parse_config_file(FILE *, Config_Temp **);
static SANE_Status
prepare_buffers(Microtek2_Scanner *);
static SANE_Status
static SANE_Status
prepare_shading_data(Microtek2_Scanner *, u_int32_t, u_int8_t **);
static SANE_Status
static SANE_Status
proc_onebit_data(Microtek2_Scanner *);
static SANE_Status
read_cx_shading_image(Microtek2_Scanner *); /* (KF) new */
read_cx_shading_image(Microtek2_Scanner *);
static SANE_Status
read_cx_shading(Microtek2_Scanner *); /* (KF) new */
read_cx_shading(Microtek2_Scanner *);
static SANE_Status
static SANE_Status
reader_process(Microtek2_Scanner *);
static SANE_Status
static SANE_Status
restore_gamma_options(SANE_Option_Descriptor *, Microtek2_Option_Value *);
static SANE_Status
segreg_copy_pixels(Microtek2_Scanner *); /* (KF) */
/* parameter list modified */
segreg_copy_pixels(Microtek2_Scanner *);
static SANE_Status
static SANE_Status
segreg_proc_data(Microtek2_Scanner *ms);
static void
set_exposure(Microtek2_Scanner *);
static SANE_Status
set_option_dependencies(SANE_Option_Descriptor *, Microtek2_Option_Value *);
static SANE_Status
set_option_dependencies(Microtek2_Scanner *,
SANE_Option_Descriptor *, Microtek2_Option_Value *);
static SANE_Status
static SANE_Status
shading_function(Microtek2_Scanner *, u_int8_t *);
static RETSIGTYPE
@ -1277,7 +1299,7 @@ wordchunky_copy_pixels(u_int8_t *, u_int32_t, int, FILE *);
static SANE_Status
wordchunky_proc_data(Microtek2_Scanner *);
/******************************************************************************/
@ -1291,7 +1313,7 @@ static SANE_Status
scsi_read_attributes(Microtek2_Info *, char *, u_int8_t);
static SANE_Status
scsi_read_control_bits(Microtek2_Scanner *, int);
scsi_read_control_bits(Microtek2_Scanner *, int);
/* currently not used */
#if 0
@ -1322,7 +1344,7 @@ static SANE_Status
scsi_send_shading(Microtek2_Scanner *, u_int8_t *, u_int32_t, u_int8_t);
static SANE_Status
scsi_read_shading(Microtek2_Scanner *, u_int8_t *, u_int32_t); /* (KF) new */
scsi_read_shading(Microtek2_Scanner *, u_int8_t *, u_int32_t);
static SANE_Status
scsi_send_system_status(Microtek2_Device *, int);

Wyświetl plik

@ -1,7 +1,7 @@
. .IX sane-microtek2
." Process this file with
." groff -man -Tascii sane-microtek2
.TH sane-microtek2 5 "19 May 2001"
." man -l sane-microtek2.man
.TH sane-microtek2 5 "14 Aug 2001"
.SH NAME
sane-microtek2 - SANE backend for Microtek scanners with SCSI-2 command set
.SH DESCRIPTION
@ -9,11 +9,11 @@ The
.B sane-microtek2
library implements a SANE (Scanner Access Now Easy) backend that
provides access to some Microtek scanners with a SCSI-2 command set.
This backend can be considered alpha. Some scanner models are reported to work
This backend can be considered alpha. Some scanner models are reported to work
well, others not.
.PP
There exists a different backend for Microtek scanners with SCSI-1 command
set.
.PP
There exists a different backend for Microtek scanners with SCSI-1 command
set.
Refer to sane-microtek(5) for details.
.PP
And there is work in progress for the ScanMaker 3600.
@ -21,117 +21,123 @@ See http://sourceforge.net/projects/sm3600
.PP
At present, the following scanners are known positively to work with this
backend:
.PP
.PP
Vendor Product id: Remark
.br
.br
-------- -------------- -------------
.br
.br
Microtek E3+ Parport and SCSI
.br
.br
Microtek X6 SCSI
.br
.br
Microtek X6EL SCSI
.br
.br
Microtek X6USB USB
.br
.br
Microtek ScanMaker V300 Parport and SCSI
.br
.br
Microtek ScanMaker V310 Parport and SCSI
.br
.br
Microtek ScanMaker V600 Parport and SCSI
.br
.br
Microtek ScanMaker 330 SCSI
.br
.br
Microtek ScanMaker 630 SCSI
.br
.br
Microtek ScanMaker 636 SCSI
.br
.br
Microtek ScanMaker 9600XL SCSI; only flatbed mode?
.br
.br
Microtek Phantom 330CX Parport
.br
Microtek SlimScan C3 Parport
.br
.br
Microtek Phantom 636 SCSI
.br
.br
Microtek Phantom 636CX Parport
.br
.br
Microtek V6USL SCSI (and USB ???)
.br
.br
Vobis HighScan SCSI (E3+ based models)
.br
.br
Scanport? SQ300 Parport?
.br
.br
Scanpaq SQ2030 Parport
.PP
.PP
Additional information can be found at
.BR http://www.mostang.com/sane/ .
If you own a Microtek scanner with SCSI-2 interface other than the ones
listed
above, it may or may not work with SANE! Because equal scanners are sold under
different names in different countries your model may be equivalent to one of
.B www.mostang.com/sane/
.
If you own a Microtek scanner with SCSI-2 interface other than the ones
listed
above, it may or may not work with SANE! Because equal scanners are sold under
different names in different countries your model may be equivalent to one of
the above.
.PP
.PP
The parport scanners work with the ppscsi + onscsi kernel modules.
.PP
If you try your scanner for the first time keep an eye on it. If it gets
commands that it doesn't understand the scanhead may go beyond the scan area.
The scanner then makes strange noises. In this case immedieately switch off
the scanner or disconnect its power cable to prevent damages!
.PP
If your scanner is a different one than the models mentioned above and it is
working please tell the author about it. It would be nice if you add a logfile
.PP
The USB scanners work with the microtek kernel module.
.PP
Both parport and USB scanners need the generic SCSI support, so check if you
have loaded the scsi_mod and sg modules!
.PP
If you try your scanner for the first time keep an eye on it. If it gets
commands that it doesn't understand the scanhead may go beyond the scan area.
The scanner then makes strange noises. In this case immedieately switch off
the scanner or disconnect its power cable to prevent damages!
.PP
If your scanner is a different one than the models mentioned above and it is
working please tell the author about it. It would be nice if you add a logfile
to this information (creation of the logfile: see below).
.PP
If your scanner is not working properly you also should create a logfile and
send it to the author. He will use the information to improve the backend and
.PP
If your scanner is not working properly you also should create a logfile and
send it to the author. He will use the information to improve the backend and
possibly make your scanner work.
.PP
.br
.PP
.br
How to create the logfile?
.TP
.TP
- put the line
.br
"option dump 2" into your
.br
"option dump 2" into your
.I microtek2.conf
file or change the existing "option dump" to "2"
.TP
.TP
- in a terminal (bash) type
.br
"export SANE_DEBUG_MICROTEK2=30" and then
.br
.br
"export SANE_DEBUG_MICROTEK2=30" and then
.br
"scanimage -l0 -t0 -x100 -y20 2>scan.log >sout.pnm"
.br
You get two files: scan.log contains the logfile and sout.pnm the scanned
.br
You get two files: scan.log contains the logfile and sout.pnm the scanned
image (if there was scanned something). Zip them before sending.
.SH "FRONTEND OPTIONS"
This backend dynamically enables the options for the frontend, that are
supported by the scanner in dependence of the scanning-mode and other
options.
This backend dynamically enables the options for the frontend, that are
supported by the scanner in dependence of the scanning-mode and other
options.
Not supported options are disabled.
.PP
.PP
The following options are supported by the Microtek2-driver:
.PP
.PP
Color, grayscale, halftone and lineart scans.
.PP
Highlight, midtone, shadow, contrast, brightness, exposure time control,
gamma correction, threshold (dependent of the scan mode and the scanner
.PP
Highlight, midtone, shadow, contrast, brightness, exposure time control,
gamma correction, threshold (dependent of the scan mode and the scanner
capabilities)
.PP
.PP
Transparency media adapter, automatic document feeder
.PP
Additional options can be enabled or disabled in the
.PP
Additional options can be enabled or disabled in the
.I microtek2.conf
file. See the configuration section of this manpage.
.SH "DEVICE NAMES"
This backend expects device names of the form:
.PP
.PP
.RS
.I special
.RE
.PP
.PP
Where
.I special
is the UNIX path-name for the special device that corresponds to the
@ -139,148 +145,159 @@ scanner. The special device name must be a generic SCSI device or a
symlink to such a device. Under Linux, such a device name could be
.I /dev/sga
or
.I /dev/sge
.I /dev/sge
for example.
.SH "CONFIGURATION"
The configuration file for this backend resides in
.IR @CONFIGDIR@/microtek2.conf .
.I @CONFIGDIR@/microtek2.conf
.
Its contents is a list of device names that correspond to Microtek
scanners with SCSI-2 interface. Empty lines and lines starting with
scanners with SCSI-2 interface. Empty lines and lines starting with
a hash mark (#) are ignored.
.PP
The configuration file may also contain options. Global options that are valid
for all devices are placed above the device names. Device-specific options
are
.PP
The configuration file may also contain options. Global options that are valid
for all devices are placed above the device names. Device-specific options
are
placed under the device name. Currently the following options are supported:
.PP
.PP
.RS
option dump <n>
.br
.br
option strip-height <n>
.br
.br
option no-backtrack-option <on/off>
.br
.br
option lightlid-35 <on/off>
.br
.br
option toggle-lamp <on/off>
.br
.br
option lineart-autoadjust <on/off>
.br
.br
option backend-calibration <on/off>
.br
option colorbalance-adjust <on/off>
.RE
.PP
.PP
.I option dump <n>
enables printing of additional information about the SCSI commands that are sent to
the scanner to stderr. This option is primarily useful for debugging purpose.
This option has to be a global option and is best placed at the top of the
enables printing of additional information about the SCSI commands that are sent to
the scanner to stderr. This option is primarily useful for debugging purpose.
This option has to be a global option and is best placed at the top of the
.I microtek2.conf
file.
.PP
.PP
If n=1 the contents of the command blocks
and the results for the INQUIRY and READ SCANNER ATTRIBUTES command are
and the results for the INQUIRY and READ SCANNER ATTRIBUTES command are
printed to stderr.
.PP
.PP
If n=2 the contents of the command blocks for all other SCSI commands are
printed to stderr, too. If n=3 the contents of the gamma table is
printed to stderr, too. If n=3 the contents of the gamma table is
printed, too. If n=4 all scan data is additionally printed to stderr.
.PP
.PP
The default is n=1.
.PP
.IR option\ strip-height\ <n> ,
where <n> is a floating point number, limits the amount of data that is
.PP
.I option strip-height <n>
, where <n> is a floating point number, limits the amount of data that is
read from the scanner with one read command.
The unit is inch and <n> defaults to 1.0, if this option is not set in the
configuration file. If less than <n> inch of data fit into the SCSI buffer,
The unit is inch and <n> defaults to 1.0, if this option is not set in the
configuration file. If less than <n> inch of data fit into the SCSI buffer,
then the smaller value is used and this option has no effect.
.PP
.PP
If your system has a big SCSI buffer and you want to make use of the whole
buffer, increase the value for <n>. For example, if <n> is set to 14.0,
no restrictions apply for scanners with a letter, legal or A4 sized scan area.
.PP
.PP
The following options enable or disable additional frontend options. If an
.PP
.PP
The following options enable or disable additional frontend options. If an
option is set to <on> an appropriate option will appear in the frontend.
.PP
.PP
.I option no-backtrack-option <on/off>
prevents the scanner head from moving backwards between the read commands.
This
prevents the scanner head from moving backwards between the read commands.
This
speeds up scanning. Try it.
.PP
.PP
.I option lightlid-35 <on/off>
If you use the LightLid-35 transparency adapter this option switches off the
flatbed lamp during the scan.
.PP
If you use the LightLid-35 transparency adapter you get an advanced
option which switches off the flatbed lamp during the scan.
.PP
.I option toggle-lamp <on/off>
You get a button in the frontend where you can switch on and off the flatbed
You get a button in the frontend where you can switch on and off the flatbed
lamp.
.PP
.PP
.I option lineart-autoadjust <on/off>
You can tell the backend to try to determine a good value for the lineart
You can tell the backend to try to determine a good value for the lineart
threshold.
.PP
.PP
.I option backend-calibration <on/off>
Some scanners (e.g. Phantom 330CX and 636CX) need to have calibrated the data
Some scanners (e.g. Phantom 330CX and 636CX) need to have calibrated the data
by the backend. Try this option if you see vertical stripes in your pictures.
.PP
.PP
.I option colorbalance-adjust <on/off>
Some scanners (e.g. Phantom 330CX and 636CX) need to have corrected
the color balance. If this option is enabled you get advanced options
where you can balance the colors. And you will have a button
to use the values that the firmware of the scanner provides.
.PP
A sample configuration file is shown below:
.PP
.PP
.RS
option dump 1
.br
.br
option strip-height 1.0
.br
.br
/dev/scanner
.br
.br
option no-backtrack-option on
.br
.br
# this is a comment
.br
.br
/dev/sge
.br
.br
option lightlid-35 on
.RE
This backend also supports the new configuration file format which makes
it easier to detect scanners under Linux. If you have only one scanner it
would be best to use the following configuration file for this backend:
.PP
.PP
.RS
option dump 1
.br
.br
option strip-height 14.0
.br
.br
option no-backtrack-option on
.br
.br
option backend-calibration on
.br
.br
option lightlid-35 on
.br
.br
option toggle-lamp on
.br
.br
option lineart-autoadjust on
.br
.br
option colorbalance-adjust off
.br
scsi * * Scanner
.RE
In this case all SCSI-Scanners should be detected automatically because of the
.PP
In this case all SCSI-Scanners should be detected automatically because of the
.PP
scsi * * Scanner
.PP
.PP
line.
.SH "FILES"
.TP
.TP
.I @CONFIGDIR@/microtek2.conf
The backend configuration file.
.TP
.TP
.I @LIBDIR@/libsane-microtek2.a
The static library implementing this backend.
.TP
.TP
.I @LIBDIR@/libsane-microtek2.so
The shared library implementing this backend (present on systems that
support dynamic loading).
.SH "ENVIRONMENT"
.TP
.TP
.B SANE_DEBUG_MICROTEK2
If the library was compiled with debug support enabled, this
environment variable controls the debug level for this backend. E.g.,
@ -288,15 +305,15 @@ a value of 255 requests all debug output to be printed. Smaller
levels reduce verbosity. To see error messages on stderr set
SANE_DEBUG_MICROTEK2 to 1 (Remark: The whole debugging levels should
be better revised).
.br
.br
E.g. just say:
.br
.br
export SANE_DEBUG_MICROTEK2=128
.SH "SEE ALSO"
sane-scsi(5), sane(7)
.SH "AUTHORS"
Bernd Schroeder (not active anymore)
.br
.br
Karsten Festag karsten.festag@t-online.de