[sane-devel] sanei_usb_open() and multifuntion devices

Wittawat Yamwong wy-sane-devel at arcor.de
Wed Sep 13 11:29:04 UTC 2006


I think that how sanei_usb_open() collects endponts is not correct. It loops 
through all configurations, interfaces and alternate settings and takes the 
first bulk in, bulk out and interrupt endpoint it found. This works only for 
some special cases and it is likely to fail for multifunction devices, e.g. 
Smartbase MP360 which has endpoints for the scanner function in the interface 

I would propose that sanei_usb_open() accepts two additional parameters 
specifying an interface number and an alternate setting. These parameters can 
be omitted (e.g. set to -1). In this case the behaviour described above is 
valid. If the parameters are given, sanei_usb_open() must use only the 
endpoints belonging to the specified interface.

There is also an issue with sanei_usb_set_configuration(), it simply doesn't 
work this way because setting new configuration will succeed if and only if 
there is no interfaces claimed by any driver. But the function takes the 
device number returned by sanei_usb_open() as a parameter and, unfortunely, 
sanei_usb_open() implicitly claims one interface. We have chicken and egg 
problem here. Solution: sanei_usb_set_configuration() have to take the device 
name instead of the device number as the first parameter.

If I understand correctly, sanei_usb_claim_interface(), 
sanei_usb_release_interface() and sanei_usb_set_altinterface() are useless 
because sanei_usb_open() already claims an interface for you and 
sanei_usb_close() will release it afterward. Why does one want to claim 
another interface while he cannot use its endpoints through sanei_usb 

Wittawat Yamwong
Hannover, Germany

More information about the sane-devel mailing list