Mike,<br><br>THIS IS GREAT!  I have a couple of HP8250 scanners, and can do some testing.  The next week or two I am buried, but I can go after it late this month.  Besides the weather gets cold and rainy then.<br><br>I&#39;ll look through your stuff, and make sure I understand it, etc.<br>
<br>Also, I&#39;m willing to work with anyone else going after this.  The 8250 is a nice inexpensive sheet feed scanner, and it would be great to have fuller functionality using xsane.<br><br>Val<br><br>ps: What I do currently is use a windoze machine running the HP software to reset the scanner, then I can usually scan without problem until a paperjam or power failure.  Then I plug the scanner into the old laptop and do a reset, and then back to the linux box doing the scan.  That allows me to do ADF, but does not allow me to do duplex, for example. (obviously)<br>
<br><br><br><div class="gmail_quote">On Mon, Sep 13, 2010 at 9:15 AM, Mike Kelly <span dir="ltr">&lt;<a href="mailto:mike@piratehaven.org">mike@piratehaven.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>
<br>
I own an HP 8250 scanner, but the ADF unit doesn&#39;t work with sane.  In my<br>
attempt to find a solution I stumbled upon Debian bug 521410<br>
(<a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521410" target="_blank">http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521410</a>).  In this bug, it<br>
is reported that scanning used to work with a previous version of avision.c,<br>
but that with later versions the ADF stopped working.  With the supplied log<br>
files in that bug, I decided to try to figure out what changed in the source<br>
and see if I could return the functionality.<br>
<br>
I went through every change in avision.c, going back until June of 2006,<br>
until I narrowed the problem down to a bit field which used to have one of<br>
two bits set for all ADF scanners but was later changed to only set the bits<br>
based on ADF capabilities.  Unfortunately the new code which determines the<br>
ADF&#39;s capabilities excludes this scanner.<br>
<br>
There are two core problems:<br>
1) The first is that the code is trying to determine the ADF model from the<br>
   scanner, but the returned value from the scanner is not giving us enough<br>
   information to determine what the capabilities are for the ADF.<br>
2) The second is that the code added to correctly set the scanner bits for<br>
   2-pass duplex scanners sets a completely different set of bits than<br>
   before.<br>
<br>
About the first problem (detecting the ADF):<br>
<br>
The code uses a byte value returned from the scanner labeled &quot;adf_model&quot; in<br>
the source, but the returned value is a value in the range of 0 to 2.<br>
Although the code assigns model names to these values, it seems that<br>
different scanners, with clearly different ADF units, return the same model<br>
number, so the names can&#39;t possibly be valid.  How HP uses this byte is<br>
unclear, but I suspect that if it is used at all, there is a lookup table to<br>
determine the ADF features based on the scanner model.  I&#39;ve looked at debug<br>
logs for almost all of the supported scanners to support this conclusion.<br>
<br>
In fact, having reviewed the documentation of each supported model and its<br>
ADF capabilities, I have concluded that this byte can be safely ignored,<br>
and that knowing the base scanner model is sufficient.  I implemented a<br>
simple flag, AV_ADF_SUPPORTS_DUPLEX, which I have applied to the scanner<br>
models which support duplex scanning.  If I can believe the comments, this<br>
change only affects HP scanners.<br>
<br>
About the second problem (setting the correct bits):<br>
<br>
The original code, for all ADF scanners, set either the duplex (0x10) or<br>
rear scanner bits (0x08) depending on the selected ADF mode.  The subsequent<br>
changes do this for only interlaced scanners (aka 1-pass scanners).  The<br>
code does not set these bits for 2-pass scanners, but instead sets the<br>
lowest three bits (0x07) of the bitset3 bit field.<br>
<br>
The comments suggest that only HP scanners do 2-pass scanning, so I haven&#39;t<br>
looked at other Avision scanners.  In the 2-pass case, the last three bits<br>
are set, but the duplex mode (0x10) is not.  The comments in the code do not<br>
lead me to believe that the rear scanning mode exists for HP equipment,<br>
neither do the photos, debug logs, or documentation of the equipment.  As a<br>
result, my change is to add setting of the duplex bit (0x10) in addition to<br>
the last three bits (0x07) (although it should be noted that these were not<br>
originally set).  I also changed the setting of the bit fields to use the<br>
SET_BIT macro which seems to be the preferred way to toggle bits.<br>
<br>
<br>
While I was patching the code, I decided to clean up some clever, but<br>
confusing, code in the set_window() function.  I replaced an intermediate<br>
value (adf_mode) with references to the underlying core data structure<br>
(s-&gt;source_mode).  This change looks bigger than it is because of I had to<br>
fix the indenting.<br>
<br>
<br>
Now for the bad news.  I have not tested this code at all.  Unfortunately,<br>
my scanner is inaccessible to me for the next year, as I&#39;ve moved overseas<br>
temporarily.  I can only assume it would work based on the debugging output<br>
in the aforementioned bug.  I realize it&#39;s kind of rude to just dump<br>
untested code on the group, but I hope you will forgive me as I don&#39;t<br>
actually have the hardware in my possession at the moment.<br>
<br>
I&#39;ve put in a lot of effort to avoid breaking other scanners, but I can&#39;t be<br>
100% sure that I&#39;ve been successful.  HP scanners older than the 8200 series<br>
should be unaffected by these changes, as they don&#39;t support duplexing and<br>
don&#39;t enter these code paths.  However, I&#39;m worried about the 8300 series<br>
scanners because I have not been able to find a debug log for them.  This<br>
implies that they are working with the current code, but without a debug<br>
log, I can&#39;t know which code path they use.<br>
<br>
So, if possible, please test this patch if you have a ScanJet 8200 series<br>
scanner with an ADF unit.  If you&#39;re an owner of a ScanJet 8300 series<br>
scanner with an ADF unit, please send me a debug log (patch or not).<br>
<br>
These are the avision supported HP duplex capable scanners:<br>
HP ScanJet 8200  (This model didn&#39;t ship with an ADF)<br>
HP ScanJet 8250  (15ppm 2-pass)<br>
HP ScanJet 8290  (25ppm 2-pass)<br>
HP ScanJet 8270  (25ppm 2-pass, replaces the 8290)<br>
HP ScanJet 8300  (This model didn&#39;t ship with an ADF)<br>
HP ScanJet 8350  (25ppm 1-pass)<br>
HP ScanJet 8390  (35ppm 1-pass)<br>
<br>
Thanks,<br>
<br>
Mike<br>
(:<br>
<font color="#888888"><br>
--<br>
--------Mike@PirateHaven.org-----------------------The_glass_is_too_big--------<br>
</font><br>--<br>
sane-devel mailing list: <a href="mailto:sane-devel@lists.alioth.debian.org">sane-devel@lists.alioth.debian.org</a><br>
<a href="http://lists.alioth.debian.org/mailman/listinfo/sane-devel" target="_blank">http://lists.alioth.debian.org/mailman/listinfo/sane-devel</a><br>
Unsubscribe: Send mail with subject &quot;unsubscribe your_password&quot;<br>
             to <a href="mailto:sane-devel-request@lists.alioth.debian.org">sane-devel-request@lists.alioth.debian.org</a><br></blockquote></div><br>