From: Demetris Z. <fgc...@cy...> - 2007-06-23 12:56:41
|
I want to send through a serial (ttys2) the word "Init" (as it is in ASCII) Here is my code: #include <stdio.h> #include <string.h> /**/ #include <unistd.h> /**/ #include <fcntl.h> /**/ #include <errno.h> /**/ #include <termios.h> /**/ #include <stdlib.h> #define COMM_PORT "/dev/ttys2" int open_serial(void) { int fd; /*File descriptor for the port */ int n; fd = open(COMM_PORT, O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { /* Could not open the port */ printf("open_port: Unable to open /dev/ttyS2 /n"); } else fcntl(fd, F_SETFL, 0); //return -1; /* Set the Baud Rate */ struct termios options; /* Get the current options for the port */ tcgetattr(fd, &options); /* Set the Baud Rate */ cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); /* Enable the reciever and set local mode */ options.c_cflag |= (CLOCAL | CREAD); /* Set the new options for the port */ tcsetattr(fd, TCSANOW, &options); /* Setting the Character Size */ options.c_cflag &= ~CSIZE; /*Mask the character size bits */ options.c_cflag |= CS8; /*Select 8 data bits */ /* Setting to NO Parity Check (8N1) */ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; /* Select RAW input */ options.c_cflag &= ~(ICANON | ECHO | ECHOE | ISIG); /* Setting Input Parity options */ options.c_cflag |= (INPCK | ISTRIP); /* TEST Function */ n = write(fd, "Init\r",4); if (n < 0) printf("write() of 4 bytes failed!\n"); /* Close Port */ close(fd); } Could please someone tell me what is wrong here ? Any kind of help would be appriciated |
From: Dave H. <dhy...@gm...> - 2007-06-23 17:34:20
|
HI Demetris, > I want to send through a serial (ttys2) the word "Init" (as it is in ASCII) You're using ttys2. You need to use ttyS2 (note that linux is case sensitive on the filenames). I also noticed that you're doing a write of "Init\r" and passing a length of 4 which will only write the letters and not the \r. I'm not sure if you were intending to write the carriage return or not. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Demetris Z. <fgc...@cy...> - 2007-06-23 18:31:22
|
That carrage return was a Typo, i was typing on 2 pc's and by accident typed on the other keyboard :) Is the rest of the code ok ? Demetris Z. ----- Original Message ----- From: "Dave Hylands" <dhy...@gm...> To: "General mailing list for gumstix users." <gum...@li...> Sent: Saturday, June 23, 2007 8:34 PM Subject: Re: [Gumstix-users] Serial Code Problem > HI Demetris, > >> I want to send through a serial (ttys2) the word "Init" (as it is in >> ASCII) > > You're using ttys2. You need to use ttyS2 (note that linux is case > sensitive on the filenames). > > I also noticed that you're doing a write of "Init\r" and passing a > length of 4 which will only write the letters and not the \r. I'm not > sure if you were intending to write the carriage return or not. > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users |
From: Dave H. <dhy...@gm...> - 2007-06-23 19:29:04
|
Hi Demetris, On 6/23/07, Demetris Zavorotnichenko <fgc...@cy...> wrote: > That carrage return was a Typo, i was typing on 2 pc's and by accident typed > on the other keyboard :) > > Is the rest of the code ok ? You can replace a huge amount of the code with this line: cfmakeraw( &options ); This will setup 8-N-1, and sets up VMIN and VTIME appropriately, which your code was missing. You do a whole lot of the modifications AFTER calling tcsetattr, so those modifications are effectively doing nothing. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Demetris Z. <fgc...@cy...> - 2007-06-24 08:44:50
|
>You can replace a huge amount of the code with this line: >cfmakeraw( &options ); Which Part of the code are you referring to ? Demetris Z. ----- Original Message ----- From: "Dave Hylands" <dhy...@gm...> To: "General mailing list for gumstix users." <gum...@li...> Sent: Saturday, June 23, 2007 10:29 PM Subject: Re: [Gumstix-users] Serial Code Problem > Hi Demetris, > > On 6/23/07, Demetris Zavorotnichenko <fgc...@cy...> wrote: >> That carrage return was a Typo, i was typing on 2 pc's and by accident >> typed >> on the other keyboard :) >> >> Is the rest of the code ok ? > > You can replace a huge amount of the code with this line: > > cfmakeraw( &options ); > > This will setup 8-N-1, and sets up VMIN and VTIME appropriately, which > your code was missing. > > You do a whole lot of the modifications AFTER calling tcsetattr, so > those modifications are effectively doing nothing. > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users |
From: Dave H. <dhy...@gm...> - 2007-06-24 09:07:20
|
Hi Demetris, On 6/24/07, Demetris Zavorotnichenko <fgc...@cy...> wrote: > >You can replace a huge amount of the code with this line: > >cfmakeraw( &options ); > > > Which Part of the code are you referring to ? /* Setting the Character Size */ options.c_cflag &= ~CSIZE; /*Mask the character size bits */ options.c_cflag |= CS8; /*Select 8 data bits */ /* Setting to NO Parity Check (8N1) */ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; /* Select RAW input */ options.c_cflag &= ~(ICANON | ECHO | ECHOE | ISIG); -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 07:37:09
|
Ok here is my code now. It compiles fine but still isn't sending anything. #define MWINCLUDECOLORS #include <stdio.h> #include <string.h> /**/ #include <unistd.h> /**/ #include <fcntl.h> /**/ #include <errno.h> /**/ #include <termios.h> /**/ #include <stdlib.h> #include "nano-X.h" #define COMM_PORT "/dev/ttyS2" int open_serial(void) { int fd; /*File descriptor for the port */ int n; struct termios options; fd = open(COMM_PORT, O_RDWR | O_NONBLOCK); if (fd == -1) { /* Could not open the port */ printf("open_port: Unable to open /dev/ttyS2 /n"); exit (-1); } cfsetispeed (&options, B9600); cfsetospeed (&options, B9600); cfmakeraw (&options); options.c_cflag &= ~CBAUD; options.c_cflag = B9600; options.c_cflag |= CS8 | CREAD; options.c_oflag = 0; options.c_oflag &= ~(OCRNL | ONLRET); tcsetattr (fd,TCSANOW, &options); /* TEST Function */ n = write(fd, "Init",4); if (n < 0) printf("write() of 4 bytes failed!\n"); /* Close Port */ close(fd); } What is wrong here? |
From: Dave H. <dhy...@gm...> - 2007-06-25 08:13:20
|
HI Demetris, On 6/25/07, Demetris Zavorotnichenko <fgc...@cy...> wrote: > Ok here is my code now. > > It compiles fine but still isn't sending anything. Try adding a sleep( 1 ) before closing the file descriptor. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 08:26:21
|
Here is the code I have now. (Still nothing) #include <stdio.h> #include <string.h> /**/ #include <unistd.h> /**/ #include <fcntl.h> /**/ #include <errno.h> /**/ #include <termios.h> /**/ #include <stdlib.h> #define COMM_PORT "/dev/ttyS2" int open_serial(void) { int fd; /*File descriptor for the port */ struct termios options; int n; fd = open(COMM_PORT, O_RDWR | O_NOCTTY | O_NDELAY ); if (fd == -1) { /* Could not open the port */ printf("open_port: Unable to open /dev/ttyS2 /n"); } /* Set the Baud Rate */ /* Get the current options for the port */ tcgetattr(fd, &options); /* Set the Baud Rate */ cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); cfmakeraw(&options); options.c_cflag &= ~CBAUD; options.c_cflag = B9600; /* Setting to NO Parity Check (8N1) */ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; /* Select RAW input */ options.c_cflag &= ~(ICANON | ECHO | ECHOE | ISIG); /* Enable the reciever and set local mode */ options.c_cflag |= (CLOCAL | CREAD); /* Setting Input Parity options */ options.c_cflag |= (INPCK | ISTRIP); /* Set the new options for the port */ tcsetattr(fd, TCSANOW, &options); /* TEST Function */ n = write(fd, "Init",4); if (n < 0) printf("write() of 4 bytes failed!\n"); /* Close Port */ sleep(1); close(fd); } Is here something wrong here? I am trying to send "Init" in ASCII Non Inverted No parity 8 bit |
From: Toner, B. <ben...@ro...> - 2007-06-25 10:12:45
|
Demetris, Check your usage of options.c_***** You have always used cflag, but that should not be the case. For instance ICANON, ECHO, etc are set in the lflag. You can use this reference for information http://www.easysw.com/~mike/serial/serial.html Also, you should disable flow control for now. options.c_cflag &=3D ~CNEW_RTSCTS; options.c_iflag &=3D ~(IXON | IXOFF | IXANY); I cannot remember the default status of output processing but it doesn't hurt to set it off (raw output) anyway. options.c_oflag &=3D ~OPOST; Good luck Ben -----Original Message----- From: gum...@li... [mailto:gum...@li...] On Behalf Of Demetris Zavorotnichenko Sent: 25 June 2007 09:26 To: 'General mailing list for gumstix users.' Subject: Re: [Gumstix-users] Serial Code Problem Here is the code I have now. (Still nothing) #include <stdio.h> #include <string.h> /**/ #include <unistd.h> /**/ #include <fcntl.h> /**/ #include <errno.h> /**/ #include <termios.h> /**/ #include <stdlib.h> #define COMM_PORT "/dev/ttyS2" int open_serial(void) { int fd; /*File descriptor for the port */ struct termios options; int n; fd =3D open(COMM_PORT, O_RDWR | O_NOCTTY | O_NDELAY ); if (fd =3D=3D -1) { /* Could not open the port */ printf("open_port: Unable to open /dev/ttyS2 /n"); } /* Set the Baud Rate */ /* Get the current options for the port */ tcgetattr(fd, &options); /* Set the Baud Rate */ cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); cfmakeraw(&options); options.c_cflag &=3D ~CBAUD; options.c_cflag =3D B9600; /* Setting to NO Parity Check (8N1) */ options.c_cflag &=3D ~PARENB; options.c_cflag &=3D ~CSTOPB; options.c_cflag &=3D ~CSIZE; options.c_cflag |=3D CS8; /* Select RAW input */ options.c_cflag &=3D ~(ICANON | ECHO | ECHOE | ISIG); /* Enable the reciever and set local mode */ options.c_cflag |=3D (CLOCAL | CREAD); /* Setting Input Parity options */ options.c_cflag |=3D (INPCK | ISTRIP); /* Set the new options for the port */ tcsetattr(fd, TCSANOW, &options); =09 /* TEST Function */ n =3D write(fd, "Init",4); if (n < 0) printf("write() of 4 bytes failed!\n"); /* Close Port */ =09 sleep(1); close(fd); } Is here something wrong here? I am trying to send "Init" in ASCII Non Inverted No parity 8 bit ------------------------------------------------------------------------ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ gumstix-users mailing list gum...@li... https://lists.sourceforge.net/lists/listinfo/gumstix-users --=20 Roke Manor Research Ltd, Romsey, Hampshire, SO51 0ZN, United Kingdom A Siemens company Registered in England & Wales at: Siemens House, Oldbury, Bracknell Berks RG12 8FZ. Number 267550 ------------------------------------------------------------------------ Visit our website at www.roke.co.uk ------------------------------------------------------------------------ The information contained in this e-mail and any attachments is proprietary to Roke Manor Research Ltd and must not be passed to any third party without permission. This communication is for information only and shall not create or change any contractual relationship. ------------------------------------------------------------------------ Please consider the environment before printing this email |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 10:41:34
|
I changed that (you are correct) But still Gumstix isn't sending anything. Here is the code: #include <stdio.h> #include <string.h> /**/ #include <unistd.h> /**/ #include <fcntl.h> /**/ #include <errno.h> /**/ #include <termios.h> /**/ #include <stdlib.h> #define COMM_PORT "/dev/ttyS2" int open_serial(void) { int fd; /*File descriptor for the port */ struct termios options; int n; fd = open(COMM_PORT, O_RDWR | O_NOCTTY | O_NDELAY ); if (fd == -1) { /* Could not open the port */ printf("open_port: Unable to open /dev/ttyS2 /n"); } /* Get the current options for the port */ tcgetattr(fd, &options); /* Set the Baud Rate */ cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); //cfmakeraw(&options); /* Enable the reciever and set local mode */ options.c_cflag |= (CLOCAL | CREAD); /* Setting to NO Parity Check (8N1) */ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; /* Select RAW input */ options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG ); /* Set the new options for the port */ options.c_cc[VTIME] = 0; options.c_cc[VMIN] = 1; options.c_oflag &= ~OPOST; /* Disable Flow control*/ options.c_cflag &= ~CRTSCTS; options.c_iflag &= ~(IXON | IXOFF | IXANY); tcsetattr(fd, TCSANOW, &options); /* TEST Function */ n = write(fd, "Init",4); if (n < 0) printf("write() of 4 bytes failed!\n"); /* Close Port */ sleep(1); close(fd); } |
From: kris d. <t_...@ya...> - 2007-06-25 12:26:09
|
Maybe you will want to add the following code : first, clear the option struct: bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings */ Then, you will be sure to clear the line, so before your setattr add: tcflush(fd, TCIFLUSH); The last thing I think you can try it's to put your write in a loop. If the write fail, you could use the function perror("write"); in the following section of code : n = write(fd, "Init",4); if (n < 0) Perror("write()"); in the perfect world, you should save the state of the options structure before you modify it to restore it at their initial state when you exit your program. Hope this helps (are you sure you have the correct cable to use with the gumstix ? to communicate with a PC you must have a null-modem cable) --- Demetris Zavorotnichenko <fgc...@cy...> wrote: > I changed that (you are correct) > > But still Gumstix isn't sending anything. > > Here is the code: > > > #include <stdio.h> > #include <string.h> /**/ > #include <unistd.h> /**/ > #include <fcntl.h> /**/ > #include <errno.h> /**/ > #include <termios.h> /**/ > > #include <stdlib.h> > > #define COMM_PORT "/dev/ttyS2" > > int open_serial(void) > { > int fd; /*File descriptor for the port */ > struct termios options; > int n; > > fd = open(COMM_PORT, O_RDWR | O_NOCTTY | O_NDELAY > ); > if (fd == -1) > { > /* Could not open the port */ > printf("open_port: Unable to open > /dev/ttyS2 /n"); > } > > /* Get the current options for the port */ > tcgetattr(fd, &options); > /* Set the Baud Rate */ > cfsetispeed(&options, B9600); > cfsetospeed(&options, B9600); > > //cfmakeraw(&options); > > /* Enable the reciever and set local mode */ > options.c_cflag |= (CLOCAL | CREAD); > > /* Setting to NO Parity Check (8N1) */ > options.c_cflag &= ~PARENB; > options.c_cflag &= ~CSTOPB; > options.c_cflag &= ~CSIZE; > options.c_cflag |= CS8; > /* Select RAW input */ > options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG > ); > /* Set the new options for the port */ > > options.c_cc[VTIME] = 0; > options.c_cc[VMIN] = 1; > > options.c_oflag &= ~OPOST; > > /* Disable Flow control*/ > options.c_cflag &= ~CRTSCTS; > options.c_iflag &= ~(IXON | IXOFF | IXANY); > > tcsetattr(fd, TCSANOW, &options); > > /* TEST Function */ > > n = write(fd, "Init",4); > if (n < 0) > printf("write() of 4 bytes failed!\n"); > > /* Close Port */ > > sleep(1); > close(fd); > } > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 > express and take > control of your XML. No limits. Just data. Click to > get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > Get news delivered with the All new Yahoo! Mail. Enjoy RSS feeds right on your Mail page. Start today at http://mrd.mail.yahoo.com/try_beta?.intl=ca |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 13:09:25
|
Nope Still nothing, About the cable. I have my own Custom PCB so I am connected to the Ir_TX line directly. So I should get a signal. Any suggestions ? -----Original Message----- From: gum...@li... [mailto:gum...@li...] On Behalf Of kris duff Sent: Monday, June 25, 2007 3:26 PM To: General mailing list for gumstix users. Subject: Re: [Gumstix-users] Serial Code Problem Maybe you will want to add the following code : first, clear the option struct: bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings */ Then, you will be sure to clear the line, so before your setattr add: tcflush(fd, TCIFLUSH); The last thing I think you can try it's to put your write in a loop. If the write fail, you could use the function perror("write"); in the following section of code : n = write(fd, "Init",4); if (n < 0) Perror("write()"); in the perfect world, you should save the state of the options structure before you modify it to restore it at their initial state when you exit your program. Hope this helps (are you sure you have the correct cable to use with the gumstix ? to communicate with a PC you must have a null-modem cable) --- Demetris Zavorotnichenko <fgc...@cy...> wrote: > I changed that (you are correct) > > But still Gumstix isn't sending anything. > > Here is the code: > > > #include <stdio.h> > #include <string.h> /**/ > #include <unistd.h> /**/ > #include <fcntl.h> /**/ > #include <errno.h> /**/ > #include <termios.h> /**/ > > #include <stdlib.h> > > #define COMM_PORT "/dev/ttyS2" > > int open_serial(void) > { > int fd; /*File descriptor for the port */ > struct termios options; > int n; > > fd = open(COMM_PORT, O_RDWR | O_NOCTTY | O_NDELAY > ); > if (fd == -1) > { > /* Could not open the port */ > printf("open_port: Unable to open > /dev/ttyS2 /n"); > } > > /* Get the current options for the port */ > tcgetattr(fd, &options); > /* Set the Baud Rate */ > cfsetispeed(&options, B9600); > cfsetospeed(&options, B9600); > > //cfmakeraw(&options); > > /* Enable the reciever and set local mode */ > options.c_cflag |= (CLOCAL | CREAD); > > /* Setting to NO Parity Check (8N1) */ > options.c_cflag &= ~PARENB; > options.c_cflag &= ~CSTOPB; > options.c_cflag &= ~CSIZE; > options.c_cflag |= CS8; > /* Select RAW input */ > options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG > ); > /* Set the new options for the port */ > > options.c_cc[VTIME] = 0; > options.c_cc[VMIN] = 1; > > options.c_oflag &= ~OPOST; > > /* Disable Flow control*/ > options.c_cflag &= ~CRTSCTS; > options.c_iflag &= ~(IXON | IXOFF | IXANY); > > tcsetattr(fd, TCSANOW, &options); > > /* TEST Function */ > > n = write(fd, "Init",4); > if (n < 0) > printf("write() of 4 bytes failed!\n"); > > /* Close Port */ > > sleep(1); > close(fd); > } > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 > express and take > control of your XML. No limits. Just data. Click to > get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > Get news delivered with the All new Yahoo! Mail. Enjoy RSS feeds right on your Mail page. Start today at http://mrd.mail.yahoo.com/try_beta?.intl=ca ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ gumstix-users mailing list gum...@li... https://lists.sourceforge.net/lists/listinfo/gumstix-users |
From: Toner, B. <ben...@ro...> - 2007-06-25 13:18:04
|
Demetris, 1) Are you using the right signal levels? - If you are using a tweener or any board with a serial connector, then there is level shifting applied (to 12v I think)=20 - If you are coming straight from breakout pins, then your signals are 3.3v LVTTL 2) If you are using the 3.3v breakout (and you are happy about the voltage levels) then check the ground connection you are using. If I remember correctly, the GND for the ttyS2 on some boards is not connected and you should connect to the main supply GND. 3) Are you sure you are connected to the physical ttyS2 and your Rx/Tx are the right way round? Ben -----Original Message----- From: gum...@li... [mailto:gum...@li...] On Behalf Of Demetris Zavorotnichenko Sent: 25 June 2007 14:09 To: 'General mailing list for gumstix users.' Subject: Re: [Gumstix-users] Serial Code Problem Nope Still nothing, About the cable. I have my own Custom PCB so I am connected to the Ir_TX line directly. So I should get a signal. Any suggestions ? -----Original Message----- From: gum...@li... [mailto:gum...@li...] On Behalf Of kris duff Sent: Monday, June 25, 2007 3:26 PM To: General mailing list for gumstix users. Subject: Re: [Gumstix-users] Serial Code Problem Maybe you will want to add the following code : first, clear the option struct: bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings */ Then, you will be sure to clear the line, so before your setattr add: tcflush(fd, TCIFLUSH); The last thing I think you can try it's to put your write in a loop. If the write fail, you could use the function perror("write"); in the following section of code : n =3D write(fd, "Init",4); if (n < 0) Perror("write()");=20 in the perfect world, you should save the state of the options structure before you modify it to restore it at their initial state when you exit your program. Hope this helps (are you sure you have the correct cable to use with the gumstix ? to communicate with a PC you must have a null-modem cable) --- Demetris Zavorotnichenko <fgc...@cy...> wrote: > I changed that (you are correct) >=20 > But still Gumstix isn't sending anything. >=20 > Here is the code: >=20 >=20 > #include <stdio.h> > #include <string.h> /**/ > #include <unistd.h> /**/ > #include <fcntl.h> /**/ > #include <errno.h> /**/ > #include <termios.h> /**/ >=20 > #include <stdlib.h> >=20 > #define COMM_PORT "/dev/ttyS2" >=20 > int open_serial(void) > { > int fd; /*File descriptor for the port */ > struct termios options; > int n; >=20 > fd =3D open(COMM_PORT, O_RDWR | O_NOCTTY | O_NDELAY ); > if (fd =3D=3D -1) > { > /* Could not open the port */ > printf("open_port: Unable to open > /dev/ttyS2 /n"); > } >=20 > /* Get the current options for the port */ > tcgetattr(fd, &options); > /* Set the Baud Rate */ > cfsetispeed(&options, B9600); > cfsetospeed(&options, B9600); >=20 > //cfmakeraw(&options); >=20 > /* Enable the reciever and set local mode */ > options.c_cflag |=3D (CLOCAL | CREAD); >=20 > /* Setting to NO Parity Check (8N1) */ > options.c_cflag &=3D ~PARENB; > options.c_cflag &=3D ~CSTOPB; > options.c_cflag &=3D ~CSIZE; > options.c_cflag |=3D CS8; > /* Select RAW input */ > options.c_lflag &=3D ~(ICANON | ECHO | ECHOE | ISIG ); > /* Set the new options for the port */ >=20=09 > options.c_cc[VTIME] =3D 0; > options.c_cc[VMIN] =3D 1; >=20=09 > options.c_oflag &=3D ~OPOST;=09 >=20 > /* Disable Flow control*/ > options.c_cflag &=3D ~CRTSCTS; > options.c_iflag &=3D ~(IXON | IXOFF | IXANY); >=20 > tcsetattr(fd, TCSANOW, &options); >=20=09 > /* TEST Function */ >=20 > n =3D write(fd, "Init",4); > if (n < 0) > printf("write() of 4 bytes failed!\n"); >=20 > /* Close Port */ >=20=09 > sleep(1); > close(fd); > } >=20 >=20 >=20 > ------------------------------------------------------------------------ - > This SF.net email is sponsored by DB2 Express Download DB2 Express C - > the FREE version of DB2 express and take control of your XML. No=20 > limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users >=20 Get news delivered with the All new Yahoo! Mail. Enjoy RSS feeds right on your Mail page. Start today at http://mrd.mail.yahoo.com/try_beta?.intl=3Dca ------------------------------------------------------------------------ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ gumstix-users mailing list gum...@li... https://lists.sourceforge.net/lists/listinfo/gumstix-users ------------------------------------------------------------------------ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ gumstix-users mailing list gum...@li... https://lists.sourceforge.net/lists/listinfo/gumstix-users --=20 Roke Manor Research Ltd, Romsey, Hampshire, SO51 0ZN, United Kingdom A Siemens company Registered in England & Wales at: Siemens House, Oldbury, Bracknell Berks RG12 8FZ. Number 267550 ------------------------------------------------------------------------ Visit our website at www.roke.co.uk ------------------------------------------------------------------------ The information contained in this e-mail and any attachments is proprietary to Roke Manor Research Ltd and must not be passed to any third party without permission. This communication is for information only and shall not create or change any contractual relationship. ------------------------------------------------------------------------ Please consider the environment before printing this email |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 13:24:30
|
The way I have this set up is. Gumstix connect's to an ARM Atmega128 directly. (TTL) All the Ground's of gumstix are connected to the same GND. So there is no issue with that. I am trying to send a signal only. So I didn't connect the IR_RX to anything and have just connected the IR_TX to one of the pins on the microcontroller. -----Original Message----- From: gum...@li... [mailto:gum...@li...] On Behalf Of Toner, Ben Sent: Monday, June 25, 2007 4:17 PM To: General mailing list for gumstix users. Subject: Re: [Gumstix-users] Serial Code Problem Demetris, 1) Are you using the right signal levels? - If you are using a tweener or any board with a serial connector, then there is level shifting applied (to 12v I think) - If you are coming straight from breakout pins, then your signals are 3.3v LVTTL 2) If you are using the 3.3v breakout (and you are happy about the voltage levels) then check the ground connection you are using. If I remember correctly, the GND for the ttyS2 on some boards is not connected and you should connect to the main supply GND. 3) Are you sure you are connected to the physical ttyS2 and your Rx/Tx are the right way round? Ben -----Original Message----- From: gum...@li... [mailto:gum...@li...] On Behalf Of Demetris Zavorotnichenko Sent: 25 June 2007 14:09 To: 'General mailing list for gumstix users.' Subject: Re: [Gumstix-users] Serial Code Problem Nope Still nothing, About the cable. I have my own Custom PCB so I am connected to the Ir_TX line directly. So I should get a signal. Any suggestions ? -----Original Message----- From: gum...@li... [mailto:gum...@li...] On Behalf Of kris duff Sent: Monday, June 25, 2007 3:26 PM To: General mailing list for gumstix users. Subject: Re: [Gumstix-users] Serial Code Problem Maybe you will want to add the following code : first, clear the option struct: bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings */ Then, you will be sure to clear the line, so before your setattr add: tcflush(fd, TCIFLUSH); The last thing I think you can try it's to put your write in a loop. If the write fail, you could use the function perror("write"); in the following section of code : n = write(fd, "Init",4); if (n < 0) Perror("write()"); in the perfect world, you should save the state of the options structure before you modify it to restore it at their initial state when you exit your program. Hope this helps (are you sure you have the correct cable to use with the gumstix ? to communicate with a PC you must have a null-modem cable) --- Demetris Zavorotnichenko <fgc...@cy...> wrote: > I changed that (you are correct) > > But still Gumstix isn't sending anything. > > Here is the code: > > > #include <stdio.h> > #include <string.h> /**/ > #include <unistd.h> /**/ > #include <fcntl.h> /**/ > #include <errno.h> /**/ > #include <termios.h> /**/ > > #include <stdlib.h> > > #define COMM_PORT "/dev/ttyS2" > > int open_serial(void) > { > int fd; /*File descriptor for the port */ > struct termios options; > int n; > > fd = open(COMM_PORT, O_RDWR | O_NOCTTY | O_NDELAY ); > if (fd == -1) > { > /* Could not open the port */ > printf("open_port: Unable to open > /dev/ttyS2 /n"); > } > > /* Get the current options for the port */ > tcgetattr(fd, &options); > /* Set the Baud Rate */ > cfsetispeed(&options, B9600); > cfsetospeed(&options, B9600); > > //cfmakeraw(&options); > > /* Enable the reciever and set local mode */ > options.c_cflag |= (CLOCAL | CREAD); > > /* Setting to NO Parity Check (8N1) */ > options.c_cflag &= ~PARENB; > options.c_cflag &= ~CSTOPB; > options.c_cflag &= ~CSIZE; > options.c_cflag |= CS8; > /* Select RAW input */ > options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG ); > /* Set the new options for the port */ > > options.c_cc[VTIME] = 0; > options.c_cc[VMIN] = 1; > > options.c_oflag &= ~OPOST; > > /* Disable Flow control*/ > options.c_cflag &= ~CRTSCTS; > options.c_iflag &= ~(IXON | IXOFF | IXANY); > > tcsetattr(fd, TCSANOW, &options); > > /* TEST Function */ > > n = write(fd, "Init",4); > if (n < 0) > printf("write() of 4 bytes failed!\n"); > > /* Close Port */ > > sleep(1); > close(fd); > } > > > > ------------------------------------------------------------------------ - > This SF.net email is sponsored by DB2 Express Download DB2 Express C - > the FREE version of DB2 express and take control of your XML. No > limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > Get news delivered with the All new Yahoo! Mail. Enjoy RSS feeds right on your Mail page. Start today at http://mrd.mail.yahoo.com/try_beta?.intl=ca ------------------------------------------------------------------------ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ gumstix-users mailing list gum...@li... https://lists.sourceforge.net/lists/listinfo/gumstix-users ------------------------------------------------------------------------ - This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ gumstix-users mailing list gum...@li... https://lists.sourceforge.net/lists/listinfo/gumstix-users -- Roke Manor Research Ltd, Romsey, Hampshire, SO51 0ZN, United Kingdom A Siemens company Registered in England & Wales at: Siemens House, Oldbury, Bracknell Berks RG12 8FZ. Number 267550 ------------------------------------------------------------------------ Visit our website at www.roke.co.uk ------------------------------------------------------------------------ The information contained in this e-mail and any attachments is proprietary to Roke Manor Research Ltd and must not be passed to any third party without permission. This communication is for information only and shall not create or change any contractual relationship. ------------------------------------------------------------------------ Please consider the environment before printing this email ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ gumstix-users mailing list gum...@li... https://lists.sourceforge.net/lists/listinfo/gumstix-users |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 13:31:16
|
Here is my code once again. Please tell me guys if the code is OK. #include <stdio.h> #include <string.h> /**/ #include <unistd.h> /**/ #include <fcntl.h> /**/ #include <errno.h> /**/ #include <termios.h> /**/ #include <stdlib.h> #define COMM_PORT "/dev/ttyS2" int open_serial(void) { int fd; /*File descriptor for the port */ struct termios options; int n; fd = open("/dev/ttyS2", O_RDWR | O_NOCTTY | O_NDELAY ); if (fd == -1) { /* Could not open the port */ printf("open_port: Unable to open /dev/ttyS2 /n"); } /* Get the current options for the port */ tcgetattr(fd, &options); /* Set the Baud Rate */ cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); cfmakeraw(&options); /* Enable the reciever and set local mode */ options.c_cflag |= (CLOCAL | CREAD); /* Setting to NO Parity Check (8N1) */ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; /* Select RAW input */ options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG ); options.c_oflag &= ~OPOST; /* Disable Flow control*/ options.c_cflag &= ~CRTSCTS; options.c_iflag &= ~(IXON | IXOFF | IXANY); //bzero(&newtio, sizeof(newtio)); tcsetattr(fd, TCSAFLUSH, &options); /* TEST Function */ n = write(fd, "Init",4); if (n < 0) perror("write()"); /* Close Port */ sleep(1); close(fd); } |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 13:44:33
|
Solved the problem. I had other functions in main(void) so it wasn't doing anything (except opening the port) Everything is OK now guys. I appreciate the help allot. |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 14:09:12
|
I have another question. Let's say I want to send 3 different things thorugh the serial. "Init", "1","3" ("1","3") are bytes I have the Atmega waiting for the "Init" and only after it has received "Init" it will receive the other two bytes. So how do I send this with one transmission ? |
From: Dave H. <dhy...@gm...> - 2007-06-25 14:33:13
|
HI Demtris, > Let's say I want to send 3 different things thorugh the serial. > > "Init", "1","3" ("1","3") are bytes > > I have the Atmega waiting for the "Init" and only after it has received > "Init" it will receive the other two bytes. So how do I send this with one > transmission ? There is no such thing as "one transmission" in serial. You can do: write( fd, "Init", 4 ); write( fd, "1", 1 ); write( fd, "3", 1 ); or you could do write( fd, "Init13", 6 ); The receiver can't tell how you did it. If you use interrupt driven UART code with a FIFO on the ATMega, then you won't have to worry about missing any characters either. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 14:40:18
|
Tnx Dave. I really appreciate the help -----Original Message----- From: gum...@li... [mailto:gum...@li...] On Behalf Of Dave Hylands Sent: Monday, June 25, 2007 5:33 PM To: General mailing list for gumstix users. Subject: Re: [Gumstix-users] Serial Code Question HI Demtris, > Let's say I want to send 3 different things thorugh the serial. > > "Init", "1","3" ("1","3") are bytes > > I have the Atmega waiting for the "Init" and only after it has received > "Init" it will receive the other two bytes. So how do I send this with one > transmission ? There is no such thing as "one transmission" in serial. You can do: write( fd, "Init", 4 ); write( fd, "1", 1 ); write( fd, "3", 1 ); or you could do write( fd, "Init13", 6 ); The receiver can't tell how you did it. If you use interrupt driven UART code with a FIFO on the ATMega, then you won't have to worry about missing any characters either. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ gumstix-users mailing list gum...@li... https://lists.sourceforge.net/lists/listinfo/gumstix-users |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 15:09:50
|
Tnx dave. I wanted to ask something else about this. I understand that in order to read from the Serial I do the following: fcntl(fd, F_SETFL, FNDELAY); I need Gumstix to wait on that point of code (when it reads the Serial) until Gumstix receives "OK" and then continue. How do I do that ? -----Original Message----- From: gum...@li... [mailto:gum...@li...] On Behalf Of Dave Hylands Sent: Monday, June 25, 2007 5:33 PM To: General mailing list for gumstix users. Subject: Re: [Gumstix-users] Serial Code Question HI Demtris, > Let's say I want to send 3 different things thorugh the serial. > > "Init", "1","3" ("1","3") are bytes > > I have the Atmega waiting for the "Init" and only after it has received > "Init" it will receive the other two bytes. So how do I send this with one > transmission ? There is no such thing as "one transmission" in serial. You can do: write( fd, "Init", 4 ); write( fd, "1", 1 ); write( fd, "3", 1 ); or you could do write( fd, "Init13", 6 ); The receiver can't tell how you did it. If you use interrupt driven UART code with a FIFO on the ATMega, then you won't have to worry about missing any characters either. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ gumstix-users mailing list gum...@li... https://lists.sourceforge.net/lists/listinfo/gumstix-users |
From: Dave H. <dhy...@gm...> - 2007-06-25 16:46:56
|
Hi Demetris, On 6/25/07, Demetris Zavorotnichenko <fgc...@cy...> wrote: > Tnx dave. I wanted to ask something else about this. > > I understand that in order to read from the Serial I do the following: > > fcntl(fd, F_SETFL, FNDELAY); > > I need Gumstix to wait on that point of code (when it reads the Serial) > until Gumstix receives "OK" and then continue. How do I do that ? Calling fcntl(fd, F_SETFL, FNDELAY) says that you DON'T want it to block. Calling cfmakeraw set VMIN & VTIME such that asking for a single character will block until a character is available. You'd be far better off to not use the fcntl call and just read for single characters. Reading for more than one character also works, but you need to be prepared for the case where only one character is available. putting your read in a while loop with FNDELAY will cause your process to consume 100% of the CPU while it's waiting for the data, which will generally cause other problems as your system gets more complex. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 18:49:24
|
Then what would be the best way to do this without consuming allot of CPU ? I would really appriciate the help on this. Demetris Z. ----- Original Message ----- From: "Dave Hylands" <dhy...@gm...> To: "General mailing list for gumstix users." <gum...@li...> Sent: Monday, June 25, 2007 7:46 PM Subject: Re: [Gumstix-users] Serial Code Question > Hi Demetris, > > On 6/25/07, Demetris Zavorotnichenko <fgc...@cy...> wrote: >> Tnx dave. I wanted to ask something else about this. >> >> I understand that in order to read from the Serial I do the following: >> >> fcntl(fd, F_SETFL, FNDELAY); >> >> I need Gumstix to wait on that point of code (when it reads the Serial) >> until Gumstix receives "OK" and then continue. How do I do that ? > > Calling fcntl(fd, F_SETFL, FNDELAY) says that you DON'T want it to block. > > Calling cfmakeraw set VMIN & VTIME such that asking for a single > character will block until a character is available. > > You'd be far better off to not use the fcntl call and just read for > single characters. Reading for more than one character also works, but > you need to be prepared for the case where only one character is > available. > > putting your read in a while loop with FNDELAY will cause your process > to consume 100% of the CPU while it's waiting for the data, which will > generally cause other problems as your system gets more complex. > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users |
From: Dave H. <dhy...@gm...> - 2007-06-25 18:58:18
|
Hi Demtris, On 6/25/07, Demetris Zavorotnichenko <fgc...@cy...> wrote: > Then what would be the best way to do this without consuming allot of CPU ? Don't call fcntl with FNODELAY and do call cfmakeraw. Then your reads will block until one character is available. Just a simple if ( read( gPortFd, &ch, 1 ) == 1 ) { //... got one character now... } will block until a single character is read. Normally commands and responses have some type of delimiter like a newline or carriage return, and you write a routine that reads one whole line into a buffer. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Demetris Z. <fgc...@cy...> - 2007-06-25 19:13:57
|
By doing : if ( read( gPortFd, &ch, 1 ) == 1 ) { //... got one character now... } then if "read( gPortFd, &ch, 1 )" is equal to 0 then won't the program continue from there? or with this command it will wait intil "read( gPortFd, &ch, 1 )" is going to be equal to 1 ? Demetris Z. ----- Original Message ----- From: "Dave Hylands" <dhy...@gm...> To: "General mailing list for gumstix users." <gum...@li...> Sent: Monday, June 25, 2007 9:58 PM Subject: Re: [Gumstix-users] Serial Code Question > Hi Demtris, > > On 6/25/07, Demetris Zavorotnichenko <fgc...@cy...> wrote: >> Then what would be the best way to do this without consuming allot of CPU >> ? > > Don't call fcntl with FNODELAY and do call cfmakeraw. > > Then your reads will block until one character is available. > > Just a simple > > if ( read( gPortFd, &ch, 1 ) == 1 ) > { > //... got one character now... > } > > will block until a single character is read. Normally commands and > responses have some type of delimiter like a newline or carriage > return, and you write a routine that reads one whole line into a > buffer. > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users |