From 2fea21f28ecbcd83ec4c4cf6d1578cdd552b0df4 Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Tue, 14 Mar 2017 17:38:49 +0100 Subject: [PATCH] patch: avision-skip-adf Squashed commit of the following: commit 1177ca9c2673e5264741dff60010ddebaf43737c Author: Dave Platt Date: Thu Dec 15 22:29:16 2016 -0800 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 (cherry picked from commit 6585b6f60d07a196e42c99b935e2754bbc80b3c8) --- backend/avision.c | 14 ++++++++++++-- doc/sane-avision.man | 10 ++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/backend/avision.c b/backend/avision.c index 146125c..b02b547 100644 --- a/backend/avision.c +++ b/backend/avision.c @@ -1277,6 +1277,9 @@ static SANE_Bool force_calibration = SANE_FALSE; static SANE_Bool force_a4 = 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 */ static const int hw_res_list_c5[] = { @@ -3218,11 +3221,13 @@ get_accessories_info (Avision_Scanner* s) { dev->inquiry_duplex = 1; 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 * 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 - * 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"); status = adf_reset (s); @@ -7630,6 +7635,11 @@ sane_reload_devices (void) linenumber); 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) { DBG (3, "sane_reload_devices: config file line %d: static red calibration\n", linenumber); diff --git a/doc/sane-avision.man b/doc/sane-avision.man index 299bb72..6a991b6 100644 --- a/doc/sane-avision.man +++ b/doc/sane-avision.man @@ -36,6 +36,7 @@ a hash mark (#) are ignored. A sample configuration file is shown below: \ option force\-a4 option force\-a3 + option skip\-adf option disable\-gamma\-table 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 backend maintainer. USE WITH CARE! .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: Disables the usage of the scanner's gamma-table. You might try this if your scans hang or only produces -- 2.9.3