From 18511a93558431d52b62e4a2fc45fd52ec6fa300 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Tue, 23 Apr 2013 22:00:38 +0200 Subject: [PATCH] Made sensor HIL configurable, fixed runtime warnings, WIP --- src/comm/QGCFlightGearLink.h | 11 ++++++++ src/comm/QGCHilLink.h | 11 ++++++++ src/comm/QGCJSBSimLink.h | 11 ++++++++ src/comm/QGCXPlaneLink.cc | 6 +++-- src/comm/QGCXPlaneLink.h | 28 ++++++++++++++------- src/configuration.h | 4 +-- src/ui/MainWindow.cc | 7 +++--- src/ui/MainWindow.ui | 2 +- src/ui/QGCHilConfiguration.cc | 27 ++++++++++++++++++-- src/ui/QGCHilXPlaneConfiguration.cc | 5 ++++ src/ui/QGCHilXPlaneConfiguration.ui | 39 +++++++++++++++++------------ src/ui/map3D/SystemViewParams.cc | 1 + src/ui/map3D/ViewParamWidget.cc | 1 + 13 files changed, 118 insertions(+), 35 deletions(-) diff --git a/src/comm/QGCFlightGearLink.h b/src/comm/QGCFlightGearLink.h index f8cbb2628..9bdda2e5d 100644 --- a/src/comm/QGCFlightGearLink.h +++ b/src/comm/QGCFlightGearLink.h @@ -79,6 +79,10 @@ public: return -1; } + bool sensorHilEnabled() { + return _sensorHilEnabled; + } + void run(); public slots: @@ -104,6 +108,12 @@ public slots: Q_UNUSED(airframe); } + void enableSensorHIL(bool enable) { + if (enable != _sensorHilEnabled) + _sensorHilEnabled = enable; + emit sensorHilChanged(enable); + } + void readBytes(); /** * @brief Write a number of bytes to the interface. @@ -144,6 +154,7 @@ protected: QProcess* terraSync; unsigned int flightGearVersion; QString startupArguments; + bool _sensorHilEnabled; void setName(QString name); diff --git a/src/comm/QGCHilLink.h b/src/comm/QGCHilLink.h index d84d128a4..b74bac37f 100644 --- a/src/comm/QGCHilLink.h +++ b/src/comm/QGCHilLink.h @@ -37,6 +37,12 @@ public: */ virtual int getAirFrameIndex() = 0; + /** + * @brief Check if sensor level HIL is enabled + * @return true if sensor HIL is enabled + */ + virtual bool sensorHilEnabled() = 0; + public slots: virtual void setPort(int port) = 0; /** @brief Add a new host to broadcast messages to */ @@ -47,6 +53,8 @@ public slots: virtual void processError(QProcess::ProcessError err) = 0; /** @brief Set the simulator version as text string */ virtual void setVersion(const QString& version) = 0; + /** @brief Enable sensor-level HIL (instead of state-level HIL) */ + virtual void enableSensorHIL(bool enable) = 0; virtual void selectAirframe(const QString& airframe) = 0; @@ -105,6 +113,9 @@ signals: /** @brief Selected sim version changed */ void versionChanged(const QString& version); + + /** @brief Sensor leve HIL state changed */ + void sensorHilChanged(bool enabled); }; #endif // QGCHILLINK_H diff --git a/src/comm/QGCJSBSimLink.h b/src/comm/QGCJSBSimLink.h index 4492414b6..a720f1fff 100644 --- a/src/comm/QGCJSBSimLink.h +++ b/src/comm/QGCJSBSimLink.h @@ -81,6 +81,10 @@ public: void run(); + bool sensorHilEnabled() { + return _sensorHilEnabled; + } + public slots: // void setAddress(QString address); void setPort(int port); @@ -104,6 +108,12 @@ public slots: script = airframe; } + void enableSensorHIL(bool enable) { + if (enable != _sensorHilEnabled) + _sensorHilEnabled = enable; + emit sensorHilChanged(enable); + } + void readBytes(); /** * @brief Write a number of bytes to the interface. @@ -142,6 +152,7 @@ protected: unsigned int flightGearVersion; QString startupArguments; QString script; + bool _sensorHilEnabled; void setName(QString name); diff --git a/src/comm/QGCXPlaneLink.cc b/src/comm/QGCXPlaneLink.cc index a2f8a4ec9..970398155 100644 --- a/src/comm/QGCXPlaneLink.cc +++ b/src/comm/QGCXPlaneLink.cc @@ -54,7 +54,7 @@ QGCXPlaneLink::QGCXPlaneLink(UASInterface* mav, QString remoteHost, QHostAddress simUpdateLast(QGC::groundTimeMilliseconds()), simUpdateLastText(QGC::groundTimeMilliseconds()), simUpdateHz(0), - sensorHilEnabled(true) + _sensorHilEnabled(true) { this->localHost = localHost; this->localPort = localPort/*+mav->getUASID()*/; @@ -81,6 +81,7 @@ void QGCXPlaneLink::loadSettings() setRemoteHost(settings.value("REMOTE_HOST", QString("%1:%2").arg(remoteHost.toString()).arg(remotePort)).toString()); setVersion(settings.value("XPLANE_VERSION", 10).toInt()); selectAirframe(settings.value("AIRFRAME", "default").toString()); + _sensorHilEnabled = settings.value("SENSOR_HIL", _sensorHilEnabled).toBool(); settings.endGroup(); } @@ -92,6 +93,7 @@ void QGCXPlaneLink::storeSettings() settings.setValue("REMOTE_HOST", QString("%1:%2").arg(remoteHost.toString()).arg(remotePort)); settings.setValue("XPLANE_VERSION", xPlaneVersion); settings.setValue("AIRFRAME", airframeName); + settings.setValue("SENSOR_HIL", _sensorHilEnabled); settings.endGroup(); settings.sync(); } @@ -623,7 +625,7 @@ void QGCXPlaneLink::readBytes() } simUpdateLast = QGC::groundTimeMilliseconds(); - if (sensorHilEnabled) + if (_sensorHilEnabled) { diff_pressure = 0.0f; pressure_alt = alt; diff --git a/src/comm/QGCXPlaneLink.h b/src/comm/QGCXPlaneLink.h index daeaad6c3..ec7f362d2 100644 --- a/src/comm/QGCXPlaneLink.h +++ b/src/comm/QGCXPlaneLink.h @@ -91,6 +91,20 @@ public: AIRFRAME_FIXED_WING_BIXLER_II_AILERONS }; + QString getVersion() + { + return QString("X-Plane %1").arg(xPlaneVersion); + } + + int getAirFrameIndex() + { + return (int)airframeID; + } + + bool sensorHilEnabled() { + return _sensorHilEnabled; + } + public slots: // void setAddress(QString address); void setPort(int port); @@ -104,14 +118,11 @@ public slots: void setVersion(const QString& version); /** @brief Set the simulator version as integer */ void setVersion(unsigned int version); - QString getVersion() - { - return QString("X-Plane %1").arg(xPlaneVersion); - } - int getAirFrameIndex() - { - return (int)airframeID; + void enableSensorHIL(bool enable) { + if (enable != _sensorHilEnabled) + _sensorHilEnabled = enable; + emit sensorHilChanged(enable); } void processError(QProcess::ProcessError err); @@ -194,10 +205,9 @@ protected: quint64 simUpdateLast; quint64 simUpdateLastText; float simUpdateHz; - bool sensorHilEnabled; + bool _sensorHilEnabled; void setName(QString name); - }; #endif // QGCXPLANESIMULATIONLINK_H diff --git a/src/configuration.h b/src/configuration.h index 69b926514..b759799d1 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -12,14 +12,14 @@ #define WITH_TEXT_TO_SPEECH 1 #define QGC_APPLICATION_NAME "QGroundControl" -#define QGC_APPLICATION_VERSION "v. 1.0.4 (beta)" +#define QGC_APPLICATION_VERSION "v. 1.0.2 (beta)" namespace QGC { const QString APPNAME = "QGROUNDCONTROL"; const QString COMPANYNAME = "QGROUNDCONTROL"; -const int APPLICATIONVERSION = 104; // 1.0.4 +const int APPLICATIONVERSION = 105; // 1.0.4 } #endif // QGC_CONFIGURATION_H diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index e07c45926..e204d29fa 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -236,9 +236,10 @@ MainWindow::MainWindow(QWidget *parent): const int screenWidth = QApplication::desktop()->width(); const int screenHeight = QApplication::desktop()->height(); - if (screenWidth < 1200) + if (screenWidth < 1400) { - showFullScreen(); + resize(screenWidth, screenHeight - 80); + show(); } else { @@ -680,7 +681,7 @@ void MainWindow::showHILConfigurationWidget(UASInterface* uas) QDockWidget* hilDock = new QDockWidget(hilDockName, this); hilDock->setWidget(hconf); hilDock->setObjectName(QString("HIL_CONFIG_%1").arg(uas->getUASID())); - addTool(hilDock, hilDockName, Qt::RightDockWidgetArea); + addTool(hilDock, hilDockName, Qt::LeftDockWidgetArea); hilDocks.insert(mav->getUASID(), hilDock); if (currentView != VIEW_SIMULATION) diff --git a/src/ui/MainWindow.ui b/src/ui/MainWindow.ui index ab688cb4a..15963dd32 100644 --- a/src/ui/MainWindow.ui +++ b/src/ui/MainWindow.ui @@ -497,7 +497,7 @@ :/files/images/control/launch.svg:/files/images/control/launch.svg - Simulation View + Simulation Open the simulation view diff --git a/src/ui/QGCHilConfiguration.cc b/src/ui/QGCHilConfiguration.cc index 941707dbb..4919b4d8c 100644 --- a/src/ui/QGCHilConfiguration.cc +++ b/src/ui/QGCHilConfiguration.cc @@ -1,3 +1,5 @@ +#include + #include "QGCHilConfiguration.h" #include "ui_QGCHilConfiguration.h" @@ -11,6 +13,22 @@ QGCHilConfiguration::QGCHilConfiguration(UAS *mav, QWidget *parent) : ui(new Ui::QGCHilConfiguration) { ui->setupUi(this); + + // XXX its quite wrong that this is implicitely a factory + // class, but this is something to clean up for later. + + QSettings settings; + int i = settings.value("SIMULATOR_INDEX", -1).toInt(); + settings.beginGroup("QGC_HILCONFIG"); + + if (i > 0) { + on_simComboBox_currentIndexChanged(i); + ui->simComboBox->blockSignals(true); + ui->simComboBox->setCurrentIndex(i); + ui->simComboBox->blockSignals(false); + } + + settings.endGroup(); } void QGCHilConfiguration::receiveStatusMessage(const QString& message) @@ -20,6 +38,11 @@ void QGCHilConfiguration::receiveStatusMessage(const QString& message) QGCHilConfiguration::~QGCHilConfiguration() { + QSettings settings; + settings.beginGroup("QGC_HILCONFIG"); + settings.setValue("SIMULATOR_INDEX", ui->simComboBox->currentIndex()); + settings.endGroup(); + settings.sync(); delete ui; } @@ -29,8 +52,8 @@ void QGCHilConfiguration::on_simComboBox_currentIndexChanged(int index) QLayoutItem *child; while ((child = ui->simulatorConfigurationLayout->takeAt(0)) != 0) { - delete child->widget(); - delete child; + delete child->widget(); + delete child; } if(1 == index) diff --git a/src/ui/QGCHilXPlaneConfiguration.cc b/src/ui/QGCHilXPlaneConfiguration.cc index 1eaf7632c..f024a4287 100644 --- a/src/ui/QGCHilXPlaneConfiguration.cc +++ b/src/ui/QGCHilXPlaneConfiguration.cc @@ -27,6 +27,11 @@ QGCHilXPlaneConfiguration::QGCHilXPlaneConfiguration(QGCHilLink* link, QWidget * // connect(ui->randomPositionButton, SIGNAL(clicked()), link, SLOT(setRandomPosition())); connect(ui->airframeComboBox, SIGNAL(activated(QString)), link, SLOT(selectAirframe(QString))); ui->airframeComboBox->setCurrentIndex(link->getAirFrameIndex()); + // XXX not implemented yet + ui->airframeComboBox->hide(); + ui->sensorHilCheckBox->setChecked(link->sensorHilEnabled()); + connect(link, SIGNAL(sensorHilChanged(bool)), ui->sensorHilCheckBox, SLOT(setChecked(bool))); + connect(ui->sensorHilCheckBox, SIGNAL(clicked(bool)), link, SLOT(enableSensorHIL(bool))); } ui->hostComboBox->clear(); diff --git a/src/ui/QGCHilXPlaneConfiguration.ui b/src/ui/QGCHilXPlaneConfiguration.ui index dbcc93a97..cc6f1def2 100644 --- a/src/ui/QGCHilXPlaneConfiguration.ui +++ b/src/ui/QGCHilXPlaneConfiguration.ui @@ -6,14 +6,14 @@ 0 0 - 249 - 100 + 295 + 148 Form - + 0 @@ -24,19 +24,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -127,6 +114,26 @@ + + + + Enable sensor level HIL + + + + + + + Qt::Vertical + + + + 20 + 1 + + + + diff --git a/src/ui/map3D/SystemViewParams.cc b/src/ui/map3D/SystemViewParams.cc index 0dc70e34c..a8ed5a5c4 100644 --- a/src/ui/map3D/SystemViewParams.cc +++ b/src/ui/map3D/SystemViewParams.cc @@ -18,6 +18,7 @@ SystemViewParams::SystemViewParams(int systemId) , mSetpointHistoryLength(100) { + setObjectName("RGBD VIEW PARAMS"); } bool& diff --git a/src/ui/map3D/ViewParamWidget.cc b/src/ui/map3D/ViewParamWidget.cc index a689bde59..adf352c39 100644 --- a/src/ui/map3D/ViewParamWidget.cc +++ b/src/ui/map3D/ViewParamWidget.cc @@ -19,6 +19,7 @@ ViewParamWidget::ViewParamWidget(GlobalViewParamsPtr& globalViewParams, , mFollowCameraComboBox(new QComboBox(this)) , mTabWidget(new QTabWidget(this)) { + setObjectName("RGBD VIEW PARAMS WIDGET"); QVBoxLayout* layout = new QVBoxLayout; QWidget* widget = new QWidget; widget->setLayout(layout); -- 2.22.0