diff --git a/ground/openpilotgcs/src/plugins/config/airframe_multirotor.ui b/ground/openpilotgcs/src/plugins/config/airframe_multirotor.ui
index 7b8bbb11c..55df54cfd 100644
--- a/ground/openpilotgcs/src/plugins/config/airframe_multirotor.ui
+++ b/ground/openpilotgcs/src/plugins/config/airframe_multirotor.ui
@@ -525,28 +525,38 @@ Typical value is 50% for + or X configuration on quads.
9
-
-
+
QLayout::SetMaximumSize
-
- QFormLayout::AllNonFixedFieldsGrow
-
- 10
+ 0
-
-
-
+
-
+
-
+
0
0
+
+
+ 80
+ 0
+
+
+
+ Select output channel for Accessory0 RcInput
+
+
+
+ -
+
90
- 16
+ 0
@@ -557,7 +567,7 @@ font: bold 12px;
margin:1px;
- RC Input
+ Accessory1
Qt::AlignCenter
@@ -625,8 +635,37 @@ margin:1px;
- -
-
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 90
+ 16
+
+
+
+ background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
+color: rgb(255, 255, 255);
+border-radius: 5;
+font: bold 12px;
+margin:1px;
+
+
+ RC Input
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
0
@@ -640,30 +679,7 @@ margin:1px;
- Select output channel for Accessory0 RcInput
-
-
-
- -
-
-
-
- 90
- 0
-
-
-
- background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
-color: rgb(255, 255, 255);
-border-radius: 5;
-font: bold 12px;
-margin:1px;
-
-
- Accessory1
-
-
- Qt::AlignCenter
+ Select output channel for Accessory2 RcInput
@@ -709,22 +725,44 @@ margin:1px;
- -
-
-
-
- 0
- 0
-
-
-
-
- 80
- 0
-
-
+
-
+
- Select output channel for Accessory2 RcInput
+ RcOutput curve
+
+
+ background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
+color: rgb(255, 255, 255);
+border-radius: 5;
+font: bold 12px;
+margin:1px;
+
+
+ Curve
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Select output curve for Accessory0 RcInput
+
+
+
+ -
+
+
+ Select output curve for Accessory1 RcInput
+
+
+
+ -
+
+
+ Select output curve for Accessory2 RcInput
diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp
index ac95e4a30..ac2c3b800 100644
--- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp
+++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp
@@ -131,6 +131,13 @@ ConfigMultiRotorWidget::ConfigMultiRotorWidget(QWidget *parent) :
populateChannelComboBoxes();
+ QStringList mixerCurveList;
+ mixerCurveList << "Curve1" << "Curve2";
+ m_aircraft->rcOutputCurveBox1->addItems(mixerCurveList);
+ m_aircraft->rcOutputCurveBox2->addItems(mixerCurveList);
+ m_aircraft->rcOutputCurveBox3->addItems(mixerCurveList);
+
+
// Setup the Multirotor picture in the Quad settings interface
m_aircraft->quadShape->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_aircraft->quadShape->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -162,6 +169,7 @@ ConfigMultiRotorWidget::ConfigMultiRotorWidget(QWidget *parent) :
m_aircraft->multiThrottleCurve->setXAxisLabel(tr("Input"));
m_aircraft->multiThrottleCurve->setYAxisLabel(tr("Output"));
+
updateEnableControls();
}
@@ -333,6 +341,9 @@ void ConfigMultiRotorWidget::registerWidgets(ConfigTaskWidget &parent)
parent.addWidget(m_aircraft->rcOutputChannelBox1);
parent.addWidget(m_aircraft->rcOutputChannelBox2);
parent.addWidget(m_aircraft->rcOutputChannelBox3);
+ parent.addWidget(m_aircraft->rcOutputCurveBox1);
+ parent.addWidget(m_aircraft->rcOutputCurveBox2);
+ parent.addWidget(m_aircraft->rcOutputCurveBox3);
}
void ConfigMultiRotorWidget::resetActuators(GUIConfigDataUnion *configData)
@@ -366,16 +377,31 @@ void ConfigMultiRotorWidget::resetRcOutputs(GUIConfigDataUnion *configData)
void ConfigMultiRotorWidget::resetMixers()
{
UAVDataObject *mixer = dynamic_cast(getObjectManager()->getObject(QString("MixerSettings")));
-
Q_ASSERT(mixer);
for (int channel = 0; channel < (int)ConfigMultiRotorWidget::CHANNEL_NUMELEM; channel++) {
- setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_DISABLED);
- setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE1, 0);
- setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE2, 0);
- setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL, 0);
- setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_PITCH, 0);
- setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, 0);
+ resetMixerVector(mixer, channel);
+ }
+}
+
+void ConfigMultiRotorWidget::updateRcCurvesUsed()
+{
+ UAVDataObject *mixer = dynamic_cast(getObjectManager()->getObject(QString("MixerSettings")));
+ Q_ASSERT(mixer);
+
+ setComboCurrentIndex(m_aircraft->rcOutputCurveBox1, VehicleConfig::MIXER_THROTTLECURVE1);
+ setComboCurrentIndex(m_aircraft->rcOutputCurveBox2, VehicleConfig::MIXER_THROTTLECURVE1);
+ setComboCurrentIndex(m_aircraft->rcOutputCurveBox3, VehicleConfig::MIXER_THROTTLECURVE1);
+
+ for (int channel = 0; channel < (int)ConfigMultiRotorWidget::CHANNEL_NUMELEM; channel++) {
+ QString mixerType = getMixerType(mixer, channel);
+ if (mixerType == "Accessory0" && getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE2)) {
+ setComboCurrentIndex(m_aircraft->rcOutputCurveBox1, VehicleConfig::MIXER_THROTTLECURVE2);
+ } else if (mixerType == "Accessory1" && getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE2)) {
+ setComboCurrentIndex(m_aircraft->rcOutputCurveBox2, VehicleConfig::MIXER_THROTTLECURVE2);
+ } else if (mixerType == "Accessory2" && getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE2)) {
+ setComboCurrentIndex(m_aircraft->rcOutputCurveBox3, VehicleConfig::MIXER_THROTTLECURVE2);
+ }
}
}
@@ -498,6 +524,8 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType)
setComboCurrentIndex(m_aircraft->rcOutputChannelBox2, multi.Accessory1);
setComboCurrentIndex(m_aircraft->rcOutputChannelBox3, multi.Accessory2);
+ updateRcCurvesUsed();
+
// Now, read mixing values stored on board and applies values on sliders.
m_aircraft->mrPitchMixLevel->setValue(getMixerValue(mixer, "MixerValuePitch"));
m_aircraft->mrRollMixLevel->setValue(getMixerValue(mixer, "MixerValueRoll"));
@@ -877,26 +905,41 @@ void ConfigMultiRotorWidget::setupRcOutputs(QList rcOutputList)
UAVDataObject *mixer = dynamic_cast(getObjectManager()->getObject(QString("MixerSettings")));
Q_ASSERT(mixer);
+ int curveAccessory0 = m_aircraft->rcOutputCurveBox1->currentIndex();
+ int curveAccessory1 = m_aircraft->rcOutputCurveBox2->currentIndex();
+ int curveAccessory2 = m_aircraft->rcOutputCurveBox3->currentIndex();
+
foreach(QString rc_output, rcOutputList) {
int index = rcList.takeFirst()->currentIndex();
-
if (rc_output == QString("Accessory0")) {
configData.multi.Accessory0 = index;
if (index) {
setMixerType(mixer, index - 1, VehicleConfig::MIXERTYPE_ACCESSORY0);
- setMixerVectorValue(mixer, index - 1, VehicleConfig::MIXERVECTOR_THROTTLECURVE2, 127);
+ if (curveAccessory0) {
+ setMixerVectorValue(mixer, index - 1, VehicleConfig::MIXERVECTOR_THROTTLECURVE2 , 127);
+ } else {
+ setMixerVectorValue(mixer, index - 1, VehicleConfig::MIXERVECTOR_THROTTLECURVE1 , 127);
+ }
}
} else if (rc_output == QString("Accessory1")) {
configData.multi.Accessory1 = index;
if (index) {
setMixerType(mixer, index - 1, VehicleConfig::MIXERTYPE_ACCESSORY1);
- setMixerVectorValue(mixer, index - 1, VehicleConfig::MIXERVECTOR_THROTTLECURVE2, 127);
+ if (curveAccessory1) {
+ setMixerVectorValue(mixer, index - 1, VehicleConfig::MIXERVECTOR_THROTTLECURVE2 , 127);
+ } else {
+ setMixerVectorValue(mixer, index - 1, VehicleConfig::MIXERVECTOR_THROTTLECURVE1 , 127);
+ }
}
} else if (rc_output == QString("Accessory2")) {
configData.multi.Accessory2 = index;
if (index) {
setMixerType(mixer, index - 1, VehicleConfig::MIXERTYPE_ACCESSORY2);
- setMixerVectorValue(mixer, index - 1, VehicleConfig::MIXERVECTOR_THROTTLECURVE2, 127);
+ if (curveAccessory2) {
+ setMixerVectorValue(mixer, index - 1, VehicleConfig::MIXERVECTOR_THROTTLECURVE2 , 127);
+ } else {
+ setMixerVectorValue(mixer, index - 1, VehicleConfig::MIXERVECTOR_THROTTLECURVE1 , 127);
+ }
}
}
}
diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h
index 8140903d8..488fd5cce 100644
--- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h
+++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h
@@ -77,7 +77,7 @@ private:
void setupQuadMotor(int channel, double roll, double pitch, double yaw);
void setYawMixLevel(int);
-
+ void updateRcCurvesUsed();
void updateAirframe(QString multiRotorType);
void setupEnabledControls(QString multiRotorType);