Hi,
I wonder what
common pitfall I have encountered (?) but seek help nevertheless.
===
Problem
===
Sending "AT" to
the modem, it echoes back "A". But before the "T" comes in, my driver
sends out an "A" again in a blocking loop!
My termios are
picked to disable echo and allow sending without involvement of CR LF of any
kind.
I suspect termios
having something to do with the problem anyway but so a confirmation/solution is
welcome.
=== General info
===
Kernel 2.6.9,
under /drivers/usb/serial I use a slightly modded usb serial generic driver
(added USB controls for enabling the modem).
=== Termios
altered by my application ===
void init_comm(struct termios *ptio)
{
ptio->c_lflag &= ~ICANON;
ptio->c_lflag &= ~(ECHO | ECHOCTL | ECHONL);
ptio->c_cflag |= HUPCL;
ptio->c_cc[VMIN] = 1;
ptio->c_cc[VTIME] = 0;
/* Standard CR/LF handling: this is a dumb terminal.
* Do no translation:
* no NL -> CR/NL mapping on output, and
* no CR -> NL mapping on input.
*/
ptio->c_oflag |= ONLCR;
ptio->c_iflag &= ~ICRNL;
ptio->c_cflag |= CRTSCTS;
ptio->c_iflag &= ~(IXON | IXOFF | IXANY);
cfsetospeed(ptio, B9600);
cfsetispeed(ptio, B9600);
}
=== USB debug
messages with comments ===
/home #
/home # mknod /dev/ttyUSB0 c 188 0
/home # ./wmlink_test /* Application starts with ttyUSB0 open method */
/home # mknod /dev/ttyUSB0 c 188 0
/home # ./wmlink_test /* Application starts with ttyUSB0 open method */
<7>drivers/usb/serial/usb-serial.c:
serial_open
/* Here
the initial four vendor specific USB control transfer debug messages have
been removed */
<7>drivers/usb/serial/generic.c:
usb_serial_generic_open - port 0
<7>drivers/usb/host/ohci-dbg.c: SUB
c0baf420 dev=7 ep=1in-bulk flags=0 len=0/64 stat=-115
wmlink> +AT
/* Application places "AT" in
transfer buffer and start a write cycle */
Added 2 characters
wmlink> -x /* Application sends transfer buffer [0x41 0x54 0x00] via ttyUSB0 write method */
wmlink> -x /* Application sends transfer buffer [0x41 0x54 0x00] via ttyUSB0 write method */
<7>drivers/usb/serial/usb-serial.c:
serial_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 2 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 2, data = "" 54
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 2 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 2, data = "" 54
<7>drivers/usb/host/ohci-dbg.c: SUB
c0baf480 dev=7 ep=1out-bulk flags=0 len=0/2
stat=-115
<7>drivers/usb/host/ohci-dbg.c: data(0/2): 41 54 stat:-115
<7>drivers/usb/serial/usb-serial.c: serial_write_room - port 0
<7>drivers/usb/host/ohci-dbg.c: RET c0baf480 dev=7 ep=1out-bulk flags=0 len=2/2 stat=0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
<7>drivers/usb/host/ohci-dbg.c: data(0/2): 41 54 stat:-115
<7>drivers/usb/serial/usb-serial.c: serial_write_room - port 0
<7>drivers/usb/host/ohci-dbg.c: RET c0baf480 dev=7 ep=1out-bulk flags=0 len=2/2 stat=0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
/* Here "AT"
write cycle has been sent out and been acknowledged by modem
*/
<7>drivers/usb/host/ohci-dbg.c: RET
c0baf420 dev=7 ep=1in-bulk flags=0 len=1/64
stat=0
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
/* Here
the first echoed character "A" has returned from
modem*/
/* Below a single "A" character is sent out unexpectedly. ((Why
this?)) */
<7>drivers/usb/serial/usb-serial.c:
serial_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 1 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 1, data = ""
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 1 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: SUB
c0baf480 dev=7 ep=1out-bulk flags=0 len=0/1
stat=-115
<7>drivers/usb/host/ohci-dbg.c: data(0/1): 41 stat:-115
<7>drivers/usb/host/ohci-dbg.c: data(0/1): 41 stat:-115
<7>drivers/usb/host/ohci-dbg.c: SUB
c0baf420 dev=7 ep=1in-bulk flags=0 len=0/64 stat=-115
/* Below a
second "A" write cycle begins before the RET of the previous transmission.
*/
/* This time
not passing serial_write_room but only the generic driver method ((??))
*/
<7>drivers/usb/serial/generic.c:
usb_serial_generic_write_room - port 0
<7>drivers/usb/host/ohci-dbg.c: RET
c0baf420 dev=7 ep=1in-bulk flags=0 len=1/64
stat=0
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 54 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 54 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
/* Here the
second echoed character "T" has returned from
modem*/
<7>drivers/usb/serial/usb-serial.c:
serial_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 0
/* Here the
second "A" write cycle is stalled; 'no room'. */
<7>drivers/usb/host/ohci-dbg.c: SUB
c0baf420 dev=7 ep=1in-bulk flags=0 len=0/64 stat=-115
<7>drivers/usb/host/ohci-dbg.c: RET c0baf480
dev=7 ep=1out-bulk flags=0 len=1/1
stat=0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
/* Here the
first single "A" write cycle is finished. */
<7>drivers/usb/host/ohci-dbg.c: RET
c0baf420 dev=7 ep=1in-bulk flags=0 len=1/64
stat=0
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
/* Here the
modem echoed back the first single "A" being sent. */
/* Below the
second single "A" write cycle restarts. */
<7>drivers/usb/serial/usb-serial.c:
serial_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 1 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: SUB c0baf480 dev=7 ep=1out-bulk flags=0 len=0/1 stat=-115
<7>drivers/usb/host/ohci-dbg.c: data(0/1): 41 stat:-115
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 1 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: SUB c0baf480 dev=7 ep=1out-bulk flags=0 len=0/1 stat=-115
<7>drivers/usb/host/ohci-dbg.c: data(0/1): 41 stat:-115
<7>drivers/usb/host/ohci-dbg.c: SUB
c0baf420 dev=7 ep=1in-bulk flags=0 len=0/64 stat=-115
/* Below a
third "A" write cycle begins before the RET of the previous transmission.
*/
/* This time
not passing serial_write_room but only the generic driver method ((??))
*/
<7>drivers/usb/serial/generic.c:
usb_serial_generic_write_room - returns
0
<7>drivers/usb/host/ohci-dbg.c: RET c0baf480 dev=7 ep=1out-bulk flags=0 len=1/1 stat=0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
<7>drivers/usb/host/ohci-dbg.c: RET c0baf480 dev=7 ep=1out-bulk flags=0 len=1/1 stat=0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
/* Here the
second single "A" write cycle is finished. */
<7>drivers/usb/host/ohci-dbg.c: RET
c0baf420 dev=7 ep=1in-bulk flags=0 len=1/64
stat=0
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
/* Here the
modem echoed back the second single "A" being sent. */
/* Below
the third single "A" write cycle restarts. */
<7>drivers/usb/serial/usb-serial.c:
serial_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 1 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: SUB c0baf480 dev=7 ep=1out-bulk flags=0 len=0/1 stat=-115
<7>drivers/usb/host/ohci-dbg.c: data(0/1): 41 stat:-115
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 1 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: SUB c0baf480 dev=7 ep=1out-bulk flags=0 len=0/1 stat=-115
<7>drivers/usb/host/ohci-dbg.c: data(0/1): 41 stat:-115
<7>drivers/usb/host/ohci-dbg.c: SUB
c0baf420 dev=7 ep=1in-bulk flags=0 len=0/64 stat=-115
<7>drivers/usb/serial/usb-serial.c:
usb_serial_port_softint - port 0
<7>drivers/usb/host/ohci-dbg.c: RET c0baf480 dev=7 ep=1out-bulk flags=0 len=1/1 stat=0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
<7>drivers/usb/host/ohci-dbg.c: RET c0baf480 dev=7 ep=1out-bulk flags=0 len=1/1 stat=0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
<7>drivers/usb/host/ohci-dbg.c: RET
c0baf420 dev=7 ep=1in-bulk flags=0 len=1/64
stat=0
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
<7>drivers/usb/serial/usb-serial.c:
serial_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 1 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: SUB c0baf480 dev=7 ep=1out-bulk flags=0 len=0/1 stat=-115
<7>drivers/usb/host/ohci-dbg.c: data(0/1): 41 stat:-115
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - port 0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_room - returns 64
<7>drivers/usb/serial/usb-serial.c: serial_write - port 0, 1 byte(s)
<7>drivers/usb/serial/generic.c: usb_serial_generic_write - port 0
<7>generic ttyUSB0: usb_serial_generic_write - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: SUB c0baf480 dev=7 ep=1out-bulk flags=0 len=0/1 stat=-115
<7>drivers/usb/host/ohci-dbg.c: data(0/1): 41 stat:-115
<7>drivers/usb/host/ohci-dbg.c: SUB
c0baf420 dev=7 ep=1in-bulk flags=0 len=0/64 stat=-115
<7>drivers/usb/serial/usb-serial.c:
usb_serial_port_softint - port 0
<7>drivers/usb/host/ohci-dbg.c: RET c0baf480 dev=7 ep=1out-bulk flags=0 len=1/1 stat=0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
<7>drivers/usb/host/ohci-dbg.c: RET c0baf480 dev=7 ep=1out-bulk flags=0 len=1/1 stat=0
<7>drivers/usb/serial/generic.c: usb_serial_generic_write_bulk_callback - port 0
<7>drivers/usb/serial/usb-serial.c: usb_serial_port_softint - port 0
<7>drivers/usb/host/ohci-dbg.c: RET
c0baf420 dev=7 ep=1in-bulk flags=0 len=1/64
stat=0
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
<7>drivers/usb/host/ohci-dbg.c: data(1/64): 41 stat:0
<7>drivers/usb/serial/generic.c: usb_serial_generic_read_bulk_callback - port 0
<7>generic ttyUSB0: usb_serial_generic_read_bulk_callback - length = 1, data = ""
Kind regards, Magnus
Aman [EMAIL PROTECTED]
Texas Instruments Sweden
