kopia lustrzana https://gitlab.com/sane-project/backends
Merge branch 'master' of ssh://git.debian.org/git/sane/sane-backends
commit
3d5cfff36a
50
ChangeLog
50
ChangeLog
|
@ -1,3 +1,53 @@
|
||||||
|
2010-11-24 m. allan noah <kitno455 at gmail dot com>
|
||||||
|
* backend/fujitsu.c, backend/fujitsu.conf.in,
|
||||||
|
doc/descriptions/fujitsu.desc, doc/sane-fujitsu.man:
|
||||||
|
Fujitsu backend versions 103 and 104
|
||||||
|
- remove compiled-in default config file
|
||||||
|
- initial support for new fi-6xxx machines
|
||||||
|
- never request more than s->buffer_size from scanner
|
||||||
|
- silence noisy set_window() calls from init_interlace()
|
||||||
|
|
||||||
|
2010-11-19 Julien Blache <jb@jblache.org>
|
||||||
|
* doc/descriptions-external/epkowa.desc: update for iScan 2.26.1,
|
||||||
|
from Olaf Meeuwissen <olaf.meeuwissen@avasys.jp>.
|
||||||
|
|
||||||
|
2010-11-17 Stéphane Voltz <stef.dev@free.fr>
|
||||||
|
* backend/genesys.c: don't write scan data unless specified by debug
|
||||||
|
level.
|
||||||
|
|
||||||
|
2010-11-08 Marc Deslauriers <marc.deslauriers@ubuntu.com>
|
||||||
|
* backend/v4l.c: convert v4l1 BGR data to RGB; v4l1 always returns
|
||||||
|
BGR for RGB due to a coding error way back.
|
||||||
|
|
||||||
|
2010-11-07 Marc Deslauriers <marc.deslauriers@ubuntu.com>
|
||||||
|
* backend/v4l.c: loop through the read buffers in the v4l backend so
|
||||||
|
we don't get stale frames.
|
||||||
|
|
||||||
|
2010-11-06 Stéphane Voltz <stef.dev@free.fr>
|
||||||
|
* frontend/scanimage.c doc/scanimage.man: add -A/--all-options to list
|
||||||
|
all control options exposed by a backend.
|
||||||
|
|
||||||
|
2010-11-01 Stéphane Voltz <stef.dev@free.fr>
|
||||||
|
* frontend/scanimage.c: don't print readonly device options since
|
||||||
|
they can't be set on command line
|
||||||
|
|
||||||
|
2010-11-01 Stéphane Voltz <stef.dev@free.fr>
|
||||||
|
* backend/genesys.c backend/genesys_devices.c backend/genesys_gl843.c
|
||||||
|
backend/genesys_gl843.h backend/genesys_gl847.c: up build number to 41,
|
||||||
|
rework head parking,
|
||||||
|
fixed clear-calibration option reading,
|
||||||
|
make calibration cache expire for non sheetfed gl847 scanners,
|
||||||
|
tuned KV-SS080 timings to improve image quality,
|
||||||
|
raised LiDE 100/200 defaukt gamma to 1.7
|
||||||
|
|
||||||
|
2010-10-31 Julien Blache <jb@jblache.org>
|
||||||
|
* doc/descriptions/hp.desc: add SCSI IDs for ScanJet 4c.
|
||||||
|
|
||||||
|
2010-10-30 Julien Blache <jb@jblache.org>
|
||||||
|
* backend/xerox_mfp.conf.in, doc/descriptions/xerox_mfp.desc: add
|
||||||
|
Samsung SCX 4824 & 4825FN (Debian #601748). Resync desc file with
|
||||||
|
config file.
|
||||||
|
|
||||||
2010-10-13 Stéphane Voltz <stef.dev@free.fr>
|
2010-10-13 Stéphane Voltz <stef.dev@free.fr>
|
||||||
* backend/genesys_devices.c backend/genesys_gl843.c
|
* backend/genesys_devices.c backend/genesys_gl843.c
|
||||||
backend/genesys_gl843.h: added 100, 150, 400 and 600 dpi modes for
|
backend/genesys_gl843.h: added 100, 150, 400 and 600 dpi modes for
|
||||||
|
|
|
@ -8,9 +8,14 @@
|
||||||
Copyright (C) 2001-2004 Oliver Schirrmeister
|
Copyright (C) 2001-2004 Oliver Schirrmeister
|
||||||
Copyright (C) 2003-2010 m. allan noah
|
Copyright (C) 2003-2010 m. allan noah
|
||||||
|
|
||||||
JPEG output support funded by Archivista GmbH, www.archivista.ch
|
JPEG output and low memory usage support funded by:
|
||||||
Endorser support funded by O A S Oilfield Accounting Service Ltd, www.oas.ca
|
Archivista GmbH, www.archivista.ch
|
||||||
Automatic length detection support funded by Martin G. Miller
|
Endorser support funded by:
|
||||||
|
O A S Oilfield Accounting Service Ltd, www.oas.ca
|
||||||
|
Automatic length detection support funded by:
|
||||||
|
Martin G. Miller, mgmiller at optonline.net
|
||||||
|
Software image enhancement routines funded by:
|
||||||
|
Fujitsu Computer Products of America, Inc. www.fcpa.com
|
||||||
|
|
||||||
--------------------------------------------------------------------------
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -466,6 +471,12 @@
|
||||||
- fix compilation bug when jpeg is enabled
|
- fix compilation bug when jpeg is enabled
|
||||||
v102 2010-09-22, MAN
|
v102 2010-09-22, MAN
|
||||||
- fix infinite loop when scan is an odd number of lines
|
- fix infinite loop when scan is an odd number of lines
|
||||||
|
v103 2010-11-23, MAN
|
||||||
|
- remove compiled-in default config file
|
||||||
|
- initial support for new fi-6xxx machines
|
||||||
|
v104 2010-11-24, MAN
|
||||||
|
- never request more than s->buffer_size from scanner
|
||||||
|
- silence noisy set_window() calls from init_interlace()
|
||||||
|
|
||||||
SANE FLOW DIAGRAM
|
SANE FLOW DIAGRAM
|
||||||
|
|
||||||
|
@ -515,7 +526,7 @@
|
||||||
#include "fujitsu.h"
|
#include "fujitsu.h"
|
||||||
|
|
||||||
#define DEBUG 1
|
#define DEBUG 1
|
||||||
#define BUILD 101
|
#define BUILD 104
|
||||||
|
|
||||||
/* values for SANE_DEBUG_FUJITSU env var:
|
/* values for SANE_DEBUG_FUJITSU env var:
|
||||||
- errors 5
|
- errors 5
|
||||||
|
@ -740,103 +751,8 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
DBG (5, "sane_get_devices: no config file '%s', using defaults\n", FUJITSU_CONFIG_FILE);
|
DBG (5, "sane_get_devices: missing required config file '%s'!\n",
|
||||||
|
FUJITSU_CONFIG_FILE);
|
||||||
DBG (15, "sane_get_devices: looking for 'scsi FUJITSU'\n");
|
|
||||||
sanei_config_attach_matching_devices ("scsi FUJITSU", attach_one_scsi);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1041'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1041", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1042'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1042", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1078'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1078", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1095'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1095", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1096'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1096", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1097'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1097", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10ad'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10ad", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10ae'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10ae", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10af'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10af", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10cf'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10cf", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10e0'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10e0", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10e1'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10e1", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10e2'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10e2", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10e6'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10e6", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10e7'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10e7", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10f2'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10f2", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x10fe'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x10fe", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1135'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1135", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x114a'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x114a", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x114d'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x114d", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x114e'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x114e", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x114f'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x114f", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1150\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1150", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1155'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1155", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x116f'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x116f", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1174'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1174", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1175'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1175", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1176'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1176", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1177'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1177", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x1178'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x1178", attach_one_usb);
|
|
||||||
|
|
||||||
DBG (15, "sane_get_devices: looking for 'usb 0x04c5 0x11a2'\n");
|
|
||||||
sanei_usb_attach_matching_devices("usb 0x04c5 0x11a2", attach_one_usb);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*delete missing scanners from list*/
|
/*delete missing scanners from list*/
|
||||||
|
@ -1644,7 +1560,7 @@ static SANE_Status
|
||||||
init_ms(struct fujitsu *s)
|
init_ms(struct fujitsu *s)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
int oldDbg;
|
int oldDbg=0;
|
||||||
|
|
||||||
unsigned char cmd[MODE_SENSE_len];
|
unsigned char cmd[MODE_SENSE_len];
|
||||||
size_t cmdLen = MODE_SENSE_len;
|
size_t cmdLen = MODE_SENSE_len;
|
||||||
|
@ -1659,8 +1575,6 @@ init_ms(struct fujitsu *s)
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
oldDbg=0;
|
|
||||||
|
|
||||||
/* some of the following probes will produce errors */
|
/* some of the following probes will produce errors */
|
||||||
/* so we reduce the dbg level to reduce the noise */
|
/* so we reduce the dbg level to reduce the noise */
|
||||||
/* however, if user builds with NDEBUG, we can't do that */
|
/* however, if user builds with NDEBUG, we can't do that */
|
||||||
|
@ -2176,6 +2090,7 @@ init_interlace (struct fujitsu *s)
|
||||||
{
|
{
|
||||||
SANE_Status ret = SANE_STATUS_GOOD;
|
SANE_Status ret = SANE_STATUS_GOOD;
|
||||||
int curr_mode = s->mode;
|
int curr_mode = s->mode;
|
||||||
|
int oldDbg=0;
|
||||||
|
|
||||||
DBG (10, "init_interlace: start\n");
|
DBG (10, "init_interlace: start\n");
|
||||||
|
|
||||||
|
@ -2204,12 +2119,22 @@ init_interlace (struct fujitsu *s)
|
||||||
s->color_interlace <= COLOR_INTERLACE_RRGGBB;
|
s->color_interlace <= COLOR_INTERLACE_RRGGBB;
|
||||||
s->color_interlace++){
|
s->color_interlace++){
|
||||||
|
|
||||||
|
/* some of the following probes will produce errors */
|
||||||
|
/* so we reduce the dbg level to reduce the noise */
|
||||||
|
/* however, if user builds with NDEBUG, we can't do that */
|
||||||
|
/* so we protect the code with the following macro */
|
||||||
|
IF_DBG( oldDbg=DBG_LEVEL; )
|
||||||
|
IF_DBG( if(DBG_LEVEL < 35){ DBG_LEVEL = 0; } )
|
||||||
|
|
||||||
ret = set_window(s);
|
ret = set_window(s);
|
||||||
|
|
||||||
|
IF_DBG (DBG_LEVEL = oldDbg;)
|
||||||
|
|
||||||
if (ret == SANE_STATUS_GOOD){
|
if (ret == SANE_STATUS_GOOD){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
DBG (5, "init_interlace: not %d\n", s->color_interlace);
|
DBG (15, "init_interlace: not %d\n", s->color_interlace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7101,6 +7026,9 @@ read_from_JPEGduplex(struct fujitsu *s)
|
||||||
if(bytes > remain){
|
if(bytes > remain){
|
||||||
bytes = remain;
|
bytes = remain;
|
||||||
}
|
}
|
||||||
|
if(bytes > s->buffer_size){
|
||||||
|
bytes = s->buffer_size;
|
||||||
|
}
|
||||||
|
|
||||||
DBG(15, "read_from_JPEGduplex: fto:%d frx:%d bto:%d brx:%d re:%d pa:%d\n",
|
DBG(15, "read_from_JPEGduplex: fto:%d frx:%d bto:%d brx:%d re:%d pa:%d\n",
|
||||||
s->bytes_tot[SIDE_FRONT], s->bytes_rx[SIDE_FRONT],
|
s->bytes_tot[SIDE_FRONT], s->bytes_rx[SIDE_FRONT],
|
||||||
|
@ -7359,6 +7287,9 @@ read_from_3091duplex(struct fujitsu *s)
|
||||||
if(bytes > remain){
|
if(bytes > remain){
|
||||||
bytes = remain;
|
bytes = remain;
|
||||||
}
|
}
|
||||||
|
if(bytes > s->buffer_size){
|
||||||
|
bytes = s->buffer_size;
|
||||||
|
}
|
||||||
|
|
||||||
/* all requests must end on line boundary */
|
/* all requests must end on line boundary */
|
||||||
bytes -= (bytes % s->params.bytes_per_line);
|
bytes -= (bytes % s->params.bytes_per_line);
|
||||||
|
@ -7479,6 +7410,9 @@ read_from_scanner(struct fujitsu *s, int side)
|
||||||
if(bytes > remain){
|
if(bytes > remain){
|
||||||
bytes = remain;
|
bytes = remain;
|
||||||
}
|
}
|
||||||
|
if(bytes > s->buffer_size){
|
||||||
|
bytes = s->buffer_size;
|
||||||
|
}
|
||||||
|
|
||||||
/* all requests must end on line boundary */
|
/* all requests must end on line boundary */
|
||||||
bytes -= (bytes % s->params.bytes_per_line);
|
bytes -= (bytes % s->params.bytes_per_line);
|
||||||
|
|
|
@ -107,5 +107,38 @@ usb 0x04c5 0x1177
|
||||||
#fi-6750S
|
#fi-6750S
|
||||||
usb 0x04c5 0x1178
|
usb 0x04c5 0x1178
|
||||||
|
|
||||||
|
#fi-6800
|
||||||
|
usb 0x04c5 0x119d
|
||||||
|
|
||||||
|
#fi-6800-CGA
|
||||||
|
usb 0x04c5 0x119e
|
||||||
|
|
||||||
|
#fi-6900
|
||||||
|
usb 0x04c5 0x119f
|
||||||
|
|
||||||
|
#fi-6900-CGA
|
||||||
|
usb 0x04c5 0x11a0
|
||||||
|
|
||||||
#S1500 & S1500M
|
#S1500 & S1500M
|
||||||
usb 0x04c5 0x11a2
|
usb 0x04c5 0x11a2
|
||||||
|
|
||||||
|
#fi-6125
|
||||||
|
usb 0x04c5 0x11ee
|
||||||
|
|
||||||
|
#fi-6225
|
||||||
|
usb 0x04c5 0x11ef
|
||||||
|
|
||||||
|
#fi-6145
|
||||||
|
usb 0x04c5 0x11f1
|
||||||
|
|
||||||
|
#fi-6245
|
||||||
|
usb 0x04c5 0x11f2
|
||||||
|
|
||||||
|
#fi-6135
|
||||||
|
usb 0x04c5 0x11f3
|
||||||
|
|
||||||
|
#fi-6235
|
||||||
|
usb 0x04c5 0x11f4
|
||||||
|
|
||||||
|
#fi-6110
|
||||||
|
usb 0x04c5 0x11fc
|
||||||
|
|
|
@ -53,12 +53,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SANE backend for Genesys Logic GL646/GL841/GL843/GL847 based scanners
|
* SANE backend for Genesys Logic GL646/GL841/GL842/GL843/GL847 based scanners
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../include/sane/config.h"
|
#include "../include/sane/config.h"
|
||||||
|
|
||||||
#define BUILD 33
|
#define BUILD 41
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -5137,7 +5137,7 @@ genesys_fill_read_buffer (Genesys_Device * dev)
|
||||||
return SANE_STATUS_IO_ERROR;
|
return SANE_STATUS_IO_ERROR;
|
||||||
}
|
}
|
||||||
#ifdef SANE_DEBUG_LOG_RAW_DATA
|
#ifdef SANE_DEBUG_LOG_RAW_DATA
|
||||||
if (rawfile != NULL)
|
if (rawfile != NULL && DBG_LEVEL >= DBG_data)
|
||||||
{
|
{
|
||||||
/*TODO: convert big/little endian if depth == 16.
|
/*TODO: convert big/little endian if depth == 16.
|
||||||
note: xv got this wrong for P5/P6. */
|
note: xv got this wrong for P5/P6. */
|
||||||
|
@ -5347,7 +5347,7 @@ genesys_read_ordered_data (Genesys_Device * dev, SANE_Byte * destination,
|
||||||
return SANE_STATUS_EOF;
|
return SANE_STATUS_EOF;
|
||||||
}
|
}
|
||||||
#ifdef SANE_DEBUG_LOG_RAW_DATA
|
#ifdef SANE_DEBUG_LOG_RAW_DATA
|
||||||
if (rawfile == NULL)
|
if (rawfile == NULL && DBG_LEVEL >= DBG_data)
|
||||||
{
|
{
|
||||||
rawfile = fopen ("raw.pnm", "wb");
|
rawfile = fopen ("raw.pnm", "wb");
|
||||||
if (rawfile != NULL)
|
if (rawfile != NULL)
|
||||||
|
@ -7275,12 +7275,7 @@ sane_close (SANE_Handle handle)
|
||||||
{
|
{
|
||||||
s->dev->model->cmd_set->eject_document (s->dev);
|
s->dev->model->cmd_set->eject_document (s->dev);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
/* for flatbed scanners, get sure the head is parked before leaving */
|
|
||||||
s->dev->model->cmd_set->slow_back_home (s->dev, SANE_TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* here is the place to store calibration cache */
|
/* here is the place to store calibration cache */
|
||||||
write_calibration (s->dev);
|
write_calibration (s->dev);
|
||||||
|
|
||||||
|
@ -7384,6 +7379,7 @@ get_option_value (Genesys_Scanner * s, int option, void *val)
|
||||||
case OPT_THRESHOLD:
|
case OPT_THRESHOLD:
|
||||||
case OPT_THRESHOLD_CURVE:
|
case OPT_THRESHOLD_CURVE:
|
||||||
case OPT_DISABLE_DYNAMIC_LINEART:
|
case OPT_DISABLE_DYNAMIC_LINEART:
|
||||||
|
case OPT_CLEAR_CALIBRATION:
|
||||||
case OPT_DISABLE_INTERPOLATION:
|
case OPT_DISABLE_INTERPOLATION:
|
||||||
case OPT_LAMP_OFF_TIME:
|
case OPT_LAMP_OFF_TIME:
|
||||||
case OPT_SWDESKEW:
|
case OPT_SWDESKEW:
|
||||||
|
|
|
@ -439,7 +439,7 @@ static Genesys_Sensor Sensor[] = {
|
||||||
0x41
|
0x41
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
1.0, 1.0, 1.0,
|
1.7, 1.7, 1.7,
|
||||||
NULL, NULL, NULL}
|
NULL, NULL, NULL}
|
||||||
,
|
,
|
||||||
/* CANONLIDE100 */
|
/* CANONLIDE100 */
|
||||||
|
@ -465,7 +465,7 @@ static Genesys_Sensor Sensor[] = {
|
||||||
0x41
|
0x41
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
1.0, 1.0, 1.0,
|
1.7, 1.7, 1.7,
|
||||||
NULL, NULL, NULL}
|
NULL, NULL, NULL}
|
||||||
,
|
,
|
||||||
{CCD_KVSS080,
|
{CCD_KVSS080,
|
||||||
|
@ -473,13 +473,13 @@ static Genesys_Sensor Sensor[] = {
|
||||||
38, /* black pixels on left */
|
38, /* black pixels on left */
|
||||||
38, /* 36 dummy pixels */
|
38, /* 36 dummy pixels */
|
||||||
152,
|
152,
|
||||||
5200, /* 5100 */
|
5376, /* 5100-> 5200 */
|
||||||
160, /* TAU white ref */
|
160, /* TAU white ref */
|
||||||
160, /* gain white ref */
|
160, /* gain white ref */
|
||||||
/* 08 09 0a 0b */
|
/* 08 09 0a 0b */
|
||||||
{0x00, 0x00, 0x00, 0x6a} ,
|
{0x00, 0x00, 0x00, 0x6a} ,
|
||||||
/* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */
|
/* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x1c, 0x01, 0x2a, 0x2c, 0x00, 0x20, 0x04} , /* 18=00 at 600 dpi */
|
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x1c, 0x00, 0x2a, 0x2c, 0x00, 0x20, 0x04} , /* 18=00 at 600 dpi */
|
||||||
/* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */
|
/* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */
|
||||||
{0x0c, 0x0f, 0x00, 0x03, 0x06, 0x09, 0x6b, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x23} ,
|
{0x0c, 0x0f, 0x00, 0x03, 0x06, 0x09, 0x6b, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x23} ,
|
||||||
1.0, 1.0, 1.0,
|
1.0, 1.0, 1.0,
|
||||||
|
@ -1004,15 +1004,15 @@ static Genesys_Model panasonic_kvss080_model = {
|
||||||
GENESYS_GL843,
|
GENESYS_GL843,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
{ 600, 500, 400, 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */
|
{ 600, /* 500, 400,*/ 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */
|
||||||
{ 1200, 600, 500, 400, 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */
|
{ 1200, 600, /* 500, 400, */ 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */
|
||||||
{16, 8, 0}, /* possible depths in gray mode */
|
{16, 8, 0}, /* possible depths in gray mode */
|
||||||
{16, 8, 0}, /* possible depths in color mode */
|
{16, 8, 0}, /* possible depths in color mode */
|
||||||
|
|
||||||
SANE_FIX (7.6), /* Start of scan area in mm (x) */
|
SANE_FIX (7.2), /* Start of scan area in mm (x) */
|
||||||
SANE_FIX (13.8), /* Start of scan area in mm (y) */
|
SANE_FIX (14.7), /* Start of scan area in mm (y) */
|
||||||
SANE_FIX (218.5), /* Size of scan area in mm (x) */
|
SANE_FIX (217.7), /* Size of scan area in mm (x) */
|
||||||
SANE_FIX (297.0), /* Size of scan area in mm (y) */
|
SANE_FIX (300.0), /* Size of scan area in mm (y) */
|
||||||
|
|
||||||
SANE_FIX (9.0), /* Start of white strip in mm (y) */
|
SANE_FIX (9.0), /* Start of white strip in mm (y) */
|
||||||
SANE_FIX (0.0), /* Start of black mark in mm (x) */
|
SANE_FIX (0.0), /* Start of black mark in mm (x) */
|
||||||
|
@ -1055,8 +1055,8 @@ static Genesys_Model hpg4010_model = {
|
||||||
GENESYS_GL843,
|
GENESYS_GL843,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
{ /*2400, 1200, */600, 400, 300, 200, 150, 100, 0}, /* TODO when settled down, add 800 and 1600 */
|
{ 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, /* TODO when settled down, add 800 and 1600 */
|
||||||
{ /*2400, 1200, */600, 400, 300, 200, 150, 100, 0}, /* TODO 4800 available */
|
{ 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, /* TODO 4800 available */
|
||||||
{16, 8, 0}, /* possible depths in gray mode */
|
{16, 8, 0}, /* possible depths in gray mode */
|
||||||
{16, 8, 0}, /* possible depths in color mode */
|
{16, 8, 0}, /* possible depths in color mode */
|
||||||
|
|
||||||
|
@ -1107,8 +1107,8 @@ static Genesys_Model hpg4050_model = {
|
||||||
GENESYS_GL843,
|
GENESYS_GL843,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
||||||
{ /*2400, 1200, */600, 400, 300, 200, 150, 100, 0}, /* TODO when settled down, add 800 and 1600 */
|
{ 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, /* TODO when settled down, add 800 and 1600 */
|
||||||
{ /*2400, 1200, */600, 400, 300, 200, 150, 100, 0}, /* TODO 4800 available */
|
{ 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, /* TODO 4800 available */
|
||||||
{16, 8, 0}, /* possible depths in gray mode */
|
{16, 8, 0}, /* possible depths in gray mode */
|
||||||
{16, 8, 0}, /* possible depths in color mode */
|
{16, 8, 0}, /* possible depths in color mode */
|
||||||
|
|
||||||
|
|
|
@ -597,22 +597,6 @@ gl843_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
|
||||||
|
|
||||||
/* TODO we need to create another data struct
|
/* TODO we need to create another data struct
|
||||||
* for CKxMAP and CKSEL */
|
* for CKxMAP and CKSEL */
|
||||||
/* use x1 cksel when at higher resolutions */
|
|
||||||
/* KV-SS080 sensor */
|
|
||||||
if (dev->model->ccd_type == CCD_KVSS080)
|
|
||||||
{
|
|
||||||
if(dpi>dev->sensor.optical_res/2)
|
|
||||||
{
|
|
||||||
r = sanei_genesys_get_address (regs, 0x18);
|
|
||||||
r->value &= ~REG18_CKSEL;
|
|
||||||
|
|
||||||
sanei_genesys_write_register (dev, 0x78, 0x03);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sanei_genesys_write_register (dev, 0x78, 0x07);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* G4050/G4010 sensor */
|
/* G4050/G4010 sensor */
|
||||||
if (dev->model->ccd_type == CCD_G4050)
|
if (dev->model->ccd_type == CCD_G4050)
|
||||||
{
|
{
|
||||||
|
@ -630,9 +614,17 @@ gl843_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
|
||||||
}
|
}
|
||||||
else /* 800 to 2400 case */
|
else /* 800 to 2400 case */
|
||||||
{
|
{
|
||||||
sanei_genesys_write_register (dev, 0x74, 0x00);
|
sanei_genesys_write_register (dev, 0x5a, 0x40);
|
||||||
sanei_genesys_write_register (dev, 0x75, 0x3f);
|
sanei_genesys_write_register (dev, 0x74, 0x0f);
|
||||||
|
sanei_genesys_write_register (dev, 0x75, 0xff);
|
||||||
sanei_genesys_write_register (dev, 0x76, 0xff);
|
sanei_genesys_write_register (dev, 0x76, 0xff);
|
||||||
|
sanei_genesys_write_register (dev, 0x77, 0x00);
|
||||||
|
sanei_genesys_write_register (dev, 0x78, 0x01);
|
||||||
|
sanei_genesys_write_register (dev, 0x7a, 0x00);
|
||||||
|
sanei_genesys_write_register (dev, 0x7b, 0x01);
|
||||||
|
sanei_genesys_write_register (dev, 0x7d, 0x90);
|
||||||
|
sanei_genesys_write_register (dev, 0x80, 0x05);
|
||||||
|
sanei_genesys_write_register (dev, 0x9e, 0xc0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1161,7 +1153,7 @@ gl843_get_dpihw (Genesys_Device * dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**@brief compute hardware sensor dpi exposure to use
|
/**@brief compute hardware sensor dpi to use
|
||||||
* compute the sensor hardware dpi based on target resolution
|
* compute the sensor hardware dpi based on target resolution
|
||||||
*/
|
*/
|
||||||
static int gl843_compute_dpihw(Genesys_Device *dev, int xres)
|
static int gl843_compute_dpihw(Genesys_Device *dev, int xres)
|
||||||
|
@ -1196,11 +1188,11 @@ static int gl843_compute_exposure(Genesys_Device *dev, int xres)
|
||||||
switch(dev->model->ccd_type)
|
switch(dev->model->ccd_type)
|
||||||
{
|
{
|
||||||
case CCD_G4050:
|
case CCD_G4050:
|
||||||
if(xres<1200)
|
if(xres<=600)
|
||||||
{
|
{
|
||||||
return 8016;
|
return 8016;
|
||||||
}
|
}
|
||||||
return 21376;
|
return 56064 /* 21376 */;
|
||||||
case CCD_KVSS080:
|
case CCD_KVSS080:
|
||||||
default:
|
default:
|
||||||
return 8000;
|
return 8000;
|
||||||
|
@ -1497,7 +1489,9 @@ gl843_get_led_exposure (Genesys_Device * dev)
|
||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
SANE_Status
|
SANE_Status
|
||||||
gl843_init_scan_regs (Genesys_Device * dev, Genesys_Register_Set * reg, float xres, /*dpi */
|
gl843_init_scan_regs (Genesys_Device * dev,
|
||||||
|
Genesys_Register_Set * reg,
|
||||||
|
float xres, /*dpi */
|
||||||
float yres, /*dpi */
|
float yres, /*dpi */
|
||||||
float startx, /*optical_res, from dummy_pixel+1 */
|
float startx, /*optical_res, from dummy_pixel+1 */
|
||||||
float starty, /*base_ydpi, from home! */
|
float starty, /*base_ydpi, from home! */
|
||||||
|
@ -2365,7 +2359,6 @@ gl843_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg,
|
||||||
RIE(sanei_genesys_write_register(dev,0x7e,0x01));
|
RIE(sanei_genesys_write_register(dev,0x7e,0x01));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* clear scan and feed count */
|
/* clear scan and feed count */
|
||||||
RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT | REG0D_CLRMCNT));
|
RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT | REG0D_CLRMCNT));
|
||||||
|
|
||||||
|
@ -2426,7 +2419,8 @@ gl843_end_scan (Genesys_Device * dev, Genesys_Register_Set * reg,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Moves the slider to the home (top) position slowly */
|
/** @brief Moves the slider to the home (top) position slowly
|
||||||
|
* */
|
||||||
#ifndef UNIT_TESTING
|
#ifndef UNIT_TESTING
|
||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
|
@ -2437,6 +2431,8 @@ gl843_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
|
||||||
SANE_Status status;
|
SANE_Status status;
|
||||||
Genesys_Register_Set *r;
|
Genesys_Register_Set *r;
|
||||||
uint8_t val;
|
uint8_t val;
|
||||||
|
float resolution;
|
||||||
|
int loop = 0;
|
||||||
|
|
||||||
DBG (DBG_proc, "gl843_slow_back_home (wait_until_home = %d)\n",
|
DBG (DBG_proc, "gl843_slow_back_home (wait_until_home = %d)\n",
|
||||||
wait_until_home);
|
wait_until_home);
|
||||||
|
@ -2464,32 +2460,35 @@ gl843_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
|
||||||
|
|
||||||
memcpy (local_reg, dev->reg,
|
memcpy (local_reg, dev->reg,
|
||||||
GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set));
|
GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set));
|
||||||
|
resolution=gl843_get_lowest_ydpi(dev);
|
||||||
|
|
||||||
gl843_init_scan_regs (dev,
|
gl843_init_scan_regs (dev,
|
||||||
local_reg,
|
local_reg,
|
||||||
300,
|
resolution,
|
||||||
300,
|
resolution,
|
||||||
dev->sensor.sensor_pixels/4,
|
100,
|
||||||
0,
|
100,
|
||||||
dev->sensor.sensor_pixels/2,
|
100,
|
||||||
1,
|
100,
|
||||||
8,
|
8,
|
||||||
3,
|
3,
|
||||||
dev->settings.color_filter,
|
dev->settings.color_filter,
|
||||||
SCAN_FLAG_DISABLE_SHADING |
|
SCAN_FLAG_DISABLE_SHADING |
|
||||||
SCAN_FLAG_DISABLE_GAMMA |
|
SCAN_FLAG_DISABLE_GAMMA |
|
||||||
SCAN_FLAG_SINGLE_LINE |
|
|
||||||
SCAN_FLAG_IGNORE_LINE_DISTANCE);
|
SCAN_FLAG_IGNORE_LINE_DISTANCE);
|
||||||
gl843_init_motor_regs_scan (dev,
|
gl843_init_motor_regs_scan (dev,
|
||||||
local_reg,
|
local_reg,
|
||||||
gl843_compute_exposure (dev, 300),
|
gl843_compute_exposure (dev, resolution),
|
||||||
300,
|
resolution,
|
||||||
|
gl843_compute_step_type(dev, resolution),
|
||||||
1,
|
1,
|
||||||
1,
|
1,
|
||||||
1,
|
30000, /* feed steps */
|
||||||
30000,
|
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
/* clear scan and feed count */
|
||||||
|
RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT | REG0D_CLRMCNT));
|
||||||
|
|
||||||
/* set up for reverse and no scan */
|
/* set up for reverse and no scan */
|
||||||
r = sanei_genesys_get_address (local_reg, REG02);
|
r = sanei_genesys_get_address (local_reg, REG02);
|
||||||
|
@ -2497,7 +2496,7 @@ gl843_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
|
||||||
r = sanei_genesys_get_address (local_reg, REG01);
|
r = sanei_genesys_get_address (local_reg, REG01);
|
||||||
r->value &= ~REG01_SCAN;
|
r->value &= ~REG01_SCAN;
|
||||||
|
|
||||||
RIE ( gl843_bulk_write_register (dev, local_reg, GENESYS_GL843_MAX_REGS));
|
RIE (gl843_bulk_write_register (dev, local_reg, GENESYS_GL843_MAX_REGS));
|
||||||
|
|
||||||
status = gl843_start_action (dev);
|
status = gl843_start_action (dev);
|
||||||
if (status != SANE_STATUS_GOOD)
|
if (status != SANE_STATUS_GOOD)
|
||||||
|
@ -2513,7 +2512,6 @@ gl843_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
|
||||||
|
|
||||||
if (wait_until_home)
|
if (wait_until_home)
|
||||||
{
|
{
|
||||||
int loop = 0;
|
|
||||||
|
|
||||||
while (loop < 300) /* do not wait longer then 30 seconds */
|
while (loop < 300) /* do not wait longer then 30 seconds */
|
||||||
{
|
{
|
||||||
|
@ -2737,7 +2735,7 @@ gl843_init_regs_for_shading (Genesys_Device * dev)
|
||||||
|
|
||||||
dev->calib_channels = 3;
|
dev->calib_channels = 3;
|
||||||
dev->calib_pixels = dev->sensor.sensor_pixels;
|
dev->calib_pixels = dev->sensor.sensor_pixels;
|
||||||
resolution=dev->sensor.optical_res;
|
resolution=gl843_compute_dpihw(dev,dev->settings.xres);
|
||||||
|
|
||||||
/* distance to move to reach white target */
|
/* distance to move to reach white target */
|
||||||
move = SANE_UNFIX (dev->model->y_offset_calib);
|
move = SANE_UNFIX (dev->model->y_offset_calib);
|
||||||
|
@ -3575,7 +3573,7 @@ gl843_is_compatible_calibration (Genesys_Device * dev,
|
||||||
sane_strstatus (status));
|
sane_strstatus (status));
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
resolution=dev->sensor.optical_res;
|
resolution=gl843_compute_dpihw(dev,dev->settings.xres);
|
||||||
dev->current_setup.scan_method = dev->settings.scan_method;
|
dev->current_setup.scan_method = dev->settings.scan_method;
|
||||||
|
|
||||||
DBG (DBG_proc, "gl843_is_compatible_calibration: checking\n");
|
DBG (DBG_proc, "gl843_is_compatible_calibration: checking\n");
|
||||||
|
@ -3699,7 +3697,7 @@ gl843_cold_boot (Genesys_Device * dev)
|
||||||
/* URB 14 control 0x40 0x0c 0x8c 0x10 len 1 wrote 0xb4 */
|
/* URB 14 control 0x40 0x0c 0x8c 0x10 len 1 wrote 0xb4 */
|
||||||
RIE (write_end_access (dev, 0x10, 0xb4));
|
RIE (write_end_access (dev, 0x10, 0xb4));
|
||||||
|
|
||||||
/* set up clock once for all TODO use sensor type for these sensor realted registers */
|
/* set up clock once for all TODO use sensor type for these sensor related registers */
|
||||||
if (strncmp (dev->model->name, "hewlett-packard-scanjet-g40", 27) == 0)
|
if (strncmp (dev->model->name, "hewlett-packard-scanjet-g40", 27) == 0)
|
||||||
{
|
{
|
||||||
/* CK1MAP */
|
/* CK1MAP */
|
||||||
|
@ -3719,8 +3717,8 @@ gl843_cold_boot (Genesys_Device * dev)
|
||||||
RIE (sanei_genesys_write_register (dev, 0x76, 0x00));
|
RIE (sanei_genesys_write_register (dev, 0x76, 0x00));
|
||||||
/* CK3MAP */
|
/* CK3MAP */
|
||||||
RIE (sanei_genesys_write_register (dev, 0x77, 0x00));
|
RIE (sanei_genesys_write_register (dev, 0x77, 0x00));
|
||||||
RIE (sanei_genesys_write_register (dev, 0x78, 0x07));
|
RIE (sanei_genesys_write_register (dev, 0x78, 0xff));
|
||||||
RIE (sanei_genesys_write_register (dev, 0x79, 0xfe));
|
RIE (sanei_genesys_write_register (dev, 0x79, 0xff));
|
||||||
}
|
}
|
||||||
/* CK4MAP */
|
/* CK4MAP */
|
||||||
RIE (sanei_genesys_write_register (dev, 0x7a, 0x03));
|
RIE (sanei_genesys_write_register (dev, 0x7a, 0x03));
|
||||||
|
|
|
@ -532,6 +532,7 @@ static Motor_Profile motors[]={
|
||||||
{MOTOR_KVSS080, 8000, kvss080},
|
{MOTOR_KVSS080, 8000, kvss080},
|
||||||
{MOTOR_G4050, 8016, g4050},
|
{MOTOR_G4050, 8016, g4050},
|
||||||
{MOTOR_G4050, 21376, g4050},
|
{MOTOR_G4050, 21376, g4050},
|
||||||
|
{MOTOR_G4050, 56064, g4050},
|
||||||
};
|
};
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
|
|
||||||
|
|
|
@ -3952,6 +3952,9 @@ gl847_is_compatible_calibration (Genesys_Device * dev,
|
||||||
Genesys_Calibration_Cache * cache,
|
Genesys_Calibration_Cache * cache,
|
||||||
int for_overwrite)
|
int for_overwrite)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
struct timeval time;
|
||||||
|
#endif
|
||||||
SANE_Status status;
|
SANE_Status status;
|
||||||
|
|
||||||
DBG (DBG_proc, "gl847_is_compatible_calibration\n");
|
DBG (DBG_proc, "gl847_is_compatible_calibration\n");
|
||||||
|
@ -3971,6 +3974,19 @@ gl847_is_compatible_calibration (Genesys_Device * dev,
|
||||||
if (dev->current_setup.half_ccd != cache->used_setup.half_ccd)
|
if (dev->current_setup.half_ccd != cache->used_setup.half_ccd)
|
||||||
return SANE_STATUS_UNSUPPORTED;
|
return SANE_STATUS_UNSUPPORTED;
|
||||||
|
|
||||||
|
/* a cache entry expires after 60 minutes for non sheetfed scanners */
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
gettimeofday (&time, NULL);
|
||||||
|
if ((time.tv_sec - cache->last_calibration > 60 * 60)
|
||||||
|
&& (dev->model->is_sheetfed == SANE_FALSE)
|
||||||
|
&& (dev->settings.scan_method == SCAN_METHOD_FLATBED))
|
||||||
|
{
|
||||||
|
DBG (DBG_proc,
|
||||||
|
"gl847_is_compatible_calibration: expired entry, non compatible cache\n");
|
||||||
|
return SANE_STATUS_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
DBG (DBG_proc, "gl847_is_compatible_calibration: completed\n");
|
DBG (DBG_proc, "gl847_is_compatible_calibration: completed\n");
|
||||||
|
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
|
|
@ -949,8 +949,9 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
|
||||||
SANE_Status
|
SANE_Status
|
||||||
sane_start (SANE_Handle handle)
|
sane_start (SANE_Handle handle)
|
||||||
{
|
{
|
||||||
int len;
|
int len, loop;
|
||||||
V4L_Scanner *s;
|
V4L_Scanner *s;
|
||||||
|
char data;
|
||||||
|
|
||||||
DBG (2, "sane_start\n");
|
DBG (2, "sane_start\n");
|
||||||
for (s = first_handle; s; s = s->next)
|
for (s = first_handle; s; s = s->next)
|
||||||
|
@ -1005,23 +1006,42 @@ sane_start (SANE_Handle handle)
|
||||||
s->mmap.format = s->pict.palette;
|
s->mmap.format = s->pict.palette;
|
||||||
DBG (2, "sane_start: mmapped frame %d x %d with palette %d\n",
|
DBG (2, "sane_start: mmapped frame %d x %d with palette %d\n",
|
||||||
s->mmap.width, s->mmap.height, s->mmap.format);
|
s->mmap.width, s->mmap.height, s->mmap.format);
|
||||||
len = v4l1_ioctl (s->fd, VIDIOCMCAPTURE, &s->mmap);
|
|
||||||
if (len == -1)
|
/* We need to loop here to empty the read buffers, so we don't
|
||||||
{
|
get a stale image */
|
||||||
DBG (1, "sane_start: ioctl VIDIOCMCAPTURE failed: %s\n",
|
for (loop = 0; loop <= s->mbuf.frames; loop++)
|
||||||
strerror (errno));
|
{
|
||||||
return SANE_STATUS_INVAL;
|
len = v4l1_ioctl (s->fd, VIDIOCMCAPTURE, &s->mmap);
|
||||||
}
|
if (len == -1)
|
||||||
DBG (3, "sane_start: waiting for frame %x\n", s->mmap.frame);
|
{
|
||||||
len = v4l1_ioctl (s->fd, VIDIOCSYNC, &(s->mmap.frame));
|
DBG (1, "sane_start: ioctl VIDIOCMCAPTURE failed: %s\n",
|
||||||
if (-1 == len)
|
strerror (errno));
|
||||||
{
|
return SANE_STATUS_INVAL;
|
||||||
DBG (1, "sane_start: call to ioctl(%d, VIDIOCSYNC, ..) failed\n",
|
}
|
||||||
s->fd);
|
DBG (3, "sane_start: waiting for frame %x, loop %d\n", s->mmap.frame, loop);
|
||||||
return SANE_STATUS_INVAL;
|
len = v4l1_ioctl (s->fd, VIDIOCSYNC, &(s->mmap.frame));
|
||||||
}
|
if (-1 == len)
|
||||||
|
{
|
||||||
|
DBG (1, "sane_start: call to ioctl(%d, VIDIOCSYNC, ..) failed\n",
|
||||||
|
s->fd);
|
||||||
|
return SANE_STATUS_INVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
DBG (3, "sane_start: frame %x done\n", s->mmap.frame);
|
DBG (3, "sane_start: frame %x done\n", s->mmap.frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* v4l1 actually returns BGR when we ask for RGB, so convert it */
|
||||||
|
if (s->pict.palette == VIDEO_PALETTE_RGB24)
|
||||||
|
{
|
||||||
|
DBG (3, "sane_start: converting from BGR to RGB\n");
|
||||||
|
for (loop = 0; loop < (s->window.width * s->window.height * 3); loop += 3)
|
||||||
|
{
|
||||||
|
data = *(buffer + loop);
|
||||||
|
*(buffer + loop) = *(buffer + loop + 2);
|
||||||
|
*(buffer + loop + 2) = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DBG (3, "sane_start: done\n");
|
DBG (3, "sane_start: done\n");
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,9 @@ usb 0x04e8 0x3426
|
||||||
# Samsung SCX-4500W
|
# Samsung SCX-4500W
|
||||||
usb 0x04e8 0x342b
|
usb 0x04e8 0x342b
|
||||||
|
|
||||||
|
# Samsung SCX-4824
|
||||||
|
usb 0x04e8 0x342c
|
||||||
|
|
||||||
# Samsung SCX-4300
|
# Samsung SCX-4300
|
||||||
usb 0x04e8 0x342e
|
usb 0x04e8 0x342e
|
||||||
|
|
||||||
|
@ -36,6 +39,9 @@ usb 0x0924 0x4265
|
||||||
#Samsung SCX-4623
|
#Samsung SCX-4623
|
||||||
usb 0x04e8 0x3434
|
usb 0x04e8 0x3434
|
||||||
|
|
||||||
|
# Samsung SCX-4825FN
|
||||||
|
usb 0x04e8 0x343c
|
||||||
|
|
||||||
#Xerox WorkCentre 4118 Series
|
#Xerox WorkCentre 4118 Series
|
||||||
usb 0x0924 0x420c
|
usb 0x0924 0x420c
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
;; Backend data.
|
;; Backend data.
|
||||||
;;
|
;;
|
||||||
:backend "epkowa"
|
:backend "epkowa"
|
||||||
:version "iscan 2.26.0/iscan-data 1.3.0"
|
:version "iscan 2.26.1/iscan-data 1.5.0"
|
||||||
:url "http://www.avasys.jp/english/linux_e/"
|
:url "http://www.avasys.jp/english/linux_e/"
|
||||||
|
|
||||||
;:comment "Based on the epson backend of sane-backends-1.0.15."
|
;:comment "Based on the epson backend of sane-backends-1.0.15."
|
||||||
|
@ -100,6 +100,18 @@
|
||||||
:status :good
|
:status :good
|
||||||
:comment "network interface not supported"
|
:comment "network interface not supported"
|
||||||
|
|
||||||
|
:model "AcuLaser MX20DN"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x04b8" "0x0866"
|
||||||
|
:status :complete
|
||||||
|
:comment "network interface not supported<br>business all-in-one"
|
||||||
|
|
||||||
|
:model "AcuLaser MX20DNF"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x04b8" "0x0866"
|
||||||
|
:status :complete
|
||||||
|
:comment "network interface not supported<br>business all-in-one"
|
||||||
|
|
||||||
:model "Artisan 700"
|
:model "Artisan 700"
|
||||||
:interface "USB"
|
:interface "USB"
|
||||||
:usbid "0x04b8" "0x0846"
|
:usbid "0x04b8" "0x0846"
|
||||||
|
@ -905,6 +917,12 @@
|
||||||
:status :good
|
:status :good
|
||||||
:comment "network interface option supported via DFSG non-free iscan-network-nt package<br>all-in-one"
|
:comment "network interface option supported via DFSG non-free iscan-network-nt package<br>all-in-one"
|
||||||
|
|
||||||
|
:model "ME OFFICE 620F Series"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x04b8" "0x0863"
|
||||||
|
:status :complete
|
||||||
|
:comment "network interface option supported via DFSG non-free iscan-network-nt package<br>all-in-one"
|
||||||
|
|
||||||
:model "ME OFFICE 650FN Series"
|
:model "ME OFFICE 650FN Series"
|
||||||
:interface "USB"
|
:interface "USB"
|
||||||
:usbid "0x04b8" "0x0854"
|
:usbid "0x04b8" "0x0854"
|
||||||
|
@ -1856,12 +1874,24 @@
|
||||||
:status :complete
|
:status :complete
|
||||||
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one<br>overseas version of the PX-602F"
|
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one<br>overseas version of the PX-602F"
|
||||||
|
|
||||||
|
:model "Stylus Office TX620FWD Series"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x04b8" "0x085d"
|
||||||
|
:status :complete
|
||||||
|
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one"
|
||||||
|
|
||||||
:model "Stylus Photo PX650 Series"
|
:model "Stylus Photo PX650 Series"
|
||||||
:interface "USB"
|
:interface "USB"
|
||||||
:usbid "0x04b8" "0x0850"
|
:usbid "0x04b8" "0x0850"
|
||||||
:status :complete
|
:status :complete
|
||||||
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one<br>overseas version of the EP-702A"
|
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one<br>overseas version of the EP-702A"
|
||||||
|
|
||||||
|
:model "Stylus Photo PX660 Series"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x04b8" "0x0862"
|
||||||
|
:status :complete
|
||||||
|
:comment "network interface option supported via DFSG non-free iscan-network-nt package<br>all-in-one<br>overseas version of the EP-703A"
|
||||||
|
|
||||||
:model "Stylus Photo PX700W"
|
:model "Stylus Photo PX700W"
|
||||||
:interface "USB"
|
:interface "USB"
|
||||||
:usbid "0x04b8" "0x0846"
|
:usbid "0x04b8" "0x0846"
|
||||||
|
@ -2312,6 +2342,12 @@
|
||||||
:status :good
|
:status :good
|
||||||
:comment "all-in-one<br>overseas version of the PX-502A"
|
:comment "all-in-one<br>overseas version of the PX-502A"
|
||||||
|
|
||||||
|
:model "Stylus TX560WD Series"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x04b8" "0x085e"
|
||||||
|
:status :complete
|
||||||
|
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one<br>overseas version of the PX-503A"
|
||||||
|
|
||||||
:model "WorkForce 310 Series"
|
:model "WorkForce 310 Series"
|
||||||
:interface "USB"
|
:interface "USB"
|
||||||
:usbid "0x04b8" "0x0854"
|
:usbid "0x04b8" "0x0854"
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
:model "ScanSnap S300M"
|
:model "ScanSnap S300M"
|
||||||
:interface "USB"
|
:interface "USB"
|
||||||
:status :untested
|
:status :good
|
||||||
:usbid "0x04c5" "0x117f"
|
:usbid "0x04c5" "0x117f"
|
||||||
:comment "Same as S300, with different usb id"
|
:comment "Same as S300, with different usb id"
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,9 @@
|
||||||
|
|
||||||
:backend "fujitsu" ; name of backend
|
:backend "fujitsu" ; name of backend
|
||||||
:url "http://www.thebility.com/fujitsu/"
|
:url "http://www.thebility.com/fujitsu/"
|
||||||
:version "98" ; version of backend
|
:version "103" ; version of backend
|
||||||
:manpage "sane-fujitsu" ; name of manpage (if it exists)
|
:manpage "sane-fujitsu" ; name of manpage (if it exists)
|
||||||
:comment "Backend updated for SANE release 1.0.21, see sane-fujitsu manpage"
|
:comment "Backend updated for SANE release 1.0.22, see sane-fujitsu manpage"
|
||||||
:devicetype :scanner ; start of a list of devices....
|
:devicetype :scanner ; start of a list of devices....
|
||||||
; other types: :stillcam, :vidcam,
|
; other types: :stillcam, :vidcam,
|
||||||
; :meta, :api
|
; :meta, :api
|
||||||
|
@ -162,6 +162,48 @@
|
||||||
:usbid "0x04c5" "0x11a2"
|
:usbid "0x04c5" "0x11a2"
|
||||||
:comment "small, current, same as S1500"
|
:comment "small, current, same as S1500"
|
||||||
|
|
||||||
|
:model "fi-6125"
|
||||||
|
:interface "USB"
|
||||||
|
:status :untested
|
||||||
|
:usbid "0x04c5" "0x11ee"
|
||||||
|
:comment "small, unreleased"
|
||||||
|
|
||||||
|
:model "fi-6225"
|
||||||
|
:interface "USB"
|
||||||
|
:status :untested
|
||||||
|
:usbid "0x04c5" "0x11ef"
|
||||||
|
:comment "small, unreleased"
|
||||||
|
|
||||||
|
:model "fi-6145"
|
||||||
|
:interface "USB"
|
||||||
|
:status :untested
|
||||||
|
:usbid "0x04c5" "0x11f1"
|
||||||
|
:comment "small, unreleased"
|
||||||
|
|
||||||
|
:model "fi-6245"
|
||||||
|
:interface "USB"
|
||||||
|
:status :untested
|
||||||
|
:usbid "0x04c5" "0x11f2"
|
||||||
|
:comment "small, unreleased"
|
||||||
|
|
||||||
|
:model "fi-6135"
|
||||||
|
:interface "USB"
|
||||||
|
:status :untested
|
||||||
|
:usbid "0x04c5" "0x11f3"
|
||||||
|
:comment "small, unreleased"
|
||||||
|
|
||||||
|
:model "fi-6235"
|
||||||
|
:interface "USB"
|
||||||
|
:status :untested
|
||||||
|
:usbid "0x04c5" "0x11f4"
|
||||||
|
:comment "small, unreleased"
|
||||||
|
|
||||||
|
:model "fi-6110"
|
||||||
|
:interface "USB"
|
||||||
|
:status :good
|
||||||
|
:usbid "0x04c5" "0x11fc"
|
||||||
|
:comment "small, unreleased"
|
||||||
|
|
||||||
;==================================================
|
;==================================================
|
||||||
; DISCONTINUED OLDER MODELS, MEDIUM
|
; DISCONTINUED OLDER MODELS, MEDIUM
|
||||||
:model "M3093E"
|
:model "M3093E"
|
||||||
|
@ -385,6 +427,24 @@
|
||||||
|
|
||||||
:model "fi-6800"
|
:model "fi-6800"
|
||||||
:interface "SCSI USB"
|
:interface "SCSI USB"
|
||||||
;:usbid "0x04c5" "0x11xx"
|
|
||||||
:status :untested
|
:status :untested
|
||||||
:comment "big, current, similar to fi-5900?"
|
:usbid "0x04c5" "0x119d"
|
||||||
|
:comment "big, current"
|
||||||
|
|
||||||
|
:model "fi-6800-CGA"
|
||||||
|
:interface "SCSI USB"
|
||||||
|
:status :untested
|
||||||
|
:usbid "0x04c5" "0x119e"
|
||||||
|
:comment "big, current. VRS CGA board unsupported"
|
||||||
|
|
||||||
|
:model "fi-6900"
|
||||||
|
:interface "SCSI USB"
|
||||||
|
:status :untested
|
||||||
|
:usbid "0x04c5" "0x119f"
|
||||||
|
:comment "big, unreleased, similar to fi-5900?"
|
||||||
|
|
||||||
|
:model "fi-6900-CGA"
|
||||||
|
:interface "SCSI USB"
|
||||||
|
:status :untested
|
||||||
|
:usbid "0x04c5" "0x11a0"
|
||||||
|
:comment "big, unreleased, similar to fi-5900? VRS CGA board unsupported"
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
:model "ScanJet 4c"
|
:model "ScanJet 4c"
|
||||||
:interface "SCSI"
|
:interface "SCSI"
|
||||||
:status :complete
|
:status :complete
|
||||||
|
:scsi "HP" "C2520A" "processor"
|
||||||
|
|
||||||
:model "ScanJet 4p"
|
:model "ScanJet 4p"
|
||||||
:interface "SCSI"
|
:interface "SCSI"
|
||||||
|
|
|
@ -27,6 +27,16 @@
|
||||||
:usbid "0x0924" "0x420c"
|
:usbid "0x0924" "0x420c"
|
||||||
:status :good
|
:status :good
|
||||||
|
|
||||||
|
:model "WorkCentre 3210"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x0924" "0x4293"
|
||||||
|
:status :good
|
||||||
|
|
||||||
|
:model "WorkCentre 3220"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x0924" "0x4294"
|
||||||
|
:status :good
|
||||||
|
|
||||||
:mfg "Dell"
|
:mfg "Dell"
|
||||||
:url "http://www.dell.com/"
|
:url "http://www.dell.com/"
|
||||||
|
|
||||||
|
@ -63,6 +73,11 @@
|
||||||
:usbid "0x04e8" "0x342a"
|
:usbid "0x04e8" "0x342a"
|
||||||
:status :good
|
:status :good
|
||||||
|
|
||||||
|
:model "SCX-4824"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x04e8" "0x342c"
|
||||||
|
:status :good
|
||||||
|
|
||||||
:model "SCX-4300"
|
:model "SCX-4300"
|
||||||
:interface "USB"
|
:interface "USB"
|
||||||
:usbid "0x04e8" "0x342e"
|
:usbid "0x04e8" "0x342e"
|
||||||
|
@ -78,6 +93,12 @@
|
||||||
:usbid "0x04e8" "0x3434"
|
:usbid "0x04e8" "0x3434"
|
||||||
:status :good
|
:status :good
|
||||||
|
|
||||||
|
:model "SCX-4825FN"
|
||||||
|
:interface "USB"
|
||||||
|
:usbid "0x04e8" "0x343c"
|
||||||
|
:status :good
|
||||||
|
|
||||||
:model "SCX-4500W"
|
:model "SCX-4500W"
|
||||||
:interface "Ethernet"
|
:interface "USB Ethernet"
|
||||||
|
:usbid "0x04e8" "0x342b"
|
||||||
:status :basic
|
:status :basic
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.TH sane\-fujitsu 5 "10 Feb 2010" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
|
.TH sane\-fujitsu 5 "23 Nov 2010" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
|
||||||
.IX sane\-fujitsu
|
.IX sane\-fujitsu
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
|
@ -10,7 +10,7 @@ The
|
||||||
library implements a SANE (Scanner Access Now Easy) backend which
|
library implements a SANE (Scanner Access Now Easy) backend which
|
||||||
provides access to most Fujitsu flatbed and ADF scanners.
|
provides access to most Fujitsu flatbed and ADF scanners.
|
||||||
|
|
||||||
This document describes backend version 98, which shipped with SANE 1.0.21.
|
This document describes backend version 103, which shipped with SANE 1.0.22.
|
||||||
|
|
||||||
.SH SUPPORTED HARDWARE
|
.SH SUPPORTED HARDWARE
|
||||||
This version supports every known model which speaks the Fujitsu SCSI and
|
This version supports every known model which speaks the Fujitsu SCSI and
|
||||||
|
@ -102,8 +102,7 @@ The configuration file "fujitsu.conf" is used to tell the backend how to look
|
||||||
for scanners, and provide options controlling the operation of the backend.
|
for scanners, and provide options controlling the operation of the backend.
|
||||||
This file is read each time the frontend asks the backend for a list
|
This file is read each time the frontend asks the backend for a list
|
||||||
of scanners, generally only when the frontend starts. If the configuration
|
of scanners, generally only when the frontend starts. If the configuration
|
||||||
file is missing, the backend will use a set of compiled defaults, which
|
file is missing, the backend will be unable to locate any scanners.
|
||||||
are identical to the default configuration file shipped with SANE.
|
|
||||||
.PP
|
.PP
|
||||||
Scanners can be specified in the configuration file in 4 ways:
|
Scanners can be specified in the configuration file in 4 ways:
|
||||||
.PP
|
.PP
|
||||||
|
@ -200,7 +199,7 @@ fi\-4220C and basic USB support: Ron Cemer <ron a t roncemer d o t com>
|
||||||
fi\-4120, fi\-series color, backend re\-write, jpeg, current maintainer:
|
fi\-4120, fi\-series color, backend re\-write, jpeg, current maintainer:
|
||||||
m. allan noah: <kitno455 a t gmail d o t com>
|
m. allan noah: <kitno455 a t gmail d o t com>
|
||||||
|
|
||||||
JPEG output support funded by:
|
JPEG output and low memory usage support funded by:
|
||||||
Archivista GmbH
|
Archivista GmbH
|
||||||
www.archivista.ch
|
www.archivista.ch
|
||||||
|
|
||||||
|
@ -216,8 +215,9 @@ Automatic length detection support funded by:
|
||||||
Martin G. Miller
|
Martin G. Miller
|
||||||
mgmiller at optonline.net
|
mgmiller at optonline.net
|
||||||
|
|
||||||
Hardware donated by Fujitsu Computer Products of America, Inc.
|
Software image enhancement routines funded and hardware donated by:
|
||||||
http://us.fujitsu.com/fcpa
|
Fujitsu Computer Products of America, Inc.
|
||||||
|
www.fcpa.com
|
||||||
|
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
sane(7),
|
sane(7),
|
||||||
|
|
|
@ -26,6 +26,7 @@ scanimage \- scan an image
|
||||||
.RB [ \-p | \-\-progress ]
|
.RB [ \-p | \-\-progress ]
|
||||||
.RB [ \-n | \-\-dont\-scan ]
|
.RB [ \-n | \-\-dont\-scan ]
|
||||||
.RB [ \-T | \-\-test ]
|
.RB [ \-T | \-\-test ]
|
||||||
|
.RB [ \-A | \-\-all-options ]
|
||||||
.RB [ \-h | \-\-help ]
|
.RB [ \-h | \-\-help ]
|
||||||
.RB [ \-v | \-\-verbose ]
|
.RB [ \-v | \-\-verbose ]
|
||||||
.RB [ \-B | \-\-buffer-size
|
.RB [ \-B | \-\-buffer-size
|
||||||
|
@ -234,6 +235,15 @@ API (in particular the
|
||||||
function is exercised by this test).
|
function is exercised by this test).
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
|
.B \-A
|
||||||
|
or
|
||||||
|
.B \-\-all-options
|
||||||
|
option requests that
|
||||||
|
.B scanimage
|
||||||
|
lists all available options exposed the backend, including button options.
|
||||||
|
The information is printed on standard output and no scan will be done.
|
||||||
|
.PP
|
||||||
|
The
|
||||||
.B \-h
|
.B \-h
|
||||||
or
|
or
|
||||||
.B \-\-help
|
.B \-\-help
|
||||||
|
|
|
@ -87,6 +87,7 @@ static struct option basic_options[] = {
|
||||||
{"verbose", no_argument, NULL, 'v'},
|
{"verbose", no_argument, NULL, 'v'},
|
||||||
{"progress", no_argument, NULL, 'p'},
|
{"progress", no_argument, NULL, 'p'},
|
||||||
{"test", no_argument, NULL, 'T'},
|
{"test", no_argument, NULL, 'T'},
|
||||||
|
{"all-options", no_argument, NULL, 'A'},
|
||||||
{"version", no_argument, NULL, 'V'},
|
{"version", no_argument, NULL, 'V'},
|
||||||
{"buffer-size", optional_argument, NULL, 'B'},
|
{"buffer-size", optional_argument, NULL, 'B'},
|
||||||
{"batch", optional_argument, NULL, 'b'},
|
{"batch", optional_argument, NULL, 'b'},
|
||||||
|
@ -105,7 +106,7 @@ static struct option basic_options[] = {
|
||||||
#define OUTPUT_PNM 0
|
#define OUTPUT_PNM 0
|
||||||
#define OUTPUT_TIFF 1
|
#define OUTPUT_TIFF 1
|
||||||
|
|
||||||
#define BASE_OPTSTRING "d:hi:Lf:B::nvVTbp"
|
#define BASE_OPTSTRING "d:hi:Lf:B::nvVTAbp"
|
||||||
#define STRIP_HEIGHT 256 /* # lines we increment image height */
|
#define STRIP_HEIGHT 256 /* # lines we increment image height */
|
||||||
|
|
||||||
static struct option *all_options;
|
static struct option *all_options;
|
||||||
|
@ -115,6 +116,7 @@ static SANE_Handle device;
|
||||||
static int verbose;
|
static int verbose;
|
||||||
static int progress = 0;
|
static int progress = 0;
|
||||||
static int test;
|
static int test;
|
||||||
|
static int all;
|
||||||
static int output_format = OUTPUT_PNM;
|
static int output_format = OUTPUT_PNM;
|
||||||
static int help;
|
static int help;
|
||||||
static int dont_scan = 0;
|
static int dont_scan = 0;
|
||||||
|
@ -1660,11 +1662,41 @@ scanimage_exit (void)
|
||||||
fprintf (stderr, "scanimage: finished\n");
|
fprintf (stderr, "scanimage: finished\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @brief print device options to stdout
|
||||||
|
*
|
||||||
|
* @param device struct of the opened device to describe
|
||||||
|
* @param num_dev_options number of device options
|
||||||
|
* @param ro SANE_TRUE to print read-only options
|
||||||
|
*/
|
||||||
|
static void print_options(SANE_Device * device, SANE_Int num_dev_options, SANE_Bool ro)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
const SANE_Option_Descriptor *opt;
|
||||||
|
|
||||||
|
for (i = 1; i < num_dev_options; ++i)
|
||||||
|
{
|
||||||
|
opt = 0;
|
||||||
|
|
||||||
|
/* scan area uses modified option struct */
|
||||||
|
for (j = 0; j < 4; ++j)
|
||||||
|
if (i == window[j])
|
||||||
|
opt = window_option + j;
|
||||||
|
|
||||||
|
if (!opt)
|
||||||
|
opt = sane_get_option_descriptor (device, i);
|
||||||
|
|
||||||
|
if (ro || SANE_OPTION_IS_SETTABLE (opt->cap)
|
||||||
|
|| opt->type == SANE_TYPE_GROUP)
|
||||||
|
print_option (device, i, opt);
|
||||||
|
}
|
||||||
|
if (num_dev_options)
|
||||||
|
fputc ('\n', stdout);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ch, i, index, all_options_len;
|
int ch, i, index, all_options_len;
|
||||||
const SANE_Option_Descriptor *opt;
|
|
||||||
const SANE_Device **device_list;
|
const SANE_Device **device_list;
|
||||||
SANE_Int num_dev_options = 0;
|
SANE_Int num_dev_options = 0;
|
||||||
const char *devname = 0;
|
const char *devname = 0;
|
||||||
|
@ -1735,6 +1767,9 @@ main (int argc, char **argv)
|
||||||
case 'T':
|
case 'T':
|
||||||
test = 1;
|
test = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'A':
|
||||||
|
all = 1;
|
||||||
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
dont_scan = 1;
|
dont_scan = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -1929,6 +1964,7 @@ Parameters are separated by a blank from single-character options (e.g.\n\
|
||||||
-p, --progress print progress messages\n\
|
-p, --progress print progress messages\n\
|
||||||
-n, --dont-scan only set options, don't actually scan\n\
|
-n, --dont-scan only set options, don't actually scan\n\
|
||||||
-T, --test test backend thoroughly\n\
|
-T, --test test backend thoroughly\n\
|
||||||
|
-A, --all-options list all available backend options\n\
|
||||||
-h, --help display this help message and exit\n\
|
-h, --help display this help message and exit\n\
|
||||||
-v, --verbose give even more status messages\n\
|
-v, --verbose give even more status messages\n\
|
||||||
-B, --buffer-size=# change input buffer size (in kB, default 32)\n\
|
-B, --buffer-size=# change input buffer size (in kB, default 32)\n\
|
||||||
|
@ -2127,24 +2163,15 @@ Parameters are separated by a blank from single-character options (e.g.\n\
|
||||||
if (help)
|
if (help)
|
||||||
{
|
{
|
||||||
printf ("\nOptions specific to device `%s':\n", devname);
|
printf ("\nOptions specific to device `%s':\n", devname);
|
||||||
|
print_options(device, num_dev_options, SANE_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 1; i < num_dev_options; ++i)
|
/* list all device-specific options */
|
||||||
{
|
if (all)
|
||||||
int j;
|
{
|
||||||
opt = 0;
|
printf ("\nAll options specific to device `%s':\n", devname);
|
||||||
|
print_options(device, num_dev_options, SANE_TRUE);
|
||||||
/* scan area uses modified option struct */
|
exit (0);
|
||||||
for (j = 0; j < 4; ++j)
|
|
||||||
if (i == window[j])
|
|
||||||
opt = window_option + j;
|
|
||||||
|
|
||||||
if (!opt)
|
|
||||||
opt = sane_get_option_descriptor (device, i);
|
|
||||||
|
|
||||||
print_option (device, i, opt);
|
|
||||||
}
|
|
||||||
if (num_dev_options)
|
|
||||||
fputc ('\n', stdout);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue