diff --git a/ground/openpilotgcs/src/plugins/config/airframe.ui b/ground/openpilotgcs/src/plugins/config/airframe.ui index c2d2db6e4..e70184c17 100755 --- a/ground/openpilotgcs/src/plugins/config/airframe.ui +++ b/ground/openpilotgcs/src/plugins/config/airframe.ui @@ -128,8 +128,8 @@ 0 0 - 850 - 508 + 852 + 518 @@ -215,7 +215,7 @@ QFrame::NoFrame - 1 + 4 @@ -703,7 +703,7 @@ margin:1px; 0 - -1 + 6 @@ -1555,8 +1555,8 @@ margin:1px; 0 0 - 800 - 386 + 808 + 397 @@ -2158,6 +2158,9 @@ margin:1px; true + + 12 + 50 @@ -2244,6 +2247,16 @@ margin:1px; Ch 10 + + + Ch 11 + + + + + Ch 12 + + - @@ -2324,6 +2337,24 @@ margin:1px; AlignHCenter|AlignVCenter|AlignCenter + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + - @@ -2404,6 +2435,23 @@ margin:1px; AlignHCenter|AlignVCenter|AlignCenter + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + - @@ -2484,6 +2532,23 @@ margin:1px; AlignHCenter|AlignVCenter|AlignCenter + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + - @@ -2564,6 +2629,24 @@ margin:1px; AlignHCenter|AlignVCenter|AlignCenter + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + - @@ -2644,6 +2727,23 @@ margin:1px; AlignHCenter|AlignVCenter|AlignCenter + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + - @@ -2724,6 +2824,24 @@ margin:1px; AlignHCenter|AlignVCenter|AlignCenter + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + + + - + + + AlignHCenter|AlignVCenter|AlignCenter + + + @@ -2832,8 +2950,8 @@ margin:1px; 0 0 - 287 - 326 + 852 + 518 @@ -3216,15 +3334,15 @@ p, li { white-space: pre-wrap; } <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Ubuntu'; font-size:9pt; font-weight:400; font-style:normal;"> <table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> <tr> <td style="border: none;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:14pt; font-weight:600; color:#ff0000;">SETTING UP FEED FORWARD REQUIRES CAUTION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Beware: Feed Forward Tuning will launch all engines around mid-throttle, you have been warned!</p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove your props initially, and for fine-tuning, make sure your airframe is safely held in place. Wear glasses and protect your face and body.</p></td></tr></table></body></html> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600; color:#ff0000;">SETTING UP FEED FORWARD REQUIRES CAUTION</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;"><br /></span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Beware: Feed Forward Tuning will launch all engines around mid-throttle, you have been warned!</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Remove your props initially, and for fine-tuning, make sure your airframe is safely held in place. Wear glasses and protect your face and body.</span></p></td></tr></table></body></html> diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/vehicleconfig.h b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/vehicleconfig.h index 5f47d0548..3b729a6dd 100644 --- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/vehicleconfig.h +++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/vehicleconfig.h @@ -31,6 +31,7 @@ #include "extensionsystem/pluginmanager.h" #include "uavobjectmanager.h" #include "uavobject.h" +#include "actuatorcommand.h" typedef struct { @@ -144,7 +145,7 @@ class VehicleConfig: public ConfigTaskWidget QStringList mixerVectors; QStringList mixerTypeDescriptions; - static const quint32 CHANNEL_NUMELEM = 10; + static const quint32 CHANNEL_NUMELEM = ActuatorCommand::CHANNEL_NUMELEM; private: diff --git a/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp b/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp index af91c677e..36409368e 100644 --- a/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configoutputwidget.cpp @@ -54,26 +54,21 @@ ConfigOutputWidget::ConfigOutputWidget(QWidget *parent) : ConfigTaskWidget(paren m_config = new Ui_OutputWidget(); m_config->setupUi(this); - ExtensionSystem::PluginManager *pm=ExtensionSystem::PluginManager::instance(); - Core::Internal::GeneralSettings * settings=pm->getObject(); - if(!settings->useExpertMode()) + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); + Core::Internal::GeneralSettings *settings = pm->getObject(); + if(!settings->useExpertMode()) { m_config->saveRCOutputToRAM->setVisible(false); + } - - - - UAVSettingsImportExportFactory * importexportplugin = pm->getObject(); - connect(importexportplugin,SIGNAL(importAboutToBegin()),this,SLOT(stopTests())); + UAVSettingsImportExportFactory *importexportplugin = pm->getObject(); + connect(importexportplugin, SIGNAL(importAboutToBegin()), this, SLOT(stopTests())); // NOTE: we have channel indices from 0 to 9, but the convention for OP is Channel 1 to Channel 10. // Register for ActuatorSettings changes: - for (unsigned int i = 0; i < ActuatorCommand::CHANNEL_NUMELEM; i++) - { - OutputChannelForm *form = new OutputChannelForm(i, this, i==0); - connect(m_config->channelOutTest, SIGNAL(toggled(bool)), - form, SLOT(enableChannelTest(bool))); - connect(form, SIGNAL(channelChanged(int,int)), - this, SLOT(sendChannelTest(int,int))); + for (unsigned int i = 0; i < ActuatorCommand::CHANNEL_NUMELEM; i++) { + OutputChannelForm *form = new OutputChannelForm(i, this, i == 0); + connect(m_config->channelOutTest, SIGNAL(toggled(bool)), form, SLOT(enableChannelTest(bool))); + connect(form, SIGNAL(channelChanged(int,int)), this, SLOT(sendChannelTest(int,int))); m_config->channelLayout->addWidget(form); } @@ -89,6 +84,8 @@ ConfigOutputWidget::ConfigOutputWidget(QWidget *parent) : ConfigTaskWidget(paren addUAVObject("ActuatorSettings"); // Associate the buttons with their UAVO fields + addWidget(m_config->cb_outputRate6); + addWidget(m_config->cb_outputRate5); addWidget(m_config->cb_outputRate4); addWidget(m_config->cb_outputRate3); addWidget(m_config->cb_outputRate2); @@ -99,17 +96,20 @@ ConfigOutputWidget::ConfigOutputWidget(QWidget *parent) : ConfigTaskWidget(paren UAVObjectManager *objManager = pm->getObject(); UAVObject* obj = objManager->getObject(QString("ActuatorCommand")); - if(UAVObject::GetGcsTelemetryUpdateMode(obj->getMetadata()) == UAVObject::UPDATEMODE_ONCHANGE) + if(UAVObject::GetGcsTelemetryUpdateMode(obj->getMetadata()) == UAVObject::UPDATEMODE_ONCHANGE) { this->setEnabled(false); - connect(obj,SIGNAL(objectUpdated(UAVObject*)),this,SLOT(disableIfNotMe(UAVObject*))); + } + connect(obj,SIGNAL(objectUpdated(UAVObject*)), this, SLOT(disableIfNotMe(UAVObject*))); refreshWidgetsValues(); } + void ConfigOutputWidget::enableControls(bool enable) { ConfigTaskWidget::enableControls(enable); - if(!enable) + if(!enable) { m_config->channelOutTest->setChecked(false); + } m_config->channelOutTest->setEnabled(enable); } @@ -118,9 +118,6 @@ ConfigOutputWidget::~ConfigOutputWidget() // Do nothing } - -// ************************************ - /** Toggles the channel testing mode by making the GCS take over the ActuatorCommand objects @@ -132,7 +129,7 @@ void ConfigOutputWidget::runChannelTests(bool state) if(state && systemAlarms.Alarm[SystemAlarms::ALARM_ACTUATOR] != SystemAlarms::ALARM_OK) { QMessageBox mbox; - mbox.setText(QString(tr("The actuator module is in an error state. This can also occur because there are no inputs. Please fix these before testing outputs."))); + mbox.setText(QString(tr("The actuator module is in an error state. This can also occur because there are no inputs. Please fix these before testing outputs."))); mbox.setStandardButtons(QMessageBox::Ok); mbox.exec(); @@ -146,7 +143,7 @@ void ConfigOutputWidget::runChannelTests(bool state) // Confirm this is definitely what they want if(state) { QMessageBox mbox; - mbox.setText(QString(tr("This option will start your motors by the amount selected on the sliders regardless of transmitter. It is recommended to remove any blades from motors. Are you sure you want to do this?"))); + mbox.setText(QString(tr("This option will start your motors by the amount selected on the sliders regardless of transmitter. It is recommended to remove any blades from motors. Are you sure you want to do this?"))); mbox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); int retval = mbox.exec(); if(retval != QMessageBox::Yes) { @@ -159,9 +156,8 @@ void ConfigOutputWidget::runChannelTests(bool state) ActuatorCommand * obj = ActuatorCommand::GetInstance(getObjectManager()); UAVObject::Metadata mdata = obj->getMetadata(); - if (state) - { - wasItMe=true; + if (state) { + wasItMe = true; accInitialData = mdata; UAVObject::SetFlightAccess(mdata, UAVObject::ACCESS_READONLY); UAVObject::SetFlightTelemetryUpdateMode(mdata, UAVObject::UPDATEMODE_ONCHANGE); @@ -169,9 +165,8 @@ void ConfigOutputWidget::runChannelTests(bool state) UAVObject::SetGcsTelemetryUpdateMode(mdata, UAVObject::UPDATEMODE_ONCHANGE); mdata.gcsTelemetryUpdatePeriod = 100; } - else - { - wasItMe=false; + else { + wasItMe = false; mdata = accInitialData; // Restore metadata } obj->setMetadata(mdata); @@ -182,10 +177,10 @@ void ConfigOutputWidget::runChannelTests(bool state) OutputChannelForm* ConfigOutputWidget::getOutputChannelForm(const int index) const { QList outputChannelForms = findChildren(); - foreach(OutputChannelForm *outputChannelForm, outputChannelForms) - { - if( outputChannelForm->index() == index) + foreach(OutputChannelForm *outputChannelForm, outputChannelForms) { + if(outputChannelForm->index() == index) { return outputChannelForm; + } } // no OutputChannelForm found with given index @@ -203,8 +198,9 @@ void ConfigOutputWidget::assignOutputChannel(UAVDataObject *obj, QString str) int index = options.indexOf(field->getValue().toString()); OutputChannelForm *outputChannelForm = getOutputChannelForm(index); - if(outputChannelForm) + if(outputChannelForm) { outputChannelForm->setAssignment(str); + } } /** @@ -213,11 +209,13 @@ void ConfigOutputWidget::assignOutputChannel(UAVDataObject *obj, QString str) */ void ConfigOutputWidget::sendChannelTest(int index, int value) { - if (!m_config->channelOutTest->isChecked()) + if (!m_config->channelOutTest->isChecked()) { return; + } - if(index < 0 || (unsigned)index >= ActuatorCommand::CHANNEL_NUMELEM) + if(index < 0 || (unsigned)index >= ActuatorCommand::CHANNEL_NUMELEM) { return; + } ActuatorCommand *actuatorCommand = ActuatorCommand::GetInstance(getObjectManager()); Q_ASSERT(actuatorCommand); @@ -244,13 +242,12 @@ void ConfigOutputWidget::refreshWidgetsValues(UAVObject * obj) Q_ASSERT(actuatorSettings); ActuatorSettings::DataFields actuatorSettingsData = actuatorSettings->getData(); - // get channel descriptions + // Get channel descriptions QStringList ChannelDesc = ConfigVehicleTypeWidget::getChannelDescriptions(); // Initialize output forms QList outputChannelForms = findChildren(); - foreach(OutputChannelForm *outputChannelForm, outputChannelForms) - { + foreach(OutputChannelForm *outputChannelForm, outputChannelForms) { outputChannelForm->setAssignment(ChannelDesc[outputChannelForm->index()]); // init min,max,neutral @@ -265,25 +262,57 @@ void ConfigOutputWidget::refreshWidgetsValues(UAVObject * obj) // Get the SpinWhileArmed setting m_config->spinningArmed->setChecked(actuatorSettingsData.MotorsSpinWhileArmed == ActuatorSettings::MOTORSSPINWHILEARMED_TRUE); - // Get Output rates for both banks - if(m_config->cb_outputRate1->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[0]))==-1) - { + // Setup output rates for all banks + if(m_config->cb_outputRate1->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[0])) == -1) { m_config->cb_outputRate1->addItem(QString::number(actuatorSettingsData.ChannelUpdateFreq[0])); } - if(m_config->cb_outputRate2->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[1]))==-1) - { + if(m_config->cb_outputRate2->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[1])) == -1) { m_config->cb_outputRate2->addItem(QString::number(actuatorSettingsData.ChannelUpdateFreq[1])); } + if(m_config->cb_outputRate3->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[2]) )== -1) { + m_config->cb_outputRate3->addItem(QString::number(actuatorSettingsData.ChannelUpdateFreq[2])); + } + if(m_config->cb_outputRate4->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[3])) == -1) { + m_config->cb_outputRate4->addItem(QString::number(actuatorSettingsData.ChannelUpdateFreq[3])); + } + if(m_config->cb_outputRate5->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[4])) == -1) { + m_config->cb_outputRate5->addItem(QString::number(actuatorSettingsData.ChannelUpdateFreq[4])); + } + if(m_config->cb_outputRate6->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[5])) == -1) { + m_config->cb_outputRate6->addItem(QString::number(actuatorSettingsData.ChannelUpdateFreq[5])); + } m_config->cb_outputRate1->setCurrentIndex(m_config->cb_outputRate1->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[0]))); m_config->cb_outputRate2->setCurrentIndex(m_config->cb_outputRate2->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[1]))); + m_config->cb_outputRate3->setCurrentIndex(m_config->cb_outputRate3->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[2]))); + m_config->cb_outputRate4->setCurrentIndex(m_config->cb_outputRate4->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[3]))); + m_config->cb_outputRate3->setCurrentIndex(m_config->cb_outputRate5->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[4]))); + m_config->cb_outputRate4->setCurrentIndex(m_config->cb_outputRate6->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[5]))); + // Reset to all disabled + m_config->chBank1->setText("-"); + m_config->chBank2->setText("-"); + m_config->chBank3->setText("-"); + m_config->chBank4->setText("-"); + m_config->chBank5->setText("-"); + m_config->chBank6->setText("-"); + m_config->cb_outputRate1->setEnabled(false); + m_config->cb_outputRate2->setEnabled(false); + m_config->cb_outputRate3->setEnabled(false); + m_config->cb_outputRate4->setEnabled(false); + m_config->cb_outputRate5->setEnabled(false); + m_config->cb_outputRate6->setEnabled(false); + + // Get connected board model ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); Q_ASSERT(pm); - UAVObjectUtilManager* utilMngr = pm->getObject(); - if (utilMngr) { + UAVObjectUtilManager *utilMngr = pm->getObject(); + Q_ASSERT(utilMngr); + + if(utilMngr) { int board = utilMngr->getBoardModel(); - if ((board & 0xff00) == 1024) { - // CopterControl family + // Setup labels and combos for banks according to board type + if ((board & 0xff00) == 0x0400) { + // Coptercontrol family of boards 4 timer banks m_config->chBank1->setText("1-3"); m_config->chBank2->setText("4"); m_config->chBank3->setText("5,7-8"); @@ -292,37 +321,27 @@ void ConfigOutputWidget::refreshWidgetsValues(UAVObject * obj) m_config->cb_outputRate2->setEnabled(true); m_config->cb_outputRate3->setEnabled(true); m_config->cb_outputRate4->setEnabled(true); - if(m_config->cb_outputRate3->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[2]))==-1) - { - m_config->cb_outputRate3->addItem(QString::number(actuatorSettingsData.ChannelUpdateFreq[2])); - } - if(m_config->cb_outputRate4->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[3]))==-1) - { - m_config->cb_outputRate4->addItem(QString::number(actuatorSettingsData.ChannelUpdateFreq[3])); - } - m_config->cb_outputRate3->setCurrentIndex(m_config->cb_outputRate3->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[2]))); - m_config->cb_outputRate4->setCurrentIndex(m_config->cb_outputRate4->findText(QString::number(actuatorSettingsData.ChannelUpdateFreq[3]))); - } else if ((board & 0xff00) == 256 ) { - // Mainboard family + } + else if((board & 0xff00) == 0x0900) { + // Revolution family of boards 6 timer banks + m_config->chBank1->setText("1-2"); + m_config->chBank2->setText("3"); + m_config->chBank3->setText("4"); + m_config->chBank4->setText("5-6"); + m_config->chBank5->setText("7-8"); + m_config->chBank6->setText("9-10"); m_config->cb_outputRate1->setEnabled(true); m_config->cb_outputRate2->setEnabled(true); - m_config->cb_outputRate3->setEnabled(false); - m_config->cb_outputRate4->setEnabled(false); - m_config->chBank1->setText("1-4"); - m_config->chBank2->setText("5-8"); - m_config->chBank3->setText("-"); - m_config->chBank4->setText("-"); - m_config->cb_outputRate3->addItem("0"); - m_config->cb_outputRate3->setCurrentIndex(m_config->cb_outputRate3->findText("0")); - m_config->cb_outputRate4->addItem("0"); - m_config->cb_outputRate4->setCurrentIndex(m_config->cb_outputRate4->findText("0")); + m_config->cb_outputRate3->setEnabled(true); + m_config->cb_outputRate4->setEnabled(true); + m_config->cb_outputRate5->setEnabled(true); + m_config->cb_outputRate6->setEnabled(true); } } // Get Channel ranges: - foreach(OutputChannelForm *outputChannelForm, outputChannelForms) - { - int minValue = actuatorSettingsData.ChannelMin[outputChannelForm->index()]; + foreach(OutputChannelForm *outputChannelForm, outputChannelForms) { + int minValue = actuatorSettingsData.ChannelMin[outputChannelForm->index()]; int maxValue = actuatorSettingsData.ChannelMax[outputChannelForm->index()]; outputChannelForm->minmax(minValue, maxValue); @@ -345,8 +364,7 @@ void ConfigOutputWidget::updateObjectsFromWidgets() // Set channel ranges QList outputChannelForms = findChildren(); - foreach(OutputChannelForm *outputChannelForm, outputChannelForms) - { + foreach(OutputChannelForm *outputChannelForm, outputChannelForms) { actuatorSettingsData.ChannelMax[outputChannelForm->index()] = outputChannelForm->max(); actuatorSettingsData.ChannelMin[outputChannelForm->index()] = outputChannelForm->min(); actuatorSettingsData.ChannelNeutral[outputChannelForm->index()] = outputChannelForm->neutral(); @@ -357,11 +375,12 @@ void ConfigOutputWidget::updateObjectsFromWidgets() actuatorSettingsData.ChannelUpdateFreq[1] = m_config->cb_outputRate2->currentText().toUInt(); actuatorSettingsData.ChannelUpdateFreq[2] = m_config->cb_outputRate3->currentText().toUInt(); actuatorSettingsData.ChannelUpdateFreq[3] = m_config->cb_outputRate4->currentText().toUInt(); + actuatorSettingsData.ChannelUpdateFreq[4] = m_config->cb_outputRate5->currentText().toUInt(); + actuatorSettingsData.ChannelUpdateFreq[5] = m_config->cb_outputRate6->currentText().toUInt(); - if(m_config->spinningArmed->isChecked() == true) - actuatorSettingsData.MotorsSpinWhileArmed = ActuatorSettings::MOTORSSPINWHILEARMED_TRUE; - else - actuatorSettingsData.MotorsSpinWhileArmed = ActuatorSettings::MOTORSSPINWHILEARMED_FALSE; + actuatorSettingsData.MotorsSpinWhileArmed = m_config->spinningArmed->isChecked() ? + ActuatorSettings::MOTORSSPINWHILEARMED_TRUE : + ActuatorSettings::MOTORSSPINWHILEARMED_FALSE; // Apply settings actuatorSettings->setData(actuatorSettingsData); @@ -370,7 +389,6 @@ void ConfigOutputWidget::updateObjectsFromWidgets() void ConfigOutputWidget::openHelp() { - QDesktopServices::openUrl( QUrl("http://wiki.openpilot.org/x/WIGf", QUrl::StrictMode) ); } @@ -381,11 +399,12 @@ void ConfigOutputWidget::stopTests() void ConfigOutputWidget::disableIfNotMe(UAVObject* obj) { - if(UAVObject::GetGcsTelemetryUpdateMode(obj->getMetadata()) == UAVObject::UPDATEMODE_ONCHANGE) - { - if(!wasItMe) + if(UAVObject::GetGcsTelemetryUpdateMode(obj->getMetadata()) == UAVObject::UPDATEMODE_ONCHANGE) { + if(!wasItMe) { this->setEnabled(false); + } } - else + else { this->setEnabled(true); + } } diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp index 99cfebdb4..dd290073a 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp @@ -648,8 +648,8 @@ void ConfigVehicleTypeWidget::updateCustomAirframeUI() m_aircraft->customThrottle2Curve->initLinearCurve(curveValues.count(), 1.0, m_aircraft->customThrottle2Curve->getMin()); } - // Update the mixer table: - for (int channel=0; channel<(int)(VehicleConfig::CHANNEL_NUMELEM); channel++) { + // Update the mixer table: + for (int channel=0; channel < m_aircraft->customMixerTable->columnCount(); channel++) { UAVObjectField* field = mixer->getField(mixerTypes.at(channel)); if (field) { diff --git a/ground/openpilotgcs/src/plugins/config/output.ui b/ground/openpilotgcs/src/plugins/config/output.ui index e49f240c6..fbe9e0e0a 100755 --- a/ground/openpilotgcs/src/plugins/config/output.ui +++ b/ground/openpilotgcs/src/plugins/config/output.ui @@ -117,12 +117,12 @@ 0 0 668 - 654 + 671 - -1 + 6 12 @@ -145,27 +145,31 @@ Output Update Speed - - 6 - 12 - - - - Qt::Horizontal + + 6 + + + + + - - - QSizePolicy::Minimum + + Qt::AlignCenter - - - 5 - 20 - + + + + + + - - + + Qt::AlignCenter + + @@ -183,45 +187,21 @@ - - - - - + + + + Qt::Horizontal - - Qt::AlignCenter + + QSizePolicy::Minimum - - - - - - - + + + 5 + 20 + - - Qt::AlignCenter - - - - - - - - - - - Qt::AlignCenter - - - - - - - - - - - Qt::AlignCenter - - + @@ -251,31 +231,33 @@ - - - - - 0 - 0 - - - - - 0 - 20 - - - - - 75 - true - - + + - Update rate: + - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Qt::AlignCenter + + + + + + + - + + + Qt::AlignCenter + + + + + + + - + + + Qt::AlignCenter @@ -395,6 +377,34 @@ Leave at 50Hz for fixed wing. + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 75 + true + + + + Update rate: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + @@ -472,6 +482,132 @@ Leave at 50Hz for fixed wing. Setup "TurboPWM" here: usual value is 400 Hz for multirotor airframes. +Leave at 50Hz for fixed wing. + + + + 50 + + + + + 60 + + + + + 125 + + + + + 165 + + + + + 270 + + + + + 330 + + + + + 400 + + + + + + + + - + + + Qt::AlignCenter + + + + + + + false + + + + 0 + 0 + + + + + 0 + 20 + + + + Setup "TurboPWM" here: usual value is 400 Hz for multirotor airframes. +Leave at 50Hz for fixed wing. + + + + 50 + + + + + 60 + + + + + 125 + + + + + 165 + + + + + 270 + + + + + 330 + + + + + 400 + + + + + + + + false + + + + 0 + 0 + + + + + 0 + 20 + + + + Setup "TurboPWM" here: usual value is 400 Hz for multirotor airframes. Leave at 50Hz for fixed wing. diff --git a/shared/uavobjectdefinition/actuatorcommand.xml b/shared/uavobjectdefinition/actuatorcommand.xml index 17a7b7af5..7f8ce055e 100644 --- a/shared/uavobjectdefinition/actuatorcommand.xml +++ b/shared/uavobjectdefinition/actuatorcommand.xml @@ -1,7 +1,7 @@ Contains the pulse duration sent to each of the channels. Set by @ref ActuatorModule - + diff --git a/shared/uavobjectdefinition/actuatorsettings.xml b/shared/uavobjectdefinition/actuatorsettings.xml index 3ac0f91cd..98681555e 100644 --- a/shared/uavobjectdefinition/actuatorsettings.xml +++ b/shared/uavobjectdefinition/actuatorsettings.xml @@ -2,11 +2,11 @@ Settings for the @ref ActuatorModule that controls the channel assignments for the mixer based on AircraftType - - - - - + + + + + diff --git a/shared/uavobjectdefinition/mixersettings.xml b/shared/uavobjectdefinition/mixersettings.xml index f5a114f95..55bf96a9a 100644 --- a/shared/uavobjectdefinition/mixersettings.xml +++ b/shared/uavobjectdefinition/mixersettings.xml @@ -75,6 +75,12 @@ + + + + + + diff --git a/shared/uavobjectdefinition/mixerstatus.xml b/shared/uavobjectdefinition/mixerstatus.xml index bc52265e3..3d1e4e68b 100644 --- a/shared/uavobjectdefinition/mixerstatus.xml +++ b/shared/uavobjectdefinition/mixerstatus.xml @@ -11,6 +11,8 @@ + +