- moved experimental version to current tree

merge-requests/1/head
Stéphane Voltz 2007-10-01 04:27:24 +00:00
rodzic 8c638f5802
commit dce6df9182
11 zmienionych plików z 6042 dodań i 3215 usunięć

Wyświetl plik

@ -1,6 +1,14 @@
2007-10-01 Stephane Voltz <stef.dev@free.fr>
* doc/sane-umax_pp.man doc/description/umax_pp.desc:
* doc/sane-lexmark.man doc/descriptions/lexmark.desc
backend/Makefile.in backend/lexmark.c backend/lexmark_low.c
backend/lexmark_sensors.c backend/lexmark_models.c
backend/lexmark.conf.in:
moved experimental version to current tree
2007-10-01 Stephane Voltz <stef.dev@free.fr>
* doc/sane-umax_pp.man doc/descriptions/umax_pp.desc:
added Genius ColorPage-Life Pro as supported scanner
by the umax_pp backend

Wyświetl plik

@ -123,7 +123,8 @@ DISTFILES = abaton.c abaton.conf.in abaton.h agfafocus.c agfafocus.conf.in \
hp5400_sane.c hp5400_sanei.c hp5400_sanei.h \
ibm.c ibm.conf.in ibm.h ibm-scsi.c \
leo.c leo.h leo.conf.in \
lexmark.c lexmark-x1100.c lexmark.h lexmark.conf.in \
lexmark.c lexmark_low.c lexmark_sensors.c lexmark_devices.c lexmark.h \
lexmark.conf.in \
lm9830.h \
ma1509.c ma1509.conf.in ma1509.h \
Makefile.in matsushita.c \
@ -315,7 +316,7 @@ EXTRA_hp = hp-accessor hp-device hp-handle hp-hpmem hp-option hp-scl
EXTRA_umax_pp = umax_pp_low umax_pp_mid
EXTRA_epson = epson_scsi epson_usb
EXTRA_epson2 = epson2_scsi epson_usb epson2_net epson2-io epson2-commands
EXTRA_lexmark = lexmark-x1100
EXTRA_lexmark = lexmark_low
EXTRA_pixma = pixma_io_sanei pixma_common pixma_mp150 pixma_mp730 pixma_mp750
# When preloading dll, we need to add in all preloaded objects:

Plik diff jest za duży Load Diff

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,2 +1,6 @@
#usb /dev/usb/scanner0
# X11xx series
usb 0x043d 0x007c
# X12xx series
usb 0x043d 0x007d
# Dell A920
usb 0x413c 0x5105

Wyświetl plik

