From e67a6bdfc2b62fb9f9cf4090f87fa6eb4354920d Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Fri, 26 Aug 2016 22:48:46 +0200 Subject: [PATCH] MAVLink: No need to restore previous port config on exit --- src/modules/mavlink/mavlink_main.cpp | 20 ++++++-------------- src/modules/mavlink/mavlink_main.h | 2 +- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/modules/mavlink/mavlink_main.cpp b/src/modules/mavlink/mavlink_main.cpp index bc01c7d02c..4daf2cd59c 100644 --- a/src/modules/mavlink/mavlink_main.cpp +++ b/src/modules/mavlink/mavlink_main.cpp @@ -618,7 +618,7 @@ int Mavlink::get_component_id() return mavlink_system.compid; } -int Mavlink::mavlink_open_uart(int baud, const char *uart_name, struct termios *uart_config_original) +int Mavlink::mavlink_open_uart(int baud, const char *uart_name) { #ifndef B460800 #define B460800 460800 @@ -731,16 +731,13 @@ int Mavlink::mavlink_open_uart(int baud, const char *uart_name, struct termios * int termios_state; _is_usb_uart = false; - /* Back up the original uart configuration to restore it after exit */ - if ((termios_state = tcgetattr(_uart_fd, uart_config_original)) < 0) { + /* Initialize the uart config */ + if ((termios_state = tcgetattr(_uart_fd, &uart_config)) < 0) { warnx("ERR GET CONF %s: %d\n", uart_name, termios_state); ::close(_uart_fd); return -1; } - /* Fill the struct for the new configuration */ - tcgetattr(_uart_fd, &uart_config); - /* Clear ONLCR flag (which appends a CR for every LF) */ uart_config.c_oflag &= ~ONLCR; @@ -767,7 +764,7 @@ int Mavlink::mavlink_open_uart(int baud, const char *uart_name, struct termios * #endif if ((termios_state = tcsetattr(_uart_fd, TCSANOW, &uart_config)) < 0) { - warnx("ERR SET CONF %s\n", uart_name); + PX4_WARN("ERR SET CONF %s\n", uart_name); ::close(_uart_fd); return -1; } @@ -787,7 +784,7 @@ int Mavlink::mavlink_open_uart(int baud, const char *uart_name, struct termios * /* setup output flow control */ if (enable_flow_control(true)) { - warnx("hardware flow control not supported"); + PX4_WARN("hardware flow control not supported"); } } else { @@ -1782,8 +1779,6 @@ Mavlink::task_main(int argc, char *argv[]) _datarate = MAX_DATA_RATE; } - struct termios uart_config_original = {}; - if (get_protocol() == SERIAL) { if (Mavlink::instance_exists(_device_name, this)) { warnx("%s already running", _device_name); @@ -1797,7 +1792,7 @@ Mavlink::task_main(int argc, char *argv[]) fflush(stdout); /* default values for arguments */ - _uart_fd = mavlink_open_uart(_baudrate, _device_name, &uart_config_original); + _uart_fd = mavlink_open_uart(_baudrate, _device_name); if (_uart_fd < 0 && _mode != MAVLINK_MODE_CONFIG) { warn("could not open %s", _device_name); @@ -2256,9 +2251,6 @@ Mavlink::task_main(int argc, char *argv[]) _subscriptions = nullptr; if (_uart_fd >= 0 && !_is_usb_uart) { - /* reset the UART flags to original state */ - tcsetattr(_uart_fd, TCSANOW, &uart_config_original); - /* close UART */ ::close(_uart_fd); } diff --git a/src/modules/mavlink/mavlink_main.h b/src/modules/mavlink/mavlink_main.h index a4c695cfa3..a0a2f72f39 100644 --- a/src/modules/mavlink/mavlink_main.h +++ b/src/modules/mavlink/mavlink_main.h @@ -561,7 +561,7 @@ private: void mavlink_update_system(); #ifndef __PX4_QURT - int mavlink_open_uart(int baudrate, const char *uart_name, struct termios *uart_config_original); + int mavlink_open_uart(int baudrate, const char *uart_name); #endif static unsigned int interval_from_rate(float rate);