8 changed files with 3241 additions and 21 deletions
@ -0,0 +1,57 @@
@@ -0,0 +1,57 @@
|
||||
#include "QGCConfigView.h" |
||||
#include "ui_QGCConfigView.h" |
||||
#include "UASManager.h" |
||||
#include "QGCPX4VehicleConfig.h" |
||||
#include "QGCVehicleConfig.h" |
||||
#include "QGCPX4VehicleConfig.h" |
||||
|
||||
QGCConfigView::QGCConfigView(QWidget *parent) : |
||||
QWidget(parent), |
||||
ui(new Ui::QGCConfigView), |
||||
currUAS(NULL) |
||||
{ |
||||
ui->setupUi(this); |
||||
|
||||
connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(activeUASChanged(UASInterface*))); |
||||
|
||||
if (ui->waitingLabel) { |
||||
ui->gridLayout->removeWidget(ui->waitingLabel); |
||||
delete ui->waitingLabel; |
||||
ui->waitingLabel = NULL; |
||||
} |
||||
ui->gridLayout->addWidget(new QGCPX4VehicleConfig()); |
||||
} |
||||
|
||||
QGCConfigView::~QGCConfigView() |
||||
{ |
||||
delete ui; |
||||
} |
||||
|
||||
void QGCConfigView::activeUASChanged(UASInterface* uas) |
||||
{ |
||||
if (currUAS == uas) |
||||
return; |
||||
|
||||
if (ui->waitingLabel) { |
||||
ui->gridLayout->removeWidget(ui->waitingLabel); |
||||
delete ui->waitingLabel; |
||||
ui->waitingLabel = NULL; |
||||
} |
||||
|
||||
if (currUAS && currUAS->getAutopilotType() != uas->getAutopilotType()) { |
||||
foreach (QObject* obj, ui->gridLayout->children()) { |
||||
QWidget* w = dynamic_cast<QWidget*>(obj); |
||||
if (w) { |
||||
ui->gridLayout->removeWidget(w); |
||||
delete obj; |
||||
} |
||||
} |
||||
} |
||||
|
||||
switch (uas->getAutopilotType()) { |
||||
case MAV_AUTOPILOT_PX4: |
||||
ui->gridLayout->addWidget(new QGCPX4VehicleConfig()); |
||||
default: |
||||
ui->gridLayout->addWidget(new QGCVehicleConfig()); |
||||
} |
||||
} |
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
#ifndef QGCCONFIGVIEW_H |
||||
#define QGCCONFIGVIEW_H |
||||
|
||||
#include <QWidget> |
||||
#include <UASInterface.h> |
||||
|
||||
namespace Ui { |
||||
class QGCConfigView; |
||||
} |
||||
|
||||
class QGCConfigView : public QWidget |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
explicit QGCConfigView(QWidget *parent = 0); |
||||
~QGCConfigView(); |
||||
|
||||
public slots: |
||||
void activeUASChanged(UASInterface* uas); |
||||
|
||||
private: |
||||
Ui::QGCConfigView *ui; |
||||
UASInterface* currUAS; |
||||
|
||||
}; |
||||
|
||||
#endif // QGCCONFIGVIEW_H
|
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<ui version="4.0"> |
||||
<class>QGCConfigView</class> |
||||
<widget class="QWidget" name="QGCConfigView"> |
||||
<property name="geometry"> |
||||
<rect> |
||||
<x>0</x> |
||||
<y>0</y> |
||||
<width>400</width> |
||||
<height>300</height> |
||||
</rect> |
||||
</property> |
||||
<property name="windowTitle"> |
||||
<string>Form</string> |
||||
</property> |
||||
<layout class="QGridLayout" name="gridLayout"> |
||||
<item row="0" column="0"> |
||||
<widget class="QLabel" name="waitingLabel"> |
||||
<property name="text"> |
||||
<string>Waiting for connection...</string> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
</layout> |
||||
</widget> |
||||
<resources/> |
||||
<connections/> |
||||
</ui> |
@ -0,0 +1,202 @@
@@ -0,0 +1,202 @@
|
||||
#ifndef QGCPX4VehicleConfig_H |
||||
#define QGCPX4VehicleConfig_H |
||||
|
||||
#include <QWidget> |
||||
#include <QTimer> |
||||
#include <QList> |
||||
#include <QGroupBox> |
||||
#include <QPushButton> |
||||
|
||||
#include "QGCToolWidget.h" |
||||
#include "UASInterface.h" |
||||
|
||||
namespace Ui { |
||||
class QGCPX4VehicleConfig; |
||||
} |
||||
|
||||
class QGCPX4VehicleConfig : public QWidget |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
explicit QGCPX4VehicleConfig(QWidget *parent = 0); |
||||
~QGCPX4VehicleConfig(); |
||||
|
||||
enum RC_MODE { |
||||
RC_MODE_1 = 1, |
||||
RC_MODE_2 = 2, |
||||
RC_MODE_3 = 3, |
||||
RC_MODE_4 = 4, |
||||
RC_MODE_NONE = 5 |
||||
}; |
||||
|
||||
public slots: |
||||
void rcMenuButtonClicked(); |
||||
void sensorMenuButtonClicked(); |
||||
void generalMenuButtonClicked(); |
||||
void advancedMenuButtonClicked(); |
||||
|
||||
/** Set the MAV currently being calibrated */ |
||||
void setActiveUAS(UASInterface* active); |
||||
/** Fallback function, automatically called by loadConfig() upon failure to find and xml file*/ |
||||
void loadQgcConfig(bool primary); |
||||
/** Load configuration from xml file */ |
||||
void loadConfig(); |
||||
/** Start the RC calibration routine */ |
||||
void startCalibrationRC(); |
||||
/** Stop the RC calibration routine */ |
||||
void stopCalibrationRC(); |
||||
/** Start/stop the RC calibration routine */ |
||||
void toggleCalibrationRC(bool enabled); |
||||
/** Set trim positions */ |
||||
void setTrimPositions(); |
||||
/** Detect which channels need to be inverted */ |
||||
void detectChannelInversion(); |
||||
/** Change the mode setting of the control inputs */ |
||||
void setRCModeIndex(int newRcMode); |
||||
/** Render the data updated */ |
||||
void updateView(); |
||||
|
||||
void updateMinMax(); |
||||
|
||||
/** Set the RC channel */ |
||||
void setRollChan(int channel) { |
||||
rcMapping[0] = channel - 1; |
||||
updateInvertedCheckboxes(channel - 1); |
||||
} |
||||
/** Set the RC channel */ |
||||
void setPitchChan(int channel) { |
||||
rcMapping[1] = channel - 1; |
||||
updateInvertedCheckboxes(channel - 1); |
||||
} |
||||
/** Set the RC channel */ |
||||
void setYawChan(int channel) { |
||||
rcMapping[2] = channel - 1; |
||||
updateInvertedCheckboxes(channel - 1); |
||||
} |
||||
/** Set the RC channel */ |
||||
void setThrottleChan(int channel) { |
||||
rcMapping[3] = channel - 1; |
||||
updateInvertedCheckboxes(channel - 1); |
||||
} |
||||
/** Set the RC channel */ |
||||
void setModeChan(int channel) { |
||||
rcMapping[4] = channel - 1; |
||||
updateInvertedCheckboxes(channel - 1); |
||||
} |
||||
/** Set the RC channel */ |
||||
void setAux1Chan(int channel) { |
||||
rcMapping[5] = channel - 1; |
||||
updateInvertedCheckboxes(channel - 1); |
||||
} |
||||
/** Set the RC channel */ |
||||
void setAux2Chan(int channel) { |
||||
rcMapping[6] = channel - 1; |
||||
updateInvertedCheckboxes(channel - 1); |
||||
} |
||||
/** Set the RC channel */ |
||||
void setAux3Chan(int channel) { |
||||
rcMapping[7] = channel - 1; |
||||
updateInvertedCheckboxes(channel - 1); |
||||
} |
||||
|
||||
/** Set channel inversion status */ |
||||
void setRollInverted(bool inverted) { |
||||
rcRev[rcMapping[0]] = inverted; |
||||
} |
||||
/** Set channel inversion status */ |
||||
void setPitchInverted(bool inverted) { |
||||
rcRev[rcMapping[1]] = inverted; |
||||
} |
||||
/** Set channel inversion status */ |
||||
void setYawInverted(bool inverted) { |
||||
rcRev[rcMapping[2]] = inverted; |
||||
} |
||||
/** Set channel inversion status */ |
||||
void setThrottleInverted(bool inverted) { |
||||
rcRev[rcMapping[3]] = inverted; |
||||
} |
||||
/** Set channel inversion status */ |
||||
void setModeInverted(bool inverted) { |
||||
rcRev[rcMapping[4]] = inverted; |
||||
} |
||||
/** Set channel inversion status */ |
||||
void setAux1Inverted(bool inverted) { |
||||
rcRev[rcMapping[5]] = inverted; |
||||
} |
||||
/** Set channel inversion status */ |
||||
void setAux2Inverted(bool inverted) { |
||||
rcRev[rcMapping[6]] = inverted; |
||||
} |
||||
/** Set channel inversion status */ |
||||
void setAux3Inverted(bool inverted) { |
||||
rcRev[rcMapping[7]] = inverted; |
||||
} |
||||
|
||||
protected slots: |
||||
void menuButtonClicked(); |
||||
/** Reset the RC calibration */ |
||||
void resetCalibrationRC(); |
||||
/** Write the RC calibration */ |
||||
void writeCalibrationRC(); |
||||
/** Request the RC calibration */ |
||||
void requestCalibrationRC(); |
||||
/** Store all parameters in onboard EEPROM */ |
||||
void writeParameters(); |
||||
/** Receive remote control updates from MAV */ |
||||
void remoteControlChannelRawChanged(int chan, float val); |
||||
/** Parameter changed onboard */ |
||||
void parameterChanged(int uas, int component, QString parameterName, QVariant value); |
||||
void updateStatus(const QString& str); |
||||
void updateError(const QString& str); |
||||
void setRCType(int type); |
||||
/** Check timeouts */ |
||||
void checktimeOuts(); |
||||
/** Update checkbox status */ |
||||
void updateInvertedCheckboxes(int index); |
||||
|
||||
protected: |
||||
bool doneLoadingConfig; |
||||
UASInterface* mav; ///< The current MAV
|
||||
static const unsigned int chanMax = 8; ///< Maximum number of channels
|
||||
unsigned int chanCount; ///< Actual channels
|
||||
int rcType; ///< Type of the remote control
|
||||
quint64 rcTypeUpdateRequested; ///< Zero if not requested, non-zero if requested
|
||||
static const unsigned int rcTypeTimeout = 5000; ///< 5 seconds timeout, in milliseconds
|
||||
float rcMin[chanMax]; ///< Minimum values
|
||||
float rcMax[chanMax]; ///< Maximum values
|
||||
float rcTrim[chanMax]; ///< Zero-position (center for roll/pitch/yaw, 0 throttle for throttle)
|
||||
int rcMapping[chanMax]; ///< PWM to function mappings
|
||||
float rcScaling[chanMax]; ///< Scaling of channel input to control commands
|
||||
bool rcRev[chanMax]; ///< Channel reverse
|
||||
int rcValue[chanMax]; ///< Last values
|
||||
float rcRoll; ///< PPM input channel used as roll control input
|
||||
float rcPitch; ///< PPM input channel used as pitch control input
|
||||
float rcYaw; ///< PPM input channel used as yaw control input
|
||||
float rcThrottle; ///< PPM input channel used as throttle control input
|
||||
float rcMode; ///< PPM input channel used as mode switch control input
|
||||
float rcAux1; ///< PPM input channel used as aux 1 input
|
||||
float rcAux2; ///< PPM input channel used as aux 1 input
|
||||
float rcAux3; ///< PPM input channel used as aux 1 input
|
||||
bool rcCalChanged; ///< Set if the calibration changes (and needs to be written)
|
||||
bool changed; ///< Set if any of the input data changed
|
||||
QTimer updateTimer; ///< Controls update intervals
|
||||
enum RC_MODE rc_mode; ///< Mode of the remote control, according to usual convention
|
||||
QList<QGCToolWidget*> toolWidgets; ///< Configurable widgets
|
||||
bool calibrationEnabled; ///< calibration mode on / off
|
||||
|
||||
QMap<QString,QGCToolWidget*> paramToWidgetMap; ///< Holds the current active MAV's parameter widgets.
|
||||
QList<QWidget*> additionalTabs; ///< Stores additional tabs loaded for this vehicle/autopilot configuration. Used for cleaning up.
|
||||
QMap<QString,QGCToolWidget*> libParamToWidgetMap; ///< Holds the library parameter widgets
|
||||
QMap<QString,QMap<QString,QGCToolWidget*> > systemTypeToParamMap; ///< Holds all loaded MAV specific parameter widgets, for every MAV.
|
||||
QMap<QGCToolWidget*,QGroupBox*> toolToBoxMap; ///< Easy method of figuring out which QGroupBox is tied to which ToolWidget.
|
||||
QMap<QString,QString> paramTooltips; ///< Tooltips for the ? button next to a parameter.
|
||||
|
||||
private: |
||||
Ui::QGCPX4VehicleConfig *ui; |
||||
QMap<QPushButton*,QWidget*> buttonToWidgetMap; |
||||
signals: |
||||
void visibilityChanged(bool visible); |
||||
}; |
||||
|
||||
#endif // QGCPX4VehicleConfig_H
|
Loading…
Reference in new issue