diff options
author | px4dev <px4@purgatory.org> | 2012-11-02 00:15:41 -0700 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2012-11-03 01:14:24 -0700 |
commit | ad7db2892924786e07e72c4bb80785affc8303bd (patch) | |
tree | d34b273993dda0eb5f7a147d4ee4cf223f25d005 /apps | |
parent | ea539031da96df3d3eb9faadd24eb1cc71813e7f (diff) | |
download | px4-firmware-ad7db2892924786e07e72c4bb80785affc8303bd.tar.gz px4-firmware-ad7db2892924786e07e72c4bb80785affc8303bd.tar.bz2 px4-firmware-ad7db2892924786e07e72c4bb80785affc8303bd.zip |
Let's use poll. It's more friendlier.
Diffstat (limited to 'apps')
-rw-r--r-- | apps/px4io/comms.c | 18 |
1 files changed, 14 insertions, 4 deletions
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 <stdlib.h> #include <errno.h> #include <string.h> +#include <poll.h> #include <nuttx/clock.h> @@ -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 |