Reading data from ttyS fails

thunderboy42 thunderboy42@cooltoad.com
Thu May 24 16:35:00 GMT 2012


Hello Corinna,

I used a part from http://en.wikibooks.org/wiki/Serial_Programming/termios for
testting because my 'original' is a little bit complicated. (see the source at
the end)

But I think I found the problem in "fhandler_serial.cc". There was some code
added for leaving the method raw_read when there are no more chars received
and the serial port was opened in non blocking mode (code starting at line
86). But I think it would be a good idea to deliver the chars received until
then, so I build my own cygwin1.dll with the following changes in
fhandler_serial.cc: 

88,94c88
-             PurgeComm (get_handle (), PURGE_RXABORT);
-             if (tot == 0)
-               {
-                 tot = -1;
-                 set_errno (EAGAIN);
-               }
-             goto out;
---
+               break;

This works for me now.

Thanks, T.B.


--------------------------------

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <string.h>

int main(int argc,char** argv)
{
        struct termios tio;
        int tty_fd;
        unsigned char c='D';

        memset(&tio,0,sizeof(tio));
        tio.c_iflag=0;
        tio.c_oflag=0;
        tio.c_cflag=CS8|CREAD|CLOCAL;
        tio.c_lflag=0;
        tio.c_cc[VMIN]=1;
        tio.c_cc[VTIME]=5;

        tty_fd=open("/dev/ttyS0", O_RDWR | O_NONBLOCK);
        cfsetospeed(&tio,B115200);            // 115200 baud
        cfsetispeed(&tio,B115200);            // 115200 baud

        tcsetattr(tty_fd,TCSANOW,&tio);
        while (c!='q')
        {
                if (read(tty_fd,&c,1)>0)        write(STDOUT_FILENO,&c,1);
        }

        close(tty_fd);
}

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list