From cfcc75d444f3df23166f4777819ed26261efb85d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Thu, 9 Mar 2017 10:08:21 +0100 Subject: [PATCH] mavlink shell: check if there's enough free buffer to send the mavlink message if there is not, the process on the other end of the pipe will just block. This improves reliability over slow links. --- src/modules/mavlink/mavlink_main.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/modules/mavlink/mavlink_main.cpp b/src/modules/mavlink/mavlink_main.cpp index 74211b97b2..aee167b2c4 100644 --- a/src/modules/mavlink/mavlink_main.cpp +++ b/src/modules/mavlink/mavlink_main.cpp @@ -2225,13 +2225,15 @@ Mavlink::task_main(int argc, char *argv[]) /* check for shell output */ if (_mavlink_shell && _mavlink_shell->available() > 0) { - mavlink_serial_control_t msg; - msg.baudrate = 0; - msg.flags = SERIAL_CONTROL_FLAG_REPLY; - msg.timeout = 0; - msg.device = SERIAL_CONTROL_DEV_SHELL; - msg.count = _mavlink_shell->read(msg.data, sizeof(msg.data)); - mavlink_msg_serial_control_send_struct(get_channel(), &msg); + if (get_free_tx_buf() >= MAVLINK_MSG_ID_SERIAL_CONTROL_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES) { + mavlink_serial_control_t msg; + msg.baudrate = 0; + msg.flags = SERIAL_CONTROL_FLAG_REPLY; + msg.timeout = 0; + msg.device = SERIAL_CONTROL_DEV_SHELL; + msg.count = _mavlink_shell->read(msg.data, sizeof(msg.data)); + mavlink_msg_serial_control_send_struct(get_channel(), &msg); + } } /* check for ulog streaming messages */