aboutsummaryrefslogtreecommitdiff
path: root/apps/px4io/comms.c
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2012-11-02 00:15:41 -0700
committerpx4dev <px4@purgatory.org>2012-11-03 01:14:24 -0700
commitad7db2892924786e07e72c4bb80785affc8303bd (patch)
treed34b273993dda0eb5f7a147d4ee4cf223f25d005 /apps/px4io/comms.c
parentea539031da96df3d3eb9faadd24eb1cc71813e7f (diff)
downloadpx4-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/px4io/comms.c')
-rw-r--r--apps/px4io/comms.c18
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