[sane-devel] HAL and scanners.

abel deuring adeuring at gmx.net
Tue Mar 18 16:48:33 UTC 2008


Hi all,

On 18.03.2008 17:15, Étienne Bersac wrote:
> Hi,
> 
> I answer both allan and abel in this mail.
> 
>> we can also add a function like sane_get_device_information to the
>> Sane API that would return data like USB bus and devices numbers […]
> 
>> A HAL callout can then call sane_get_devices, call
>> sane_get_device_information for each Sane device and can this way
>> decide, if a Sane device "matches" the "current" HAL device.
> 
> So basically, we have have two solutions :
> 
>      1. a HAL callout + sane_get_device_informations()
>      2. a SANE meta backend
>      3. extends the meaning of sane_open()
> 
> I actually prefer the first since it imply less modification in SANE.
> 
> Something good would be to avoid reloading all backends since HAL know
> which backends support the device. Something like
> sane_backend_get_devices would be very cool.

That is one step too far -- we should get an agreement about the basic
stuff first ;) But the HAL callout could also mess with dll.conf and
enable those backends that "fit" to a newly detected scanner. Though
this might also be a bit dangerous: The callout should not touch any
backends for devices that are for example accessible via ethernet.

> 
> Which solution is the right ? Other solution are welcome ;) Please
> comment.

Without much thinking, I think one could also write a meta-backend using
a function like sane_get_device_information. But I'd prefer to leave the
legwork to a HAL callout.

Also, I think that it would not be too much work to implement the
function sane_get_device_informations (but remember: I'm talking about
work that I cannot promise to do myself...). If we allow backends to
return "sorry, can't provide any device data" -- and that is necessary
for example for the test backend --, we can in a first step add a dummy
function to all backends that simply returns SANE_STATUS_UNSUPPORTED.
Most newer scanners have a USB interface and most if not all "related"
Sane backends use the sanei_usb library to access the devices, hence it
would probably be sufficient to implement a function like
sanei_usb_device_info in sanei_usb, which can be called by the backends
in sane_get_device_informations. A similar common function can be
implemented in sanei_scsi.c.

I believe that the main challenge is to define the data to be returned
by sane_get_device_informations in such a way that it is useful at least
for USB and SCSI scanners, and hopefully also for IEEE1394 and parport
scanners -- on different platforms, with/without libusb usage etc.
[sorry, I'm going back to work without making any specific proposals...]

Abel



More information about the sane-devel mailing list