avision.c: Add "skip-adf" option

The code which tries aggressively to reset/initialize HP 82xx/83xx
Automatic Document Feeders doesn't work well if there's no ADF attached,
because the scanner reports a non-zero ADF model type in this case.
The retry code makes several attempts to initialize the ADF, and then
bails out with an "Operation not supported" error.

Add a new "option skip-adf" which will cause the backend to believe
the "ADF not present" status if that's what the scanner reports.

Fixes #313751
merge-requests/1/head
Dave Platt 2016-12-15 22:29:16 -08:00
rodzic f58ce8f920
commit 6585b6f60d
2 zmienionych plików z 22 dodań i 2 usunięć

Wyświetl plik

@ -1277,6 +1277,9 @@ static SANE_Bool force_calibration = SANE_FALSE;
static SANE_Bool force_a4 = SANE_FALSE; static SANE_Bool force_a4 = SANE_FALSE;
static SANE_Bool force_a3 = SANE_FALSE; static SANE_Bool force_a3 = SANE_FALSE;
/* trust ADF-presence flag, even if ADF model is nonzero */
static SANE_Bool skip_adf = SANE_FALSE;
/* hardware resolutions to interpolate from */ /* hardware resolutions to interpolate from */
static const int hw_res_list_c5[] = static const int hw_res_list_c5[] =
{ {
@ -3218,11 +3221,13 @@ get_accessories_info (Avision_Scanner* s)
{ {
dev->inquiry_duplex = 1; dev->inquiry_duplex = 1;
dev->inquiry_duplex_interlaced = 0; dev->inquiry_duplex_interlaced = 0;
} else if (result[0] == 0 && result[2] != 0) { } else if (result[0] == 0 && result[2] != 0 && !skip_adf) {
/* Sometimes the scanner will report that there is no ADF attached, yet /* Sometimes the scanner will report that there is no ADF attached, yet
* an ADF model number will still be reported. This happens on the * an ADF model number will still be reported. This happens on the
* HP8200 series and possibly others. In this case we need to reset the * HP8200 series and possibly others. In this case we need to reset the
* the adf and try reading it again. * the adf and try reading it again. Skip this if the configuration says
* to do so, so that we don't fail out the scanner as being broken and
* unsupported if there isn't actually an ADF present.
*/ */
DBG (3, "get_accessories_info: Found ADF model number but the ADF-present flag is not set. Trying to recover...\n"); DBG (3, "get_accessories_info: Found ADF model number but the ADF-present flag is not set. Trying to recover...\n");
status = adf_reset (s); status = adf_reset (s);
@ -7627,6 +7632,11 @@ sane_reload_devices (void)
linenumber); linenumber);
force_a3 = SANE_TRUE; force_a3 = SANE_TRUE;
} }
else if (strcmp (word, "skip-adf") == 0) {
DBG (3, "sane_reload_devices: config file line %d: enabling skip-adf\n",
linenumber);
skip_adf = SANE_TRUE;
}
else if (strcmp (word, "static-red-calib") == 0) { else if (strcmp (word, "static-red-calib") == 0) {
DBG (3, "sane_reload_devices: config file line %d: static red calibration\n", DBG (3, "sane_reload_devices: config file line %d: static red calibration\n",
linenumber); linenumber);

Wyświetl plik

@ -36,6 +36,7 @@ a hash mark (#) are ignored. A sample configuration file is shown below:
\ \
option force\-a4 option force\-a4
option force\-a3 option force\-a3
option skip\-adf
option disable\-gamma\-table option disable\-gamma\-table
option disable\-calibration option disable\-calibration
\ \
@ -61,6 +62,15 @@ known to return bogus data are marked in the backend
so if you need this option please report this to the so if you need this option please report this to the
backend maintainer. USE WITH CARE! backend maintainer. USE WITH CARE!
.TP .TP
skip\-adf:
Forces the backend to ignore an inconsistent ADF
status returned by the scanner (ADF not present, but
ADF model number non-zero). Without this option, the
backend will make several attempts to reset the ADF
and retry the query in this situation, and will fail
with a "not supported" error if the ADF still doesn't
respond.
.TP
disable\-gamma\-table: disable\-gamma\-table:
Disables the usage of the scanner's gamma-table. You Disables the usage of the scanner's gamma-table. You
might try this if your scans hang or only produces might try this if your scans hang or only produces