@ -2,6 +2,7 @@
lexmark.h - SANE library for Lexmark scanners.
Copyright (C) 2003-2004 Lexmark International, Inc. (original source)
Copyright (C) 2005 Fred Odendaal
Copyright (C) 2006-2007 Stéphane Voltz <stef.dev@free.fr>
This file is part of the SANE package.
@ -44,34 +45,70 @@
#ifndef LEXMARK_H
#define LEXMARK_H
/* Force the backend name for all files using this include */
#ifdef BACKEND_NAME
#undef BACKEND_NAME
#define BACKEND_NAME lexmark
#endif
#define DEBUG_NOT_STATIC
#define SANE_NAME_PAPER_SIZE "paper-size"
#define SANE_TITLE_PAPER_SIZE SANE_I18N("Paper size")
#define SANE_DESC_PAPER_SIZE \
SANE_I18N("Selects the size of the area to be scanned.");
typedef enum
{
OPT_NUM_OPTS = 0,
OPT_MODE,
/* OPT_X_DPI, */
/* OPT_Y_DPI, */
OPT_RESOLUTION,
OPT_PREVIEW,
OPT_SCAN_SIZE,
OPT_THRESHOLD,
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 */
/* manual gain handling */
OPT_MANUAL_GAIN, /* 6 */
OPT_GRAY_GAIN,
OPT_RED_GAIN,
OPT_GREEN_GAIN,
OPT_BLUE_GAIN,
/* must come last: */
NUM_OPTIONS
}
Lexmark_Options;
/*
* this struct is used to described the specific parts of each model
*/
typedef struct Lexmark_Model
{
SANE_Int vendor_id;
SANE_Int product_id;
SANE_Byte mainboard_id; /* matched against the content of reg B0 */
SANE_String_Const name;
SANE_String_Const vendor;
SANE_String_Const model;
SANE_Int motor_type;
SANE_Int sensor_type;
} Lexmark_Model;
/*
* this struct is used to store per sensor model constants
*/
typedef struct Lexmark_Sensor
{
SANE_Int id;
SANE_Int offset_startx; /* starting x for offset calibration */
SANE_Int offset_endx; /* end x for offset calibration */
SANE_Int offset_threshold; /* target threshold for offset calibration */
SANE_Int xoffset; /* number of unusable pixels on the start of the sensor */
SANE_Int default_gain; /* value of the default gain for a scan */
SANE_Int red_gain_target;
SANE_Int green_gain_target;
SANE_Int blue_gain_target;
SANE_Int gray_gain_target;
SANE_Int red_shading_target;
SANE_Int green_shading_target;
SANE_Int blue_shading_target;
SANE_Int gray_shading_target;
SANE_Int offset_fallback; /* offset to use in case offset calibration fails */
SANE_Int gain_fallback; /* gain to use in case offset calibration fails */
} Lexmark_Sensor;
typedef enum
{
RED = 0,
@ -80,6 +117,16 @@ typedef enum
}
Scan_Regions;
/* struct to hold pre channel settings */
typedef struct Channels
{
SANE_Word red;
SANE_Word green;
SANE_Word blue;
SANE_Word gray;
}
Channels;
/** @name Option_Value union
* convenience union to access option values given to the backend
* @{
@ -131,8 +178,6 @@ typedef struct Lexmark_Device
SANE_Parameters params;
SANE_Int devnum;
long data_size;
SANE_Int pixel_height;
SANE_Int pixel_width;
SANE_Bool initialized;
SANE_Bool eof;
SANE_Int x_dpi;
@ -141,31 +186,62 @@ typedef struct Lexmark_Device
SANE_Bool device_cancelled;
SANE_Int cancel_ctr;
SANE_Byte *transfer_buffer;
size_t bytes_read;
size_t bytes_remaining;
size_t bytes_in_buffer;
SANE_Byte *read_pointer;
Read_Buffer *read_buffer;
SANE_Byte threshold;
Lexmark_Model model; /* per model data */
Lexmark_Sensor *sensor;
SANE_Byte shadow_regs[255]; /* shadow registers */
struct Channels offset;
struct Channels gain;
float *shading_coeff;
}
Lexmark_Device;
/* Maximum transfer size */
#define MAX_XFER_SIZE 0xFFC0
/* motors and sensors type defines */
#define X1100_MOTOR 1
#define A920_MOTOR 2
#define X1100_B2_SENSOR 3
#define A920_SENSOR 4
#define X1100_2C_SENSOR 5
#define X1200_SENSOR 6 /* X1200 on USB 1.0 */
#define X1200_USB2_SENSOR 7 /* X1200 on USB 2.0 */
/* Non-static Function Proto-types (called by lexmark.c) */
SANE_Status sanei_lexmark_x1100_init (void);
void sanei_lexmark_x1100_destroy (Lexmark_Device * dev);
SANE_Status sanei_lexmark_x1100_open_device (SANE_String_Const devname,
SANE_Int * devnum);
void sanei_lexmark_x1100_close_device (SANE_Int devnum);
SANE_Bool sanei_lexmark_x1100_search_home_fwd (Lexmark_Device * dev);
void sanei_lexmark_x1100_move_fwd (SANE_Int distance, Lexmark_Device * dev);
SANE_Bool sanei_lexmark_x1100_search_home_bwd (Lexmark_Device * dev);
SANE_Int sanei_lexmark_x1100_find_start_line (SANE_Int devnum);
SANE_Status sanei_lexmark_x1100_set_scan_regs (Lexmark_Device * dev,
SANE_Int offset);
SANE_Status sanei_lexmark_x1100_start_scan (Lexmark_Device * dev);
long sanei_lexmark_x1100_read_scan_data (SANE_Byte * data, SANE_Int size,
SANE_Status sanei_lexmark_low_init (Lexmark_Device * dev);
void sanei_lexmark_low_destroy (Lexmark_Device * dev);
SANE_Status sanei_lexmark_low_open_device (Lexmark_Device * dev);
void sanei_lexmark_low_close_device (Lexmark_Device * dev);
SANE_Bool sanei_lexmark_low_search_home_fwd (Lexmark_Device * dev);
void sanei_lexmark_low_move_fwd (SANE_Int distance, Lexmark_Device * dev,
SANE_Byte * regs);
SANE_Bool sanei_lexmark_low_search_home_bwd (Lexmark_Device * dev);
SANE_Int sanei_lexmark_low_find_start_line (Lexmark_Device * dev);
SANE_Status sanei_lexmark_low_set_scan_regs (Lexmark_Device * dev,
SANE_Int offset,
SANE_Bool calibrated);
SANE_Status sanei_lexmark_low_start_scan (Lexmark_Device * dev);
long sanei_lexmark_low_read_scan_data (SANE_Byte * data, SANE_Int size,
Lexmark_Device * dev);
SANE_Status sanei_lexmark_low_assign_model (Lexmark_Device * dev,
char *devname, SANE_Int vendor,
SANE_Int product,
SANE_Byte mainboard);
/*
* scanner calibration functions
*/
SANE_Status sanei_lexmark_low_offset_calibration (Lexmark_Device * dev);
SANE_Status sanei_lexmark_low_gain_calibration (Lexmark_Device * dev);
SANE_Status sanei_lexmark_low_shading_calibration (Lexmark_Device * dev);
SANE_Status sanei_lexmark_low_calibration (Lexmark_Device * dev);
#endif /* LEXMARK_H */

5150
backend/lexmark_low.c 100644

Plik diff jest za duży Load Diff

Wyświetl plik

@ -0,0 +1,93 @@
/* sane - Scanner Access Now Easy.
Copyright (C) 2006-2007 Stéphane Voltz <stef.dev@free.fr>
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.
*/
static Lexmark_Model model_list[] = {
{
0x043d, /* vendor id */
0x007c, /* product id */
0xb2, /* submodel id */
"Lexmark X1100", /* name */
"Lexmark", /* vendor */
"X1100/rev. B2", /* model */
X1100_MOTOR, /* X1100 series has 2 sensors */
X1100_B2_SENSOR},
{
0x043d, /* vendor id */
0x007c, /* product id */
0x2c, /* submodel id */
"Lexmark X1100", /* name */
"Lexmark", /* vendor */
"X1100/rev. 2C", /* model */
A920_MOTOR, /* X1100 series has 2 sensors, 2C or B2. It
is detected at sane_open() */
X1100_2C_SENSOR},
{
0x413c, /* vendor id */
0x5105, /* product id */
0x2c, /* submodel id */
"Dell A920", /* name */
"Dell", /* vendor */
"A920", /* model */
A920_MOTOR,
A920_SENSOR},
{
0x043d, /* vendor id */
0x007d, /* product id */
0x87, /* submodel id */
"Lexmark X1200", /* name */
"Lexmark", /* vendor */
"X1200/USB1.1", /* model */
A920_MOTOR,
X1200_SENSOR},
{
0x043d, /* vendor id */
0x007d, /* product id */
0x97, /* submodel id */
"Lexmark X1200", /* name */
"Lexmark", /* vendor */
"X1200/USB2.0", /* model */
A920_MOTOR,
X1200_USB2_SENSOR},
{ /* termination model, must be last */
0, 0, 0, NULL, NULL, NULL, 0, 0}
}; /* end models description */

Wyświetl plik

@ -0,0 +1,122 @@
/* sane - Scanner Access Now Easy.
Copyright (C) 2006-2007 Stéphane Voltz <stef.dev@free.fr>
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.
*/
static Lexmark_Sensor sensor_list[] = {
{
X1100_B2_SENSOR,
/* start x, end x and target average for offset calibration */
48,80,6,
/* usable pixel sensor startx */
106,
/* default gain */
16,
/* gain calibration targets */
180, 180, 180, 180,
/* shading correction targets */
260, 260, 260, 260,
/* offset and gain fallback */
0x70, 17
},
{
X1100_2C_SENSOR,
/* start x, end x and target average for offset calibration */
48,80,12,
/* usable pixel sensor startx */
106,
/* default gain */
10,
/* gain calibration */
140, 150, 150, 150,
/* shading correction */
260, 260, 260, 260,
/* offset and gain fallback */
0x70, 11
},
{ /* USB 1.1 settings */
X1200_SENSOR,
/* start x, end x and target average for offset calibration */
32,64,15,
/* usable pixel sensor startx */
136,
/* default gain */
16,
/* gain calibration */
180, 180, 180, 180,
/* shading correction */
260, 260, 260, 260,
/* offset and gain fallback */
0x86, 16
},
{ /* this one is a 1200 on USB2.0 */
X1200_USB2_SENSOR,
/* start x, end x and target average for offset calibration */
32,64,12,
/* usable pixel sensor startx */
136,
/* default gain */
16,
/* gain calibration */
180, 180, 180, 180,
/* shading correction */
260, 260, 260, 260,
/* offset and gain fallback */
0x86, 16
},
{
A920_SENSOR,
/* start x, end x and target average for offset calibration */
48,80,6,
/* usable pixel sensor startx */
106,
/* default gain */
12,
/* gain calibration target */
130, 145, 150, 145,
/* gain calibration target */
260, 260, 260, 260,
/* offset and gain fallback */
0x70, 13
},
/* termination list sensor, must be last */
{0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};

Wyświetl plik

@ -31,11 +31,10 @@
:status :untested
:model "X1130"
:url "/unsupported/lexmark-x1150.html"
:interface "USB"
:usbid "0x043d" "0x007c"
:status :basic
:comment "The images scanned have a lot of vertical lines"
:status :good
:comment "Supports 75, 150, 300, 600 dpi"
:model "X1140"
:interface "USB"
@ -46,25 +45,35 @@
:url "/unsupported/lexmark-x1150.html"
:interface "USB"
:usbid "0x043d" "0x007c"
:status :minimal
:comment "Colors don't seem to be ok. Scanned white pages appear purple."
:status :good
:comment "Supports 75, 150, 300, 600 dpi"
:model "X1170"
:interface "USB"
:usbid "0x043d" "0x007c"
:status :basic
:comment "Colors aren't so bright. Bed-wide pictures are unscannable because the scan head never reaches the end of the bed (neither with letter selected). It leaves almost 2 cm out."
:status :good
:comment "Supports 75, 150, 300, 600 dpi"
:model "X1180"
:url "/unsupported/lexmark-x1150.html"
:interface "USB"
:usbid "0x043d" "0x007c"
:status :basic
:status :good
:model "X1185"
:interface "USB"
:usbid "0x043d" "0x007c"
:status :basic
:status :good
:comment "Tested with xscanimage. Supports 75, 150, 300, 600, 1200(600x1200) dpi resolutions. Does grayscale or colour scans in the following sizes: wallet, 3x5, 4x6, 5x7, 8x10, letter."
:model "X12xx"
:interface "USB"
:usbid "0x043d" "0x007d"
:status :good
:comment "USB1.1 is OK, USB2.0 needs testing"
:mfg "Dell" ; name a manufacturer
:model "A920"
:interface "USB"
:usbid "0x413c" "0x5105"
:status :good
:comment "Relabelled X11xx model"

Wyświetl plik

@ -1,30 +1,33 @@
.TH sane-lexmark 5 "02 September 2005" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
.IX sane-lexmark
.SH NAME
sane-lexmark \- SANE backend for Lexmark X1100 Series scanners
.SH DESCRIPTION
.\" .IX sane-lexmark
.TH "sane-lexmark" "5" "16 April 2007" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
.SH "NAME"
sane\-lexmark \- SANE backend for Lexmark X1100/X1200 Series scanners
.SH "DESCRIPTION"
The
.B sane-lexmark
.B sane\-lexmark
library implements a SANE (Scanner Access Now Easy) backend that
provides access to the scanner part of Lexmark X1100 AIOs. This backend
provides access to the scanner part of Lexmark X1100/X1200 AIOs. This backend
should be considered
.B beta-quality
.B beta\-quality
software!
.PP
.PP
The scanners that should work with this backend are:
.PP
.PP
.RS
.ft CR
.nf
.nf
Vendor Model status
---------------------- -----------
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-
Lexmark X1110 untested
Lexmark X1140 untested
Lexmark X1150 untested
Lexmark X1170 untested
Lexmark X1180 basic
Lexmark X1185 basic
.fi
Lexmark X1150 good
Lexmark X1170 good
Lexmark X1180 good
Lexmark X1185 complete
Lexmark X12xx good in USB1.1,
not fully tested in USB2.0
Dell A920 good
.fi
.ft R
.RE
@ -32,22 +35,22 @@ The options the backend supports can either be selected through
command line options to programs like scanimage or through GUI
elements in xscanimage or xsane.
.br
.br
If you have any strange behavior, please report to the backend
maintainer or to the SANE mailing list.
Valid command line options and their syntax can be listed by using
.RS
scanimage --help -d lexmark:usb:<usb port>
scanimage \-\-help \-d lexmark:usb:<usb port>
.RE
.TP
.TP
.B Scan Mode Options
.TP
.B --mode
.TP
.B \-\-mode
selects the basic mode of operation of the scanner valid choices are
.IR Color ,
.I R Color ,
.I Gray
and
.I Lineart
@ -55,96 +58,91 @@ The default mode is Color. The Lineart mode is black and white only (1 bit).
Grayscale will produce 256 levels of gray (8 bits). Color mode allows for over
16 million different colors produced from 24 bits of color information.
.TP
.B --resolution
.TP
.B \-\-resolution
selects the resolution for a scan. The horizontal and vertical resolutions are set
by the value of this option. The scanner is capable of the following resolutions for the specified option value:
.PP
.PP
.RS
.ft CR
.nf
.nf
Value Hor. Resolution Vert. Resolution
----- --------------- -------------------
\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
75 75dpi 75dpi
150 150dpi 150dpi
300 300dpi 300dpi
600 600dpi 600dpi
1200 600dpi 1200dpi
.fi
1200 600dpi 1200dpi (only for X11xx models with 'B2' sensor)
.fi
.ft R
.RE
.TP
.B --preview
.B \-\-preview
requests a preview scan. The resolution used for that scan is 75 dpi
and the scan area and the scan mode are as specified through their options,
or the default if not specified. The default value for preview mode is "no".
.TP
.B --paper-size
selects the size of the area to be scanned. Valid sizes are
.IR Wallet ,
.IR 3x5 ,
.IR 4x6 ,
.IR 5x7 ,
.IR 8x10 ,
.IR Letter ,
the default size is 3x5.
.TP
.B --threshold
selects the minimum-brightness to get a white point. The threshold is only used with Lineart mode scans.
.B \-\-threshold
selects the minimum\-brightness to get a white point. The threshold is only used with Lineart mode scans.
It is specified as a percentage in the range 0..100% (in steps of 1).
The default value of the threshold option is 50.
.SH CONFIGURATION FILE
.SH "CONFIGURATION FILE"
The configuration file @CONFIGDIR@/lexmark.conf contains only the usb device id (eg usb 0x043d 0x007c).
.SH FILES
.TP
.I @LIBDIR@/libsane-lexmark.a
.SH "FILES"
.TP
.I @LIBDIR@/libsane\-lexmark.a
The static library implementing this backend.
.TP
.I @LIBDIR@/libsane-lexmark.so
.TP
.I @LIBDIR@/libsane\-lexmark.so
The shared library implementing this backend (present on systems that
support dynamic loading).
.SH ENVIRONMENT
.TP
.SH "ENVIRONMENT"
.TP
.B SANE_DEBUG_LEXMARK
.B SANE_DEBUG_LEXMARK_LOW
If the library was compiled with debug support enabled, this
environment variable controls the debug level for this backend. E.g.,
a value of 128 requests all debug output to be printed. Smaller levels
a value of 255 requests all debug output to be printed. Smaller levels
reduce verbosity.
.SH LIMITATIONS
.SH "LIMITATIONS"
The windows TWAIN driver has many more options than this SANE
backend. However they are only software adjustments. This backend only
implements what the scanner can support.
.SH BUGS
implements what the scanner can support. For instance, shading correction
(vertical stripes due to sensor variation across its width) is done in
software. Head park position is also detected by software.
The data compression isn't supported for the X1200 serie on USB 1.1,
leading to slow scans.
.SH "BUGS"
.br
Jerky movement on 600dpi gray 8x10 scan.
.br
Color calibration not implemented.
.br
Dark compensation not implemented.
No bugs currently known.
.SH "SEE ALSO"
sane-scsi(5), scanimage(1), xscanimage(1), xsane(1), sane(7)
sane\-scsi(5), scanimage(1), xscanimage(1), xsane(1), sane(7)
.SH AUTHOR
.TP
The package is actively maintained by Fred Odendaal.
.SH "AUTHOR"
.TP
The backend was originaly written by Fred Odendaal.
.I http://ca.geocities.com/freshshelf@rogers.com/
.TP
The new version is currently developped by StÃphane Voltz.
.I http://stef.dev.free.fr/sane/lexmark
.SH "CREDITS"
.TP
Many thanks go to:
Julien Furgerot who lend me a Dell A920.
Robert Price, Dani Ele and Dalai Felinto for the time they spent recording
USB activity and testing the experimental version.