1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-02 10:24:11 +01:00

OP-907 step 3: cleaned up vehicleconfig.h + related cleanups

This commit is contained in:
Philippe Renon 2013-04-03 01:42:42 +02:00
parent 3ab96ed3cc
commit 90b0c5ca21
12 changed files with 381 additions and 394 deletions

View File

@ -42,6 +42,71 @@
#define Pi 3.14159265358979323846 #define Pi 3.14159265358979323846
QStringList ConfigCcpmWidget::getChannelDescriptions()
{
int i;
QStringList channelDesc;
// init a channel_numelem list of channel desc defaults
for (i=0; i < (int)(ConfigCcpmWidget::CHANNEL_NUMELEM); i++)
{
channelDesc.append(QString("-"));
}
// get the gui config data
GUIConfigDataUnion configData = GetConfigData();
heliGUISettingsStruct heli = configData.heli;
if (heli.Throttle > 0)
channelDesc[heli.Throttle - 1] = QString("Throttle");
if (heli.Tail > 0)
channelDesc[heli.Tail - 1] = QString("Tail");
switch(heli.FirstServoIndex)
{
case 0: //front
if (heli.ServoIndexW > 0)
channelDesc[heli.ServoIndexW - 1] = QString("Elevator");
if (heli.ServoIndexX > 0)
channelDesc[heli.ServoIndexX - 1] = QString("Roll1");
if (heli.ServoIndexY > 0)
channelDesc[heli.ServoIndexY - 1] = QString("Roll2");
break;
case 1: //right
if (heli.ServoIndexW > 0)
channelDesc[heli.ServoIndexW - 1] = QString("ServoW");
if (heli.ServoIndexX > 0)
channelDesc[heli.ServoIndexX - 1] = QString("ServoX");
if (heli.ServoIndexY > 0)
channelDesc[heli.ServoIndexY - 1] = QString("ServoY");
break;
case 2: //rear
if (heli.ServoIndexW > 0)
channelDesc[heli.ServoIndexW - 1] = QString("Elevator");
if (heli.ServoIndexX > 0)
channelDesc[heli.ServoIndexX - 1] = QString("Roll1");
if (heli.ServoIndexY > 0)
channelDesc[heli.ServoIndexY - 1] = QString("Roll2");
break;
case 3: //left
if (heli.ServoIndexW > 0)
channelDesc[heli.ServoIndexW - 1] = QString("ServoW");
if (heli.ServoIndexX > 0)
channelDesc[heli.ServoIndexX - 1] = QString("ServoX");
if (heli.ServoIndexY > 0)
channelDesc[heli.ServoIndexY - 1] = QString("ServoY");
break;
}
if (heli.ServoIndexZ > 0)
channelDesc[heli.ServoIndexZ - 1] = QString("ServoZ");
return channelDesc;
}
ConfigCcpmWidget::ConfigCcpmWidget(QWidget *parent) : ConfigCcpmWidget::ConfigCcpmWidget(QWidget *parent) :
VehicleConfig(parent), m_aircraft(new Ui_CcpmConfigWidget()) VehicleConfig(parent), m_aircraft(new Ui_CcpmConfigWidget())
{ {
@ -210,7 +275,7 @@ void ConfigCcpmWidget::setupUI(QString frameType)
Q_UNUSED(frameType); Q_UNUSED(frameType);
} }
void ConfigCcpmWidget::ResetActuators(GUIConfigDataUnion* configData) void ConfigCcpmWidget::resetActuators(GUIConfigDataUnion *configData)
{ {
configData->heli.Throttle = 0; configData->heli.Throttle = 0;
configData->heli.Tail = 0; configData->heli.Tail = 0;
@ -220,197 +285,96 @@ void ConfigCcpmWidget::ResetActuators(GUIConfigDataUnion* configData)
configData->heli.ServoIndexZ = 0; configData->heli.ServoIndexZ = 0;
} }
QStringList ConfigCcpmWidget::getChannelDescriptions()
{
int i;
QStringList channelDesc;
// init a channel_numelem list of channel desc defaults
for (i=0; i < (int)(ConfigCcpmWidget::CHANNEL_NUMELEM); i++)
{
channelDesc.append(QString("-"));
}
// get the gui config data
GUIConfigDataUnion configData = GetConfigData();
heliGUISettingsStruct heli = configData.heli;
if (heli.Throttle > 0)
channelDesc[heli.Throttle - 1] = QString("Throttle");
if (heli.Tail > 0)
channelDesc[heli.Tail - 1] = QString("Tail");
switch(heli.FirstServoIndex)
{
case 0: //front
if (heli.ServoIndexW > 0)
channelDesc[heli.ServoIndexW - 1] = QString("Elevator");
if (heli.ServoIndexX > 0)
channelDesc[heli.ServoIndexX - 1] = QString("Roll1");
if (heli.ServoIndexY > 0)
channelDesc[heli.ServoIndexY - 1] = QString("Roll2");
break;
case 1: //right
if (heli.ServoIndexW > 0)
channelDesc[heli.ServoIndexW - 1] = QString("ServoW");
if (heli.ServoIndexX > 0)
channelDesc[heli.ServoIndexX - 1] = QString("ServoX");
if (heli.ServoIndexY > 0)
channelDesc[heli.ServoIndexY - 1] = QString("ServoY");
break;
case 2: //rear
if (heli.ServoIndexW > 0)
channelDesc[heli.ServoIndexW - 1] = QString("Elevator");
if (heli.ServoIndexX > 0)
channelDesc[heli.ServoIndexX - 1] = QString("Roll1");
if (heli.ServoIndexY > 0)
channelDesc[heli.ServoIndexY - 1] = QString("Roll2");
break;
case 3: //left
if (heli.ServoIndexW > 0)
channelDesc[heli.ServoIndexW - 1] = QString("ServoW");
if (heli.ServoIndexX > 0)
channelDesc[heli.ServoIndexX - 1] = QString("ServoX");
if (heli.ServoIndexY > 0)
channelDesc[heli.ServoIndexY - 1] = QString("ServoY");
break;
}
if (heli.ServoIndexZ > 0)
channelDesc[heli.ServoIndexZ - 1] = QString("ServoZ");
return channelDesc;
}
void ConfigCcpmWidget::UpdateType() void ConfigCcpmWidget::UpdateType()
{ {
int TypeInt,SingleServoIndex,NumServosDefined; int TypeInt, SingleServoIndex, NumServosDefined;
double AdjustmentAngle=0; double AdjustmentAngle = 0;
SetUIComponentVisibilities(); SetUIComponentVisibilities();
TypeInt = m_aircraft->ccpmType->count() - m_aircraft->ccpmType->currentIndex()-1; TypeInt = m_aircraft->ccpmType->count() - m_aircraft->ccpmType->currentIndex() - 1;
TypeText = m_aircraft->ccpmType->currentText(); TypeText = m_aircraft->ccpmType->currentText();
SingleServoIndex = m_aircraft->ccpmSingleServo->currentIndex(); SingleServoIndex = m_aircraft->ccpmSingleServo->currentIndex();
//set visibility of user settings //set visibility of user settings
m_aircraft->ccpmAdvancedSettingsTable->setEnabled(TypeInt==0); m_aircraft->ccpmAdvancedSettingsTable->setEnabled(TypeInt == 0);
m_aircraft->ccpmAdvancedSettingsTable->clearFocus();; m_aircraft->ccpmAdvancedSettingsTable->clearFocus();
m_aircraft->ccpmAngleW->setEnabled(TypeInt==1); m_aircraft->ccpmAngleW->setEnabled(TypeInt == 1);
m_aircraft->ccpmAngleX->setEnabled(TypeInt==1); m_aircraft->ccpmAngleX->setEnabled(TypeInt == 1);
m_aircraft->ccpmAngleY->setEnabled(TypeInt==1); m_aircraft->ccpmAngleY->setEnabled(TypeInt == 1);
m_aircraft->ccpmAngleZ->setEnabled(TypeInt==1); m_aircraft->ccpmAngleZ->setEnabled(TypeInt == 1);
m_aircraft->ccpmCorrectionAngle->setEnabled(TypeInt!=0); m_aircraft->ccpmCorrectionAngle->setEnabled(TypeInt != 0);
m_aircraft->ccpmServoWChannel->setEnabled(TypeInt>0); m_aircraft->ccpmServoWChannel->setEnabled(TypeInt > 0);
m_aircraft->ccpmServoXChannel->setEnabled(TypeInt>0); m_aircraft->ccpmServoXChannel->setEnabled(TypeInt > 0);
m_aircraft->ccpmServoYChannel->setEnabled(TypeInt>0); m_aircraft->ccpmServoYChannel->setEnabled(TypeInt > 0);
m_aircraft->ccpmServoZChannel->setEnabled(TypeInt>0); m_aircraft->ccpmServoZChannel->setEnabled(TypeInt > 0);
m_aircraft->ccpmSingleServo->setEnabled(TypeInt>1); m_aircraft->ccpmSingleServo->setEnabled(TypeInt > 1);
m_aircraft->ccpmEngineChannel->setEnabled(TypeInt>0); m_aircraft->ccpmEngineChannel->setEnabled(TypeInt > 0);
m_aircraft->ccpmTailChannel->setEnabled(TypeInt>0); m_aircraft->ccpmTailChannel->setEnabled(TypeInt > 0);
m_aircraft->ccpmCollectiveSlider->setEnabled(TypeInt>0); m_aircraft->ccpmCollectiveSlider->setEnabled(TypeInt > 0);
m_aircraft->ccpmCollectivespinBox->setEnabled(TypeInt>0); m_aircraft->ccpmCollectivespinBox->setEnabled(TypeInt > 0);
m_aircraft->ccpmRevoSlider->setEnabled(TypeInt>0); m_aircraft->ccpmRevoSlider->setEnabled(TypeInt > 0);
m_aircraft->ccpmREVOspinBox->setEnabled(TypeInt>0); m_aircraft->ccpmREVOspinBox->setEnabled(TypeInt > 0);
AdjustmentAngle=SingleServoIndex*90; AdjustmentAngle = SingleServoIndex * 90;
m_aircraft->PitchCurve->setVisible(1); m_aircraft->PitchCurve->setVisible(1);
NumServosDefined=4; NumServosDefined = 4;
//set values for pre defined heli types //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_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360));
m_aircraft->ccpmAngleY->setValue(0);
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleY->setEnabled(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoYChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoYChannel->setEnabled(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
NumServosDefined=2;
}
else if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 90º"), Qt::CaseInsensitive)==0)
{
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360));
m_aircraft->ccpmAngleY->setValue(fmod(AdjustmentAngle + 180,360));
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
NumServosDefined=3;
}
else if (TypeText.compare(QString::fromUtf8("CCPM 4 Servo 90º"), Qt::CaseInsensitive)==0)
{
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360));
m_aircraft->ccpmAngleY->setValue(fmod(AdjustmentAngle + 180,360));
m_aircraft->ccpmAngleZ->setValue(fmod(AdjustmentAngle + 270,360));
m_aircraft->ccpmSingleServo->setEnabled(0);
m_aircraft->ccpmSingleServo->setCurrentIndex(0);
NumServosDefined=4;
}
else if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 120º"), Qt::CaseInsensitive)==0)
{
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 120,360));
m_aircraft->ccpmAngleY->setValue(fmod(AdjustmentAngle + 240,360));
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
NumServosDefined=3;
}
else if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 140º"), Qt::CaseInsensitive)==0)
{
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 140,360));
m_aircraft->ccpmAngleY->setValue(fmod(AdjustmentAngle + 220,360));
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
NumServosDefined=3;
}
else if (TypeText.compare(QString::fromUtf8("FP 2 Servo 90º"), Qt::CaseInsensitive)==0)
{
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360));
m_aircraft->ccpmAngleY->setValue(0);
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleY->setEnabled(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoYChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoYChannel->setEnabled(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
m_aircraft->ccpmCollectivespinBox->setEnabled(0);
m_aircraft->ccpmCollectiveSlider->setEnabled(0);
m_aircraft->ccpmCollectivespinBox->setValue(0);
m_aircraft->ccpmCollectiveSlider->setValue(0);
m_aircraft->PitchCurve->setVisible(0);
NumServosDefined=2;
}
else if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive)==0)
{
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0); m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90,360)); m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90, 360));
m_aircraft->ccpmAngleY->setValue(0);
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleY->setEnabled(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoYChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoYChannel->setEnabled(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
NumServosDefined = 2;
} else if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 90º"), Qt::CaseInsensitive) == 0) {
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90, 360));
m_aircraft->ccpmAngleY->setValue(fmod(AdjustmentAngle + 180, 360));
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
NumServosDefined = 3;
} else if (TypeText.compare(QString::fromUtf8("CCPM 4 Servo 90º"), Qt::CaseInsensitive) == 0) {
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90, 360));
m_aircraft->ccpmAngleY->setValue(fmod(AdjustmentAngle + 180, 360));
m_aircraft->ccpmAngleZ->setValue(fmod(AdjustmentAngle + 270, 360));
m_aircraft->ccpmSingleServo->setEnabled(0);
m_aircraft->ccpmSingleServo->setCurrentIndex(0);
NumServosDefined = 4;
} else if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 120º"), Qt::CaseInsensitive) == 0) {
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 120, 360));
m_aircraft->ccpmAngleY->setValue(fmod(AdjustmentAngle + 240, 360));
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
NumServosDefined = 3;
} else if (TypeText.compare(QString::fromUtf8("CCPM 3 Servo 140º"), Qt::CaseInsensitive) == 0) {
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 140, 360));
m_aircraft->ccpmAngleY->setValue(fmod(AdjustmentAngle + 220, 360));
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
NumServosDefined = 3;
} else if (TypeText.compare(QString::fromUtf8("FP 2 Servo 90º"), Qt::CaseInsensitive) == 0) {
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90, 360));
m_aircraft->ccpmAngleY->setValue(0); m_aircraft->ccpmAngleY->setValue(0);
m_aircraft->ccpmAngleZ->setValue(0); m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleY->setEnabled(0); m_aircraft->ccpmAngleY->setEnabled(0);
@ -425,55 +389,66 @@ void ConfigCcpmWidget::UpdateType()
m_aircraft->ccpmCollectivespinBox->setValue(0); m_aircraft->ccpmCollectivespinBox->setValue(0);
m_aircraft->ccpmCollectiveSlider->setValue(0); m_aircraft->ccpmCollectiveSlider->setValue(0);
m_aircraft->PitchCurve->setVisible(0); m_aircraft->PitchCurve->setVisible(0);
NumServosDefined=2; NumServosDefined = 2;
} else if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive) == 0) {
m_aircraft->ccpmAngleW->setValue(AdjustmentAngle + 0);
m_aircraft->ccpmAngleX->setValue(fmod(AdjustmentAngle + 90, 360));
m_aircraft->ccpmAngleY->setValue(0);
m_aircraft->ccpmAngleZ->setValue(0);
m_aircraft->ccpmAngleY->setEnabled(0);
m_aircraft->ccpmAngleZ->setEnabled(0);
m_aircraft->ccpmServoYChannel->setCurrentIndex(0);
m_aircraft->ccpmServoZChannel->setCurrentIndex(0);
m_aircraft->ccpmServoYChannel->setEnabled(0);
m_aircraft->ccpmServoZChannel->setEnabled(0);
m_aircraft->ccpmCollectivespinBox->setEnabled(0);
m_aircraft->ccpmCollectiveSlider->setEnabled(0);
m_aircraft->ccpmCollectivespinBox->setValue(0);
m_aircraft->ccpmCollectiveSlider->setValue(0);
m_aircraft->PitchCurve->setVisible(0);
NumServosDefined = 2;
} }
//Set the text of the motor boxes //Set the text of the motor boxes
if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive)==0) if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive) == 0) {
{
m_aircraft->ccpmEngineLabel->setText("CW motor"); m_aircraft->ccpmEngineLabel->setText("CW motor");
m_aircraft->ccpmTailLabel->setText("CCW motor"); m_aircraft->ccpmTailLabel->setText("CCW motor");
} } else {
else{
m_aircraft->ccpmEngineLabel->setText("Engine"); m_aircraft->ccpmEngineLabel->setText("Engine");
m_aircraft->ccpmTailLabel->setText("Tail rotor"); m_aircraft->ccpmTailLabel->setText("Tail rotor");
} }
//set the visibility of the swashplate servo selection boxes //set the visibility of the swashplate servo selection boxes
m_aircraft->ccpmServoWLabel->setVisible(NumServosDefined>=1); m_aircraft->ccpmServoWLabel->setVisible(NumServosDefined >= 1);
m_aircraft->ccpmServoXLabel->setVisible(NumServosDefined>=2); m_aircraft->ccpmServoXLabel->setVisible(NumServosDefined >= 2);
m_aircraft->ccpmServoYLabel->setVisible(NumServosDefined>=3); m_aircraft->ccpmServoYLabel->setVisible(NumServosDefined >= 3);
m_aircraft->ccpmServoZLabel->setVisible(NumServosDefined>=4); m_aircraft->ccpmServoZLabel->setVisible(NumServosDefined >= 4);
m_aircraft->ccpmServoWChannel->setVisible(NumServosDefined>=1); m_aircraft->ccpmServoWChannel->setVisible(NumServosDefined >= 1);
m_aircraft->ccpmServoXChannel->setVisible(NumServosDefined>=2); m_aircraft->ccpmServoXChannel->setVisible(NumServosDefined >= 2);
m_aircraft->ccpmServoYChannel->setVisible(NumServosDefined>=3); m_aircraft->ccpmServoYChannel->setVisible(NumServosDefined >= 3);
m_aircraft->ccpmServoZChannel->setVisible(NumServosDefined>=4); m_aircraft->ccpmServoZChannel->setVisible(NumServosDefined >= 4);
//set the visibility of the swashplate angle selection boxes
m_aircraft->ccpmServoWLabel_2->setVisible(NumServosDefined>=1);
m_aircraft->ccpmServoXLabel_2->setVisible(NumServosDefined>=2);
m_aircraft->ccpmServoYLabel_2->setVisible(NumServosDefined>=3);
m_aircraft->ccpmServoZLabel_2->setVisible(NumServosDefined>=4);
m_aircraft->ccpmAngleW->setVisible(NumServosDefined>=1);
m_aircraft->ccpmAngleX->setVisible(NumServosDefined>=2);
m_aircraft->ccpmAngleY->setVisible(NumServosDefined>=3);
m_aircraft->ccpmAngleZ->setVisible(NumServosDefined>=4);
m_aircraft->ccpmAdvancedSettingsTable->resizeColumnsToContents(); //set the visibility of the swashplate angle selection boxes
for (int i=0;i<6;i++) { m_aircraft->ccpmServoWLabel_2->setVisible(NumServosDefined >= 1);
m_aircraft->ccpmAdvancedSettingsTable->setColumnWidth(i,(m_aircraft->ccpmAdvancedSettingsTable->width()- m_aircraft->ccpmServoXLabel_2->setVisible(NumServosDefined >= 2);
m_aircraft->ccpmAdvancedSettingsTable->verticalHeader()->width())/6); m_aircraft->ccpmServoYLabel_2->setVisible(NumServosDefined >= 3);
m_aircraft->ccpmServoZLabel_2->setVisible(NumServosDefined >= 4);
m_aircraft->ccpmAngleW->setVisible(NumServosDefined >= 1);
m_aircraft->ccpmAngleX->setVisible(NumServosDefined >= 2);
m_aircraft->ccpmAngleY->setVisible(NumServosDefined >= 3);
m_aircraft->ccpmAngleZ->setVisible(NumServosDefined >= 4);
QTableWidget *table = m_aircraft->ccpmAdvancedSettingsTable;
table->resizeColumnsToContents();
for (int i = 0; i < 6; i++) {
table->setColumnWidth(i, (table->width() - table->verticalHeader()->width()) / 6);
} }
//update UI //update UI
ccpmSwashplateUpdate(); ccpmSwashplateUpdate();
} }
void ConfigCcpmWidget::ccpmSwashplateRedraw() void ConfigCcpmWidget::ccpmSwashplateRedraw()
{ {
double angle[CCPM_MAX_SWASH_SERVOS],CorrectionAngle,x,y,w,h,radius,CenterX,CenterY; double angle[CCPM_MAX_SWASH_SERVOS],CorrectionAngle,x,y,w,h,radius,CenterX,CenterY;
@ -586,8 +561,9 @@ void ConfigCcpmWidget::UpdateMixer()
{ {
bool useCCPM; bool useCCPM;
bool useCyclic; bool useCyclic;
int i,j,ThisEnable[6]; int ThisEnable[6];
float CollectiveConstant,PitchConstant,RollConstant,ThisAngle[6]; float CollectiveConstant, PitchConstant, RollConstant;
float ThisAngle[6];
QString Channel; QString Channel;
if (throwConfigError(QString("HeliCP"))) if (throwConfigError(QString("HeliCP")))
@ -598,29 +574,24 @@ void ConfigCcpmWidget::UpdateMixer()
useCCPM = !(config.heli.ccpmCollectivePassthroughState || !config.heli.ccpmLinkCyclicState); useCCPM = !(config.heli.ccpmCollectivePassthroughState || !config.heli.ccpmLinkCyclicState);
useCyclic = config.heli.ccpmLinkRollState; useCyclic = config.heli.ccpmLinkRollState;
CollectiveConstant = (float)config.heli.SliderValue0 / 100.00; CollectiveConstant = (float) config.heli.SliderValue0 / 100.00;
if (useCCPM) if (useCCPM) { //cyclic = 1 - collective
{//cyclic = 1 - collective PitchConstant = 1 - CollectiveConstant;
PitchConstant = 1-CollectiveConstant;
RollConstant = PitchConstant; RollConstant = PitchConstant;
} } else {
else PitchConstant = (float) config.heli.SliderValue1 / 100.00;
{ ;
PitchConstant = (float)config.heli.SliderValue1 / 100.00;; if (useCyclic) {
if (useCyclic)
{
RollConstant = PitchConstant; RollConstant = PitchConstant;
} } else {
else RollConstant = (float) config.heli.SliderValue2 / 100.00;
{ ;
RollConstant = (float)config.heli.SliderValue2 / 100.00;; }
}
} }
if (config.heli.SwashplateType>0) if (config.heli.SwashplateType > 0) { //not advanced settings
{//not advanced settings //get the channel data from the ui
//get the channel data from the ui
MixerChannelData[0] = m_aircraft->ccpmEngineChannel->currentIndex(); MixerChannelData[0] = m_aircraft->ccpmEngineChannel->currentIndex();
MixerChannelData[1] = m_aircraft->ccpmTailChannel->currentIndex(); MixerChannelData[1] = m_aircraft->ccpmTailChannel->currentIndex();
MixerChannelData[2] = m_aircraft->ccpmServoWChannel->currentIndex(); MixerChannelData[2] = m_aircraft->ccpmServoWChannel->currentIndex();
@ -640,78 +611,92 @@ void ConfigCcpmWidget::UpdateMixer()
ThisEnable[4] = m_aircraft->ccpmServoYChannel->isEnabled(); ThisEnable[4] = m_aircraft->ccpmServoYChannel->isEnabled();
ThisEnable[5] = m_aircraft->ccpmServoZChannel->isEnabled(); ThisEnable[5] = m_aircraft->ccpmServoZChannel->isEnabled();
ServosText[0]->setPlainText(QString("%1").arg( MixerChannelData[2] )); ServosText[0]->setPlainText(QString("%1").arg(MixerChannelData[2]));
ServosText[1]->setPlainText(QString("%1").arg( MixerChannelData[3] )); ServosText[1]->setPlainText(QString("%1").arg(MixerChannelData[3]));
ServosText[2]->setPlainText(QString("%1").arg( MixerChannelData[4] )); ServosText[2]->setPlainText(QString("%1").arg(MixerChannelData[4]));
ServosText[3]->setPlainText(QString("%1").arg( MixerChannelData[5] )); ServosText[3]->setPlainText(QString("%1").arg(MixerChannelData[5]));
//go through the user data and update the mixer matrix //go through the user data and update the mixer matrix
for (i=0;i<6;i++) QTableWidget *table = m_aircraft->ccpmAdvancedSettingsTable;
{ for (int i = 0; i < 6; i++) {
if ((MixerChannelData[i]>0) && ((ThisEnable[i])||(i<2))) if ((MixerChannelData[i] > 0) && ((ThisEnable[i]) || (i < 2))) {
{ table->item(i, 0)->setText(QString("%1").arg(MixerChannelData[i]));
m_aircraft->ccpmAdvancedSettingsTable->item(i,0)->setText(QString("%1").arg( MixerChannelData[i] ));
//Generate the mixer vector //Generate the mixer vector
if (i==0) if (i == 0) { //main motor-engine
{//main motor-engine table->item(i, 1)->setText(QString("%1").arg(127)); //ThrottleCurve1
m_aircraft->ccpmAdvancedSettingsTable->item(i,1)->setText(QString("%1").arg(127));//ThrottleCurve1 table->item(i, 2)->setText(QString("%1").arg(0)); //ThrottleCurve2
m_aircraft->ccpmAdvancedSettingsTable->item(i,2)->setText(QString("%1").arg(0));//ThrottleCurve2 table->item(i, 3)->setText(QString("%1").arg(0)); //Roll
m_aircraft->ccpmAdvancedSettingsTable->item(i,3)->setText(QString("%1").arg(0));//Roll table->item(i, 4)->setText(QString("%1").arg(0)); //Pitch
m_aircraft->ccpmAdvancedSettingsTable->item(i,4)->setText(QString("%1").arg(0));//Pitch
if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive)==0) if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive) == 0) {
m_aircraft->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(-127));//Yaw // Yaw
else table->item(i, 5)->setText(QString("%1").arg(-127));
m_aircraft->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(0));//Yaw } else {
// Yaw
} table->item(i, 5)->setText(QString("%1").arg(0));
if (i==1)
{//tailrotor --or-- counter-clockwise motor
if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive)==0)
{
m_aircraft->ccpmAdvancedSettingsTable->item(i,1)->setText(QString("%1").arg(127));//ThrottleCurve1
m_aircraft->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(127));//Yaw
}
else{
m_aircraft->ccpmAdvancedSettingsTable->item(i,1)->setText(QString("%1").arg(0));//ThrottleCurve1
m_aircraft->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(127));//Yaw
} }
m_aircraft->ccpmAdvancedSettingsTable->item(i,2)->setText(QString("%1").arg(0));//ThrottleCurve2 }
m_aircraft->ccpmAdvancedSettingsTable->item(i,3)->setText(QString("%1").arg(0));//Roll if (i == 1) {
m_aircraft->ccpmAdvancedSettingsTable->item(i,4)->setText(QString("%1").arg(0));//Pitch // tailrotor --or-- counter-clockwise motor
if (TypeText.compare(QString::fromUtf8("Coax 2 Servo 90º"), Qt::CaseInsensitive) == 0) {
// ThrottleCurve1
table->item(i, 1)->setText(QString("%1").arg(127));
// Yaw
table->item(i, 5)->setText(QString("%1").arg(127));
} else {
// ThrottleCurve1
table->item(i, 1)->setText(QString("%1").arg(0));
// Yaw
table->item(i, 5)->setText(QString("%1").arg(127));
}
//ThrottleCurve2
table->item(i, 2)->setText(QString("%1").arg(0));
// Roll
table->item(i, 3)->setText(QString("%1").arg(0));
// Pitch
table->item(i, 4)->setText(QString("%1").arg(0));
} }
if (i>1) if (i > 1) {
{//Swashplate // Swashplate
m_aircraft->ccpmAdvancedSettingsTable->item(i,1)->setText(QString("%1").arg(0));//ThrottleCurve1 //ThrottleCurve1
m_aircraft->ccpmAdvancedSettingsTable->item(i,2)->setText(QString("%1").arg((int)(127.0*CollectiveConstant)));//ThrottleCurve2 table->item(i, 1)->setText(QString("%1").arg(0));
m_aircraft->ccpmAdvancedSettingsTable->item(i,3)->setText(QString("%1").arg((int)(127.0*(RollConstant)*sin((180+config.heli.CorrectionAngle + ThisAngle[i])*Pi/180.00))));//Roll //ThrottleCurve2
m_aircraft->ccpmAdvancedSettingsTable->item(i,4)->setText(QString("%1").arg((int)(127.0*(PitchConstant)*cos((config.heli.CorrectionAngle + ThisAngle[i])*Pi/180.00))));//Pitch table->item(i, 2)->setText(QString("%1").arg((int) (127.0 * CollectiveConstant)));
m_aircraft->ccpmAdvancedSettingsTable->item(i,5)->setText(QString("%1").arg(0));//Yaw table->item(i, 3)->setText(
QString("%1").arg(
(int) (127.0 * (RollConstant)
* sin((180 + config.heli.CorrectionAngle + ThisAngle[i]) * Pi / 180.00)))); //Roll
table->item(i, 4)->setText(
QString("%1").arg(
(int) (127.0 * (PitchConstant)
* cos((config.heli.CorrectionAngle + ThisAngle[i]) * Pi / 180.00)))); //Pitch
// Yaw
table->item(i, 5)->setText(QString("%1").arg(0));
} }
} } else {
else for (int j = 0; j < 6; j++) {
{ table->item(i, j)->setText(QString("-"));
for (j=0;j<6;j++) m_aircraft->ccpmAdvancedSettingsTable->item(i,j)->setText(QString("-")); }
} }
} }
} else {
// advanced settings
QTableWidget *table = m_aircraft->ccpmAdvancedSettingsTable;
for (int i = 0; i < 6; i++) {
Channel = table->item(i, 0)->text();
if (Channel == "-") {
Channel = QString("9");
}
MixerChannelData[i] = Channel.toInt();
}
} }
else
{//advanced settings
for (i=0;i<6;i++)
{
Channel =m_aircraft->ccpmAdvancedSettingsTable->item(i,0)->text();
if (Channel == "-") Channel = QString("9");
MixerChannelData[i]= Channel.toInt();
}
}
} }
QString ConfigCcpmWidget::updateConfigObjects() QString ConfigCcpmWidget::updateConfigObjects()
{ {
QString airframeType = "HeliCP"; QString airframeType = "HeliCP";
@ -719,7 +704,8 @@ QString ConfigCcpmWidget::updateConfigObjects()
bool useCCPM; bool useCCPM;
bool useCyclic; bool useCyclic;
if (updatingFromHardware == TRUE) return airframeType; if (updatingFromHardware == TRUE)
return airframeType;
updatingFromHardware = TRUE; updatingFromHardware = TRUE;
@ -727,7 +713,7 @@ QString ConfigCcpmWidget::updateConfigObjects()
GUIConfigDataUnion config = GetConfigData(); GUIConfigDataUnion config = GetConfigData();
//swashplate config //swashplate config
config.heli.SwashplateType = m_aircraft->ccpmType->count() - m_aircraft->ccpmType->currentIndex()-1; config.heli.SwashplateType = m_aircraft->ccpmType->count() - m_aircraft->ccpmType->currentIndex() - 1;
config.heli.FirstServoIndex = m_aircraft->ccpmSingleServo->currentIndex(); config.heli.FirstServoIndex = m_aircraft->ccpmSingleServo->currentIndex();
//ccpm mixing options //ccpm mixing options
@ -741,20 +727,14 @@ QString ConfigCcpmWidget::updateConfigObjects()
config.heli.CorrectionAngle = m_aircraft->ccpmCorrectionAngle->value(); config.heli.CorrectionAngle = m_aircraft->ccpmCorrectionAngle->value();
//update sliders //update sliders
if (useCCPM) if (useCCPM) {
{
config.heli.SliderValue0 = m_aircraft->ccpmCollectiveSlider->value(); config.heli.SliderValue0 = m_aircraft->ccpmCollectiveSlider->value();
} } else {
else
{
config.heli.SliderValue0 = m_aircraft->ccpmCollectiveScale->value(); config.heli.SliderValue0 = m_aircraft->ccpmCollectiveScale->value();
} }
if (useCyclic) if (useCyclic) {
{
config.heli.SliderValue1 = m_aircraft->ccpmCyclicScale->value(); config.heli.SliderValue1 = m_aircraft->ccpmCyclicScale->value();
} } else {
else
{
config.heli.SliderValue1 = m_aircraft->ccpmPitchScale->value(); config.heli.SliderValue1 = m_aircraft->ccpmPitchScale->value();
} }
config.heli.SliderValue2 = m_aircraft->ccpmRollScale->value(); config.heli.SliderValue2 = m_aircraft->ccpmRollScale->value();
@ -776,7 +756,7 @@ QString ConfigCcpmWidget::updateConfigObjects()
return airframeType; return airframeType;
} }
QString ConfigCcpmWidget::updateConfigObjectsFromWidgets() //UpdateCCPMOptionsFromUI() QString ConfigCcpmWidget::updateConfigObjectsFromWidgets()
{ {
QString airframeType = updateConfigObjects(); QString airframeType = updateConfigObjects();
@ -785,7 +765,7 @@ QString ConfigCcpmWidget::updateConfigObjectsFromWidgets() //UpdateCCPMOptionsFr
return airframeType; return airframeType;
} }
void ConfigCcpmWidget::refreshWidgetsValues(QString frameType) //UpdateCCPMUIFromOptions() void ConfigCcpmWidget::refreshWidgetsValues(QString frameType)
{ {
Q_UNUSED(frameType); Q_UNUSED(frameType);
@ -829,35 +809,34 @@ void ConfigCcpmWidget::refreshWidgetsValues(QString frameType) //UpdateCCPMUIFro
getMixer(); getMixer();
} }
void ConfigCcpmWidget::SetUIComponentVisibilities() void ConfigCcpmWidget::SetUIComponentVisibilities()
{ {
m_aircraft->ccpmRevoMixingBox->setVisible(0); m_aircraft->ccpmRevoMixingBox->setVisible(0);
m_aircraft->ccpmPitchMixingBox->setVisible(!m_aircraft->ccpmCollectivePassthrough->isChecked() &&
m_aircraft->ccpmLinkCyclic->isChecked());
m_aircraft->ccpmCollectiveScalingBox->setVisible(m_aircraft->ccpmCollectivePassthrough->isChecked() || !m_aircraft->ccpmLinkCyclic->isChecked()); m_aircraft->ccpmPitchMixingBox->setVisible(
!m_aircraft->ccpmCollectivePassthrough->isChecked() && m_aircraft->ccpmLinkCyclic->isChecked());
m_aircraft->ccpmCollectiveScalingBox->setVisible(
m_aircraft->ccpmCollectivePassthrough->isChecked() || !m_aircraft->ccpmLinkCyclic->isChecked());
m_aircraft->ccpmLinkCyclic->setVisible(!m_aircraft->ccpmCollectivePassthrough->isChecked()); m_aircraft->ccpmLinkCyclic->setVisible(!m_aircraft->ccpmCollectivePassthrough->isChecked());
m_aircraft->ccpmCyclicScalingBox->setVisible((m_aircraft->ccpmCollectivePassthrough->isChecked() || !m_aircraft->ccpmLinkCyclic->isChecked()) && m_aircraft->ccpmCyclicScalingBox->setVisible(
m_aircraft->ccpmLinkRoll->isChecked()); (m_aircraft->ccpmCollectivePassthrough->isChecked() || !m_aircraft->ccpmLinkCyclic->isChecked())
&& m_aircraft->ccpmLinkRoll->isChecked());
if (!m_aircraft->ccpmCollectivePassthrough->checkState() && m_aircraft->ccpmLinkCyclic->isChecked()) if (!m_aircraft->ccpmCollectivePassthrough->checkState() && m_aircraft->ccpmLinkCyclic->isChecked()) {
{
m_aircraft->ccpmPitchScalingBox->setVisible(0); m_aircraft->ccpmPitchScalingBox->setVisible(0);
m_aircraft->ccpmRollScalingBox->setVisible(0); m_aircraft->ccpmRollScalingBox->setVisible(0);
m_aircraft->ccpmLinkRoll->setVisible(0); m_aircraft->ccpmLinkRoll->setVisible(0);
} } else {
else
{
m_aircraft->ccpmPitchScalingBox->setVisible(!m_aircraft->ccpmLinkRoll->isChecked()); m_aircraft->ccpmPitchScalingBox->setVisible(!m_aircraft->ccpmLinkRoll->isChecked());
m_aircraft->ccpmRollScalingBox->setVisible(!m_aircraft->ccpmLinkRoll->isChecked()); m_aircraft->ccpmRollScalingBox->setVisible(!m_aircraft->ccpmLinkRoll->isChecked());
m_aircraft->ccpmLinkRoll->setVisible(1); m_aircraft->ccpmLinkRoll->setVisible(1);
} }
} }
/** /**
Request the current value of the SystemSettings which holds the ccpm type Request the current value of the SystemSettings which holds the ccpm type
*/ */
@ -899,7 +878,6 @@ void ConfigCcpmWidget::getMixer()
ccpmSwashplateUpdate(); ccpmSwashplateUpdate();
} }
/** /**
Sends the config to the board (ccpm type) Sends the config to the board (ccpm type)
*/ */

