On Tue, 14 Nov 2006, Romain Liévin wrote: > Hi, > > Problem is related to TI's hand-helds (TI84+ & Titanium > graphing calculators). It only appears with Titanium under Linux > although TI84+ and Titanium have (almost) the same USB descriptors. No > troubles with my own Win32 WDM driver for both hand-helds. > > Problem appears both with lib-usb and with my 'tiusb' > kernel module. The test program can run once from lib-usb. Transfer is OK. > When the testing program exits, libusb takes some time to release my > USB device and displays the following error message: > << > usb 1-1: lt-test_ticable timed out on ep0out len=0/0 > usb 1-1: lt-test_ticable timed out on ep0out len=0/0 > >> > After that, libusb is not able to get device descriptor on #2: > << > ticables-INFO: found <TI-84 Plus Silver Edition> on #1, version <1.10> > ticables-INFO: found <> on #2, version <3.00> > >> > I have to unplug/plug the cable to get communication work again. > > Problem is quite similar with kernel module except that timeout appears > at module removal and the error message is: > << > usb 1-1: rmmod timed out on ep0out len=0/0 > usb 1-1: rmmod timed out on ep0out len=0/0 > >> > > Patching the Titanium USB descriptors (by patching the hand-held > firmware) to make them identical to TI84+ does not solve the problem. An > issue might be related to Titanium which support remote wake-up. > Eliminated. > > The testing program simply opens device, set configuration, claims > interface, resets pipes (clear halt) and closes device. > > By enabling usb_snoop as well as usb_mon, I was able to get the > following logs: > - devio.1 & devio.2 (usb_snoop on 1:TI84+ and 2:Titanium) > => Titanium returns "lt-test_ticable timed out on ep0out len=0/0" > - usbmon.1 & usbmon.2 (usb_mon on 1:TI84+ and 2:Titanium) > => Titanium returns "error -104 (ECONNRESET)" > > Please note that problem exists on my machine (Linux 2.6.18 AthlonXP) with > OHCI and UHCI hubs as well as on my laptop (Linux 2.6.18-SMP 64-bits on > Turion 64x2, Debian distro). Bug is fully reproductible. > > Source code provided: > - link_slv.c: libusb support program > - tiusb.c: kernel module > > You will find enclosed within the mail all of the information requested by > the usb-linux.org FAQ on the latest kernel (2.6.18.2). > > Any ideas about this 'bug'? Is it related to kernel or bad hand-held > hardware?
It is a bug in the Titanium firmware. In the logs for both handhelds you can see where the kernel sends a Set-Interface request after your driver releases the interface. (The kernel does this automatically so that the interface will be back in its original condition when the next driver binds to it.) Both devices return an error, which is a perfectly legal response. However the Titanium then crashes. It doesn't respond to the Clear-Halt commands sent by the kernel after the Set-Interface fails, whereas the TI84+ acknowledges them correctly. Since it has crashed, your driver is unable to reconnect and you have to reset the device by unplugging it. > In the meanwhile, I'm about to add some dbg_printf in my kernel to trace > the source of this error -104. The source of the errors is the Titanium failure to respond to the kernel's Clear-Halt requests. Alan Stern ------------------------------------------------------------------------- SF.net email is sponsored by: A Better Job is Waiting for You - Find it Now. Check out Slashdot's new job board. Browse through tons of technical jobs posted by companies looking to hire people just like you. http://jobs.slashdot.org/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel