diff --git a/ROMFS/CMakeLists.txt b/ROMFS/CMakeLists.txt index 4ebd1821bb..b82383e6e8 100644 --- a/ROMFS/CMakeLists.txt +++ b/ROMFS/CMakeLists.txt @@ -143,6 +143,7 @@ list(APPEND OPTIONAL_BOARD_RC rc.board_defaults rc.board_sensors rc.board_extras + rc.board_mavlink ) foreach(board_rc_file ${OPTIONAL_BOARD_RC}) diff --git a/ROMFS/px4fmu_common/init.d/CMakeLists.txt b/ROMFS/px4fmu_common/init.d/CMakeLists.txt index c4ab33443f..f769ef4e4f 100644 --- a/ROMFS/px4fmu_common/init.d/CMakeLists.txt +++ b/ROMFS/px4fmu_common/init.d/CMakeLists.txt @@ -39,7 +39,6 @@ px4_add_romfs_files( rc.interface rc.io rc.logging - rc.mavlink rc.mc_apps rc.mc_defaults rcS diff --git a/ROMFS/px4fmu_common/init.d/rc.mavlink b/ROMFS/px4fmu_common/init.d/rc.mavlink deleted file mode 100644 index 451de95649..0000000000 --- a/ROMFS/px4fmu_common/init.d/rc.mavlink +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -# -# MAVLink startup script. -# -# NOTE: Script variables are declared/initialized/unset in the rcS script. -# - -if ! ver hwcmp INTEL_AEROFC_V1 -then - # Start MAVLink on the USB port - mavlink start -r 800000 -d /dev/ttyACM0 -m config -x -fi - diff --git a/ROMFS/px4fmu_common/init.d/rcS b/ROMFS/px4fmu_common/init.d/rcS index ee6ad4f93d..f5c63f0053 100644 --- a/ROMFS/px4fmu_common/init.d/rcS +++ b/ROMFS/px4fmu_common/init.d/rcS @@ -396,9 +396,15 @@ else fi # - # Start mavlink streams that are not configurable (e.g. on USB). + # Optional board mavlink streams: rc.board_mavlink # - sh /etc/init.d/rc.mavlink + set BOARD_RC_MAVLINK /etc/init.d/rc.board_mavlink + if [ -f $BOARD_RC_MAVLINK ] + then + echo "Board extras: ${BOARD_RC_MAVLINK}" + sh $BOARD_RC_MAVLINK + fi + unset BOARD_RC_MAVLINK # # Start UART/Serial device drivers. diff --git a/boards/airmind/mindpx-v2/init/rc.board_mavlink b/boards/airmind/mindpx-v2/init/rc.board_mavlink new file mode 100644 index 0000000000..76e6351fb0 --- /dev/null +++ b/boards/airmind/mindpx-v2/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# Airmind Mindpx-v2 specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/auav/x21/init/rc.board_mavlink b/boards/auav/x21/init/rc.board_mavlink new file mode 100644 index 0000000000..7ad322c9a7 --- /dev/null +++ b/boards/auav/x21/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# AUAV/mRO x21 specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/av/x-v1/init/rc.board_extras b/boards/av/x-v1/init/rc.board_mavlink similarity index 72% rename from boards/av/x-v1/init/rc.board_extras rename to boards/av/x-v1/init/rc.board_mavlink index c2b036aab1..d7ea448203 100644 --- a/boards/av/x-v1/init/rc.board_extras +++ b/boards/av/x-v1/init/rc.board_mavlink @@ -1,8 +1,7 @@ #!/bin/sh # -# av_x1-v1 specific board init -# -# +# av_x1-v1 specific board MAVLink startup script. +#------------------------------------------------------------------------------ # AV-X: start MAVLink to companion (connected to TX2) mavlink start -d /dev/ttyS5 -b 500000 -m osd diff --git a/boards/bitcraze/crazyflie/init/rc.board_mavlink b/boards/bitcraze/crazyflie/init/rc.board_mavlink new file mode 100644 index 0000000000..ae5089a30f --- /dev/null +++ b/boards/bitcraze/crazyflie/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# Bitcraze Crazyflie specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/holybro/kakutef7/init/rc.board_mavlink b/boards/holybro/kakutef7/init/rc.board_mavlink new file mode 100644 index 0000000000..be01959ebc --- /dev/null +++ b/boards/holybro/kakutef7/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# KakuteF7 specific specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/mro/ctrl-zero-f7/init/rc.board_mavlink b/boards/mro/ctrl-zero-f7/init/rc.board_mavlink new file mode 100644 index 0000000000..9a4a80a6d3 --- /dev/null +++ b/boards/mro/ctrl-zero-f7/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# mRo Control Zero specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/nxp/fmuk66-v3/init/rc.board_mavlink b/boards/nxp/fmuk66-v3/init/rc.board_mavlink new file mode 100644 index 0000000000..8be295660b --- /dev/null +++ b/boards/nxp/fmuk66-v3/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# NXP fmuk66-v3 specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/omnibus/f4sd/init/rc.board_mavlink b/boards/omnibus/f4sd/init/rc.board_mavlink new file mode 100644 index 0000000000..93ae6863c9 --- /dev/null +++ b/boards/omnibus/f4sd/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# OmnibusF4SD specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/px4/fmu-v2/init/rc.board_mavlink b/boards/px4/fmu-v2/init/rc.board_mavlink new file mode 100644 index 0000000000..cc337d34ae --- /dev/null +++ b/boards/px4/fmu-v2/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# PX4 FMUv2 specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/px4/fmu-v3/init/rc.board_mavlink b/boards/px4/fmu-v3/init/rc.board_mavlink new file mode 100644 index 0000000000..c915fefe8c --- /dev/null +++ b/boards/px4/fmu-v3/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# PX4 FMUv3 specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/px4/fmu-v4/init/rc.board_extras b/boards/px4/fmu-v4/init/rc.board_extras index 6ba582d035..6d6d16626f 100644 --- a/boards/px4/fmu-v4/init/rc.board_extras +++ b/boards/px4/fmu-v4/init/rc.board_extras @@ -3,13 +3,6 @@ # PX4 FMUv4 specific board extras init #------------------------------------------------------------------------------ - -# Pixracer: start MAVLink on Wifi (ESP8266 port). Except for the TealOne airframe. -if ! param compare SYS_AUTOSTART 4250 -then - mavlink start -r 20000 -b 921600 -d /dev/ttyS0 -fi - # Run FrSky Telemetry on Pixracer on the FrSky port if not enabled already if param compare TEL_FRSKY_CONFIG 0 then diff --git a/boards/px4/fmu-v4/init/rc.board_mavlink b/boards/px4/fmu-v4/init/rc.board_mavlink new file mode 100644 index 0000000000..331071ba54 --- /dev/null +++ b/boards/px4/fmu-v4/init/rc.board_mavlink @@ -0,0 +1,13 @@ +#!/bin/sh +# +# PX4 FMUv4 specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 + +# Pixracer: start MAVLink on Wifi (ESP8266 port). Except for the TealOne airframe. +if ! param compare SYS_AUTOSTART 4250 +then + mavlink start -r 20000 -b 921600 -d /dev/ttyS0 +fi diff --git a/boards/px4/fmu-v4pro/init/rc.board_mavlink b/boards/px4/fmu-v4pro/init/rc.board_mavlink new file mode 100644 index 0000000000..9302d547fa --- /dev/null +++ b/boards/px4/fmu-v4pro/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# PX4 FMUv4pro specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/px4/fmu-v5/init/rc.board_mavlink b/boards/px4/fmu-v5/init/rc.board_mavlink new file mode 100644 index 0000000000..2ec618d05e --- /dev/null +++ b/boards/px4/fmu-v5/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# PX4 FMUv5 specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/px4/fmu-v5x/init/rc.board_mavlink b/boards/px4/fmu-v5x/init/rc.board_mavlink new file mode 100644 index 0000000000..659180f688 --- /dev/null +++ b/boards/px4/fmu-v5x/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# PX4 FMUv5X specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/boards/uvify/core/init/rc.board_mavlink b/boards/uvify/core/init/rc.board_mavlink new file mode 100644 index 0000000000..5b92aba400 --- /dev/null +++ b/boards/uvify/core/init/rc.board_mavlink @@ -0,0 +1,7 @@ +#!/bin/sh +# +# UVify UVF4 specific board MAVLink startup script. +#------------------------------------------------------------------------------ + +# Start MAVLink on the USB port +mavlink start -d /dev/ttyACM0 diff --git a/src/modules/mavlink/mavlink_main.cpp b/src/modules/mavlink/mavlink_main.cpp index 4813fe20dc..026e9a9d6d 100644 --- a/src/modules/mavlink/mavlink_main.cpp +++ b/src/modules/mavlink/mavlink_main.cpp @@ -586,7 +586,7 @@ Mavlink::mavlink_open_uart(const int baud, const char *uart_name, const bool for } /* back off 1800 ms to avoid running into the USB setup timing */ - while (_mode == MAVLINK_MODE_CONFIG && + while (_is_usb_uart && hrt_absolute_time() < 1800U * 1000U) { px4_usleep(50000); } @@ -595,7 +595,7 @@ Mavlink::mavlink_open_uart(const int baud, const char *uart_name, const bool for _uart_fd = ::open(uart_name, O_RDWR | O_NOCTTY); /* if this is a config link, stay here and wait for it to open */ - if (_uart_fd < 0 && _mode == MAVLINK_MODE_CONFIG) { + if (_uart_fd < 0 && _is_usb_uart) { uORB::SubscriptionData armed_sub{ORB_ID(actuator_armed)}; @@ -628,7 +628,6 @@ Mavlink::mavlink_open_uart(const int baud, const char *uart_name, const bool for /* Try to set baud rate */ struct termios uart_config; int termios_state; - _is_usb_uart = false; /* Initialize the uart config */ if ((termios_state = tcgetattr(_uart_fd, &uart_config)) < 0) { @@ -640,8 +639,7 @@ Mavlink::mavlink_open_uart(const int baud, const char *uart_name, const bool for /* Clear ONLCR flag (which appends a CR for every LF) */ uart_config.c_oflag &= ~ONLCR; - /* USB serial is indicated by /dev/ttyACM0*/ - if (strcmp(uart_name, "/dev/ttyACM0") != OK && strcmp(uart_name, "/dev/ttyACM1") != OK) { + if (!_is_usb_uart) { /* Set baud rate */ if (cfsetispeed(&uart_config, speed) < 0 || cfsetospeed(&uart_config, speed) < 0) { @@ -651,7 +649,6 @@ Mavlink::mavlink_open_uart(const int baud, const char *uart_name, const bool for } } else { - _is_usb_uart = true; /* USB has no baudrate, but use a magic number for 'fast' */ _baudrate = 2000000; @@ -1835,7 +1832,7 @@ Mavlink::task_main(int argc, char *argv[]) int ch; _baudrate = 57600; _datarate = 0; - _mode = MAVLINK_MODE_NORMAL; + _mode = MAVLINK_MODE_COUNT; bool _force_flow_control = false; _interface_name = nullptr; @@ -2059,6 +2056,24 @@ Mavlink::task_main(int argc, char *argv[]) return PX4_ERROR; } + /* USB serial is indicated by /dev/ttyACM0*/ + if (strcmp(_device_name, "/dev/ttyACM0") == OK || strcmp(_device_name, "/dev/ttyACM1") == OK) { + if (_datarate == 0) { + _datarate = 800000; + } + + if (_mode == MAVLINK_MODE_COUNT) { + _mode = MAVLINK_MODE_CONFIG; + } + + _ftp_on = true; + _is_usb_uart = true; + } + + if (_mode == MAVLINK_MODE_COUNT) { + _mode = MAVLINK_MODE_NORMAL; + } + if (_datarate == 0) { /* convert bits to bytes and use 1/2 of bandwidth by default */ _datarate = _baudrate / 20; @@ -2083,11 +2098,11 @@ Mavlink::task_main(int argc, char *argv[]) /* default values for arguments */ _uart_fd = mavlink_open_uart(_baudrate, _device_name, _force_flow_control); - if (_uart_fd < 0 && _mode != MAVLINK_MODE_CONFIG) { + if (_uart_fd < 0 && !_is_usb_uart) { PX4_ERR("could not open %s", _device_name); return PX4_ERROR; - } else if (_uart_fd < 0 && _mode == MAVLINK_MODE_CONFIG) { + } else if (_uart_fd < 0 && _is_usb_uart) { /* the config link is optional */ return OK; }