Hi Greg,
On May 17 2007 05:45, Greg KH wrote:
I seem to have problems with the ark3116 driver from 2.6.18.8. This
is a USB-RS232 cable. Just opening the /dev/ttyUSB0 device gives
(this is the debug output enabled by `modprobe ark3116 debug=1`).
The lines that look suspicious are
/serial/ark3116.c: 124 1 bytes [0xFFB0]
and
/serial/ark3116.c: ark3116_ioctl cmd 0x5401 not supported
Why is this suspicious? We don't support all ioctls for all usb-serial
drivers, perhaps this one is just not really needed?
ark3116 supports set_termios (0x5402), but does not get_termios
(0x5401). Not sure how that affects userspace, though.
The 0xFFB0 looks like a simple formatting error (ark3116.c line 66)
an explicit cast to (unsigned char)buf[0] or (unsigned int) seems
required.
I have also seen things like id here -62 [0x10], which would
indicate that usb_control_msg() returned something very negative
(-ETIME!?).
The -62 only shows up when the cable is already connected when I
modprobe ark3116. Reinserting it - and no -62 shows up.
Maybe this is something normal with USB?
But does the driver seem to work properly?
Issuing a write() on an open fd to ttyUSB does not generate any further
debug output. Is the driver even complete/functional?
(I found that I already need to modprobe usbserial with debug=1,
since ark3116 uses usb_serial_generic_write)
Do you get data through the device properly?
I would have to test with a real serial port. (I do not
have any real port right now, just two cables + adapters.)
What certainly does not work: Connecting two cables to each other, that is,
USB-RS232-GenderChanger-RS232-USB. (1) USB ends connected to the same machine
(2) USB ends connected to different machines. Both (1) and (2) do not work.
The write() seems to succeed, but read() blocks:
# klogconsole -l8 -r0
# ./sertest
[...]
Writing...
drivers/usb/serial/usb-serial.c: serial_write_room - port 0
drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
drivers/usb/serial/usb-serial.c: serial_write - port 0, 3 byte(s)
drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
ark3116 ttyUSB0: usb_serial_generic_write - length = 3, data = 66 6f 6f
drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback -
port 0
drivers/usb/serial/usb-serial.c: usb_serial_port_work - port 0
Reading...
(stops)
Source:
#include sys/stat.h
#include sys/types.h
#include fcntl.h
#include stdio.h
#include stdlib.h
#include unistd.h
int main(void)
{
char bar[4] = {};
int s0 = open(/dev/ttyUSB0, O_RDWR);
int s1 = open(/dev/ttyUSB1, O_RDWR);
if (s0 0 || s1 0)
abort();
printf(Writing...\n);
write(s0, foo, 3);
printf(Reading...\n);
read(s1, bar, 3);
printf(Read: %s\n, bar);
return 0;
}
Jan
--
-
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
___
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel