diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc
index a0ace46f0a607a64fd1526543bb36d480d20ba32..f8a4a2a57dd47b6790a5b7cef62a763b43101b63 100644
--- a/src/Vehicle/Vehicle.cc
+++ b/src/Vehicle/Vehicle.cc
@@ -97,6 +97,7 @@ Vehicle::Vehicle(LinkInterface* link,
, _updateCount(0)
, _rcRSSI(0)
, _rcRSSIstore(100.0)
+ , _autoDisconnect(false)
, _connectionLost(false)
, _connectionLostEnabled(true)
, _missionManager(NULL)
@@ -1316,6 +1317,9 @@ void Vehicle::_connectionLostTimeout(void)
_heardFrom = false;
emit connectionLostChanged(true);
_say(QString("connection lost to vehicle %1").arg(id()), GAudioOutput::AUDIO_SEVERITY_NOTICE);
+ if (_autoDisconnect) {
+ disconnectInactiveVehicle();
+ }
}
}
diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h
index 4f35bc05a3d1de8289012024c6e0ebe379c4a077..0e299ac79b97461ad96a73d4b6a112543c119c0e 100644
--- a/src/Vehicle/Vehicle.h
+++ b/src/Vehicle/Vehicle.h
@@ -124,6 +124,7 @@ public:
Q_PROPERTY(uint messagesLost READ messagesLost NOTIFY messagesLostChanged)
Q_PROPERTY(bool fixedWing READ fixedWing CONSTANT)
Q_PROPERTY(bool multiRotor READ multiRotor CONSTANT)
+ Q_PROPERTY(bool autoDisconnect MEMBER _autoDisconnect NOTIFY autoDisconnectChanged)
/// Resets link status counters
Q_INVOKABLE void resetCounters ();
@@ -318,6 +319,7 @@ signals:
void missingParametersChanged(bool missingParameters);
void connectionLostChanged(bool connectionLost);
void connectionLostEnabledChanged(bool connectionLostEnabled);
+ void autoDisconnectChanged(bool autoDisconnectChanged);
void messagesReceivedChanged ();
void messagesSentChanged ();
@@ -480,6 +482,7 @@ private:
QString _formatedMessage;
int _rcRSSI;
double _rcRSSIstore;
+ bool _autoDisconnect; ///< true: Automatically disconnect vehicle when last connection goes away or lost heartbeat
// Lost connection handling
bool _connectionLost;
diff --git a/src/VehicleSetup/FirmwareUpgrade.qml b/src/VehicleSetup/FirmwareUpgrade.qml
index b79c7750ddf652e58c25d6b29c18cdf3c27e8a16..c8f9fc7d04375e4f60ddd7de5f18319a9cf617d3 100644
--- a/src/VehicleSetup/FirmwareUpgrade.qml
+++ b/src/VehicleSetup/FirmwareUpgrade.qml
@@ -43,7 +43,7 @@ QGCView {
readonly property string highlightPrefix: ""
readonly property string highlightSuffix: ""
readonly property string welcomeText: "QGroundControl can upgrade the firmware on Pixhawk devices, 3DR Radios and PX4 Flow Smart Cameras."
- readonly property string plugInText: highlightPrefix + "Plug in your device" + highlightSuffix + " via USB to " + highlightPrefix + "start" + highlightSuffix + " firmware upgrade. "
+ readonly property string plugInText: "" + highlightPrefix + "Plug in your device" + highlightSuffix + " via USB to " + highlightPrefix + "start" + highlightSuffix + " firmware upgrade."
readonly property string flashFailText: "If upgrade failed, make sure to connect " + highlightPrefix + "directly" + highlightSuffix + " to a powered USB port on your computer, not through a USB hub. " +
"Also make sure you are only powered via USB " + highlightPrefix + "not battery" + highlightSuffix + "."
readonly property string qgcUnplugText1: "All QGroundControl connections to vehicles must be " + highlightPrefix + " disconnected " + highlightSuffix + "prior to firmware upgrade."
@@ -58,7 +58,6 @@ QGCView {
statusTextArea.append(highlightPrefix + "Upgrade cancelled" + highlightSuffix)
statusTextArea.append("------------------------------------------")
controller.cancel()
- flashCompleteWaitTimer.running = true
}
QGCPalette { id: qgcPal; colorGroupEnabled: panel.enabled }
@@ -103,6 +102,7 @@ QGCView {
// Board was found right away, so something is already plugged in before we've started upgrade
statusTextArea.append(qgcUnplugText1)
statusTextArea.append(qgcUnplugText2)
+ multiVehicleManager.activeVehicle.autoDisconnect = true
} else {
// We end up here when we detect a board plugged in after we've started upgrade
statusTextArea.append(highlightPrefix + "Found device" + highlightSuffix + ": " + controller.boardType)
@@ -115,7 +115,6 @@ QGCView {
onError: {
hideDialog()
statusTextArea.append(flashFailText)
- flashCompleteWaitTimer.running = true
}
}
@@ -151,8 +150,8 @@ QGCView {
}
function reject() {
- cancelFlash()
hideDialog()
+ cancelFlash()
}
ExclusiveGroup {