ts-7000
[Top] [All Lists]

[ts-7000] Re: 7400 - Serial weirdness

To:
Subject: [ts-7000] Re: 7400 - Serial weirdness
From: "i_n_c_n_r_8" <>
Date: Mon, 07 Jul 2008 17:11:31 -0000
--- In  "i_n_c_n_r_8" <> wrote:
>
> Hi there,
> 
> I have this issue with a little serial program I'm busy with. I have
> the serial adaptor that comes with the devkit.
> My program starts by receiving the serial data and after a random
> period of time the 'read' function call returns '0' and keep on
> returning zero, as if the serial interface goes in a weird state. When
> I restart the program, the described process starts over.
> 
> Are they known issue I should be aware of?
> Hers is a copy of the code (shamelessly copied from the net):
>       #include <termios.h>
>       #include <stdio.h>
>       #include <unistd.h>
>       #include <fcntl.h>
>       #include <sys/signal.h>
>       #include <sys/types.h>
>         
>       #define BAUDRATE B38400
>       #define MODEMDEVICE "/dev/ttyS1"
>       #define _POSIX_SOURCE 1 /* POSIX compliant source */
>       #define FALSE 0
>       #define TRUE 1
>         
>       volatile int STOP=FALSE; 
>         
>       void signal_handler_IO (int status);   /* definition of signal
> handler */
>       int wait_flag=TRUE;                    /* TRUE while no signal
> received */
>         
>       main()
>       {
>         int fd,c, res;
>         struct termios oldtio,newtio;
>         struct sigaction saio;           /* definition of signal
action */
>         char buf[255];
>         
>         /* open the device to be non-blocking (read will return
> immediatly) */
>         fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
>         if (fd <0) {perror(MODEMDEVICE); exit(-1); }
>         
>         /* install the signal handler before making the device
> asynchronous */
>         saio.sa_handler = signal_handler_IO;
>         saio.sa_mask = 0;
>         saio.sa_flags = 0;
>         saio.sa_restorer = NULL;
>         sigaction(SIGIO,&saio,NULL);
>           
>         /* allow the process to receive SIGIO */
>         fcntl(fd, F_SETOWN, getpid());
>         /* Make the file descriptor asynchronous (the manual page says
> only 
>            O_APPEND and O_NONBLOCK, will work with F_SETFL...) */
>         fcntl(fd, F_SETFL, FASYNC);
>         
>         tcgetattr(fd,&oldtio); /* save current port settings */
>         /* set new port settings for canonical input processing */
>         newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
>         newtio.c_iflag = IGNPAR | ICRNL;
>         newtio.c_oflag = 0;
>         newtio.c_lflag = ICANON;
>         newtio.c_cc[VMIN]=1;
>         newtio.c_cc[VTIME]=0;
>         tcflush(fd, TCIFLUSH);
>         tcsetattr(fd,TCSANOW,&newtio);
>          
>         /* loop while waiting for input. normally we would do something
>            useful here */ 
>         while (STOP==FALSE) {
>           printf(".\n");usleep(100000);
>           /* after receiving SIGIO, wait_flag = FALSE, input is
available
>              and can be read */
>           if (wait_flag==FALSE) { 
>             res = read(fd,buf,255);
>             buf[res]=0;
>             printf(":%s:%d\n", buf, res);
>             if (res==1) STOP=TRUE; /* stop loop if only a CR was
input */
>             wait_flag = TRUE;      /* wait for new input */
>           }
>         }
>         /* restore old port settings */
>         tcsetattr(fd,TCSANOW,&oldtio);
>       }
>         
>      
>
/***************************************************************************
>       * signal handler. sets wait_flag to FALSE, to indicate above
> loop that     *
>       * characters have been received.                               
>            *
>      
>
***************************************************************************/
>         
>       void signal_handler_IO (int status)
>       {
>         printf("received SIGIO signal.\n");
>         wait_flag = FALSE;
>       }
>

I forgot to mention that the 7400 is connected to a GPS device that
sends serial data continuously, the same device works fine with any
other serial program such as minicom or even hyperterminal...


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

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/ts-7000/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/ts-7000/join
    (Yahoo! ID required)

<*> To change settings via email:
     
    

<*> To unsubscribe from this group, send an email to:
    

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/

<Prev in Thread] Current Thread [Next in Thread>
Admin

Disclaimer: Neither Andrew Taylor nor the University of NSW School of Computer and Engineering take any responsibility for the contents of this archive. It is purely a compilation of material sent by many people to the birding-aus mailing list. It has not been checked for accuracy nor its content verified in any way. If you wish to get material removed from the archive or have other queries about the archive e-mail Andrew Taylor at this address: andrewt@cse.unsw.EDU.AU