Hi,
I have very unreliable results when I use my Canon MG3250 all-in-one
printer, scanner for scanning.
Most of the scanning attempts with scanimage fail:
scanimage: sane_read: Error during device I/O
I spent some time with it and from what I can see scanning fails when
libusb_cancel_transfer() from libusb returns code -12. Here is example
of failed scan:
export LIBUSB_DEBUG=4
scanimage --device-name pixma:04A91762_860FE4 \
--format png --mode gray --resolution 300 \
--output-file scan.png
[ 2.024756] [0008d272] libusb: debug [libusb_alloc_transfer] transfer 0xbc317170e50
[ 2.024768] [0008d272] libusb: debug [libusb_submit_transfer] transfer 0xbc317170e50
[ 2.024814] [0008d272] libusb: debug [obsd_submit_transfer]
[ 2.024887] [0008d272] libusb: debug [_access_endpoint] endpoint 9 mode 0
[ 3.033570] [0008d272] libusb: debug [libusb_get_next_timeout] first timeout already expired
[ 3.033620] [0008d272] libusb: debug [libusb_cancel_transfer] transfer 0xbc317170e50
[ 3.033634] [0008d272] libusb: debug [obsd_cancel_transfer]
[ 3.033645] [0008d272] libusb: error [libusb_cancel_transfer] cancel transfer failed error -12
[ 3.033658] [0008d272] libusb: warning [handle_timeout] async cancel failed -12 errno=6
[ 3.033690] [0008d272] libusb: debug [libusb_get_next_timeout] no URB with timeout or all handled by OS; no timeout!
[ 3.033730] [0008d272] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 3.033799] [0008d272] libusb: debug [handle_events] poll() 1 fds with timeout in 60000ms
[ 3.033822] [0008d272] libusb: debug [handle_events] poll() returned 1
[ 3.033858] [0008d272] libusb: debug [handle_events] caught a fish on the event pipe
[ 3.033872] [0008d272] libusb: debug [usbi_handle_transfer_completion] transfer 0xbc317170e50 has callback 0xbc2c960d550
[ 3.033899] [0008d272] libusb: debug [sync_transfer_cb] actual_length=0
[ 3.033947] [0008d272] libusb: debug [libusb_free_transfer] transfer 0xbc317170e50
Here is the same command like above, but scanning succeeds:
[ 1.974116] [0003cf01] libusb: debug [libusb_alloc_transfer] transfer 0x9aeef9a1550
[ 1.974138] [0003cf01] libusb: debug [libusb_submit_transfer] transfer 0x9aeef9a1550
[ 1.974153] [0003cf01] libusb: debug [obsd_submit_transfer]
[ 1.974190] [0003cf01] libusb: debug [_access_endpoint] endpoint 9 mode 0
[ 2.384033] [0003cf01] libusb: debug [libusb_get_next_timeout] next timeout in 0.590119s
[ 2.384079] [0003cf01] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 2.384111] [0003cf01] libusb: debug [handle_events] poll() 1 fds with timeout in 591ms
[ 2.384131] [0003cf01] libusb: debug [handle_events] poll() returned 1
[ 2.384141] [0003cf01] libusb: debug [handle_events] caught a fish on the event pipe
[ 2.384152] [0003cf01] libusb: debug [usbi_handle_transfer_completion] transfer 0x9aeef9a1550 has callback 0x9aec4f75550
[ 2.384190] [0003cf01] libusb: debug [sync_transfer_cb] actual_length=32
[ 2.384261] [0003cf01] libusb: debug [libusb_free_transfer] transfer 0x9aeef9a1550
In failed scenario, actual_length=0 which then SANE interpreters
as SANE_STATUS_EOF (file sanei/sanei_usb.c, function
sanei_usb_read_int(), condition read_size == 0).
In successful scenario, actual_length=32 and SANE moves along and
scanning finishes successfully.
I'm kinda stuck here, as I'm not sure how to handle this. In practical
terms, scanning is extremely unrelaible and code most of the time hits
cancel transfer failed error -12 (LIBUSB_ERROR_NOT_SUPPORTED) condition.
Any tips how to tackle this?
--
Regards,
Mikolaj
No comments:
Post a Comment