View File

@ -57,13 +57,28 @@ class ConfigCcpmWidget: public VehicleConfig
Q_OBJECT Q_OBJECT
public: public:
static QStringList getChannelDescriptions();
ConfigCcpmWidget(QWidget *parent = 0); ConfigCcpmWidget(QWidget *parent = 0);
~ConfigCcpmWidget(); ~ConfigCcpmWidget();
friend class ConfigVehicleTypeWidget; virtual void setupUI(QString airframeType);
virtual void refreshWidgetsValues(QString frameType);
virtual QString updateConfigObjectsFromWidgets();
public slots:
void getMixer();
void setMixer();
void saveccpmUpdate();
protected:
void showEvent(QShowEvent *event);
void resizeEvent(QResizeEvent *event);
private: private:
//Ui_ccpmWidget *m_ccpm; virtual void resetActuators(GUIConfigDataUnion *configData);
Ui_CcpmConfigWidget *m_aircraft; Ui_CcpmConfigWidget *m_aircraft;
QGraphicsSvgItem *SwashplateImg; QGraphicsSvgItem *SwashplateImg;
@ -86,20 +101,16 @@ private:
int MixerChannelData[6]; int MixerChannelData[6];
int ShowDisclaimer(int messageID); int ShowDisclaimer(int messageID);
virtual void enableControls(bool enable) { Q_UNUSED(enable)}; // Not used by this widget virtual void enableControls(bool enable) { Q_UNUSED(enable) }; // Not used by this widget
bool updatingFromHardware; bool updatingFromHardware;
bool updatingToHardware; bool updatingToHardware;
virtual void ResetActuators(GUIConfigDataUnion *configData); // TODO ?
static QStringList getChannelDescriptions();
QString updateConfigObjects(); QString updateConfigObjects();
private slots: private slots:
virtual void setupUI(QString airframeType); // TODO ?
virtual void refreshWidgetsValues(QString frameType);
virtual QString updateConfigObjectsFromWidgets();
virtual bool throwConfigError(QString airframeType); virtual bool throwConfigError(QString airframeType);
void ccpmSwashplateUpdate(); void ccpmSwashplateUpdate();
@ -120,17 +131,8 @@ private slots:
void enableSwashplateLevellingControl(bool state); void enableSwashplateLevellingControl(bool state);
void setSwashplateLevel(int percent); void setSwashplateLevel(int percent);
void SwashLvlSpinBoxChanged(int value); void SwashLvlSpinBoxChanged(int value);
// TODO ?
virtual void refreshValues() {}; // Not used virtual void refreshValues() {}; // Not used
public slots:
void getMixer();
void setMixer();
void saveccpmUpdate();
protected:
void showEvent(QShowEvent *event);
void resizeEvent(QResizeEvent *event);
}; };
#endif // CONFIGccpmWIDGET_H #endif // CONFIGccpmWIDGET_H

