[sane-devel] sane_init(), sane_get_devices() and SANE_Authorization_Callback()

Kåre Särs kare.sars at iki.fi
Wed May 26 08:28:01 UTC 2010


I have a couple of somewhat related problems regarding  sane_get_devices(), 
sane_init() and SANE_Authorization_Callback().

1) sane_get_devices() does not update the available devices list without 
calling sane_init(). I asked about this some time ago and got the answer that 
it was a bug. With the version in (K)Ubuntu Lucid and the pashazz-sane PPA, I 
still have the problem that the scanner is not found if turned on after 
sane_init(). I use the epson2 and v4l backends. With epson2 I get a crash if 
the scanner is on the first time but is turned off before the second 

Do you have any hints on where to start digging?

2) With  sane_get_devices() I can get the vendor, model, type and backend 
names for the available scanners. Is there a way to get the same information
about the currently opened device? I do not find an API for that.  Have I 
missed something? The problem is that I can specify a backend like "test" and 
sane_open() will open either "test:0" or "test:1", but I do not know which one 
and I do not get the vendor, model and type strings.

3) libksane can be used in multi threaded applications and at the moment I'm 
making sure that sane_exit() is only called when the last instance exits, as 
sane_exit() will invalidate the other running instances. Should I do the same 
for sane_init()?. So far it has not resulted in problems, but when I tried a 
workaround for the  sane_get_devices() problem I noticed that I got unwanted 

4) Again in a multi threaded application there might be two scanners that 
require authentication. The resource string that is provided to 
SANE_Authorization_Callback() contains the backend name and a md5 hash, but it 
does not contain the same ":libusb:001:004" extra info type of sting that 
sane_get_devices() returns for the backend. 
How should I identify the different scanners with the same backend? Or is the 
authorization restricted to the backend with the same authentication for all 
the scanners with the same backend?

Thanks in advance, 

More information about the sane-devel mailing list