[sane-devel] [PATCH] make scanimage work with HP ScanJet (HP 6250C), finally

m. allan noah kitno455 at gmail.com
Wed Mar 26 00:34:17 UTC 2008


i can confirm that this does help problems i have seen with the 6200C.
now the device is very consistent- it shows up and works the first,
third, fifth, etc times that i use it. but every 'even' call to Xsane
produces the following:

[hp] hp_AddOpenDevice: added device libusb:002:003 with fd=1
[hp] scl_inq: read failed (End of file reached)
[hp] scl_errcheck: Can't read SCL error stack: End of file reached
[hp] hp_nonscsi_device_new: SCL reset failed
[hp] scsi_close: closing fd 1
[hp] scsi_close: really closed

and xsane gives the 'no devices found' dialog. i have tried increasing
the sleep, but to no avail.

i have cc'd the backend author for comments. thanks for your efforts Jim!

allan

On 3/17/08, Jim Meyering <jim at meyering.net> wrote:
> This bug has been reported before, e.g.,
>   http://bugzilla.redhat.com/413471
>   http://bugs.debian.org/116962
>   https://bugs.launchpad.net/ubuntu/+source/sane-backends/+bug/119819
>
>  For years, scanimage/xsane has worked only sporadically with my
>  USB-connected HP 6250C.  I'd have to run it 3 or 4 times (sometimes
>  changing USB plug, when one would get "stuck") in order to get a single scan.
>  That was frustrating.  Often, it'd fail like this:
>
>   $ scanimage
>   scanimage: hp-option.c:3713: hp_optset_fix_geometry_options: Assertion `tl_x && tl_y && br_x && br_y' failed.
>   zsh: abort      scanimage
>   [Exit 134 (ABRT)]
>
>  [debug output attached below]
>
>  I get the same behavior with fedora rawhide and debian unstable.
>
>  Debugging showed that the primary problem lies in detecting supported
>  options.  During one run, it would fail to detect an option that I
>  knew to be valid and essential, like the one corresponding to tl_x
>  above), and during the next run, it *would* detect that same option.
>
>  The problematic code is in hp-scl.c's _hp_scl_inq function.
>  The issue-command call there is followed immediately by the "read
>  result" call:
>
>   RETURN_IF_FAIL( hp_scsi_scl(scsi, inq_cmnd, SCL_INQ_ID(scl)) );
>   status =  hp_scsi_read(scsi, buf, &bufsize, 1);
>
>  It looks like sometimes the device responds quickly enough,
>  and the attribute is detected.  Other times, is too slow and
>  sane reports that the attribute is not supported.
>
>  I found that inserting a 1ms delay between those two lines made everything
>  "just-work".  FYI, a .5ms delay appeared to work just as well (I ran
>  only 2 or 3 trials, and all succeeded), but my single trial with a .1ms
>  delay provoked the usual failed assertion.
>
>  There is probably a much cleaner way to wait until the data is ready,
>  but I'll let someone else investigate that.  Here's my patch:
>
>  Index: backend/hp-scl.c
>  ===================================================================
>  RCS file: /cvsroot/sane/sane-backends/backend/hp-scl.c,v
>  retrieving revision 1.14
>  diff -u -p -r1.14 hp-scl.c
>  --- backend/hp-scl.c    4 Oct 2004 18:09:05 -0000       1.14
>  +++ backend/hp-scl.c    17 Mar 2008 09:29:30 -0000
>  @@ -1763,6 +1763,7 @@ _hp_scl_inq (HpScsi scsi, HpScl scl, HpS
>    RETURN_IF_FAIL( hp_scsi_flush (scsi)) ;
>
>    RETURN_IF_FAIL( hp_scsi_scl(scsi, inq_cmnd, SCL_INQ_ID(scl)) );
>  +  usleep (1000); /* 500 works, too, but not 100 */
>
>    status =  hp_scsi_read(scsi, buf, &bufsize, 1);
>    if (FAILED(status))
>
>  When debugging, I ran the tool like this (built from checked-out
>  upstream CVS sources):
>
>   SANE_HP_RDREDO=3 SANE_DEBUG_HP=255 SANE_DEBUG_SANEI_SCSI=255 \
>     libtool --mode=execute gdb frontend/scanimage
>
>
> --
>  sane-devel mailing list: sane-devel at lists.alioth.debian.org
>  http://lists.alioth.debian.org/mailman/listinfo/sane-devel
>  Unsubscribe: Send mail with subject "unsubscribe your_password"
>              to sane-devel-request at lists.alioth.debian.org
>
>


-- 
"The truth is an offense, but not a sin"



More information about the sane-devel mailing list