public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* serial port canonical mode weirdness?
@ 2004-04-01  0:44 David L
  2004-04-01  8:28 ` Russell King
  2004-04-02 22:02 ` Russell King
  0 siblings, 2 replies; 4+ messages in thread
From: David L @ 2004-04-01  0:44 UTC (permalink / raw)
  To: linux-kernel

When I configure a serial port for canonical mode (newtio.c_lflag = ICANON),
I get behavior that isn't what I'd expect.  If I send >4095 characters that 
don't
contain an end-of-line and then an end of line, the number of characters 
read
is 1.  If I then start sending shorter lines, one character is read for each
end-of-line that is sent.  For example, if the limit was 10 instead of 4096, 
if the
received data was:

0123456789\n

The data returned by the driver would be:

0

(I would expect 0123456789\n to be returned)

Then if you send "A\n"
The data returned will be "1"

Then if you send "B\n"
The data returned will be "2"

And so on.

When it's in this state and you send "\n\n", it returns 4096 characters
and then starts acting like I would expect again.

I've also found that when it's in this state and you send
a few lines in rapid succession, the call to read will return 0
bytes and never returns any more good data.

Is this a kernel bug or an ignorant user?  I might expect some
data to be lost if a buffer overruns, but I didn't expect this behavior.

Thanks:

                                           David

_________________________________________________________________
MSN Toolbar provides one-click access to Hotmail from any Web page – FREE 
download! http://toolbar.msn.com/go/onm00200413ave/direct/01/


^ permalink raw reply	[flat|nested] 4+ messages in thread
* Re: serial port canonical mode weirdness?
@ 2004-04-01 15:45 David L
  0 siblings, 0 replies; 4+ messages in thread
From: David L @ 2004-04-01 15:45 UTC (permalink / raw)
  To: linux-kernel

> > When I configure a serial port for canonical mode (newtio.c_lflag = 
>ICANON),
> > I get behavior that isn't what I'd expect.
>
>Can you supply the test program you're using on the receive end?
>
>--
#include <termios.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>

#define BAUDRATE B38400
#define SERIALDEVICE "/dev/ttyS0"

int main()
{
  int fd, res;
  struct termios newtio;
  unsigned char buf[10000];

  fd = open(SERIALDEVICE, O_RDWR);
  if (fd <0) {perror(SERIALDEVICE); return -1; }

  bzero(&newtio, sizeof(newtio));

  newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
  newtio.c_iflag = IGNPAR;
  newtio.c_lflag = ICANON;

  newtio.c_cc[VEOL]     = 0x0D;

  tcsetattr(fd,TCSANOW,&newtio);

  while (1) {
    res = read(fd,buf,9000);
    printf("%d bytes read (%d)\n", res, errno);
    printf("%02X %02X %02X %02X %02X %02X\n", 
buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
  }
}

_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar – get it now! 
http://toolbar.msn.com/go/onm00200415ave/direct/01/


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2004-04-02 22:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-04-01  0:44 serial port canonical mode weirdness? David L
2004-04-01  8:28 ` Russell King
2004-04-02 22:02 ` Russell King
  -- strict thread matches above, loose matches on Subject: below --
2004-04-01 15:45 David L

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox