LinuxQuestions.org
Help answer threads with 0 replies.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices


Reply
  Search this Thread
Old 05-06-2007, 10:39 AM   #1
sea waves
LQ Newbie
 
Registered: Apr 2007
Posts: 9

Rep: Reputation: 0
writing to serial port


Hello,

i want to write a number to a serial port using C program but it is not giving me any output,,

any suggestion where the error could be ..

this is the code..

Code:
#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <termios.h>

#include <stdio.h>

#include <string.h>

#include <strings.h>



    	/* baudrate settings are defined in <asm/termbits.h>, which is

        included by <termios.h> */

        #define BAUDRATE B9600       

        /* change this definition for the correct port */

        #define MODEMDEVICE "/dev/ttyS0"

        #define _POSIX_SOURCE 1 /* POSIX compliant source */



        #define FALSE 0

        #define TRUE 1



      //#pragma ident	"%Z%%M%	%I%	%E% SMI"

      

      #if !defined(_KMDB) && !defined(_BOOT)

      

      #endif /* !_KMDB && !_BOOT */

      

      

      /*

       * Set an array of n chars starting at sp to zero.

       */

      void

      bzero(void *sp, size_t len)

      {

      	(void) memset(sp, 0, len);

      }


int write(int fd,char *Buff,int NumBytes);	

int main()
{

          int fd,res;

          struct termios oldtio,newtio;

        


        /* 

          Open modem device for reading and writing and not as controlling tty

          because we don't want to get killed if linenoise sends CTRL-C.

        */

         fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); 

         if (fd < 0) { perror(MODEMDEVICE); return 1; }

        

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

         bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings */

        

        /* 

          BAUDRATE: Set bps rate. You could also use cfsetispeed and cfsetospeed.

          CRTSCTS : output hardware flow control (only used if the cable has

                    all necessary lines. See sect. 7 of Serial-HOWTO)

          CS8     : 8n1 (8bit,no parity,1 stopbit)

          CLOCAL  : local connection, no modem contol

          CREAD   : enable receiving characters

        */

         newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;

         

        /*

          IGNPAR  : ignore bytes with parity errors

          ICRNL   : map CR to NL (otherwise a CR input on the other computer

                    will not terminate input)

          otherwise make device raw (no other input processing)

        */

         newtio.c_iflag = IGNPAR | ICRNL;

         

        /*

         Raw output.

        */

         newtio.c_oflag = 0;

         

        /*

          ICANON  : enable canonical input

          disable all echo functionality, and don't send signals to calling program

        */

         newtio.c_lflag = ICANON;

         

        /* 

          initialize all control characters 

          default values can be found in /usr/include/termios.h, and are given

          in the comments, but we don't need them here

        */

         newtio.c_cc[VINTR]    = 0;     /* Ctrl-c */ 

         newtio.c_cc[VQUIT]    = 0;     /* Ctrl-\ */

         newtio.c_cc[VERASE]   = 0;     /* del */

         newtio.c_cc[VKILL]    = 0;     /* @ */

         newtio.c_cc[VEOF]     = 4;     /* Ctrl-d */

         newtio.c_cc[VTIME]    = 0;     /* inter-character timer unused */

         newtio.c_cc[VMIN]     = 1;     /* blocking read until 1 character arrives */

         newtio.c_cc[VSWTC]    = 0;     /* '\0' */

         newtio.c_cc[VSTART]   = 0;     /* Ctrl-q */ 

         newtio.c_cc[VSTOP]    = 0;     /* Ctrl-s */

         newtio.c_cc[VSUSP]    = 0;     /* Ctrl-z */

         newtio.c_cc[VEOL]     = 0;     /* '\0' */

         newtio.c_cc[VREPRINT] = 0;     /* Ctrl-r */

         newtio.c_cc[VDISCARD] = 0;     /* Ctrl-u */

         newtio.c_cc[VWERASE]  = 0;     /* Ctrl-w */

         newtio.c_cc[VLNEXT]   = 0;     /* Ctrl-v */

         newtio.c_cc[VEOL2]    = 0;     /* '\0' */

        

        /* 

          now clean the modem line and activate the settings for the port

        */

         tcflush(fd, TCIFLUSH);

         tcsetattr(fd,TCSANOW,&newtio);

        
	

        /*

          terminal settings done, now handle input

          In this example, inputting a 'z' at the beginning of a line will 

          exit the program.

        */
	
	    

        char buf[255];
	   
	buf[0]=0xff;

           
	write(fd,buf,1);
	    


         /* restore the old port settings */

         tcsetattr(fd,TCSANOW,&oldtio);
	close(fd);
	return 0;

        }

