[sane-devel] Epson 636u, libusb, kernel 2.6.3 I/O problem

S Miller sajmmiller@yahoo.com
Fri, 20 Feb 2004 14:01:37 -0800 (PST)


Hello,

Epson 636U scanner fails with I/O error messages when configured using
libusb, 2.6.3, sane backends (libsane) 1.0.13, and hotplug. System is
Debian testing/unstable. This scanner has worked perfectly for over two
years using the scanner.o driver. With 2.6.3 I was forced to
reconfigure using libusb, since scanner.o is removed from the kernel
configuration. I've read all the docs I can find, and feel reasonably
sure that my configuration correct. The scanner is being found by
sane-find-scanner and by scanimage -L (1st try only). Once a frontend
(scanimage or xsane) has tried to access the scanner once, it hangs,
and will not find the scanner again. Even though the scanner is found
by scanimage or xsane on the first try, it won't operate at all. I've
commented out all unused scanner lines in /etc/sane.d/dll.conf and
verified that permissions are being set correctly. The problem occurs
both as root and as a user member of the scanner group. Hopefully the
output below (long) will give some clues as to what's happening. I
would appreciate any suggestions, including where to file a bug report
if appropriate.

TIA
Scott Miller


sane-find-scanner
  # No SCSI scanners found. If you expected something different, make
sure that
  # you have loaded a SCSI driver for your SCSI adapter.

found USB scanner (vendor=0x04b8 [EPSON], product=0x0101
[Perfection636]) at libusb:001:002
  # Your USB scanner was (probably) detected. It may or may not be
supported by
  # SANE. Try scanimage -L and read the backend's manpage.

  # Scanners connected to the parallel port or other proprietary ports
can't be
  # detected by this program.

  # You may want to run this program as root to find all devices. Once
you
  # found the scanner devices, be sure to adjust access permissions as
  # necessary.

scanimage -L (1st time after boot or after power cycling scanner)
device `epson:libusb:001:002' is a Epson Perfection636 flatbed scanner
(response time is almost immediate)

scanimage -L (2nd time)
device `epson:libusb:001:002' is a Epson Perfection636 flatbed scanner
(response time is very slow -- 30 seconds)

scanimage -L (3rd time)
No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).
(response time again is very slow)

dmesg (after scanimage -L fails)
usb 1-1: bulk timeout on ep1in
usbfs: USBDEVFS_BULK failed dev 2 ep 0x81 len 1 ret -110

ls -l /proc/bus/usb/001
total 0
-rw-r--r--    1 root     root           43 Feb 20 12:23 001
-rw-rw----    1 root     scanner        50 Feb 20 12:26 002
-rw-r--r--    1 root     root           43 Feb 20 12:23 003
-rw-r--r--    1 root     root           50 Feb 20 12:23 004

lsusb -v
Bus 002 Device 001: ID 0000:0000  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x0000 
  idProduct          0x0000 
  bcdDevice            2.06
  iManufacturer           3 
  iProduct                2 
  iSerial                 1 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x40
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0002  bytes 2 twice
        bInterval             255

Bus 001 Device 004: ID 0781:0002 SanDisk Corp. SDDR-31 ImageMate II
CompactFlash Reader
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0781 SanDisk Corp.
  idProduct          0x0002 SDDR-31 ImageMate II CompactFlash Reader
  bcdDevice            0.09
  iManufacturer           1 
  iProduct                3 
  iSerial                 2 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x40
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk (Zip)
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  bytes 64 once
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  bytes 64 once
        bInterval               0

Bus 001 Device 003: ID 050f:0003 KC Technology, Inc. KC82C160S Hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x050f KC Technology, Inc.
  idProduct          0x0003 KC82C160S Hub
  bcdDevice            1.00
  iManufacturer           0 
  iProduct                0 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0001  bytes 1 once
        bInterval             255

Bus 001 Device 002: ID 04b8:0101 Seiko Epson Corp. Perfection 636
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass       255 Vendor Specific Subclass
  bDeviceProtocol       255 Vendor Specific Protocol
  bMaxPacketSize0        64
  idVendor           0x04b8 Seiko Epson Corp.
  idProduct          0x0101 Perfection 636
  bcdDevice            1.04
  iManufacturer           1 EPSON
  iProduct                2 Perfection636
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x40
      Self Powered
    MaxPower                2mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  bytes 64 once
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  bytes 64 once
        bInterval               0

Bus 001 Device 001: ID 0000:0000  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x0000 
  idProduct          0x0000 
  bcdDevice            2.06
  iManufacturer           3 
  iProduct                2 
  iSerial                 1 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x40
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0002  bytes 2 twice
        bInterval             255

