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 */
 
<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 */
 
<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/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
 
        /* 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 = ""
 
        /* 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/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 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 = ""
 
        /* 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
 
        /* 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
 
        /* 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 = ""
 
        /* 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/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
 
        /* 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 = ""
 
        /* 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/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 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/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/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 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 = ""
 
 
 
 
 
Kind regards, Magnus Aman      [EMAIL PROTECTED]
Texas Instruments Sweden
 
 
 

Reply via email to