Thank for the information but now i changed the loopback and made a device which give continously data to serial port and again i cannot read from the serial port.
On Tue, Nov 22, 2011 at 8:21 PM, Jos Collin <[email protected]> wrote: > > #define MODEMDEVICE "/dev/ttyS1" > I believe that you are loop-backing in the right physical serial port. Now > your device file is changed to ttyS1. > > termios flags are changed ! > > EAGAIN (Resource temporarily unavailable) is a temporary condition that > may change in the later executions. > > > - Jos Collin > > > rs232 read pgm is not working when i connect in loopback but write is > wroking plz help... > > pgm > > #include <stdio.h> > > #include <stdlib.h> > > #include <string.h> > > #include <unistd.h> > > #include <fcntl.h> > > #include <termios.h> > > #define _POSIX_SOURCE 1 > > #define BAUDRATE B9600 > > #define MODEMDEVICE "/dev/ttyS1" > > int main(void) > > { > > int ret, fd; > > struct termios tio; > > char buf[255]; > > /* Open device for reading and writing */ > > fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NDELAY); > > if (fd < 0) { > > fprintf(stderr, "Error opening device %s\n", MODEMDEVICE); goto > done; > > } > > /* get current port attributes */ > > ret = tcgetattr(fd, &tio); > > if (ret < 0) { > > fprintf(stderr, "Error retreiving attributes, ret=%d\n", ret); > goto done; > > } > > tcflush(fd, TCIFLUSH); > > /* set port input speed */ > > ret = cfsetispeed(&tio, BAUDRATE); > > if (ret) { > > fprintf(stderr, "Error setting input Baud rate, ret=%d\n", ret); > goto done; > > } > > /* set port output speed */ > > ret = cfsetospeed(&tio, BAUDRATE); > > if (ret) { > > fprintf(stderr, "Error setting output Baud rate, ret=%d\n", > ret); > > goto done; > > } > > tio.c_cflag &= ~CRTSCTS; /* HW flow ctl OFF */ > > tio.c_cflag &= ~PARENB; /* no parity */ > > tio.c_cflag &= ~CSTOPB; /* 1 stop bit */ > > tio.c_cflag &= ~CSIZE; /* 1 stop bit */ > > tio.c_cflag |= CS8; /* char size; 8N1 */ > > tio.c_cflag |= CREAD; /* enable receiver */ > > /* set port attributes */ > > ret = tcsetattr(fd, TCSANOW, &tio); > > if (ret < 0) { > > fprintf(stderr, "Error setting attributes, ret=%d\n", ret); goto > done; > > } > > fcntl(fd, F_SETFL, FNDELAY); > > ret = write(fd, "ab\r", 3); > > if (ret < 0) > > fprintf(stderr, "write() of 3 bytes failed!, ret=%d\n", ret); > > printf("no of data written = %d\n",ret); > > usleep(5000); > > while (1) { > > ret = read(fd, buf, sizeof(char)); > > if (ret > 0) { > > printf("%c",buf[0]); > > } > > } > > done: > > close(fd); > > return 0; > > } > > ############################## > > #### > > output../a.out > > no of data written = 3 > > ######################## > > strace ./a.out > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > read(3, 0xbfa8d5dd, 1) = -1 EAGAIN (Resource > temporarily > > unavailable) > > On Tue, Nov 15, 2011 at 7:52 PM, Jos Collin <[email protected]> wrote: > >> > bzero(&newtio, sizeof(newtio)); /* clear struct for new port settings > >> */ > >> needs #include <string.h> to suppress the warning. > >> > int w = write(fd,"hello world\n",12); > >> I think you can wait for a few milliseconds before read. > >> >res = read(fd,buf,255); > >> I don't know what you are getting after executing the code. You can try > making your serial read non blocking to know what is happening. > fcntl(fd, F_SETFL, FNDELAY); > >> //...... > >> res = read(fd,buf,255); > >> //..... > >> if (read_ret < 0) > >> { > >> if (EAGAIN == errno) > >> { > >> printf("no data, read again.\n"); > >> } > >> else > >> { > >> printf("read error.\n"); > >> } > >> } > >> FYI, I haven't tested your code with serial loop-back. > >> Happy Hacking, > >> Jos Collin > >> _______________________________________________ > >> Indian Libre User Group Cochin Mailing List > >> http://www.ilug-cochin.org/mailing-list/ > >> > http://mail.ilug-cochin.org/mailman/listinfo/mailinglist_ilug-cochin.org > #[email protected] > > _______________________________________________ > > Indian Libre User Group Cochin Mailing List > > http://www.ilug-cochin.org/mailing-list/ > > http://mail.ilug-cochin.org/mailman/listinfo/mailinglist_ilug-cochin.org > #[email protected] > > > > > > > > _______________________________________________ > Indian Libre User Group Cochin Mailing List > http://www.ilug-cochin.org/mailing-list/ > http://mail.ilug-cochin.org/mailman/listinfo/mailinglist_ilug-cochin.org > #[email protected] >
_______________________________________________ Indian Libre User Group Cochin Mailing List http://www.ilug-cochin.org/mailing-list/ http://mail.ilug-cochin.org/mailman/listinfo/mailinglist_ilug-cochin.org #[email protected]
