Browse Source

MAVLink: No need to restore previous port config on exit

sbg
Lorenz Meier 9 years ago
parent
commit
e67a6bdfc2
  1. 20
      src/modules/mavlink/mavlink_main.cpp
  2. 2
      src/modules/mavlink/mavlink_main.h

20
src/modules/mavlink/mavlink_main.cpp

@ -618,7 +618,7 @@ int Mavlink::get_component_id() @@ -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 * @@ -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 * @@ -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 * @@ -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[]) @@ -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[]) @@ -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[]) @@ -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);
}

2
src/modules/mavlink/mavlink_main.h

@ -561,7 +561,7 @@ private: @@ -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);

Loading…
Cancel
Save