On Fri, 11 Jun 2004 13:50:39 +0900
Olaf Meeuwissen <[email protected]> wrote:
[...]
> Problem confirmed for the GT-9700 (aka Perfection 2450) with both the
> epson and epkowa backends. Note that these same backends work fine
> with the GT-8200 (aka Perfection 1650) under identical conditions.
>
> Just starting a SANE frontend (tried with xsane and iscan) with the
> GT-9700 already takes "ages" and it just refuses to preview.
Aha. That's not at all what I expected - many apologies to any slighted libusb
developer!
Like I said, you can get it to work by calling usb_reset() whenever the scanner
device is closed. My hacked code for sanei_usb_close() (in sanei/sanei_usb.c)
is below.
I hope you don't need it :)
> Looks like Karl and/or I have some digging to do ;-(
Maybe. It would be very interesting to know what's wrong. Is it perhaps that
the scanner needs to be send a message before it is closed.
Many thanks,
Tom
-----------------------------------------------------------
-----------------------------------------------------------
void
sanei_usb_close (SANE_Int dn)
{
DBG (5, "sanei_usb_close: closing device %d\n", dn);
if (dn >= MAX_DEVICES || dn < 0)
{
DBG (1, "sanei_usb_close: dn >= MAX_DEVICES || dn < 0\n");
return;
}
if (!devices[dn].open)
{
DBG (1, "sanei_usb_close: device %d already closed or never opened\n",
dn);
return;
}
if (devices[dn].method == sanei_usb_method_scanner_driver)
close (devices[dn].fd);
else
#ifdef HAVE_LIBUSB
{
#if 0
/* Should only be done in case of a stall */
usb_clear_halt (devices[dn].libusb_handle, devices[dn].bulk_in_ep);
usb_clear_halt (devices[dn].libusb_handle, devices[dn].bulk_out_ep);
/* be careful, we don't know if we are in DATA0 stage now */
usb_resetep(devices[dn].libusb_handle, devices[dn].bulk_in_ep);
usb_resetep(devices[dn].libusb_handle, devices[dn].bulk_out_ep);
#endif
/* HACK FOR PERFECTION 2450 */
usb_reset(devices[dn].libusb_handle) ;
usb_release_interface (devices[dn].libusb_handle,
devices[dn].interface_nr);
usb_close (devices[dn].libusb_handle);
}
#else
DBG (1, "sanei_usb_close: libusb support missing\n");
#endif
devices[dn].open = SANE_FALSE;
return;
}
------------------------------------------------------------------
------------------------------------------------------------------