Hi, On Thu, Feb 13, 2003 at 02:49:40PM -0800, Derry Bryson wrote: > I am thinking along the lines of keeping a list around, but allowing the > user the option to detect devices when selecting a source. This I can do > in my code without needing to change the sane API.
I don't really understand. What source are you talking about? So you mean the scanner (or other image application device)? "source" in SANE ususally means "flatbed", "ADF" or "Transparency adapter". > If you were to want to consider changing the API, There will be an API change in SANE2, but I don't think it's necessary in the case we are talking about. > I might suggest adding a sane_list_devices() function with the same > signature as sane_get_devices() that would be implemented in most > backends as a call to sane_get_devices(), but in the dll and net > backends would return the list of devices cached from the last call > to sane_get_devices(). The cached list would saved to a file when > the backend is unloaded and read when the backend is loaded. Why? In this case, new devices aren't found and unplugged or powered off devices are still displayed as "live". I think that's broken. During runtime the list of devices is "cached", i.e. sane_init of a backend is only called when necessary. Here is some simple test code: stopwatch (sane_init (&version_code, NULL)); stopwatch (sane_get_devices (&device_list, SANE_TRUE)); stopwatch (sane_get_devices (&device_list, SANE_TRUE)); stopwatch (sane_get_devices (&device_list, SANE_FALSE)); stopwatch (sane_get_devices (&device_list, SANE_FALSE)); stopwatch (sane_exit ()); The macro "stopwatch" times the function that's given as argument. So we call sane_init, get the device list twice, and then get the device list including the devices not locally connected. I have one USB and one SCSI scanner connected. Result: sane_init (&version_code, NULL) took 0.000 seconds sane_get_devices (&device_list, SANE_TRUE) took 0.134 seconds sane_get_devices (&device_list, SANE_TRUE) took 0.014 seconds sane_get_devices (&device_list, SANE_FALSE) took 0.221 seconds sane_get_devices (&device_list, SANE_FALSE) took 0.029 seconds sane_exit () took 0.003 seconds So the second call of sane_get_devices is much faster than the first one (as intended). The third one also checks for network scanners and take a bit longer therefore. But the forth one now knows the network scanners and is faster again. This is 0.221 seconds (221 miliseconds) we are talking about and this time is only necessary once per sane_init (program start, not scan). Bye, Henning
