[sane-devel] "hp4200" backend detects non-HP scanners as HP ScanJet 4200

Till Kamppeter till.kamppeter@gmx.net
Fri, 29 Aug 2003 15:36:42 +0200


This is a bug reported by someone with an Epson Perfection 1650 who 
tested the release candidate 1 of the new Mandrake 9.2:

https://qa.mandrakesoft.com/show_bug.cgi?id=4987

For Mandrake 9.2 I have packaged SANE 1.0.12 with "hp4200" version 0.4. 
I can also reproduce the bug with my Epson Perfection 1260 Photo and the 
same software versions.

I have a system with an HP PSC 950 and an Epson Perfection 1260 Photo 
and I get the following:

---------------------------------------------------------------------------
[root@majax g]# sane-find-scanner | grep -v \#

found USB scanner (vendor=0x04b8, product=0x011d) at /dev/usb/scanner0
found USB scanner (vendor=0x04b8 [EPSON], product=0x011d [EPSON 
Scanner]) at libusb:001:115

[root@majax g]# scanimage -L
device `hpoj:mlc:usb:PSC_900_Series' is a Hewlett-Packard PSC 900 Series 
multi-function peripheral
device `plustek:/dev/usb/scanner0' is a Epson Perfection 1260/Photo USB 
flatbed scanner
device `hp4200:/dev/usb/scanner0' is a Hewlett-Packard HP-4200 flatbed 
scanner

[root@majax g]#
---------------------------------------------------------------------------

and /proc/bus/usb/devices has the following entries

---------------------------------------------------------------------------
T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc= 22/900 us ( 2%), #Int=  2, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=1000
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 7
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0451 ProdID=2077 Rev= 1.00
S:  Product=General Purpose USB Hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=255ms
T:  Bus=01 Lev=02 Prnt=02 Port=04 Cnt=01 Dev#=115 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=ff(vend.) Sub=00 Prot=ff MxPS= 8 #Cfgs=  1
P:  Vendor=04b8 ProdID=011d Rev= 1.00
S:  Manufacturer=EPSON
S:  Product=EPSON Scanner
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  2mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff Driver=usbscanner
E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=16ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
T:  Bus=01 Lev=02 Prnt=02 Port=05 Cnt=02 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=03f0 ProdID=1e11 Rev= 1.00
S:  Manufacturer=Hewlett-Packard
S:  Product=PSC 950xi
S:  SerialNumber=MY21AC21J6WP
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  2mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=07(print) Sub=01 Prot=03 Driver=usblp
E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=10ms
I:  If#= 0 Alt= 1 #EPs= 2 Cls=07(print) Sub=01 Prot=02 Driver=usblp
E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
I:  If#= 0 Alt= 2 #EPs= 1 Cls=07(print) Sub=01 Prot=01 Driver=usblp
E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
---------------------------------------------------------------------------

So my Epson Perfection 1260 Photo is detected both as Epson and as HP
(/dev/usb/scanner0).

If I unload the scanner.o kernel module with

rmmod scanner.o

my scanners are correctly detected (The HP 4200 disappears, the other 
two stay). So the problem only happens with access to the scanners via 
the kernel module but not with user-mode USB access via libusb.

This seems for me to be a bug in the "hp4200" backend that it recognizes 
also scanners which use other drivers (and will not necessarily work 
with "hp4200").

Or is it safe to not use scanner.o any more at all, for example shipping 
Mandrake Linux with a kernel without this module or at least adding a 
line to /etc/modules.conf to suppress automatic loading of the module? 
Are there really scanners/backends which need scanner.o?

What is the advantage of scanner.o vs. libusb?

    Till