diff --git a/ground/openpilotgcs/src/plugins/config/ccpm.ui b/ground/openpilotgcs/src/plugins/config/ccpm.ui
index ee28ad4f0..cfc6846a7 100644
--- a/ground/openpilotgcs/src/plugins/config/ccpm.ui
+++ b/ground/openpilotgcs/src/plugins/config/ccpm.ui
@@ -126,7 +126,7 @@ QGroupBox::title {
- Outputs
+ Motor outputs
@@ -266,7 +266,7 @@ QGroupBox::title {
- Swashplate Outputs
+ Swashplate outputs
diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configccpmwidget.cpp b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configccpmwidget.cpp
index 2262316e2..2fc5c3453 100644
--- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configccpmwidget.cpp
+++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configccpmwidget.cpp
@@ -155,9 +155,10 @@ ConfigCcpmWidget::ConfigCcpmWidget(QWidget *parent) : VehicleConfig(parent)
m_ccpm->ccpmServoZChannel->setCurrentIndex(0);
QStringList Types;
- Types << QString::fromUtf8("CCPM 2 Servo 90º") << QString::fromUtf8("CCPM 3 Servo 90º") <<
- QString::fromUtf8("CCPM 4 Servo 90º") << QString::fromUtf8("CCPM 3 Servo 120º") <<
- QString::fromUtf8("CCPM 3 Servo 140º") << QString::fromUtf8("FP 2 Servo 90º") <<
+ Types << QString::fromUtf8("CCPM 2 Servo 90º") << QString::fromUtf8("CCPM 3 Servo 90º") << QString::fromUtf8("CCPM 4 Servo 90º") <<
+ QString::fromUtf8("CCPM 3 Servo 120º") << QString::fromUtf8("CCPM 3 Servo 140º") <<
+ QString::fromUtf8("FP 2 Servo 90º") <<
+ QString::fromUtf8("Coax 2 Servo 90º") <<
QString::fromUtf8("Custom - User Angles") << QString::fromUtf8("Custom - Advanced Settings");
m_ccpm->ccpmType->addItems(Types);
m_ccpm->ccpmType->setCurrentIndex(m_ccpm->ccpmType->count() - 1);
@@ -287,7 +288,6 @@ QStringList ConfigCcpmWidget::getChannelDescriptions()
void ConfigCcpmWidget::UpdateType()
{
int TypeInt,SingleServoIndex,NumServosDefined;
- QString TypeText;
double AdjustmentAngle=0;
SetUIComponentVisibilities();
@@ -327,8 +327,8 @@ void ConfigCcpmWidget::UpdateType()
NumServosDefined=4;
//set values for pre defined heli types
- if (TypeText.compare(QString::fromUtf8("CCPM 2 Servo 90º"), Qt::CaseInsensitive)==0)
- {
+ if (TypeText.compare(QString::fromUtf8("CCPM 2 Servo 90º"), Qt::CaseInsensitive)==0)
+ {
m_ccpm->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_ccpm->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360));
m_ccpm->ccpmAngleY->setValue(0);
@@ -342,9 +342,9 @@ void ConfigCcpmWidget::UpdateType()
//m_ccpm->ccpmCorrectionAngle->setValue(0);
NumServosDefined=2;
- }
- if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 90º"), Qt::CaseInsensitive)==0)
- {
+ }
+ else if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 90º"), Qt::CaseInsensitive)==0)
+ {
m_ccpm->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_ccpm->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360));
m_ccpm->ccpmAngleY->setValue(fmod(AdjustmentAngle + 180,360));
@@ -355,9 +355,9 @@ void ConfigCcpmWidget::UpdateType()
//m_ccpm->ccpmCorrectionAngle->setValue(0);
NumServosDefined=3;
- }
- if (TypeText.compare(QString::fromUtf8("CCPM 4 Servo 90º"), Qt::CaseInsensitive)==0)
- {
+ }
+ else if (TypeText.compare(QString::fromUtf8("CCPM 4 Servo 90º"), Qt::CaseInsensitive)==0)
+ {
m_ccpm->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_ccpm->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360));
m_ccpm->ccpmAngleY->setValue(fmod(AdjustmentAngle + 180,360));
@@ -367,9 +367,9 @@ void ConfigCcpmWidget::UpdateType()
m_ccpm->ccpmSingleServo->setCurrentIndex(0);
NumServosDefined=4;
- }
- if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 120º"), Qt::CaseInsensitive)==0)
- {
+ }
+ else if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 120º"), Qt::CaseInsensitive)==0)
+ {
m_ccpm->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_ccpm->ccpmAngleX->setValue(fmod(AdjustmentAngle + 120,360));
m_ccpm->ccpmAngleY->setValue(fmod(AdjustmentAngle + 240,360));
@@ -380,9 +380,9 @@ void ConfigCcpmWidget::UpdateType()
//m_ccpm->ccpmCorrectionAngle->setValue(0);
NumServosDefined=3;
- }
- if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 140º"), Qt::CaseInsensitive)==0)
- {
+ }
+ else if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 140º"), Qt::CaseInsensitive)==0)
+ {
m_ccpm->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_ccpm->ccpmAngleX->setValue(fmod(AdjustmentAngle + 140,360));
m_ccpm->ccpmAngleY->setValue(fmod(AdjustmentAngle + 220,360));
@@ -393,9 +393,9 @@ void ConfigCcpmWidget::UpdateType()
//m_ccpm->ccpmCorrectionAngle->setValue(0);
NumServosDefined=3;
- }
- if (TypeText.compare(QString::fromUtf8("FP 2 Servo 90º"), Qt::CaseInsensitive)==0)
- {
+ }
+ else if (TypeText.compare(QString::fromUtf8("FP 2 Servo 90º"), Qt::CaseInsensitive)==0)
+ {
m_ccpm->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_ccpm->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360));
m_ccpm->ccpmAngleY->setValue(0);
@@ -416,7 +416,42 @@ void ConfigCcpmWidget::UpdateType()
//m_ccpm->customThrottleCurve2Value->setVisible(0);
//m_ccpm->label_41->setVisible(0);
NumServosDefined=2;
- }
+ }
+ else if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive)==0)
+ {
+ m_ccpm->ccpmAngleW->setValue(AdjustmentAngle + 0);
+ m_ccpm->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360));
+ m_ccpm->ccpmAngleY->setValue(0);
+ m_ccpm->ccpmAngleZ->setValue(0);
+ m_ccpm->ccpmAngleY->setEnabled(0);
+ m_ccpm->ccpmAngleZ->setEnabled(0);
+ m_ccpm->ccpmServoYChannel->setCurrentIndex(0);
+ m_ccpm->ccpmServoZChannel->setCurrentIndex(0);
+ m_ccpm->ccpmServoYChannel->setEnabled(0);
+ m_ccpm->ccpmServoZChannel->setEnabled(0);
+ //m_ccpm->ccpmCorrectionAngle->setValue(0);
+
+ m_ccpm->ccpmCollectivespinBox->setEnabled(0);
+ m_ccpm->ccpmCollectiveSlider->setEnabled(0);
+ m_ccpm->ccpmCollectivespinBox->setValue(0);
+ m_ccpm->ccpmCollectiveSlider->setValue(0);
+ m_ccpm->PitchCurve->setVisible(0);
+ //m_ccpm->customThrottleCurve2Value->setVisible(0);
+ //m_ccpm->label_41->setVisible(0);
+ NumServosDefined=2;
+
+ }
+
+ //Set the text of the motor boxes
+ if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive)==0)
+ {
+ m_ccpm->ccpmEngineLabel->setText("CW motor");
+ m_ccpm->ccpmTailLabel->setText("CCW motor");
+ }
+ else{
+ m_ccpm->ccpmEngineLabel->setText("Engine");
+ m_ccpm->ccpmTailLabel->setText("Tail rotor");
+ }
//set the visibility of the swashplate servo selection boxes
m_ccpm->ccpmServoWLabel->setVisible(NumServosDefined>=1);
@@ -445,9 +480,6 @@ void ConfigCcpmWidget::UpdateType()
m_ccpm->ccpmAdvancedSettingsTable->verticalHeader()->width())/6);
}
-
-
-
//update UI
ccpmSwashplateUpdate();
@@ -630,25 +662,40 @@ void ConfigCcpmWidget::UpdateMixer()
//go through the user data and update the mixer matrix
for (i=0;i<6;i++)
{
- if ((MixerChannelData[i]>0)&&((ThisEnable[i])||(i<2)))
+ if ((MixerChannelData[i]>0) && ((ThisEnable[i])||(i<2)))
{
m_ccpm->ccpmAdvancedSettingsTable->item(i,0)->setText(QString("%1").arg( MixerChannelData[i] ));
- //config the vector
- if (i==0)
- {//motor-engine
+
+ //Generate the mixer vector
+ if (i==0)
+ {//main motor-engine
m_ccpm->ccpmAdvancedSettingsTable->item(i,1)->setText(QString("%1").arg(127));//ThrottleCurve1
m_ccpm->ccpmAdvancedSettingsTable->item(i,2)->setText(QString("%1").arg(0));//ThrottleCurve2
m_ccpm->ccpmAdvancedSettingsTable->item(i,3)->setText(QString("%1").arg(0));//Roll
m_ccpm->ccpmAdvancedSettingsTable->item(i,4)->setText(QString("%1").arg(0));//Pitch
- m_ccpm->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(0));//Yaw
+
+ if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive)==0)
+ m_ccpm->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(-127));//Yaw
+ else
+ m_ccpm->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(0));//Yaw
+
}
if (i==1)
- {//tailrotor
- m_ccpm->ccpmAdvancedSettingsTable->item(i,1)->setText(QString("%1").arg(0));//ThrottleCurve1
+ {//tailrotor --or-- counter-clockwise motor
+ if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive)==0)
+ {
+ m_ccpm->ccpmAdvancedSettingsTable->item(i,1)->setText(QString("%1").arg(127));//ThrottleCurve1
+ m_ccpm->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(127));//Yaw
+ }
+ else{
+ m_ccpm->ccpmAdvancedSettingsTable->item(i,1)->setText(QString("%1").arg(0));//ThrottleCurve1
+ m_ccpm->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(127));//Yaw
+ }
+
m_ccpm->ccpmAdvancedSettingsTable->item(i,2)->setText(QString("%1").arg(0));//ThrottleCurve2
m_ccpm->ccpmAdvancedSettingsTable->item(i,3)->setText(QString("%1").arg(0));//Roll
m_ccpm->ccpmAdvancedSettingsTable->item(i,4)->setText(QString("%1").arg(0));//Pitch
- m_ccpm->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(127));//Yaw
+
}
if (i>1)
{//Swashplate
@@ -915,12 +962,20 @@ void ConfigCcpmWidget::setMixer()
{
if (MixerChannelData[i]>0)
{
- //set the mixer type
- *(mixerTypes[MixerChannelData[i] - 1]) = i==0 ?
- MixerSettings::MIXER1TYPE_MOTOR :
- MixerSettings::MIXER1TYPE_SERVO;
+ //Set the mixer type. If Coax, then first two are motors. Otherwise, only first is motor
+ if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive)==0)
+ {
+ *(mixerTypes[MixerChannelData[i] - 1]) = i > 1 ?
+ MixerSettings::MIXER1TYPE_SERVO :
+ MixerSettings::MIXER1TYPE_MOTOR;
+ }
+ else{
+ *(mixerTypes[MixerChannelData[i] - 1]) = i > 0 ?
+ MixerSettings::MIXER1TYPE_SERVO :
+ MixerSettings::MIXER1TYPE_MOTOR;
+ }
- //config the vector
+ //Configure the vector
for (j=0;j<5;j++)
mixers[MixerChannelData[i] - 1][j] = m_ccpm->ccpmAdvancedSettingsTable->item(i,j+1)->text().toInt();
}
@@ -1455,60 +1510,64 @@ bool ConfigCcpmWidget::throwConfigError(QString airframeType)
bool error = false;
- if((m_ccpm->ccpmServoWChannel->currentIndex()==0)&&(m_ccpm->ccpmServoWChannel->isEnabled()))
+ if((m_ccpm->ccpmServoWChannel->currentIndex()==0) && (m_ccpm->ccpmServoWChannel->isEnabled()))
{
- m_ccpm->ccpmServoWLabel->setText("Servo W");
+ m_ccpm->ccpmServoWLabel->setText("" + m_ccpm->ccpmServoWLabel->text() + "");
error = true;
}
else
{
- m_ccpm->ccpmServoWLabel->setText("Servo W");
- }
- if((m_ccpm->ccpmServoXChannel->currentIndex()==0)&&(m_ccpm->ccpmServoXChannel->isEnabled()))
- {
- m_ccpm->ccpmServoXLabel->setText("Servo X");
- error = true;
- }
- else
- {
- m_ccpm->ccpmServoXLabel->setText("Servo X");
- }
- if((m_ccpm->ccpmServoYChannel->currentIndex()==0)&&(m_ccpm->ccpmServoYChannel->isEnabled()))
- {
- m_ccpm->ccpmServoYLabel->setText("Servo Y");
- error = true;
- }
- else
- {
- m_ccpm->ccpmServoYLabel->setText("Servo Y");
- }
- if((m_ccpm->ccpmServoZChannel->currentIndex()==0)&&(m_ccpm->ccpmServoZChannel->isEnabled()))
- {
- m_ccpm->ccpmServoZLabel->setText("Servo Z");
- error = true;
- }
- else
- {
- m_ccpm->ccpmServoZLabel->setText("Servo Z");
+ m_ccpm->ccpmServoWLabel->setText(QTextEdit(m_ccpm->ccpmServoWLabel->text()).toPlainText());
}
- if((m_ccpm->ccpmEngineChannel->currentIndex()==0)&&(m_ccpm->ccpmEngineChannel->isEnabled()))
+ if((m_ccpm->ccpmServoXChannel->currentIndex()==0) && (m_ccpm->ccpmServoXChannel->isEnabled()))
{
- m_ccpm->ccpmEngineLabel->setText("Engine");
- }
- else
- {
- m_ccpm->ccpmEngineLabel->setText("Engine");
- }
-
- if((m_ccpm->ccpmTailChannel->currentIndex()==0)&&(m_ccpm->ccpmTailChannel->isEnabled()))
- {
- m_ccpm->ccpmTailLabel->setText("Tail Rotor");
+ m_ccpm->ccpmServoXLabel->setText("" + m_ccpm->ccpmServoXLabel->text() + "");
error = true;
}
else
{
- m_ccpm->ccpmTailLabel->setText("Tail Rotor");
+ m_ccpm->ccpmServoXLabel->setText(QTextEdit(m_ccpm->ccpmServoXLabel->text()).toPlainText());
+ }
+
+ if((m_ccpm->ccpmServoYChannel->currentIndex()==0) && (m_ccpm->ccpmServoYChannel->isEnabled()))
+ {
+ m_ccpm->ccpmServoYLabel->setText("" + m_ccpm->ccpmServoYLabel->text() + "");
+ error = true;
+ }
+ else
+ {
+ m_ccpm->ccpmServoYLabel->setText(QTextEdit(m_ccpm->ccpmServoYLabel->text()).toPlainText());
+ }
+
+ if((m_ccpm->ccpmServoZChannel->currentIndex()==0) && (m_ccpm->ccpmServoZChannel->isEnabled()))
+ {
+ m_ccpm->ccpmServoZLabel->setText("" + m_ccpm->ccpmServoZLabel->text()+ "");
+ error = true;
+ }
+ else
+ {
+ m_ccpm->ccpmServoZLabel->setText(QTextEdit(m_ccpm->ccpmServoZLabel->text()).toPlainText());
+ }
+
+ if((m_ccpm->ccpmEngineChannel->currentIndex()==0) && (m_ccpm->ccpmEngineChannel->isEnabled()))
+ {
+ m_ccpm->ccpmEngineLabel->setText("" + m_ccpm->ccpmEngineLabel->text() + "");
+ }
+ else
+ {
+ m_ccpm->ccpmEngineLabel->setText(QTextEdit(m_ccpm->ccpmEngineLabel->text()).toPlainText());
+ }
+
+ if((m_ccpm->ccpmTailChannel->currentIndex()==0) && (m_ccpm->ccpmTailChannel->isEnabled()))
+ {
+ m_ccpm->ccpmTailLabel->setText("" + m_ccpm->ccpmTailLabel->text() + "");
+ error = true;
+ }
+ else
+ {
+ m_ccpm->ccpmTailLabel->setText(QTextEdit(m_ccpm->ccpmTailLabel->text()).toPlainText());
+
}
return error;
diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configccpmwidget.h b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configccpmwidget.h
index a903afa5b..2d52eed8f 100644
--- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configccpmwidget.h
+++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configccpmwidget.h
@@ -72,6 +72,8 @@ private:
QGraphicsEllipseItem *ServosTextCircles[CCPM_MAX_SWASH_SERVOS];
QSpinBox *SwashLvlSpinBoxes[CCPM_MAX_SWASH_SERVOS];
+ QString TypeText;
+
bool SwashLvlConfigurationInProgress;
UAVObject::Metadata SwashLvlaccInitialData;
int SwashLvlState;