diff --git a/src/AutoPilotPlugins/Common/ESP8266ComponentSummary.qml b/src/AutoPilotPlugins/Common/ESP8266ComponentSummary.qml index 1cd4465cfead6c41379a6b2ab10497619370ca42..f7c1048584e29440bedfa3eb2ada87fe62f411e9 100644 --- a/src/AutoPilotPlugins/Common/ESP8266ComponentSummary.qml +++ b/src/AutoPilotPlugins/Common/ESP8266ComponentSummary.qml @@ -34,7 +34,7 @@ FactPanel { } VehicleSummaryRow { labelText: "WiFi Channel:" - valueText: wifiChannel.valueString + valueText: wifiChannel ? wifiChannel.valueString : "" } VehicleSummaryRow { labelText: "WiFi SSID:" @@ -46,7 +46,7 @@ FactPanel { } VehicleSummaryRow { labelText: "UART Baud Rate:" - valueText: uartBaud.valueString + valueText: uartBaud ? uartBaud.valueString : "" } } } diff --git a/src/AutoPilotPlugins/PX4/AirframeComponentSummary.qml b/src/AutoPilotPlugins/PX4/AirframeComponentSummary.qml index 75dc76ddb01b8474dbc0e8b6a600b0a55462f7c1..d3f9222869aa137ccbbee806ca14776ef0dba0c0 100644 --- a/src/AutoPilotPlugins/PX4/AirframeComponentSummary.qml +++ b/src/AutoPilotPlugins/PX4/AirframeComponentSummary.qml @@ -18,15 +18,15 @@ FactPanel { property Fact sysIdFact: controller.getParameterFact(-1, "MAV_SYS_ID") property Fact sysAutoStartFact: controller.getParameterFact(-1, "SYS_AUTOSTART") - property bool autoStartSet: sysAutoStartFact.value != 0 + property bool autoStartSet: sysAutoStartFact ? (sysAutoStartFact.value !== 0) : false Column { - anchors.fill: parent + anchors.fill: parent anchors.margins: 8 VehicleSummaryRow { labelText: "System ID:" - valueText: sysIdFact.valueString + valueText: sysIdFact ? sysIdFact.valueString : "" } VehicleSummaryRow { @@ -39,4 +39,4 @@ FactPanel { valueText: autoStartSet ? controller.currentVehicleName : "Setup required" } } -} \ No newline at end of file +} diff --git a/src/AutoPilotPlugins/PX4/FlightModesComponentSummary.qml b/src/AutoPilotPlugins/PX4/FlightModesComponentSummary.qml index bbf7cf4438726927d797a246c435d79856fcca9d..87b392db26fc721af1c2c63bb896037053846ed7 100644 --- a/src/AutoPilotPlugins/PX4/FlightModesComponentSummary.qml +++ b/src/AutoPilotPlugins/PX4/FlightModesComponentSummary.qml @@ -25,22 +25,22 @@ FactPanel { VehicleSummaryRow { labelText: "Mode switch:" - valueText: modeSwFact.value == 0 ? "Setup required" : modeSwFact.valueString + valueText: modeSwFact ? (modeSwFact.value === 0 ? "Setup required" : modeSwFact.valueString) : "" } VehicleSummaryRow { labelText: "Position Ctl switch:" - valueText: posCtlSwFact.value == 0 ? "Disabled" : posCtlSwFact.valueString + valueText: posCtlSwFact ? (posCtlSwFact.value === 0 ? "Disabled" : posCtlSwFact.valueString) : "" } VehicleSummaryRow { labelText: "Loiter switch:" - valueText: loiterSwFact.value == 0 ? "Disabled" : loiterSwFact.valueString + valueText: loiterSwFact ? (loiterSwFact.value === 0 ? "Disabled" : loiterSwFact.valueString) : "" } VehicleSummaryRow { labelText: "Return switch:" - valueText: returnSwFact.value == 0 ? "Disabled" : returnSwFact.valueString + valueText: returnSwFact ? (returnSwFact.value === 0 ? "Disabled" : returnSwFact.valueString) : "" } } } diff --git a/src/AutoPilotPlugins/PX4/PX4RadioComponentSummary.qml b/src/AutoPilotPlugins/PX4/PX4RadioComponentSummary.qml index 663d2649bea978c6c4d0529b28422c6ffc6c817b..877b9826d2aeed509fd8ffe2aca019c967a82f75 100644 --- a/src/AutoPilotPlugins/PX4/PX4RadioComponentSummary.qml +++ b/src/AutoPilotPlugins/PX4/PX4RadioComponentSummary.qml @@ -28,37 +28,37 @@ FactPanel { VehicleSummaryRow { labelText: "Roll:" - valueText: mapRollFact.value == 0 ? "Setup required" : mapRollFact.valueString + valueText: mapRollFact ? (mapRollFact.value === 0 ? "Setup required" : mapRollFact.valueString) : "" } VehicleSummaryRow { labelText: "Pitch:" - valueText: mapPitchFact.value == 0 ? "Setup required" : mapPitchFact.valueString + valueText: mapPitchFact ? (mapPitchFact.value === 0 ? "Setup required" : mapPitchFact.valueString) : "" } VehicleSummaryRow { labelText: "Yaw:" - valueText: mapYawFact.value == 0 ? "Setup required" : mapYawFact.valueString + valueText: mapYawFact ? (mapYawFact.value === 0 ? "Setup required" : mapYawFact.valueString) : "" } VehicleSummaryRow { labelText: "Throttle:" - valueText: mapThrottleFact.value == 0 ? "Setup required" : mapThrottleFact.valueString + valueText: mapThrottleFact ? (mapThrottleFact.value === 0 ? "Setup required" : mapThrottleFact.valueString) : "" } VehicleSummaryRow { labelText: "Flaps:" - valueText: mapFlapsFact.value == 0 ? "Disabled" : mapFlapsFact.valueString + valueText: mapFlapsFact ? (mapFlapsFact.value === 0 ? "Disabled" : mapFlapsFact.valueString) : "" } VehicleSummaryRow { labelText: "Aux1:" - valueText: mapAux1Fact.value == 0 ? "Disabled" : mapAux1Fact.valueString + valueText: mapAux1Fact ? (mapAux1Fact.value === 0 ? "Disabled" : mapAux1Fact.valueString) : "" } VehicleSummaryRow { labelText: "Aux2:" - valueText: mapAux2Fact.value == 0 ? "Disabled" : mapAux2Fact.valueString + valueText: mapAux2Fact ? (mapAux2Fact.value === 0 ? "Disabled" : mapAux2Fact.valueString) : "" } } } diff --git a/src/AutoPilotPlugins/PX4/PowerComponentSummary.qml b/src/AutoPilotPlugins/PX4/PowerComponentSummary.qml index 3343295371c2ca35cc6610a5d013210290db2754..ced305e2d408bd3ac2dbbfb316808c6ae9f9288d 100644 --- a/src/AutoPilotPlugins/PX4/PowerComponentSummary.qml +++ b/src/AutoPilotPlugins/PX4/PowerComponentSummary.qml @@ -51,17 +51,17 @@ FactPanel { VehicleSummaryRow { labelText: "Battery Full:" - valueText: batVChargedFact.valueString + valueText: batVChargedFact ? batVChargedFact.valueString : "" } VehicleSummaryRow { labelText: "Battery Empty:" - valueText: batVEmptyFact.valueString + valueText: batVEmptyFact ? batVEmptyFact.valueString : "" } VehicleSummaryRow { labelText: "Number of Cells:" - valueText: batCellsFact.valueString + valueText: batCellsFact ? batCellsFact.valueString : "" } } -} \ No newline at end of file +} diff --git a/src/AutoPilotPlugins/PX4/SafetyComponentSummary.qml b/src/AutoPilotPlugins/PX4/SafetyComponentSummary.qml index 46785ad6033b05bb34f1d4ada5a076dfca5fac27..b875a37542eb85652bda3488e1c9b43c399a5173 100644 --- a/src/AutoPilotPlugins/PX4/SafetyComponentSummary.qml +++ b/src/AutoPilotPlugins/PX4/SafetyComponentSummary.qml @@ -26,27 +26,27 @@ FactPanel { VehicleSummaryRow { labelText: "RTL min alt:" - valueText: returnAltFact.valueString + valueText: returnAltFact ? returnAltFact.valueString : "" } VehicleSummaryRow { labelText: "RTL home alt:" - valueText: descendAltFact.valueString + valueText: descendAltFact ? descendAltFact.valueString : "" } VehicleSummaryRow { labelText: "RTL loiter delay:" - valueText: landDelayFact.value < 0 ? "Disabled" : landDelayFact.valueString + valueText: landDelayFact ? (landDelayFact.value < 0 ? "Disabled" : landDelayFact.valueString) : "" } VehicleSummaryRow { labelText: "Telemetry loss RTL:" - valueText: commDLLossFact.value != -1 ? "Disabled" : commDLLossFact.valueString + valueText: commDLLossFact ? (commDLLossFact.value != -1 ? "Disabled" : commDLLossFact.valueString) : "" } VehicleSummaryRow { labelText: "RC loss RTL (seconds):" - valueText: commRCLossFact.valueString + valueText: commRCLossFact ? commRCLossFact.valueString : "" } } } diff --git a/src/AutoPilotPlugins/PX4/SensorsComponentSummary.qml b/src/AutoPilotPlugins/PX4/SensorsComponentSummary.qml index 2f7a3edb9fbb0ea1870cc6a8179cfbd29d11bd0e..2fd15c11c41e9816f878373b91a5568018379da8 100644 --- a/src/AutoPilotPlugins/PX4/SensorsComponentSummary.qml +++ b/src/AutoPilotPlugins/PX4/SensorsComponentSummary.qml @@ -29,17 +29,17 @@ FactPanel { VehicleSummaryRow { labelText: "Compass:" - valueText: mag0IdFact.value == 0 ? "Setup required" : "Ready" + valueText: mag0IdFact ? (mag0IdFact.value === 0 ? "Setup required" : "Ready") : "" } VehicleSummaryRow { labelText: "Gyro:" - valueText: gyro0IdFact.value == 0 ? "Setup required" : "Ready" + valueText: gyro0IdFact ? (gyro0IdFact.value === 0 ? "Setup required" : "Ready") : "" } VehicleSummaryRow { labelText: "Accelerometer:" - valueText: accel0IdFact.value == 0 ? "Setup required" : "Ready" + valueText: accel0IdFact ? (accel0IdFact.value === 0 ? "Setup required" : "Ready") : "" } } -} \ No newline at end of file +} diff --git a/src/AutoPilotPlugins/PX4/SensorsComponentSummaryFixedWing.qml b/src/AutoPilotPlugins/PX4/SensorsComponentSummaryFixedWing.qml index 5c4e4ff63ea172fcec95d225544480ff97ada0c9..513cf3e86e0966a01ab68404c1e546d62cd9a02c 100644 --- a/src/AutoPilotPlugins/PX4/SensorsComponentSummaryFixedWing.qml +++ b/src/AutoPilotPlugins/PX4/SensorsComponentSummaryFixedWing.qml @@ -29,22 +29,22 @@ FactPanel { VehicleSummaryRow { labelText: "Compass:" - valueText: mag0IdFact.value == 0 ? "Setup required" : "Ready" + valueText: mag0IdFact ? (mag0IdFact.value === 0 ? "Setup required" : "Ready") : "" } VehicleSummaryRow { labelText: "Gyro:" - valueText: gyro0IdFact.value == 0 ? "Setup required" : "Ready" + valueText: gyro0IdFact ? (gyro0IdFact.value === 0 ? "Setup required" : "Ready") : "" } VehicleSummaryRow { labelText: "Accelerometer:" - valueText: accel0IdFact.value == 0 ? "Setup required" : "Ready" + valueText: accel0IdFact ? (accel0IdFact.value === 0 ? "Setup required" : "Ready") : "" } VehicleSummaryRow { labelText: "Airspeed:" - valueText: dpressOffFact.value == 0 ? "Setup required" : "Ready" + valueText: dpressOffFact ? (dpressOffFact.value === 0 ? "Setup required" : "Ready") : "" } } } diff --git a/src/FactSystem/FactControls/FactTextField.qml b/src/FactSystem/FactControls/FactTextField.qml index e22416945ad26116f547c98c20f010b3d1a55d58..edd594f0dbedb50903cfaa0a902e99779bc7e6c4 100644 --- a/src/FactSystem/FactControls/FactTextField.qml +++ b/src/FactSystem/FactControls/FactTextField.qml @@ -11,8 +11,8 @@ import QGroundControl.Controls 1.0 QGCTextField { id: _textField - text: fact.valueString - unitsLabel: fact.units + text: fact ? fact.valueString : "" + unitsLabel: fact ? fact.units : "" showUnits: true property Fact fact: null diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index c03bcfe08e66ecc7a32a256ce654a54aba7eff8d..beb56a4b586377303195d735a15fa574965a7bc7 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -514,7 +514,7 @@ void MissionController::_initAllMissionItems(void) homeItem->setCoordinate(QGeoCoordinate(37.803784, -122.462276, 0.0)); } - qDebug() << "home item" << homeItem->homePositionValid() << homeItem->coordinate(); + //qDebug() << "home item" << homeItem->homePositionValid() << homeItem->coordinate(); for (int i=0; i<_missionItems->count(); i++) { _initMissionItem(qobject_cast(_missionItems->get(i))); diff --git a/src/QGCDockWidget.cc b/src/QGCDockWidget.cc index 0adb405e62e11b847ea01efbf6946fce143e7191..2d21ed74b6a2563ed6dc2ce6492cdd6fdfdbdd1c 100644 --- a/src/QGCDockWidget.cc +++ b/src/QGCDockWidget.cc @@ -52,7 +52,8 @@ void QGCDockWidget::closeEvent(QCloseEvent* event) void QGCDockWidget::loadSettings(void) { - if (_action) { + // TODO: This is crashing for some reason. Disabled until sorted out. + if (0 /*_action*/) { QSettings settings; settings.beginGroup(_settingsGroup); if (settings.contains(_title)) { @@ -64,7 +65,8 @@ void QGCDockWidget::loadSettings(void) void QGCDockWidget::saveSettings(void) { - if (_action) { + // TODO: This is crashing for some reason. Disabled until sorted out. + if (0 /*_action*/) { QSettings settings; settings.beginGroup(_settingsGroup); settings.setValue(_title, saveGeometry()); diff --git a/src/VehicleSetup/VehicleSummary.qml b/src/VehicleSetup/VehicleSummary.qml index a0230e7b6f01d5eb394659a4f92e35d710fb7b16..82b40295736db9d8c073b4ce3016e81a24d0c177 100644 --- a/src/VehicleSetup/VehicleSummary.qml +++ b/src/VehicleSetup/VehicleSummary.qml @@ -95,7 +95,7 @@ Rectangle { text: setupComplete ? "Below you will find a summary of the settings for your vehicle. To the left are the setup menus for each component." : "WARNING: Your vehicle requires setup prior to flight. Please resolve the items marked in red using the menu on the left." - property bool setupComplete: multiVehicleManager.activeVehicle.autopilot.setupComplete + property bool setupComplete: multiVehicleManager.activeVehicle ? multiVehicleManager.activeVehicle.autopilot.setupComplete : false } Flow { @@ -104,7 +104,7 @@ Rectangle { spacing: _summaryBoxSpace Repeater { - model: multiVehicleManager.activeVehicle.autopilot.vehicleComponents + model: multiVehicleManager.activeVehicle ? multiVehicleManager.activeVehicle.autopilot.vehicleComponents : undefined // Outer summary item rectangle Rectangle { diff --git a/src/ViewWidgets/CustomCommandWidget.qml b/src/ViewWidgets/CustomCommandWidget.qml index d95543648343b4fdbb7a6e482333d0e89fa7332f..149a87200bff6187d7cef7626ed5a0a813021773 100644 --- a/src/ViewWidgets/CustomCommandWidget.qml +++ b/src/ViewWidgets/CustomCommandWidget.qml @@ -24,87 +24,89 @@ along with QGROUNDCONTROL. If not, see . /// @file /// @author Don Gagne -import QtQuick 2.2 - -import QGroundControl.Palette 1.0 -import QGroundControl.Controls 1.0 -import QGroundControl.Controllers 1.0 - -ViewWidget { - connectedComponent: commandComponenet - - Component { - id: commandComponenet - - Item { - id: bogusFactPanel - - // We aren't really using the controller in a FactPanel for this usage so we - // pass in a bogus item to keep it from getting upset. - CustomCommandWidgetController { id: controller; factPanel: bogusFactPanel } - - Item { - anchors.top: parent.top - anchors.bottom: buttonRow.top - width: parent.width - - QGCLabel { - id: errorOutput - anchors.fill: parent - wrapMode: Text.WordWrap - visible: false - } - - QGCLabel { - id: warning - anchors.fill: parent - wrapMode: Text.WordWrap - visible: !controller.customQmlFile - text: "You can create your own commands and parameter editing user interface in this widget. " + - "You do this by providing your own Qml file. " + - "This support is a work in progress and the details may change somewhat in the future. " + - "By using this feature you are connecting directly to the internals of QGroundControl. " + - "Doing so incorrectly may cause instability both in QGroundControl and/or your vehicle. " + - "So make sure to test your changes thoroughly before using them in flight.\n\n" + - "Click 'Select Qml file' to provide your custom qml file.\n" + - "Click 'Clear Qml file' to reset to none.\n" + - "Example usage: http://www.qgroundcontrol.org/custom_command_qml_widgets" - } - - Loader { - id: loader - anchors.fill: parent - source: controller.customQmlFile - visible: controller.customQmlFile - - onStatusChanged: { - if (loader.status == Loader.Error) { - if (sourceComponent.status == Component.Error) { - errorOutput.text = sourceComponent.errorString() - errorOutput.visible = true - loader.visible = false - } +import QtQuick 2.5 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.2 +import QtQuick.Dialogs 1.2 + +import QGroundControl.Palette 1.0 +import QGroundControl.Controls 1.0 +import QGroundControl.Controllers 1.0 +import QGroundControl.ScreenTools 1.0 + +QGCView { + viewPanel: panel + + property real _margins: ScreenTools.defaultFontPixelHeight + property string _emptyText: "