View File

@ -94,6 +94,11 @@ QStringList ConfigCustomWidget::getChannelDescriptions()
return channelDesc; return channelDesc;
} }
void ConfigCustomWidget::resetActuators(GUIConfigDataUnion *configData)
{
}
/** /**
Helper function to update the UI widget objects Helper function to update the UI widget objects
*/ */

View File

@ -46,30 +46,30 @@ class ConfigCustomWidget: public VehicleConfig
Q_OBJECT Q_OBJECT
public: public:
static QStringList getChannelDescriptions();
ConfigCustomWidget(QWidget *parent = 0); ConfigCustomWidget(QWidget *parent = 0);
~ConfigCustomWidget(); ~ConfigCustomWidget();
friend class ConfigVehicleTypeWidget;
private:
Ui_CustomConfigWidget *m_aircraft;
//virtual void ResetActuators(GUIConfigDataUnion *configData);
static QStringList getChannelDescriptions();
// static const QString CHANNELBOXNAME;
private slots:
virtual void setupUI(QString airframeType); virtual void setupUI(QString airframeType);
virtual void refreshWidgetsValues(QString frameType); virtual void refreshWidgetsValues(QString frameType);
virtual QString updateConfigObjectsFromWidgets(); virtual QString updateConfigObjectsFromWidgets();
virtual bool throwConfigError(int numMotors);
protected: protected:
void showEvent(QShowEvent *event); void showEvent(QShowEvent *event);
void resizeEvent(QResizeEvent *event); void resizeEvent(QResizeEvent *event);
signals: private:
void configurationChanged(); virtual void resetActuators(GUIConfigDataUnion *configData);
Ui_CustomConfigWidget *m_aircraft;
private slots:
virtual bool throwConfigError(int numMotors);
//signals:
// void configurationChanged();
}; };

