From c934286f6c6f22cc0c7ee21d633e0ef3531eeb5f Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Tue, 3 Nov 2015 00:16:38 +0100 Subject: [PATCH] MAVLink app: Do not try to fill the complete buffer, just try to get a complete message --- src/modules/mavlink/mavlink_receiver.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp index 29f299f918..c4f1cbceec 100644 --- a/src/modules/mavlink/mavlink_receiver.cpp +++ b/src/modules/mavlink/mavlink_receiver.cpp @@ -1797,13 +1797,15 @@ MavlinkReceiver::receive_thread(void *arg) while (!_mavlink->_task_should_exit) { if (poll(&fds[0], 1, timeout) > 0) { if (_mavlink->get_protocol() == SERIAL) { + + /* + * to avoid reading very small chunks wait for data before reading + * this is designed to target ~30 bytes at a time + */ + const unsigned character_count = 20; + /* non-blocking read. read may return negative values */ - if ((nread = ::read(uart_fd, buf, sizeof(buf))) < (ssize_t)sizeof(buf)) { - /* - * to avoid reading very small chunks wait for data before reading - * this is designed to target ~30 bytes at a time - */ - const unsigned character_count = 20; + if ((nread = ::read(uart_fd, buf, sizeof(buf))) < (ssize_t)character_count) { unsigned sleeptime = (1.0f / (_mavlink->get_baudrate() / 10)) * character_count * 1000000; usleep(sleeptime); }