Chris Ott
2017-09-27 21:52:45 UTC
I wrote a scanning program that uses the Sane library eight or nine years ago, and have been using it happily, since then. A couple of weeks ago, it occurred to me the machines to which the scanners are connected hadn't had their OSes upgraded in at least three years. Unfortunately, upgrading them broke my program, and I can't figure out why.
The scanners are Fujitsu fi-6770djs, with both document feeders and flatbeds. If we stick with the document feeders, everything is fine. If we scan on the flatbed, then switch back to the document feeder, sane_start returns SANE_STATUS_INVAL. Restarting the program resets everything and allows us to use the document feeder, again. Now, I know that when you use the document feeder, the page dimensions have to be specified with page-length/page-width, while the flatbed requires tl-x/tl-y/br-x/br-y, and my program accounts for that.
I tried moving some stuff around so all the options are set right before sane_start is called (rather than immediately after the user sets them), but that didn't help.
I tried previous versions of the Sane library, from 1.0.22 to 1.0.27; didn't help.
Here's the debug output:
[sanei_debug] Setting debug level of dll to 255.
[dll] sane_init: SANE dll backend version 1.0.13 from sane-backends 1.0.27git
[dll] sane_init/read_dlld: attempting to open directory `./dll.d'
[dll] sane_init/read_dlld: attempting to open directory `/usr/local/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: using config directory `/usr/local/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: done.
[dll] sane_init/read_config: reading dll.conf
[dll] add_backend: adding backend `net'
...
[dll] add_backend: adding backend `xerox_mfp'
[dll] sane_open: trying to open `fujitsu:fi-6770dj:1215'
[dll] load: searching backend `fujitsu' in `/usr/local/lib:/usr/local/lib/sane'
[dll] load: trying to load `/usr/local/lib/libsane-fujitsu.so.1'
[dll] load: couldn't open `/usr/local/lib/libsane-fujitsu.so.1' (No such file or directory)
[dll] load: trying to load `/usr/local/lib/sane/libsane-fujitsu.so.1'
[dll] load: dlopen()ing `/usr/local/lib/sane/libsane-fujitsu.so.1'
[dll] init: initializing backend `fujitsu'
[sanei_debug] Setting debug level of fujitsu to 255.
[fujitsu] sane_init: start
[fujitsu] sane_init: fujitsu backend 1.0.133, from sane-backends 1.0.27git
[fujitsu] sane_init: finish
[dll] init: backend `fujitsu' is version 1.0.133
[fujitsu] sane_open: start
[fujitsu] sane_open: no scanners currently attached, attaching
[fujitsu] sane_get_devices: start
[fujitsu] sane_get_devices: reading config file fujitsu.conf
[fujitsu] sane_get_devices: setting "buffer-size" to 65536
[fujitsu] sane_get_devices: looking for 'scsi FUJITSU'
[fujitsu] sane_get_devices: looking for 'usb 0x04c5 0x1041'
...
[fujitsu] sane_get_devices: looking for 'usb 0x04c5 0x114a'
[fujitsu] sane_get_devices: config option "buffer-size" (262144) is > 65536, warning!
[fujitsu] sane_get_devices: setting "buffer-size" to 262144
[fujitsu] sane_get_devices: looking for 'usb 0x04c5 0x114d'
...
[fujitsu] sane_get_devices: looking for 'usb 0x04c5 0x1174'
[fujitsu] attach_one: start
[fujitsu] attach_one: looking for 'libusb:002:002'
[fujitsu] connect_fd: start
[fujitsu] connect_fd: opening USB device
[fujitsu] wait_scanner: start
[fujitsu] do_usb_cmd: start
...
[fujitsu] do_usb_cmd: finish
[fujitsu] init_inquire: Found FUJITSU scanner fi-6770dj version 03 at libusb:002:002
...
[fujitsu] rs sub call >>
[fujitsu] do_usb_cmd: start
[fujitsu] cmd: writing 31 bytes, timeout 30000
[fujitsu] cmd: >>
[fujitsu] 000: 43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C...............
[fujitsu] 010: 00 00 00 03 00 00 00 12 00 00 00 00 00 00 00 ...............
[fujitsu] cmd: wrote 31 bytes, retVal 0
[fujitsu] in: reading 18 bytes, timeout 30000
[fujitsu] in: retVal 0
[fujitsu] in: read 18 bytes
[fujitsu] in: <<
[fujitsu] 000: f0 00 45 00 00 00 00 0a 00 00 00 00 26 00 00 80 ..E.........&...
[fujitsu] 010: 00 3e .>
[fujitsu] stat: reading 13 bytes, timeout 30000
[fujitsu] stat: <<
[fujitsu] 000: 53 00 00 00 00 00 00 00 00 00 00 00 00 S............
[fujitsu] stat: read 13 bytes, retVal 0
[fujitsu] do_usb_cmd: finish
[fujitsu] rs sub call <<
[fujitsu] sense_handler: start
[fujitsu] Sense=0x5, ASC=0x26, ASCQ=00, EOM=1, ILI=0, info=00000000
[fujitsu] Illegal request: invalid field in parm list
[fujitsu] Offending byte is 0x3e
[fujitsu] Window desc block? byte 0x36
[fujitsu] set_window: finish
[fujitsu] sane_start: ERROR: cannot set window
[fujitsu] sane_start: error 4
[dll] sane_cancel(handle=0x20e1300)
[fujitsu] sane_cancel: start
[fujitsu] check_for_cancel: start 0 1
[fujitsu] check_for_cancel: already cancelled
[fujitsu] check_for_cancel: finish 2
[fujitsu] sane_cancel: finish
[dll] sane_close(handle=0x20e1300)
[fujitsu] sane_close: start
[fujitsu] mode_select_buff: start
[fujitsu] do_usb_cmd: start
[fujitsu] cmd: writing 31 bytes, timeout 30000
[fujitsu] cmd: >>
[fujitsu] 000: 43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C...............
[fujitsu] 010: 00 00 00 15 10 00 00 0c 00 00 00 00 00 00 00 ...............
[fujitsu] cmd: wrote 31 bytes, retVal 0
[fujitsu] out: writing 12 bytes, timeout 30000
[fujitsu] out: >>
[fujitsu] 000: 00 00 00 00 3a 06 c0 c0 00 00 00 00 ....:.......
[fujitsu] out: wrote 12 bytes, retVal 0
[fujitsu] stat: reading 13 bytes, timeout 30000
[fujitsu] stat: <<
[fujitsu] 000: 53 00 00 00 00 00 00 00 00 00 00 00 00 S............
[fujitsu] stat: read 13 bytes, retVal 0
[fujitsu] do_usb_cmd: finish
[fujitsu] mode_select_buff: finish
[fujitsu] disconnect_fd: start
[fujitsu] disconnecting usb device
[fujitsu] disconnect_fd: finish
[fujitsu] sane_close: finish
[dll] sane_exit: exiting
[dll] sane_exit: calling backend `fujitsu's exit function
[fujitsu] sane_exit: start
[fujitsu] disconnect_fd: start
[fujitsu] disconnect_fd: finish
[fujitsu] sane_exit: finish
[dll] sane_exit: finished
The actual debug output was 14 meg, so I trimmed it a little. Places where I did that are denoted with "...".
I get that the thing that obviously changed is the operating system (Linux Mint 16 to Ubuntu 16.04), but I wouldn't even know where to start to figure out how that's affecting my stuff, and of course, I can't go back, because none of the repositories are storing it, anymore. If anyone can point me in a direction that might help, it would be greatly appreciated.
Thanks
The information contained in this email is proprietary, confidential and only for the use of the intended recipient. If you are not the intended recipient, note that any disclosure, distribution, or copying of this email is strictly prohibited. If you have received this email in error, please destroy it and notify us immediately at the number noted above.
The scanners are Fujitsu fi-6770djs, with both document feeders and flatbeds. If we stick with the document feeders, everything is fine. If we scan on the flatbed, then switch back to the document feeder, sane_start returns SANE_STATUS_INVAL. Restarting the program resets everything and allows us to use the document feeder, again. Now, I know that when you use the document feeder, the page dimensions have to be specified with page-length/page-width, while the flatbed requires tl-x/tl-y/br-x/br-y, and my program accounts for that.
I tried moving some stuff around so all the options are set right before sane_start is called (rather than immediately after the user sets them), but that didn't help.
I tried previous versions of the Sane library, from 1.0.22 to 1.0.27; didn't help.
Here's the debug output:
[sanei_debug] Setting debug level of dll to 255.
[dll] sane_init: SANE dll backend version 1.0.13 from sane-backends 1.0.27git
[dll] sane_init/read_dlld: attempting to open directory `./dll.d'
[dll] sane_init/read_dlld: attempting to open directory `/usr/local/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: using config directory `/usr/local/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: done.
[dll] sane_init/read_config: reading dll.conf
[dll] add_backend: adding backend `net'
...
[dll] add_backend: adding backend `xerox_mfp'
[dll] sane_open: trying to open `fujitsu:fi-6770dj:1215'
[dll] load: searching backend `fujitsu' in `/usr/local/lib:/usr/local/lib/sane'
[dll] load: trying to load `/usr/local/lib/libsane-fujitsu.so.1'
[dll] load: couldn't open `/usr/local/lib/libsane-fujitsu.so.1' (No such file or directory)
[dll] load: trying to load `/usr/local/lib/sane/libsane-fujitsu.so.1'
[dll] load: dlopen()ing `/usr/local/lib/sane/libsane-fujitsu.so.1'
[dll] init: initializing backend `fujitsu'
[sanei_debug] Setting debug level of fujitsu to 255.
[fujitsu] sane_init: start
[fujitsu] sane_init: fujitsu backend 1.0.133, from sane-backends 1.0.27git
[fujitsu] sane_init: finish
[dll] init: backend `fujitsu' is version 1.0.133
[fujitsu] sane_open: start
[fujitsu] sane_open: no scanners currently attached, attaching
[fujitsu] sane_get_devices: start
[fujitsu] sane_get_devices: reading config file fujitsu.conf
[fujitsu] sane_get_devices: setting "buffer-size" to 65536
[fujitsu] sane_get_devices: looking for 'scsi FUJITSU'
[fujitsu] sane_get_devices: looking for 'usb 0x04c5 0x1041'
...
[fujitsu] sane_get_devices: looking for 'usb 0x04c5 0x114a'
[fujitsu] sane_get_devices: config option "buffer-size" (262144) is > 65536, warning!
[fujitsu] sane_get_devices: setting "buffer-size" to 262144
[fujitsu] sane_get_devices: looking for 'usb 0x04c5 0x114d'
...
[fujitsu] sane_get_devices: looking for 'usb 0x04c5 0x1174'
[fujitsu] attach_one: start
[fujitsu] attach_one: looking for 'libusb:002:002'
[fujitsu] connect_fd: start
[fujitsu] connect_fd: opening USB device
[fujitsu] wait_scanner: start
[fujitsu] do_usb_cmd: start
...
[fujitsu] do_usb_cmd: finish
[fujitsu] init_inquire: Found FUJITSU scanner fi-6770dj version 03 at libusb:002:002
...
[fujitsu] rs sub call >>
[fujitsu] do_usb_cmd: start
[fujitsu] cmd: writing 31 bytes, timeout 30000
[fujitsu] cmd: >>
[fujitsu] 000: 43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C...............
[fujitsu] 010: 00 00 00 03 00 00 00 12 00 00 00 00 00 00 00 ...............
[fujitsu] cmd: wrote 31 bytes, retVal 0
[fujitsu] in: reading 18 bytes, timeout 30000
[fujitsu] in: retVal 0
[fujitsu] in: read 18 bytes
[fujitsu] in: <<
[fujitsu] 000: f0 00 45 00 00 00 00 0a 00 00 00 00 26 00 00 80 ..E.........&...
[fujitsu] 010: 00 3e .>
[fujitsu] stat: reading 13 bytes, timeout 30000
[fujitsu] stat: <<
[fujitsu] 000: 53 00 00 00 00 00 00 00 00 00 00 00 00 S............
[fujitsu] stat: read 13 bytes, retVal 0
[fujitsu] do_usb_cmd: finish
[fujitsu] rs sub call <<
[fujitsu] sense_handler: start
[fujitsu] Sense=0x5, ASC=0x26, ASCQ=00, EOM=1, ILI=0, info=00000000
[fujitsu] Illegal request: invalid field in parm list
[fujitsu] Offending byte is 0x3e
[fujitsu] Window desc block? byte 0x36
[fujitsu] set_window: finish
[fujitsu] sane_start: ERROR: cannot set window
[fujitsu] sane_start: error 4
[dll] sane_cancel(handle=0x20e1300)
[fujitsu] sane_cancel: start
[fujitsu] check_for_cancel: start 0 1
[fujitsu] check_for_cancel: already cancelled
[fujitsu] check_for_cancel: finish 2
[fujitsu] sane_cancel: finish
[dll] sane_close(handle=0x20e1300)
[fujitsu] sane_close: start
[fujitsu] mode_select_buff: start
[fujitsu] do_usb_cmd: start
[fujitsu] cmd: writing 31 bytes, timeout 30000
[fujitsu] cmd: >>
[fujitsu] 000: 43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C...............
[fujitsu] 010: 00 00 00 15 10 00 00 0c 00 00 00 00 00 00 00 ...............
[fujitsu] cmd: wrote 31 bytes, retVal 0
[fujitsu] out: writing 12 bytes, timeout 30000
[fujitsu] out: >>
[fujitsu] 000: 00 00 00 00 3a 06 c0 c0 00 00 00 00 ....:.......
[fujitsu] out: wrote 12 bytes, retVal 0
[fujitsu] stat: reading 13 bytes, timeout 30000
[fujitsu] stat: <<
[fujitsu] 000: 53 00 00 00 00 00 00 00 00 00 00 00 00 S............
[fujitsu] stat: read 13 bytes, retVal 0
[fujitsu] do_usb_cmd: finish
[fujitsu] mode_select_buff: finish
[fujitsu] disconnect_fd: start
[fujitsu] disconnecting usb device
[fujitsu] disconnect_fd: finish
[fujitsu] sane_close: finish
[dll] sane_exit: exiting
[dll] sane_exit: calling backend `fujitsu's exit function
[fujitsu] sane_exit: start
[fujitsu] disconnect_fd: start
[fujitsu] disconnect_fd: finish
[fujitsu] sane_exit: finish
[dll] sane_exit: finished
The actual debug output was 14 meg, so I trimmed it a little. Places where I did that are denoted with "...".
I get that the thing that obviously changed is the operating system (Linux Mint 16 to Ubuntu 16.04), but I wouldn't even know where to start to figure out how that's affecting my stuff, and of course, I can't go back, because none of the repositories are storing it, anymore. If anyone can point me in a direction that might help, it would be greatly appreciated.
Thanks
The information contained in this email is proprietary, confidential and only for the use of the intended recipient. If you are not the intended recipient, note that any disclosure, distribution, or copying of this email is strictly prohibited. If you have received this email in error, please destroy it and notify us immediately at the number noted above.