" + + "You can create your own commands and parameter editing user interface in this widget. " + + "You do this by providing your own Qml file. " + + "This support is a work in progress and the details may change somewhat in the future. " + + "By using this feature you are connecting directly to the internals of QGroundControl. " + + "Doing so incorrectly may cause instability both in QGroundControl and/or your vehicle. " + + "So make sure to test your changes thoroughly before using them in flight.

" + + "

Click 'Load Custom Qml file' to provide your custom qml file.

" + + "

Click 'Reset' to reset to none.

" + + "

Example usage: http://www.qgroundcontrol.org/custom_command_qml_widgets

" + + QGCPalette { id: qgcPal; colorGroupEnabled: enabled } + CustomCommandWidgetController { id: controller; factPanel: panel } + + QGCViewPanel { + id: panel + anchors.fill: parent + Rectangle { + anchors.fill: parent + color: qgcPal.window + QGCLabel { + id: textOutput + anchors.margins: _margins + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: buttonRow.top + wrapMode: Text.WordWrap + textFormat: Text.RichText + text: _emptyText + visible: !loader.visible + } + Loader { + id: loader + anchors.margins: _margins + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: buttonRow.top + source: controller.customQmlFile + visible: false + onStatusChanged: { + loader.visible = true + if (loader.status == Loader.Error) { + if (sourceComponent.status == Component.Error) { + textOutput.text = sourceComponent.errorString() + loader.visible = false } } } } - Row { - id: buttonRow - spacing: 10 - anchors.bottom: parent.bottom - + id: buttonRow + spacing: ScreenTools.defaultFontPixelWidth + anchors.margins: _margins + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter QGCButton { - text: "Select Qml file..." + text: "Load Custom Qml file..." + width: ScreenTools.defaultFontPixelWidth * 22 onClicked: controller.selectQmlFile() } - QGCButton { - text: "Clear Qml file" - + text: "Reset" + width: ScreenTools.defaultFontPixelWidth * 22 onClicked: { - errorOutput.visible = false controller.clearQmlFile() + loader.visible = false + textOutput.text = _emptyText } } } diff --git a/src/ViewWidgets/CustomCommandWidgetController.cc b/src/ViewWidgets/CustomCommandWidgetController.cc index 24e1a06f10f9b76308769846b2f38101c8ac45c5..38d48bf54b8ea2234aee5d5023673b7cf1bf84a2 100644 --- a/src/ViewWidgets/CustomCommandWidgetController.cc +++ b/src/ViewWidgets/CustomCommandWidgetController.cc @@ -36,32 +36,30 @@ const char* CustomCommandWidgetController::_settingsKey = "CustomCommand.QmlFile CustomCommandWidgetController::CustomCommandWidgetController(void) : _uas(NULL) { - _uas = qgcApp()->toolbox()->multiVehicleManager()->activeVehicle()->uas(); - Q_ASSERT(_uas); - + if(qgcApp()->toolbox()->multiVehicleManager()->activeVehicle()) { + _uas = qgcApp()->toolbox()->multiVehicleManager()->activeVehicle()->uas(); + } QSettings settings; _customQmlFile = settings.value(_settingsKey).toString(); + connect(qgcApp()->toolbox()->multiVehicleManager(), &MultiVehicleManager::activeVehicleChanged, this, &CustomCommandWidgetController::_activeVehicleChanged); } void CustomCommandWidgetController::sendCommand(int commandId, QVariant componentId, QVariant confirm, QVariant param1, QVariant param2, QVariant param3, QVariant param4, QVariant param5, QVariant param6, QVariant param7) { - Q_UNUSED(commandId); - Q_UNUSED(componentId); - Q_UNUSED(confirm); - Q_UNUSED(param1); - Q_UNUSED(param2); - Q_UNUSED(param3); - Q_UNUSED(param4); - Q_UNUSED(param5); - Q_UNUSED(param6); - Q_UNUSED(param7); - _uas->executeCommand((MAV_CMD)commandId, confirm.toInt(), param1.toFloat(), param2.toFloat(), param3.toFloat(), param4.toFloat(), param5.toFloat(), param6.toFloat(), param7.toFloat(), componentId.toInt()); + if(_uas) { + _uas->executeCommand((MAV_CMD)commandId, confirm.toInt(), param1.toFloat(), param2.toFloat(), param3.toFloat(), param4.toFloat(), param5.toFloat(), param6.toFloat(), param7.toFloat(), componentId.toInt()); + } +} + +void CustomCommandWidgetController::_activeVehicleChanged(Vehicle* activeVehicle) +{ + if(activeVehicle) + _uas = activeVehicle->uas(); } void CustomCommandWidgetController::selectQmlFile(void) { QSettings settings; - QString qmlFile = QGCFileDialog::getOpenFileName(NULL, "Select custom Qml file", QString(), "Qml files (*.qml)"); if (qmlFile.isEmpty()) { _customQmlFile.clear(); @@ -71,7 +69,6 @@ void CustomCommandWidgetController::selectQmlFile(void) _customQmlFile = url.toString(); settings.setValue(_settingsKey, _customQmlFile); } - emit customQmlFileChanged(_customQmlFile); } diff --git a/src/ViewWidgets/CustomCommandWidgetController.h b/src/ViewWidgets/CustomCommandWidgetController.h index 63a67a2b8b22fc1367621912ed841120a70be650..0427747f33d6b94fa72c06d29e6877fd1876fbbc 100644 --- a/src/ViewWidgets/CustomCommandWidgetController.h +++ b/src/ViewWidgets/CustomCommandWidgetController.h @@ -39,17 +39,20 @@ public: Q_PROPERTY(QString customQmlFile MEMBER _customQmlFile NOTIFY customQmlFileChanged) - Q_INVOKABLE void sendCommand(int commandId, QVariant componentId, QVariant confirm, QVariant param1, QVariant param2, QVariant param3, QVariant param4, QVariant param5, QVariant param6, QVariant param7); - Q_INVOKABLE void selectQmlFile(void); - Q_INVOKABLE void clearQmlFile(void); + Q_INVOKABLE void sendCommand (int commandId, QVariant componentId, QVariant confirm, QVariant param1, QVariant param2, QVariant param3, QVariant param4, QVariant param5, QVariant param6, QVariant param7); + Q_INVOKABLE void selectQmlFile (void); + Q_INVOKABLE void clearQmlFile (void); signals: - void customQmlFileChanged(const QString& customQmlFile); - + void customQmlFileChanged (const QString& customQmlFile); + +private slots: + void _activeVehicleChanged (Vehicle* activeVehicle); + private: UASInterface* _uas; QString _customQmlFile; static const char* _settingsKey; }; -#endif \ No newline at end of file +#endif diff --git a/src/comm/LinkInterface.h b/src/comm/LinkInterface.h index b2b18d2e91f68b02f294b8effa0e55b8fa3bf160..cb5c7c3aa03b0e1c2f1bb0edbd1299f03d4a76a3 100644 --- a/src/comm/LinkInterface.h +++ b/src/comm/LinkInterface.h @@ -101,6 +101,14 @@ public: /// @return true: This link is replaying a log file, false: Normal two-way communication link virtual bool isLogReplay(void) { return false; } + /** + * @Enable/Disable data rate collection + **/ + void enableDataRate(bool enable) + { + _enableRateCollection = enable; + } + /** * @Brief Get the current incoming data rate. * @@ -192,6 +200,7 @@ protected: QThread(0) , _mavlinkChannelSet(false) , _active(false) + , _enableRateCollection(false) { // Initialize everything for the data rate calculation buffers. _inDataIndex = 0; @@ -211,7 +220,8 @@ protected: /// @param byteCount Number of bytes received /// @param time Time in ms send occured void _logInputDataRate(quint64 byteCount, qint64 time) { - _logDataRateToBuffer(_inDataWriteAmounts, _inDataWriteTimes, &_inDataIndex, byteCount, time); + if(_enableRateCollection) + _logDataRateToBuffer(_inDataWriteAmounts, _inDataWriteTimes, &_inDataIndex, byteCount, time); } /// This function logs the send times and amounts of datas for output. Data is used for calculating @@ -219,7 +229,8 @@ protected: /// @param byteCount Number of bytes sent /// @param time Time in ms receive occured void _logOutputDataRate(quint64 byteCount, qint64 time) { - _logDataRateToBuffer(_outDataWriteAmounts, _outDataWriteTimes, &_outDataIndex, byteCount, time); + if(_enableRateCollection) + _logDataRateToBuffer(_outDataWriteAmounts, _outDataWriteTimes, &_outDataIndex, byteCount, time); } protected slots: @@ -354,6 +365,7 @@ private: mutable QMutex _dataRateMutex; // Mutex for accessing the data rate member variables bool _active; ///< true: link is actively receiving mavlink messages + bool _enableRateCollection; }; typedef QSharedPointer SharedLinkInterface; diff --git a/src/comm/UDPLink.cc b/src/comm/UDPLink.cc index 61bdcb87affddafca5d40685514a34c7f1f18ecd..c3cedf5f1ba09672d477f9324e112ea952a91a6b 100644 --- a/src/comm/UDPLink.cc +++ b/src/comm/UDPLink.cc @@ -99,8 +99,6 @@ UDPLink::UDPLink(UDPConfiguration* config) // We're doing it wrong - because the Qt folks got the API wrong: // http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/ moveToThread(this); - - //qDebug() << "UDP Created " << _config->name(); } UDPLink::~UDPLink() @@ -140,7 +138,7 @@ void UDPLink::run() if(!_running) break; //-- Settle down (it gets here if there is nothing to read or write) - this->msleep(5); + _socket->waitForReadyRead(5); } } else { exec();