View File

@ -130,7 +130,7 @@ void ConfigFixedWingWidget::setupUI(QString frameType)
} }
} }
void ConfigFixedWingWidget::ResetActuators(GUIConfigDataUnion* configData) void ConfigFixedWingWidget::resetActuators(GUIConfigDataUnion *configData)
{ {
configData->fixedwing.FixedWingPitch1 = 0; configData->fixedwing.FixedWingPitch1 = 0;
configData->fixedwing.FixedWingPitch2 = 0; configData->fixedwing.FixedWingPitch2 = 0;
@ -297,7 +297,7 @@ bool ConfigFixedWingWidget::setupFrameFixedWing(QString airframeType)
// Now setup the channels: // Now setup the channels:
GUIConfigDataUnion config = GetConfigData(); GUIConfigDataUnion config = GetConfigData();
ResetActuators(&config); resetActuators(&config);
config.fixedwing.FixedWingPitch1 = m_aircraft->fwElevator1ChannelBox->currentIndex(); config.fixedwing.FixedWingPitch1 = m_aircraft->fwElevator1ChannelBox->currentIndex();
config.fixedwing.FixedWingPitch2 = m_aircraft->fwElevator2ChannelBox->currentIndex(); config.fixedwing.FixedWingPitch2 = m_aircraft->fwElevator2ChannelBox->currentIndex();
@ -369,7 +369,7 @@ bool ConfigFixedWingWidget::setupFrameElevon(QString airframeType)
} }
GUIConfigDataUnion config = GetConfigData(); GUIConfigDataUnion config = GetConfigData();
ResetActuators(&config); resetActuators(&config);
config.fixedwing.FixedWingRoll1 = m_aircraft->fwAileron1ChannelBox->currentIndex(); config.fixedwing.FixedWingRoll1 = m_aircraft->fwAileron1ChannelBox->currentIndex();
config.fixedwing.FixedWingRoll2 = m_aircraft->fwAileron2ChannelBox->currentIndex(); config.fixedwing.FixedWingRoll2 = m_aircraft->fwAileron2ChannelBox->currentIndex();
@ -441,7 +441,7 @@ bool ConfigFixedWingWidget::setupFrameVtail(QString airframeType)
} }
GUIConfigDataUnion config = GetConfigData(); GUIConfigDataUnion config = GetConfigData();
ResetActuators(&config); resetActuators(&config);
config.fixedwing.FixedWingPitch1 = m_aircraft->fwElevator1ChannelBox->currentIndex(); config.fixedwing.FixedWingPitch1 = m_aircraft->fwElevator1ChannelBox->currentIndex();
config.fixedwing.FixedWingPitch2 = m_aircraft->fwElevator2ChannelBox->currentIndex(); config.fixedwing.FixedWingPitch2 = m_aircraft->fwElevator2ChannelBox->currentIndex();