SANE_DEBUG_EPSON=255 scanimage >image.pnm 2>log
[sanei_debug] Setting debug level of epson to 255.
[epson] sane_init: sane-backends 1.0.13
[epson] sane_init, ># epson.conf<
[epson] sane_init, >#<
[epson] sane_init, ># here are some examples for how to configure the
EPSON backend<
[epson] sane_init, >#<
[epson] sane_init, ># SCSI scanner:<
[epson] sane_init, ># scsi EPSON<
[epson] sane_init, >#<
[epson] sane_init, ># Parallel port scanner:<
[epson] sane_init, >#pio 0x278<
[epson] sane_init, >#pio 0x378<
[epson] sane_init, >#pio 0x3BC<
[epson] sane_init, >#<
[epson] sane_init, ># USB scanner - only enable this if you have an
EPSON scanner. It could<
[epson] sane_init, >#               otherwise block your non-EPSON
scanner from being<
[epson] sane_init, >#               recognized.<
[epson] sane_init, >#usb /dev/usb/scanner0<
[epson] sane_init, >usb<
[epson] attach_one_usb()
[epson] SANE Epson Backend v0.2.40 - 2003-10-27
[epson] attach(, 3)
[epson] attach: opening 
[epson] attach_one_usb(libusb:001:002)
[epson] SANE Epson Backend v0.2.40 - 2003-10-27
[epson] attach(libusb:001:002, 3)
[epson] attach: opening libusb:001:002
[epson] Found valid EPSON scanner: 0x4b8/0x101 (vendorID/productID)
[epson] reset()
[epson] send buf, size = 2
[epson] buf[0] 1b .
[epson] buf[1] 40 @
[epson] receive buf, expected = 1, got = 1
[epson] buf[0] 06 .
[epson] get_identity_information()
[epson] send buf, size = 2
[epson] buf[0] 1b .
[epson] buf[1] 49 I
[epson] receive buf, expected = 4, got = 4
[epson] buf[0] 02 .
[epson] buf[1] 00 .
[epson] buf[2] 61 a
[epson] buf[3] 00 .
[epson] code   02
[epson] status 00
[epson] count  97
[epson] receive buf, expected = 97, got = 97
[epson] buf[0] 42 B
[epson] buf[1] 37 7
[epson] buf[2] 52 R
[epson] buf[3] 32 2
[epson] buf[4] 00 .
[epson] buf[5] 52 R
[epson] buf[6] 3c <
[epson] buf[7] 00 .
[epson] buf[8] 52 R
[epson] buf[9] 48 H
[epson] buf[10] 00 .
[epson] buf[11] 52 R
[epson] buf[12] 4b K
[epson] buf[13] 00 .
[epson] buf[14] 52 R
[epson] buf[15] 50 P
[epson] buf[16] 00 .
[epson] buf[17] 52 R
[epson] buf[18] 5a Z
[epson] buf[19] 00 .
[epson] buf[20] 52 R
[epson] buf[21] 64 d
[epson] buf[22] 00 .
[epson] buf[23] 52 R
[epson] buf[24] 78 x
[epson] buf[25] 00 .
[epson] buf[26] 52 R
[epson] buf[27] 85 .
[epson] buf[28] 00 .
[epson] buf[29] 52 R
[epson] buf[30] 90 .
[epson] buf[31] 00 .
[epson] buf[32] 52 R
[epson] buf[33] 96 .
[epson] buf[34] 00 .
[epson] buf[35] 52 R
[epson] buf[36] a0 .
[epson] buf[37] 00 .
[epson] buf[38] 52 R
[epson] buf[39] af .
[epson] buf[40] 00 .
[epson] buf[41] 52 R
[epson] buf[42] b4 .
[epson] buf[43] 00 .
[epson] buf[44] 52 R
[epson] buf[45] c8 .
[epson] buf[46] 00 .
[epson] buf[47] 52 R
[epson] buf[48] d8 .
[epson] buf[49] 00 .
[epson] buf[50] 52 R
[epson] buf[51] f0 .
[epson] buf[52] 00 .
[epson] buf[53] 52 R
[epson] buf[54] 2c ,
[epson] buf[55] 01 .
[epson] buf[56] 52 R
[epson] buf[57] 40 @
[epson] buf[58] 01 .
[epson] buf[59] 52 R
[epson] buf[60] 68 h
[epson] buf[61] 01 .
[epson] buf[62] 52 R
[epson] buf[63] 90 .
[epson] buf[64] 01 .
[epson] buf[65] 52 R
[epson] buf[66] e0 .
[epson] buf[67] 01 .
[epson] buf[68] 52 R
[epson] buf[69] 58 X
[epson] buf[70] 02 .
[epson] buf[71] 52 R
[epson] buf[72] d0 .
[epson] buf[73] 02 .
[epson] buf[74] 52 R
[epson] buf[75] 20  
[epson] buf[76] 03 .
[epson] buf[77] 52 R
[epson] buf[78] 84 .
[epson] buf[79] 03 .
[epson] buf[80] 52 R
[epson] buf[81] b0 .
[epson] buf[82] 04 .
[epson] buf[83] 52 R
[epson] buf[84] 40 @
[epson] buf[85] 06 .
[epson] buf[86] 52 R
[epson] buf[87] 08 .
[epson] buf[88] 07 .
[epson] buf[89] 52 R
[epson] buf[90] 60 `
[epson] buf[91] 09 .
[epson] buf[92] 41 A
[epson] buf[93] b0 .
[epson] buf[94] 4f O
[epson] buf[95] b0 .
[epson] buf[96] 6d m
[epson] type    B 0x42
[epson] level   7 0x37
[epson] no option equipment installed
[epson] resolution (dpi): 50
[epson] resolution (dpi): 60
[epson] resolution (dpi): 72
[epson] resolution (dpi): 75
[epson] resolution (dpi): 80
[epson] resolution (dpi): 90
[epson] resolution (dpi): 100
[epson] resolution (dpi): 120
[epson] resolution (dpi): 133
[epson] resolution (dpi): 144
[epson] resolution (dpi): 150
[epson] resolution (dpi): 160
[epson] resolution (dpi): 175
[epson] resolution (dpi): 180
[epson] resolution (dpi): 200
[epson] resolution (dpi): 216
[epson] resolution (dpi): 240
[epson] resolution (dpi): 300
[epson] resolution (dpi): 320
[epson] resolution (dpi): 360
[epson] resolution (dpi): 400
[epson] resolution (dpi): 480
[epson] resolution (dpi): 600
[epson] resolution (dpi): 720
[epson] resolution (dpi): 800
[epson] resolution (dpi): 900
[epson] resolution (dpi): 1200
[epson] resolution (dpi): 1600
[epson] resolution (dpi): 1800
[epson] resolution (dpi): 2400
[epson] maximum scan area: x 20400 y 28080
[epson] fbf tlx 0.000000 tly 0.000000 brx 215.899994 bry 297.179993
[mm]
[epson] send buf, size = 2
[epson] buf[0] 1b .
[epson] buf[1] 44 D
[epson] receive buf, expected = 1, got = 1
[epson] buf[0] 06 .
[epson] send buf, size = 1
[epson] buf[0] 10 .
[epson] receive buf, expected = 1, got = 1
[epson] buf[0] 15 .
[epson] send buf, size = 2
[epson] buf[0] 1b .
[epson] buf[1] 44 D
[epson] receive buf, expected = 1, got = 1
[epson] buf[0] 06 .
[epson] send buf, size = 1
[epson] buf[0] 0e .
[epson] receive buf, expected = 1, got = 1
[epson] buf[0] 15 .
[epson] send buf, size = 2
[epson] buf[0] 1b .
[epson] buf[1] 44 D
[epson] receive buf, expected = 1, got = 1
[epson] buf[0] 06 .
[epson] send buf, size = 1
[epson] buf[0] 0c .
[epson] receive buf, expected = 1, got = 1
[epson] buf[0] 15 .
[epson] Max. supported color depth = 8
[epson] request_focus_position()
[epson] Disabling 'Set Focus' support
[epson] send buf, size = 2
[epson] buf[0] 1b .
[epson] buf[1] 66 f
[epson] receive buf, expected = 4, got = 4
[epson] buf[0] 02 .
[epson] buf[1] 00 .
[epson] buf[2] 2a *
[epson] buf[3] 00 .
[epson] code   02
[epson] status 00
[epson] count  42
[epson] receive buf, expected = 42, got = 42
[epson] buf[0] 01 .
[epson] buf[1] 00 .
[epson] buf[2] 00 .
[epson] buf[3] 00 .
[epson] buf[4] 00 .
[epson] buf[5] 00 .
[epson] buf[6] 00 .
[epson] buf[7] 00 .
[epson] buf[8] 00 .
[epson] buf[9] 00 .
[epson] buf[10] 00 .
[epson] buf[11] 00 .
[epson] buf[12] 00 .
[epson] buf[13] 00 .
[epson] buf[14] 00 .
[epson] buf[15] 00 .
[epson] buf[16] 00 .
[epson] buf[17] 00 .
[epson] buf[18] 00 .
[epson] buf[19] 00 .
[epson] buf[20] 00 .
[epson] buf[21] 00 .
[epson] buf[22] 00 .
[epson] buf[23] 00 .
[epson] buf[24] 00 .
[epson] buf[25] 00 .
[epson] buf[26] 50 P
[epson] buf[27] 65 e
[epson] buf[28] 72 r
[epson] buf[29] 66 f
[epson] buf[30] 65 e
[epson] buf[31] 63 c
[epson] buf[32] 74 t
[epson] buf[33] 69 i
[epson] buf[34] 6f o
[epson] buf[35] 6e n
[epson] buf[36] 36 6
[epson] buf[37] 33 3
[epson] buf[38] 36 6
[epson] buf[39] 20  
[epson] buf[40] 20  
[epson] buf[41] 20  
[epson] scanner model: Perfection636
[epson] close_scanner(fd = 0)
[epson] sane_get_devices()
[epson] sane_open(libusb:001:002)
[epson] init_options()
[epson] open_scanner()
[epson] setvalue(option = 38, value = 0xbfffe938
[epson] set = 215.899994
[epson] setvalue(option = 39, value = 0xbfffe938
[epson] set = 297.179993
[epson] sane_start()
[epson] open_scanner()
[epson] scanner is already open: fd = 0
[epson] sane_start: Setting data format to 1 bits
[epson] send buf, size = 2
[epson] buf[0] 1b .
[epson] buf[1] 44 D
[epson] receive buf, expected = 1, got = 0
[epson] sane_start: set_data_format failed: Error during device I/O
scanimage: sane_start: Error during device I/O
[epson] close_scanner(fd = 0)

lsmod
Module                  Size  Used by
sd_mod                 11552  0 
usb_storage            25856  0 
ohci_hcd               16644  0 
usbcore                89692  4 usb_storage,ohci_hcd
sg                     29344  0 
snd_pcm_oss            48036  0 
snd_mixer_oss          17280  1 snd_pcm_oss
nvidia               2068104  12 
scsi_mod               63020  3 sd_mod,usb_storage,sg
snd_cmipci             31508  0 
snd_pcm                84132  2 snd_pcm_oss,snd_cmipci
snd_page_alloc          9348  1 snd_pcm
snd_opl3_lib            9216  1 snd_cmipci
snd_timer              21380  2 snd_pcm,snd_opl3_lib
snd_hwdep               7328  1 snd_opl3_lib
snd_mpu401_uart         6272  1 snd_cmipci
snd_rawmidi            19744  1 snd_mpu401_uart
snd                    44644  9
snd_pcm_oss,snd_mixer_oss,snd_cmipci,snd_pcm,snd_opl3_lib,snd_timer,snd_hwdep,snd_mpu401_uart,snd_rawmidi
rtc                    10552  0 

lspci
00:00.0 Host bridge: Silicon Integrated Systems [SiS] SiS645DX Host &
Memory & AGP Controller
00:01.0 PCI bridge: Silicon Integrated Systems [SiS] SiS 530 Virtual
PCI-to-PCI bridge (AGP)
00:02.0 ISA bridge: Silicon Integrated Systems [SiS] SiS961 [MuTIOL
Media IO] (rev 10)
00:02.1 SMBus: Silicon Integrated Systems [SiS]: Unknown device 0016
00:02.2 USB Controller: Silicon Integrated Systems [SiS] USB 1.0
Controller (rev 07)
00:02.3 USB Controller: Silicon Integrated Systems [SiS] USB 1.0
Controller (rev 07)
00:02.5 IDE interface: Silicon Integrated Systems [SiS] 5513 [IDE] (rev
d0)
00:03.0 Ethernet controller: Silicon Integrated Systems [SiS] SiS900
10/100 Ethernet (rev 90)
00:05.0 Multimedia audio controller: C-Media Electronics Inc CM8738
(rev 10)
01:00.0 VGA compatible controller: nVidia Corporation NV20 [GeForce3]
(rev a3)

dpkg -l "*sane*"
||/ Name           Version        Description
+++-==============-==============-============================================
ii  libsane        1.0.13-3       API library for scanners
pn  libsane-dev    <none>         (no description available)
ii  libsane-extras 1.0.13.1       API library for scanners -- extra
backends
pn  python-imaging <none>         (no description available)
pn  python1.5-imag <none>         (no description available)
pn  python2.1-imag <none>         (no description available)
ii  python2.2-imag 1.1.4-3        Python Imaging Library SANE interface
ii  sane           1.0.11-3       Scanner graphical frontends
un  sane-gimp1.1   <none>         (no description available)
un  sane-gimp1.2   <none>         (no description available)
ii  sane-utils     1.0.13-3       API library for scanners -- utilities
ii  xsane          0.92-2         A gtk-based X11 frontend for SANE
(Scanner A
un  xsane-common   <none>         (no description available)
un  xsane-gimp1.2  <none>         (no description available)

dpkg -l "*libusb*"
||/ Name           Version        Description
+++-==============-==============-============================================
ii  libusb-0.1-4   0.1.8-2        Userspace USB programming library
ii  libusb-dev     0.1.8-2        Userspace USB programming library
developmen
pn  libusb0        <none>         (no description available)


__________________________________
Do you Yahoo!?
Yahoo! Mail SpamGuard - Read only the mail you want.
http://antispam.yahoo.com/tools