[PLUG] Serial Communication Code.

Suraj Swami suraj.g.swami at gmail.com
Thu Jun 25 02:08:13 PDT 2009


Hi,

I am having problems in writing a simple serial communication code in linux.
I want to send single charector on the serial port which my hardware will
receive and execute.
Here is the code.

************************************************************************************************************
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>


#define BAUDRATE B9600
#define MODEMDEVICE "/dev/ttyS0"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE;

main()
{
        int fd,c, res;
        struct termios oldtio,newtio;
        char buf[255];

        fd = open(MODEMDEVICE, O_RDWR | O_NDELAY );
        if (fd <0) {perror(MODEMDEVICE); exit(-1); }

        tcgetattr(fd,&oldtio); /* save current port settings */

        bzero(&newtio, sizeof(newtio));
        newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = OPOST;

        /* set input mode (non-canonical, no echo,...) */
        newtio.c_lflag = 0;

        cfsetispeed(&newtio, B9600);
        cfsetospeed(&newtio, B9600);

        newtio.c_cc[VTIME]    = 0;   /* inter-character timer unused */
        newtio.c_cc[VMIN]     = 0;   /* blocking read until 5 chars received
*/

    tcsetattr(fd,TCSANOW,&newtio);

    printf("1\n"); // This is to test where the code has reached.

    tcflow(fd, TCOON );
    tcflush(fd, TCIFLUSH);
    tcflush(fd, TCOFLUSH);

    printf("2\n");

   strcpy(buf,"82345\n") ;

    printf("3\n");


    write(fd,buf,1);
    tcdrain(fd);



  printf("Work done\n");

 // I never got to see "work done" in the output. The terminal would hang .
If I removed write(fd,buf,1)  then work done would print but then my main
purpose of the program is lost. It even worked for  write(1,buf,1) . So I
guess the problem is with write(fd,buf,1)

  tcsetattr(fd,TCSANOW,&oldtio);
}

*******************************************************************************************************

I had one more observation. When I tried to open proc folder it would not
open.

Please suggest. Am I missing in some configuration for the output.

I am using ret hat ver 5.0 its a pentium processor. The hyper-terminal is
working in windows very well.


Regards,
Suraj Swami,
suraj.g.swami at gmail.com


More information about the plug-mail mailing list