View File

@ -46,25 +46,26 @@ class ConfigFixedWingWidget: public VehicleConfig
Q_OBJECT Q_OBJECT
public: public:
static QStringList getChannelDescriptions();
ConfigFixedWingWidget(QWidget *parent = 0); ConfigFixedWingWidget(QWidget *parent = 0);
~ConfigFixedWingWidget(); ~ConfigFixedWingWidget();
friend class ConfigVehicleTypeWidget; virtual void setupUI(QString airframeType);
virtual void refreshWidgetsValues(QString frameType);
virtual QString updateConfigObjectsFromWidgets();
private: private:
virtual void resetActuators(GUIConfigDataUnion *configData);
Ui_FixedWingConfigWidget *m_aircraft; Ui_FixedWingConfigWidget *m_aircraft;
bool setupFrameFixedWing(QString airframeType); bool setupFrameFixedWing(QString airframeType);
bool setupFrameElevon(QString airframeType); bool setupFrameElevon(QString airframeType);
bool setupFrameVtail(QString airframeType); bool setupFrameVtail(QString airframeType);
virtual void ResetActuators(GUIConfigDataUnion* configData);
static QStringList getChannelDescriptions();
private slots: private slots:
virtual void setupUI(QString airframeType);
virtual void refreshWidgetsValues(QString frameType);
virtual QString updateConfigObjectsFromWidgets();
virtual bool throwConfigError(QString airframeType); virtual bool throwConfigError(QString airframeType);
protected: protected:

View File

@ -161,7 +161,7 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType)
} }
} }
void ConfigGroundVehicleWidget::ResetActuators(GUIConfigDataUnion* configData) void ConfigGroundVehicleWidget::resetActuators(GUIConfigDataUnion *configData)
{ {
configData->ground.GroundVehicleSteering1 = 0; configData->ground.GroundVehicleSteering1 = 0;
configData->ground.GroundVehicleSteering2 = 0; configData->ground.GroundVehicleSteering2 = 0;
@ -330,7 +330,7 @@ bool ConfigGroundVehicleWidget::setupGroundVehicleMotorcycle(QString airframeTyp
// Now setup the channels: // Now setup the channels:
GUIConfigDataUnion config = GetConfigData(); GUIConfigDataUnion config = GetConfigData();
ResetActuators(&config); resetActuators(&config);
config.ground.GroundVehicleThrottle1 = m_aircraft->gvMotor1ChannelBox->currentIndex(); config.ground.GroundVehicleThrottle1 = m_aircraft->gvMotor1ChannelBox->currentIndex();
config.ground.GroundVehicleThrottle2 = m_aircraft->gvMotor2ChannelBox->currentIndex(); config.ground.GroundVehicleThrottle2 = m_aircraft->gvMotor2ChannelBox->currentIndex();
@ -379,14 +379,14 @@ bool ConfigGroundVehicleWidget::setupGroundVehicleDifferential(QString airframeT
// Now setup the channels: // Now setup the channels:
GUIConfigDataUnion config = GetConfigData(); GUIConfigDataUnion config = GetConfigData();
ResetActuators(&config); resetActuators(&config);
config.ground.GroundVehicleThrottle1 = m_aircraft->gvMotor1ChannelBox->currentIndex(); config.ground.GroundVehicleThrottle1 = m_aircraft->gvMotor1ChannelBox->currentIndex();
config.ground.GroundVehicleThrottle2 = m_aircraft->gvMotor2ChannelBox->currentIndex(); config.ground.GroundVehicleThrottle2 = m_aircraft->gvMotor2ChannelBox->currentIndex();
SetConfigData((config)); SetConfigData((config));
UAVDataObject* mixer = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings"))); UAVDataObject *mixer = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings")));
Q_ASSERT(mixer); Q_ASSERT(mixer);
resetMotorAndServoMixers(mixer); resetMotorAndServoMixers(mixer);
@ -423,7 +423,7 @@ bool ConfigGroundVehicleWidget::setupGroundVehicleCar(QString airframeType)
// Now setup the channels: // Now setup the channels:
GUIConfigDataUnion config = GetConfigData(); GUIConfigDataUnion config = GetConfigData();
ResetActuators(&config); resetActuators(&config);
config.ground.GroundVehicleThrottle1 = m_aircraft->gvMotor1ChannelBox->currentIndex(); config.ground.GroundVehicleThrottle1 = m_aircraft->gvMotor1ChannelBox->currentIndex();
config.ground.GroundVehicleThrottle2 = m_aircraft->gvMotor2ChannelBox->currentIndex(); config.ground.GroundVehicleThrottle2 = m_aircraft->gvMotor2ChannelBox->currentIndex();

View File

@ -46,25 +46,25 @@ class ConfigGroundVehicleWidget: public VehicleConfig
Q_OBJECT Q_OBJECT
public: public:
static QStringList getChannelDescriptions();
ConfigGroundVehicleWidget(QWidget *parent = 0); ConfigGroundVehicleWidget(QWidget *parent = 0);
~ConfigGroundVehicleWidget(); ~ConfigGroundVehicleWidget();
friend class ConfigVehicleTypeWidget; virtual void setupUI(QString airframeType);
virtual void refreshWidgetsValues(QString frameType);
virtual QString updateConfigObjectsFromWidgets();
private: private:
virtual void resetActuators(GUIConfigDataUnion *configData);
Ui_GroundConfigWidget *m_aircraft; Ui_GroundConfigWidget *m_aircraft;
bool setupGroundVehicleCar(QString airframeType); bool setupGroundVehicleCar(QString airframeType);
bool setupGroundVehicleDifferential(QString airframeType); bool setupGroundVehicleDifferential(QString airframeType);
bool setupGroundVehicleMotorcycle(QString airframeType); bool setupGroundVehicleMotorcycle(QString airframeType);
virtual void ResetActuators(GUIConfigDataUnion* configData);
static QStringList getChannelDescriptions();
private slots: private slots:
virtual void setupUI(QString airframeType);
virtual void refreshWidgetsValues(QString frameType);
virtual QString updateConfigObjectsFromWidgets();
virtual bool throwConfigError(QString airframeType); virtual bool throwConfigError(QString airframeType);
protected: protected:

View File

@ -296,7 +296,7 @@ void ConfigMultiRotorWidget::drawAirframe(QString frameType)
m_aircraft->quadShape->fitInView(quad, Qt::KeepAspectRatio); m_aircraft->quadShape->fitInView(quad, Qt::KeepAspectRatio);
} }
void ConfigMultiRotorWidget::ResetActuators(GUIConfigDataUnion* configData) void ConfigMultiRotorWidget::resetActuators(GUIConfigDataUnion *configData)
{ {
configData->multi.VTOLMotorN = 0; configData->multi.VTOLMotorN = 0;
configData->multi.VTOLMotorNE = 0; configData->multi.VTOLMotorNE = 0;
@ -893,7 +893,7 @@ void ConfigMultiRotorWidget::setupMotors(QList<QString> motorList)
<< m_aircraft->multiMotorChannelBox7 << m_aircraft->multiMotorChannelBox8; << m_aircraft->multiMotorChannelBox7 << m_aircraft->multiMotorChannelBox8;
GUIConfigDataUnion configData = GetConfigData(); GUIConfigDataUnion configData = GetConfigData();
ResetActuators(&configData); resetActuators(&configData);
int index; int index;
foreach (QString motor, motorList) { foreach (QString motor, motorList) {

View File

@ -46,12 +46,24 @@ class ConfigMultiRotorWidget: public VehicleConfig
Q_OBJECT Q_OBJECT
public: public:
static QStringList getChannelDescriptions();
static const QString CHANNELBOXNAME;
ConfigMultiRotorWidget(QWidget *parent = 0); ConfigMultiRotorWidget(QWidget *parent = 0);
~ConfigMultiRotorWidget(); ~ConfigMultiRotorWidget();
friend class ConfigVehicleTypeWidget; virtual void setupUI(QString airframeType);
virtual void refreshWidgetsValues(QString frameType);
virtual QString updateConfigObjectsFromWidgets();
protected:
void showEvent(QShowEvent *event);
void resizeEvent(QResizeEvent *event);
private: private:
virtual void resetActuators(GUIConfigDataUnion *configData);
Ui_MultiRotorConfigWidget *m_aircraft; Ui_MultiRotorConfigWidget *m_aircraft;
QWidget *uiowner; QWidget *uiowner;
@ -66,28 +78,14 @@ private:
float invertMotors; float invertMotors;
virtual void ResetActuators(GUIConfigDataUnion *configData);
static QStringList getChannelDescriptions();
static const QString CHANNELBOXNAME;
void setYawMixLevel(int); void setYawMixLevel(int);
void drawAirframe(QString multiRotorType); void drawAirframe(QString multiRotorType);
private slots: private slots:
virtual void setupUI(QString airframeType);
virtual void refreshWidgetsValues(QString frameType);
virtual QString updateConfigObjectsFromWidgets();
virtual bool throwConfigError(int numMotors); virtual bool throwConfigError(int numMotors);
void reverseMultirotorMotor(); void reverseMultirotorMotor();
protected:
void showEvent(QShowEvent *event);
void resizeEvent(QResizeEvent *event);
signals:
void configurationChanged();
}; };
#endif // CONFIGMULTIROTORWIDGET_H #endif // CONFIGMULTIROTORWIDGET_H

View File

@ -35,7 +35,7 @@
VehicleConfig::VehicleConfig(QWidget *parent) : ConfigTaskWidget(parent) VehicleConfig::VehicleConfig(QWidget *parent) : ConfigTaskWidget(parent)
{ {
//Generate lists of mixerTypeNames, mixerVectorNames, channelNames // Generate lists of mixerTypeNames, mixerVectorNames, channelNames
channelNames << "None"; channelNames << "None";
for (int i = 0; i < (int)(VehicleConfig::CHANNEL_NUMELEM); i++) { for (int i = 0; i < (int)(VehicleConfig::CHANNEL_NUMELEM); i++) {
mixerTypes << QString("Mixer%1Type").arg(i+1); mixerTypes << QString("Mixer%1Type").arg(i+1);
@ -50,7 +50,7 @@ VehicleConfig::VehicleConfig(QWidget *parent) : ConfigTaskWidget(parent)
// This is needed because new style tries to compact things as much as possible in grid // This is needed because new style tries to compact things as much as possible in grid
// and on OSX the widget sizes of PushButtons is reported incorrectly: // and on OSX the widget sizes of PushButtons is reported incorrectly:
// https://bugreports.qt-project.org/browse/QTBUG-14591 // https://bugreports.qt-project.org/browse/QTBUG-14591
foreach( QPushButton * btn, findChildren<QPushButton*>() ) { foreach(QPushButton *btn, findChildren<QPushButton*>()) {
btn->setAttribute(Qt::WA_LayoutUsesWidgetRect); btn->setAttribute(Qt::WA_LayoutUsesWidgetRect);
} }
} }
@ -107,7 +107,6 @@ void VehicleConfig::SetConfigData(GUIConfigDataUnion configData) {
void VehicleConfig::setupUI(QString frameType) void VehicleConfig::setupUI(QString frameType)
{ {
} }
QString VehicleConfig::updateConfigObjectsFromWidgets() QString VehicleConfig::updateConfigObjectsFromWidgets()
@ -119,7 +118,7 @@ void VehicleConfig::refreshWidgetsValues(QString frameType)
{ {
} }
void VehicleConfig::ResetActuators(GUIConfigDataUnion *configData) void VehicleConfig::resetActuators(GUIConfigDataUnion *configData)
{ {
} }
@ -277,7 +276,7 @@ void VehicleConfig::setThrottleCurve(UAVDataObject *mixer, MixerThrottleCurveEle
break; break;
} }
if (field && field->getNumElements() == curve.length()) { if (field && (field->getNumElements() == (unsigned int) curve.length())) {
for (int i = 0; i < curve.length(); i++) { for (int i = 0; i < curve.length(); i++) {
field->setValue(curve.at(i), i); field->setValue(curve.at(i), i);
} }
@ -338,6 +337,7 @@ double VehicleConfig::getCurveMax(QList<double> *curve)
} }
return max; return max;
} }
/** /**
Reset the contents of a field Reset the contents of a field
*/ */
@ -348,12 +348,11 @@ void VehicleConfig::resetField(UAVObjectField * field)
} }
} }
/** /**
* Util function to get a pointer to the object manager * Util function to get a pointer to the object manager
* @return pointer to the UAVObjectManager * @return pointer to the UAVObjectManager
*/ */
UAVObjectManager* VehicleConfig::getUAVObjectManager() { UAVObjectManager *VehicleConfig::getUAVObjectManager() {
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectManager * objMngr = pm->getObject<UAVObjectManager>(); UAVObjectManager * objMngr = pm->getObject<UAVObjectManager>();
Q_ASSERT(objMngr); Q_ASSERT(objMngr);

View File

@ -107,8 +107,6 @@ class VehicleConfig: public ConfigTaskWidget
Q_OBJECT Q_OBJECT
public: public:
VehicleConfig(QWidget *parent = 0);
~VehicleConfig();
/* Enumeration options for ThrottleCurves */ /* Enumeration options for ThrottleCurves */
typedef enum { typedef enum {
@ -140,6 +138,8 @@ public:
MIXERVECTOR_YAW = 4 MIXERVECTOR_YAW = 4
} MixerVectorElem; } MixerVectorElem;
static const quint32 CHANNEL_NUMELEM = ActuatorCommand::CHANNEL_NUMELEM;;
// TODO remove 1st capital // TODO remove 1st capital
static GUIConfigDataUnion GetConfigData(); static GUIConfigDataUnion GetConfigData();
static void SetConfigData(GUIConfigDataUnion configData); static void SetConfigData(GUIConfigDataUnion configData);
@ -148,12 +148,15 @@ public:
static void setComboCurrentIndex(QComboBox *box, int index); static void setComboCurrentIndex(QComboBox *box, int index);
static void enableComboBoxes(QWidget *owner, QString boxName, int boxCount, bool enable); static void enableComboBoxes(QWidget *owner, QString boxName, int boxCount, bool enable);
// VehicleConfig class
VehicleConfig(QWidget *parent = 0);
~VehicleConfig();
virtual void setupUI(QString airframeType); virtual void setupUI(QString airframeType);
virtual QString updateConfigObjectsFromWidgets(); virtual QString updateConfigObjectsFromWidgets();
virtual void refreshWidgetsValues(QString frameType); virtual void refreshWidgetsValues(QString frameType);
virtual void ResetActuators(GUIConfigDataUnion *configData); // TODO move to separate class
double getMixerVectorValue(UAVDataObject *mixer, int channel, MixerVectorElem elementName); double getMixerVectorValue(UAVDataObject *mixer, int channel, MixerVectorElem elementName);
void setMixerVectorValue(UAVDataObject *mixer, int channel, MixerVectorElem elementName, double value); void setMixerVectorValue(UAVDataObject *mixer, int channel, MixerVectorElem elementName, double value);
void resetMixerVector(UAVDataObject *mixer, int channel); void resetMixerVector(UAVDataObject *mixer, int channel);
@ -168,16 +171,17 @@ public:
double getCurveMin(QList<double> *curve); double getCurveMin(QList<double> *curve);
double getCurveMax(QList<double> *curve); double getCurveMax(QList<double> *curve);
protected:
QStringList channelNames; QStringList channelNames;
QStringList mixerTypes; QStringList mixerTypes;
QStringList mixerVectors; QStringList mixerVectors;
QStringList mixerTypeDescriptions; QStringList mixerTypeDescriptions;
static const quint32 CHANNEL_NUMELEM = ActuatorCommand::CHANNEL_NUMELEM;;
private: private:
static UAVObjectManager *getUAVObjectManager(); static UAVObjectManager *getUAVObjectManager();
virtual void resetActuators(GUIConfigDataUnion *configData);
private slots: private slots:
public slots: public slots: