Hi, I'm still having trouble with getting the read callback to fire. I've verified (via Realterm) that when I write my values to the file descriptor, byes are received on the port. So I know traffic is going back and forth, but I can't seem to get libev to detect a read on the file descriptor. Thanks.
#define EV_COMPAT3 0 #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <ev.h> #include <errno.h> ev_io iow; ev_io ior; void somecallbackwrite(ev_loop *loop, ev_io *iowatch, int revents) { char buffer[10]; char c; int i; int count; memset(&buffer, 0, sizeof(buffer)); buffer[0] = 0x55; buffer[1] = 0xAA; buffer[2] = 0xFF; buffer[3] = 0x02; printf("somecallbackwrite\n"); i = write(iowatch->fd, &buffer, 4); printf("write(%d) = %d\n", iowatch->fd, i); ev_io_stop(loop, iowatch); // stop the write watcher ev_io_start(loop, &ior); // start the read watcher } void somecallbackread(ev_loop *loop, ev_io *iowatch, int revents) { char buffer[10]; char c; int i = 1; int count; while (i > 0) { i = read(iowatch->fd, &c, 1); count += i; } printf("write(%d) = %d\n", iowatch->fd, i); ev_io_stop(loop, iowatch); // stop the read watcher ev_io_start(loop, &iow); // start the write watcher } main() { ev_loop *mainloop; int fd; fd = open("/dev/ttyUSB1", O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd >= 0) { mainloop = ev_default_loop(EVFLAG_AUTO); ev_io_init(&iow, somecallbackwrite, fd, EV_WRITE); ev_io_init(&ior, somecallbackread, fd, EV_READ); ev_io_start(mainloop, &iow); ev_io_start(mainloop, &ior); ev_run(mainloop, 0); close(fd); } else { printf("errno = %d\n", errno); } } -----Original Message----- From: libev [mailto:libev-bounces+chrisg=nytec....@lists.schmorp.de] On Behalf Of Thilo Schulz Sent: Monday, December 14, 2015 4:52 PM To: libev@lists.schmorp.de Subject: Re: ISO Example for reading/writing uart/rs-232 Hi, wrote last source off the top of my head and the declaration of fd got lost while reshuffeling. This should work for real. #define EV_COMPAT3 0 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <ev.h> void somecallback(ev_loop *loop, ev_io *iowatch, int revents) { write(iowatch->fd, "booya", 5); ev_io_stop(loop, iowatch); } main() { ev_io iow; ev_loop *mainloop; int fd; fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK); if(fd >= 0) { mainloop = ev_default_loop(EVFLAG_AUTO); ev_io_init(&iow, somecallback, fd, EV_WRITE); ev_io_start(mainloop, &iow); ev_run(mainloop, 0); close(fd); } } _______________________________________________ libev mailing list libev@lists.schmorp.de http://lists.schmorp.de/mailman/listinfo/libev _______________________________________________ libev mailing list libev@lists.schmorp.de http://lists.schmorp.de/mailman/listinfo/libev