From 4355b8e77f7ef47fba67895ced5671b6bf90f887 Mon Sep 17 00:00:00 2001 From: Bryan Godbolt Date: Fri, 3 Sep 2010 14:39:47 -0600 Subject: [PATCH] added ability to configure the instance id for the opal-rt link --- qgroundcontrol.pro | 7 +- src/comm/OpalLink.cc | 7 +- src/comm/OpalLink.h | 6 + src/ui/CommConfigurationWindow.cc | 5 + src/ui/OpalLinkConfigurationWindow.cc | 25 ++++ src/ui/OpalLinkConfigurationWindow.h | 28 +++++ src/ui/OpalLinkSettings.ui | 173 ++++++++++++++++++++++++++ 7 files changed, 247 insertions(+), 4 deletions(-) create mode 100644 src/ui/OpalLinkConfigurationWindow.cc create mode 100644 src/ui/OpalLinkConfigurationWindow.h create mode 100644 src/ui/OpalLinkSettings.ui diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index aa07a527e..56c8a4161 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -234,11 +234,14 @@ win32:exists(src/lib/opalrt/OpalApi.h) { src/comm/OpalLink.h \ src/comm/Parameter.h \ src/comm/QGCParamID.h \ - src/comm/ParameterList.h + src/comm/ParameterList.h \ + src/ui/OpalLinkConfigurationWindow.h SOURCES += src/comm/OpalRT.cc \ src/comm/OpalLink.cc \ src/comm/Parameter.cc \ src/comm/QGCParamID.cc \ - src/comm/ParameterList.cc + src/comm/ParameterList.cc \ + src/ui/OpalLinkConfigurationWindow.cc + FORMS += src/ui/OpalLinkSettings.ui DEFINES += OPAL_RT } diff --git a/src/comm/OpalLink.cc b/src/comm/OpalLink.cc index 6dba8e390..7fa51b683 100644 --- a/src/comm/OpalLink.cc +++ b/src/comm/OpalLink.cc @@ -39,7 +39,8 @@ OpalLink::OpalLink() : receiveBuffer(new QQueue()), systemID(1), componentID(1), - params(NULL) + params(NULL), + opalInstID(101) { start(QThread::LowPriority); @@ -302,7 +303,7 @@ bool OpalLink::connect() short modelState; /// \todo allow configuration of instid in window - if ((OpalConnect(101, false, &modelState) == EOK) + if ((OpalConnect(opalInstID, false, &modelState) == EOK) && (OpalGetSignalControl(0, true) == EOK) && (OpalGetParameterControl(true) == EOK)) { @@ -330,6 +331,8 @@ bool OpalLink::disconnect() OpalDisconnect(); heartbeatTimer->stop(); getSignalsTimer->stop(); + connectState = false; + emit connected(connectState); return true; } diff --git a/src/comm/OpalLink.h b/src/comm/OpalLink.h index 36f36e16d..c640ca671 100644 --- a/src/comm/OpalLink.h +++ b/src/comm/OpalLink.h @@ -103,6 +103,8 @@ public: void run(); + int getOpalInstID() {return static_cast(opalInstID);} + public slots: void writeBytes(const char *bytes, qint64 length); @@ -113,6 +115,8 @@ public slots: void getSignals(); + void setOpalInstID(int instID) {opalInstID = static_cast(instID);} + protected slots: void receiveMessage(mavlink_message_t message); @@ -151,6 +155,8 @@ protected: void getParameterList(); OpalRT::ParameterList *params; + + unsigned short opalInstID; }; #endif // OPALLINK_H diff --git a/src/ui/CommConfigurationWindow.cc b/src/ui/CommConfigurationWindow.cc index a51303e88..5aba706ef 100644 --- a/src/ui/CommConfigurationWindow.cc +++ b/src/ui/CommConfigurationWindow.cc @@ -43,6 +43,7 @@ This file is part of the QGROUNDCONTROL project #include "MAVLinkSimulationLink.h" #ifdef OPAL_RT #include "OpalLink.h" +#include "OpalLinkConfigurationWindow.h" #endif #include "MAVLinkProtocol.h" #include "MAVLinkSettingsWidget.h" @@ -114,6 +115,10 @@ CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolIn OpalLink* opal = dynamic_cast(link); if (opal != 0) { + QWidget* conf = new OpalLinkConfigurationWindow(opal, this); + QBoxLayout* layout = new QBoxLayout(QBoxLayout::LeftToRight, ui.linkGroupBox); + layout->addWidget(conf); + ui.linkGroupBox->setLayout(layout); ui.linkGroupBox->setTitle(tr("Opal-RT Link")); } #endif diff --git a/src/ui/OpalLinkConfigurationWindow.cc b/src/ui/OpalLinkConfigurationWindow.cc new file mode 100644 index 000000000..eba432815 --- /dev/null +++ b/src/ui/OpalLinkConfigurationWindow.cc @@ -0,0 +1,25 @@ +#include "OpalLinkConfigurationWindow.h" + +OpalLinkConfigurationWindow::OpalLinkConfigurationWindow(OpalLink* link, + QWidget *parent, + Qt::WindowFlags flags) : + QWidget(parent, flags), + link(link) + +{ + + + ui.setupUi(this); + + ui.opalInstIDSpinBox->setValue(this->link->getOpalInstID()); + + connect(ui.opalInstIDSpinBox, SIGNAL(valueChanged(int)), link, SLOT(setOpalInstID(int))); + connect(link, SIGNAL(connected(bool)), this, SLOT(allowSettingsAccess(bool))); + this->show(); +} + +void OpalLinkConfigurationWindow::allowSettingsAccess(bool enabled) +{ + ui.paramFileButton->setEnabled(enabled); + ui.servoConfigFileButton->setEnabled(enabled); +} diff --git a/src/ui/OpalLinkConfigurationWindow.h b/src/ui/OpalLinkConfigurationWindow.h new file mode 100644 index 000000000..a26e0b9bf --- /dev/null +++ b/src/ui/OpalLinkConfigurationWindow.h @@ -0,0 +1,28 @@ +#ifndef OPALLINKCONFIGURATIONWINDOW_H +#define OPALLINKCONFIGURATIONWINDOW_H + +#include +#include + +#include "LinkInterface.h" +#include "ui_OpalLinkSettings.h" +#include "OpalLink.h" + +class OpalLinkConfigurationWindow : public QWidget +{ +Q_OBJECT +public: + explicit OpalLinkConfigurationWindow(OpalLink* link, QWidget *parent = 0, Qt::WindowFlags flags = Qt::Sheet); + +signals: + +public slots: + + void allowSettingsAccess(bool enabled); + +private: + Ui::OpalLinkSettings ui; + OpalLink* link; +}; + +#endif // OPALLINKCONFIGURATIONWINDOW_H diff --git a/src/ui/OpalLinkSettings.ui b/src/ui/OpalLinkSettings.ui new file mode 100644 index 000000000..8fd6796fb --- /dev/null +++ b/src/ui/OpalLinkSettings.ui @@ -0,0 +1,173 @@ + + + OpalLinkSettings + + + + 0 + 0 + 537 + 250 + + + + OpalLink Configuration + + + + 6 + + + + + Model Instance ID + + + + + + + Opal-RT Parameter File + + + + + + + Servo Configuration File + + + + + + + Qt::Vertical + + + + 431 + 47 + + + + + + + + + + + + + + + + + + + + + + false + + + Change + + + + :/images/status/folder-open.svg:/images/status/folder-open.svg + + + + + + + false + + + Change + + + + :/images/status/folder-open.svg:/images/status/folder-open.svg + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 101 + + + 200 + + + 101 + + + + + + + + + Delete + + + Delete this link + + + + + Connect + + + Connect this link + + + + + Close + + + Close the configuration window + + + + + + + + + actionClose + triggered() + OpalLinkSettings + close() + + + -1 + -1 + + + 224 + 195 + + + + + -- 2.22.0