#include <iostream>
#include <termios.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <errno.h>
#define BAUDRATE B19200
#define PORT "/dev/ttyO4"
#define _POSIX_SOURCE 1
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE;
void signal_handler_IO(int status);
int wait_flag = TRUE;
int main ()
{
int fd=0, res=0;
int check=0;
char SYNC [] = {0x55};
char PID [] = {0x6A};
struct termios oldtio, newtio;
struct sigaction saio;
char buff[255];
fd = open(PORT, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd<0) {perror(PORT); exit(-1);}
saio.sa_handler=signal_handler_IO;
saio.sa_flags=0;
saio.sa_restorer = NULL;
sigaction(SIGIO, &saio,NULL);
fcntl(fd, F_SETFL, FASYNC);
check = tcgetattr(fd, &oldtio);
if (check<0){perror("tcgetattr");}
check = newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD ; if (check<0){perror("c_cflag");}
check = newtio.c_iflag = IGNPAR | IXON; if (check<0){perror("c_iflag");}
check = newtio.c_oflag = 0; if (check<0){perror("c_oflag");}
//check = newtio.c_lflag = ICANON | ISIG;
check = newtio.c_lflag = 0; if (check<0){perror("c_lflag ");}
/* c_cc is responsible for an erno error */
check = newtio.c_cc[VMIN]=1; if (check<0){perror("c_cc[VMIN]");}
check = newtio.c_cc[VTIME]=0; if (check<0){perror("c_cc[VTIME]");}
tcflush(fd, TCIFLUSH);
check = tcsetattr(fd, TCSANOW, &newtio); if (check<0){perror("tcsetattr");}
for(;;)
{
ioctl(fd, TIOCSBRK);
usleep(1300);
ioctl(fd,TIOCCBRK);
usleep(200);
/* send request to actuator to receive the current setting and setup */
check = write(fd, SYNC, sizeof(SYNC)); if (check<0){perror("SYNC");}
check = write(fd,PID, sizeof(PID)); if (check<0){perror("PID");}
/* read response*/
res = read(fd, buff,255);
if (res < 0)
{
perror("read");
//if(errno ==EINTR) continue;
}
printf(": :%d :%d\n", res,buff);
usleep(10000);
}
close (fd);
}
void signal_handler_IO(int status)
{
wait_flag=FALSE;
e}erno EINTR error is displayed only when i'm setting any non-zero values to c_cc[VTIME] or c_cc[VMIN]. but still even if i set the both to zero, I cannot read anything from the port, it's just blank.
I'm confident that i'm receiving response from the device, I have checked it with oscilloscope.
Any assistance would be appreciated. if possible with the code examples for me to see what should I modify.
Thank you very much for the help.
For more options, visit https://groups.google.com/d/optout.
---
This email is free from viruses and malware because avast! Antivirus protection is active.
http://www.avast.com
--
For more options, visit http://beagleboard.org/discuss
--- You received this message because you are subscribed to a topic in the Google Groups "BeagleBoard" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/beagleboard/vbRrGiqZyfs/unsubscribe.
To unsubscribe from this group and all its topics, send an email to beagleboard+unsubscribe@googlegroups.com.
Hi Regina,
Can I help you?
Are you writing serial port driver with C?
Best regard,
Le Hoang Vu
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to a topic in the Google Groups "BeagleBoard" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/beagleboard/vbRrGiqZyfs/unsubscribe.
To unsubscribe from this group and all its topics, send an email to beagleboard...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/61ab7f12-c3c4-407b-a14a-82f2a0a3e2e3%40googlegroups.com.
Hello,I need to use an UART to communicate between beaglebone and the device. I have written the C code, but it has a few problems within it. I can't identify the cause of the problem or to be more precise don't know how fix it.The problem is of
reading in the information and displaying it on a shell. I can easily write any information data set that I wish, but when I try to read in response it either doesn't read in, with the perror being displayed as (erno = EINTR [Interrupted function call]) meaning read () function returned negative number.
fd = open(PORT, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd<0) {perror(PORT); exit(-1);}
int check_signal(int fd){ char buffer[256]; char *bufptr; int bytes, n=0, nbytes=0; char tstr[64]; if (write(fd, "AT+CSQ\r", 7) <7){ printf("%s *** ERROR! writing AT+CSQ command! ***\n",getDateTime(tstr)); FONA_DEAD=1; // send text message that FONA backup messaging system not working return(-1); }else{ while ((bytes = read(fd, &buffer[nbytes], sizeof(buffer)-nbytes-1)) > 0){ nbytes += bytes; } buffer[nbytes] = '\0'; // nul terminate the string if(nbytes>0){ if(bufptr=strstr(buffer,"+CSQ:")){ sscanf(bufptr,"+CSQ: %i", &n); //if(n==0) printf("sscanf fail: %s\n", buffer); // actually was intermittently 0 signal strength with some antenna positions! //printf("Signal Strength: %i\n",n); return(n); }else{ // getting occasional failures, try to tell if its time outs or unexpected characters that weren't flushed after previous function // if I don't see this message from the errors increase time out a bit printf("%s *** check_signal() Unexpected Response! ***\n%s\n",getDateTime(tstr),buffer); return(-2); } } }}