From ad7db2892924786e07e72c4bb80785affc8303bd Mon Sep 17 00:00:00 2001 From: px4dev Date: Fri, 2 Nov 2012 00:15:41 -0700 Subject: Let's use poll. It's more friendlier. --- apps/px4io/comms.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'apps') diff --git a/apps/px4io/comms.c b/apps/px4io/comms.c index 507350442..e7c968dcd 100644 --- a/apps/px4io/comms.c +++ b/apps/px4io/comms.c @@ -45,6 +45,7 @@ #include #include #include +#include #include @@ -81,7 +82,6 @@ comms_check(void) { static hrt_abstime last_report_time; hrt_abstime now, delta; - uint8_t c; /* should we send a report to the FMU? */ now = hrt_absolute_time(); @@ -102,9 +102,19 @@ comms_check(void) hx_stream_send(stream, &report, sizeof(report)); } - /* feed any received bytes to the HDLC receive engine */ - while (read(fmu_fd, &c, 1) == 1) - hx_stream_rx(stream, c); + /* + * Check for bytes and feed them to the RX engine. + * Limit the number of bytes we actually process on any one iteration. + */ + struct pollfd fds[1]; + fds[0].fd = fmu_fd; + fds[0].revents = POLLIN; + if (poll(fds, 1, 0) > 0) { + char buf[8]; + ssize_t count = read(fmu_fd, buf, sizeof(buf)); + for (int i = 0; i < count; i++) + hx_stream_rx(stream, buf[i]); + } } static void -- cgit v1.2.3