Last edited by sea waves; 05-06-2007 at 12:14 PM.
 
Old 05-06-2007, 11:12 AM   #2
jim mcnamara
Member
 
Registered: May 2002
Posts: 964

Rep: Reputation: 36
Please use code tags. This is nearly impossible to read.
[ c o d e ]
my code goes here
[ / c o d e ]

(I added spaces so the tags would show in the post)
 
Old 05-06-2007, 12:15 PM   #3
sea waves
LQ Newbie
 
Registered: Apr 2007
Posts: 9

Original Poster
Rep: Reputation: 0
Quote:
Originally Posted by jim mcnamara
Please use code tags. This is nearly impossible to read.
[ c o d e ]
my code goes here
[ / c o d e ]

(I added spaces so the tags would show in the post)

sorry for that

i have added the tags
 
Old 05-06-2007, 02:16 PM   #4
Mara
Moderator
 
Registered: Feb 2002
Location: Grenoble
Distribution: Debian
Posts: 9,696

Rep: Reputation: 232Reputation: 232Reputation: 232
You're writing, so I wouldn't expect output at that machine. I understand you're reading on another. You may try to flush the port or wait a while after writing to make sure the date is out.
 
Old 05-07-2007, 02:03 PM   #5
sea waves
LQ Newbie
 
Registered: Apr 2007
Posts: 9

Original Poster
Rep: Reputation: 0
thank you..

I have solved the problem ..
 
Old 05-08-2007, 12:51 AM   #6
theNbomr
LQ 5k Club
 
Registered: Aug 2005
Distribution: OpenSuse, Fedora, Redhat, Debian
Posts: 5,399
Blog Entries: 2

Rep: Reputation: 908Reputation: 908Reputation: 908Reputation: 908Reputation: 908Reputation: 908Reputation: 908Reputation: 908
Quote:
Originally Posted by sea waves
thank you..

I have solved the problem ..
And are you keeping the solution a secret? You assumed that someone who knew the answer would be willing to provide it, so now that you know that answer, you should do the same.

--- rod.
 
Old 05-08-2007, 11:59 AM   #7
sea waves
LQ Newbie
 
Registered: Apr 2007
Posts: 9

Original Poster
Rep: Reputation: 0
Quote:
Originally Posted by theNbomr
And are you keeping the solution a secret? You assumed that someone who knew the answer would be willing to provide it, so now that you know that answer, you should do the same.

--- rod.

ok sorry for that

I solved the problem by doing this

Code:
char buf[255];
	   
sprintf(buf,"255\r\n");
           
write(fd,buf,1);
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
writing to serial port, /dev/ttyS0 togunter Programming 2 06-08-2008 09:27 AM
linux serial port to router console port connection? frankie_fix Linux - General 3 02-26-2007 09:32 PM
Parallel Port & Serial Port device identification helpmeforlinux Linux - Hardware 3 01-02-2007 01:15 AM
Using serial port card(PCMCIA) with IPAQ running Linux, can't find ttyS0 port d2army Linux - Laptop and Netbook 0 11-12-2005 08:07 PM
Writing files to serial port...in C colin59 Programming 1 11-03-2005 11:06 AM

LinuxQuestions.org > Forums > Non-*NIX Forums > Programming

All times are GMT -5. The time now is 03:17 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration