Commit bdfacbd2 authored by dogmaphobic's avatar dogmaphobic

General Clean Up

parent 0064bb76
......@@ -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 : ""
}
}
}
......@@ -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
}
......@@ -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) : ""
}
}
}
......@@ -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) : ""
}
}
}
......@@ -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
}
......@@ -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 : ""
}
}
}
......@@ -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
}
......@@ -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") : ""
}
}
}
......@@ -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
......
......@@ -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<MissionItem*>(_missionItems->get(i)));
......
......@@ -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());
......
......@@ -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 {
......
......@@ -24,87 +24,89 @@ along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
/// @file
/// @author Don Gagne <don@thegagnes.com>
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: "<p>" +
"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.</p>" +
"<p>Click 'Load Custom Qml file' to provide your custom qml file.</p>" +
"<p>Click 'Reset' to reset to none.</p>" +
"<p>Example usage: http://www.qgroundcontrol.org/custom_command_qml_widgets</p>"
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
}
}
}
......
......@@ -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);
}
......
......@@ -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
......@@ -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<LinkInterface> SharedLinkInterface;
......
......@@ -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();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment