From c39fb50acf04a027fae3c7359847f09a326d217a Mon Sep 17 00:00:00 2001 From: Laurent Lalanne Date: Tue, 28 Jan 2014 13:12:39 +0100 Subject: [PATCH 01/29] OP-1187 Fix : Like Win package, qt_fr.qm file is needed under Linux --- package/linux/deb_common/rules | 1 + 1 file changed, 1 insertion(+) diff --git a/package/linux/deb_common/rules b/package/linux/deb_common/rules index daa54864b..aee241f9d 100644 --- a/package/linux/deb_common/rules +++ b/package/linux/deb_common/rules @@ -36,6 +36,7 @@ install: cp -arp build/openpilotgcs_release/bin debian/openpilot/usr/local/OpenPilot cp -arp build/openpilotgcs_release/lib debian/openpilot/usr/local/OpenPilot cp -arp build/openpilotgcs_release/share debian/openpilot/usr/local/OpenPilot + cp -arp build/openpilotgcs_release/share/openpilotgcs/translations/openpilotgcs_fr.qm debian/openpilot/usr/local/OpenPilot/share/openpilotgcs/translations/qt_fr.qm cp -arp build/openpilotgcs_release/.obj debian/openpilot/usr/local/OpenPilot cp -arp package/linux/qt.conf debian/openpilot/usr/local/OpenPilot/bin cp -arp package/linux/openpilot.desktop debian/openpilot/usr/share/applications From 8e837fb985459a9317d4f3d76ee8d8f2c48ebd01 Mon Sep 17 00:00:00 2001 From: Laurent Lalanne Date: Wed, 29 Jan 2014 13:42:39 +0100 Subject: [PATCH 02/29] OP-1187 Wrong file copy in lasted commit. qt_fr.qm located in tools/Qt_install_dir, allow copy of this file for all systems --- .../share/openpilotgcs/translations/translations.pro | 4 ++-- package/linux/deb_common/rules | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro b/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro index 9e07bfca3..9c03609a7 100644 --- a/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro +++ b/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro @@ -71,7 +71,7 @@ qmfiles.CONFIG += no_check_exist INSTALLS += qmfiles #========= begin block copying qt_*.qm files ========== -win32 { +#win32 { defineReplace(QtQmExists) { for(lang,$$1) { qm_file = $$[QT_INSTALL_TRANSLATIONS]/qt_$${lang}.qm @@ -88,5 +88,5 @@ win32 { copyQT_QMs.name = Copy ${QMAKE_FILE_IN} copyQT_QMs.CONFIG += no_link QMAKE_EXTRA_COMPILERS += copyQT_QMs -} +#} #========= end block copying qt_*.qm files ============ diff --git a/package/linux/deb_common/rules b/package/linux/deb_common/rules index aee241f9d..e3fed4f80 100644 --- a/package/linux/deb_common/rules +++ b/package/linux/deb_common/rules @@ -35,8 +35,7 @@ install: # Add here commands to install the package into debian/ cp -arp build/openpilotgcs_release/bin debian/openpilot/usr/local/OpenPilot cp -arp build/openpilotgcs_release/lib debian/openpilot/usr/local/OpenPilot - cp -arp build/openpilotgcs_release/share debian/openpilot/usr/local/OpenPilot - cp -arp build/openpilotgcs_release/share/openpilotgcs/translations/openpilotgcs_fr.qm debian/openpilot/usr/local/OpenPilot/share/openpilotgcs/translations/qt_fr.qm + cp -arp build/openpilotgcs_release/share debian/openpilot/usr/local/OpenPilot cp -arp build/openpilotgcs_release/.obj debian/openpilot/usr/local/OpenPilot cp -arp package/linux/qt.conf debian/openpilot/usr/local/OpenPilot/bin cp -arp package/linux/openpilot.desktop debian/openpilot/usr/share/applications From 66fdc73e71c909bc8c9c69083b6461935103472f Mon Sep 17 00:00:00 2001 From: Laurent Lalanne Date: Fri, 31 Jan 2014 19:15:15 +0100 Subject: [PATCH 03/29] OP-1187 Removed "#" --- .../share/openpilotgcs/translations/translations.pro | 2 -- 1 file changed, 2 deletions(-) diff --git a/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro b/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro index 9c03609a7..e788214ad 100644 --- a/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro +++ b/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro @@ -71,7 +71,6 @@ qmfiles.CONFIG += no_check_exist INSTALLS += qmfiles #========= begin block copying qt_*.qm files ========== -#win32 { defineReplace(QtQmExists) { for(lang,$$1) { qm_file = $$[QT_INSTALL_TRANSLATIONS]/qt_$${lang}.qm @@ -88,5 +87,4 @@ INSTALLS += qmfiles copyQT_QMs.name = Copy ${QMAKE_FILE_IN} copyQT_QMs.CONFIG += no_link QMAKE_EXTRA_COMPILERS += copyQT_QMs -#} #========= end block copying qt_*.qm files ============ From f0a1555c141ad7dc36fb26736d7fe16596141556 Mon Sep 17 00:00:00 2001 From: Laurent Lalanne Date: Mon, 3 Feb 2014 11:57:33 +0100 Subject: [PATCH 04/29] OP-1187 Indentation --- .../translations/translations.pro | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro b/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro index e788214ad..6338ebf5d 100644 --- a/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro +++ b/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro @@ -71,20 +71,20 @@ qmfiles.CONFIG += no_check_exist INSTALLS += qmfiles #========= begin block copying qt_*.qm files ========== - defineReplace(QtQmExists) { - for(lang,$$1) { - qm_file = $$[QT_INSTALL_TRANSLATIONS]/qt_$${lang}.qm - exists($$qm_file) : result += $$qm_file - } - return($$result) +defineReplace(QtQmExists) { + for(lang,$$1) { + qm_file = $$[QT_INSTALL_TRANSLATIONS]/qt_$${lang}.qm + exists($$qm_file) : result += $$qm_file } - QT_TRANSLATIONS = $$QtQmExists(LANGUAGES) + return($$result) +} +QT_TRANSLATIONS = $$QtQmExists(LANGUAGES) - copyQT_QMs.input = QT_TRANSLATIONS - copyQT_QMs.output = $$GCS_DATA_PATH/translations/${QMAKE_FILE_BASE}.qm - isEmpty(vcproj):copyQT_QMs.variable_out = PRE_TARGETDEPS - copyQT_QMs.commands = $(COPY_FILE) ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT} - copyQT_QMs.name = Copy ${QMAKE_FILE_IN} - copyQT_QMs.CONFIG += no_link - QMAKE_EXTRA_COMPILERS += copyQT_QMs +copyQT_QMs.input = QT_TRANSLATIONS +copyQT_QMs.output = $$GCS_DATA_PATH/translations/${QMAKE_FILE_BASE}.qm +isEmpty(vcproj):copyQT_QMs.variable_out = PRE_TARGETDEPS +copyQT_QMs.commands = $(COPY_FILE) ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT} +copyQT_QMs.name = Copy ${QMAKE_FILE_IN} +copyQT_QMs.CONFIG += no_link +QMAKE_EXTRA_COMPILERS += copyQT_QMs #========= end block copying qt_*.qm files ============ From 517123d5216e911f7845b933fa261cbad3a4d5c8 Mon Sep 17 00:00:00 2001 From: m_thread Date: Thu, 6 Feb 2014 16:27:58 +0100 Subject: [PATCH 05/29] OP-1191 OPLink Configuration cleanup --- .../plugins/config/configpipxtremewidget.cpp | 369 +- .../plugins/config/configpipxtremewidget.h | 11 +- .../src/plugins/config/pipxtreme.ui | 3526 +++++++++-------- 3 files changed, 1979 insertions(+), 1927 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp index 494cce35b..ca49af80a 100644 --- a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp @@ -40,19 +40,14 @@ ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager *objManager = pm->getObject(); oplinkStatusObj = dynamic_cast(objManager->getObject("OPLinkStatus")); - if (oplinkStatusObj != NULL) { - connect(oplinkStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateStatus(UAVObject *))); - } else { - qDebug() << "Error: Object is unknown (OPLinkStatus)."; - } + Q_ASSERT(oplinkStatusObj); + connect(oplinkStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateStatus(UAVObject *))); // Connect to the OPLinkSettings object updates oplinkSettingsObj = dynamic_cast(objManager->getObject("OPLinkSettings")); - if (oplinkSettingsObj != NULL) { - connect(oplinkSettingsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateSettings(UAVObject *))); - } else { - qDebug() << "Error: Object is unknown (OPLinkSettings)."; - } + Q_ASSERT(oplinkSettingsObj); + connect(oplinkSettingsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateSettings(UAVObject *))); + Core::Internal::GeneralSettings *settings = pm->getObject(); if (!settings->useExpertMode()) { m_oplink->Apply->setVisible(false); @@ -62,7 +57,6 @@ ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget addWidgetBinding("OPLinkSettings", "MainPort", m_oplink->MainPort); addWidgetBinding("OPLinkSettings", "FlexiPort", m_oplink->FlexiPort); addWidgetBinding("OPLinkSettings", "VCPPort", m_oplink->VCPPort); - addWidgetBinding("OPLinkSettings", "ComSpeed", m_oplink->ComSpeed); addWidgetBinding("OPLinkSettings", "MaxRFPower", m_oplink->MaxRFTxPower); addWidgetBinding("OPLinkSettings", "MinChannel", m_oplink->MinimumChannel); addWidgetBinding("OPLinkSettings", "MaxChannel", m_oplink->MaximumChannel); @@ -72,6 +66,7 @@ ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget addWidgetBinding("OPLinkSettings", "OneWay", m_oplink->OneWayLink); addWidgetBinding("OPLinkSettings", "PPMOnly", m_oplink->PPMOnly); addWidgetBinding("OPLinkSettings", "PPM", m_oplink->PPM); + addWidgetBinding("OPLinkSettings", "ComSpeed", m_oplink->ComSpeed); addWidgetBinding("OPLinkStatus", "DeviceID", m_oplink->DeviceID); addWidgetBinding("OPLinkStatus", "RxGood", m_oplink->Good); @@ -94,27 +89,19 @@ ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget addWidgetBinding("OPLinkStatus", "TXRate", m_oplink->TXRate); // Connect the bind buttons - connect(m_oplink->Bind1, SIGNAL(clicked()), this, SLOT(bind1())); - connect(m_oplink->Bind2, SIGNAL(clicked()), this, SLOT(bind2())); - connect(m_oplink->Bind3, SIGNAL(clicked()), this, SLOT(bind3())); - connect(m_oplink->Bind4, SIGNAL(clicked()), this, SLOT(bind3())); + connect(m_oplink->Bind1, SIGNAL(clicked()), this, SLOT(bind())); + connect(m_oplink->Bind2, SIGNAL(clicked()), this, SLOT(bind())); + connect(m_oplink->Bind3, SIGNAL(clicked()), this, SLOT(bind())); + connect(m_oplink->Bind4, SIGNAL(clicked()), this, SLOT(bind())); // Connect the selection changed signals. - connect(m_oplink->PPMOnly, SIGNAL(toggled(bool)), this, SLOT(ppmOnlyToggled(bool))); - connect(m_oplink->ComSpeed, SIGNAL(currentIndexChanged(int)), this, SLOT(comSpeedChanged(int))); - - ppmOnlyToggled(m_oplink->PPMOnly->isChecked()); - - // Add scroll bar when necessary - QScrollArea *scroll = new QScrollArea; - scroll->setWidget(m_oplink->frame_3); - scroll->setWidgetResizable(true); - m_oplink->verticalLayout_3->addWidget(scroll); + connect(m_oplink->PPMOnly, SIGNAL(toggled(bool)), this, SLOT(ppmOnlyChanged())); // Request and update of the setting object. settingsUpdated = false; autoLoadWidgets(); disableMouseWheelEvents(); + updateEnableControls(); } ConfigPipXtremeWidget::~ConfigPipXtremeWidget() @@ -130,101 +117,102 @@ void ConfigPipXtremeWidget::updateStatus(UAVObject *object) oplinkSettingsObj->requestUpdate(); } + // Update the link state + UAVObjectField *linkField = object->getField("LinkState"); + m_oplink->LinkState->setText(linkField->getValue().toString()); + bool linkConnected = (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_CONNECTED)); + bool modemEnabled = linkConnected || (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_DISCONNECTED)) || + (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_ENABLED)); + + UAVObjectField *pairRssiField = object->getField("PairSignalStrengths"); + + bool bound; + bool ok; + quint32 boundPairId = m_oplink->CoordID->text().toUInt(&ok, 16); + // Update the detected devices. UAVObjectField *pairIdField = object->getField("PairIDs"); - if (pairIdField) { - quint32 pairid1 = pairIdField->getValue(0).toUInt(); - m_oplink->PairID1->setText(QString::number(pairid1, 16).toUpper()); - m_oplink->PairID1->setEnabled(false); - m_oplink->Bind1->setEnabled(pairid1); - quint32 pairid2 = pairIdField->getValue(1).toUInt(); - m_oplink->PairID2->setText(QString::number(pairIdField->getValue(1).toUInt(), 16).toUpper()); - m_oplink->PairID2->setEnabled(false); - m_oplink->Bind2->setEnabled(pairid2); - quint32 pairid3 = pairIdField->getValue(2).toUInt(); - m_oplink->PairID3->setText(QString::number(pairIdField->getValue(2).toUInt(), 16).toUpper()); - m_oplink->PairID3->setEnabled(false); - m_oplink->Bind3->setEnabled(pairid3); - quint32 pairid4 = pairIdField->getValue(3).toUInt(); - m_oplink->PairID4->setText(QString::number(pairIdField->getValue(3).toUInt(), 16).toUpper()); - m_oplink->PairID4->setEnabled(false); - m_oplink->Bind4->setEnabled(pairid4); - } else { - qDebug() << "ConfigPipXtremeWidget: Count not read PairID field."; - } - UAVObjectField *pairRssiField = object->getField("PairSignalStrengths"); - if (pairRssiField) { - m_oplink->PairSignalStrengthBar1->setValue(pairRssiField->getValue(0).toInt()); - m_oplink->PairSignalStrengthBar2->setValue(pairRssiField->getValue(1).toInt()); - m_oplink->PairSignalStrengthBar3->setValue(pairRssiField->getValue(2).toInt()); - m_oplink->PairSignalStrengthBar4->setValue(pairRssiField->getValue(3).toInt()); - m_oplink->PairSignalStrengthLabel1->setText(QString("%1dB").arg(pairRssiField->getValue(0).toInt())); - m_oplink->PairSignalStrengthLabel2->setText(QString("%1dB").arg(pairRssiField->getValue(1).toInt())); - m_oplink->PairSignalStrengthLabel3->setText(QString("%1dB").arg(pairRssiField->getValue(2).toInt())); - m_oplink->PairSignalStrengthLabel4->setText(QString("%1dB").arg(pairRssiField->getValue(3).toInt())); - } else { - qDebug() << "ConfigPipXtremeWidget: Count not read PairID field."; - } + quint32 pairid = pairIdField->getValue(0).toUInt(); + bound = (pairid == boundPairId); + m_oplink->PairID1->setText(QString::number(pairid, 16).toUpper()); + m_oplink->PairID1->setEnabled(false); + m_oplink->Bind1->setText(bound ? tr("Unbind") : tr("Bind")); + m_oplink->Bind1->setEnabled(pairid && modemEnabled); + m_oplink->PairSignalStrengthBar1->setValue(((bound && !linkConnected) || !modemEnabled) ? -127 : pairRssiField->getValue(0).toInt()); + m_oplink->PairSignalStrengthLabel1->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar1->value())); + + pairid = pairIdField->getValue(1).toUInt(); + bound = (pairid == boundPairId); + m_oplink->PairID2->setText(QString::number(pairid, 16).toUpper()); + m_oplink->PairID2->setEnabled(false); + m_oplink->Bind2->setText(bound ? tr("Unbind") : tr("Bind")); + m_oplink->Bind2->setEnabled(pairid && modemEnabled); + m_oplink->PairSignalStrengthBar2->setValue(((bound && !linkConnected) || !modemEnabled) ? -127 : pairRssiField->getValue(1).toInt()); + m_oplink->PairSignalStrengthLabel2->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar2->value())); + + pairid = pairIdField->getValue(2).toUInt(); + bound = (pairid == boundPairId); + m_oplink->PairID3->setText(QString::number(pairid, 16).toUpper()); + m_oplink->PairID3->setEnabled(false); + m_oplink->Bind3->setText(bound ? tr("Unbind") : tr("Bind")); + m_oplink->Bind3->setEnabled(pairid && modemEnabled); + m_oplink->PairSignalStrengthBar3->setValue(((bound && !linkConnected) || !modemEnabled) ? -127 : pairRssiField->getValue(2).toInt()); + m_oplink->PairSignalStrengthLabel3->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar3->value())); + + pairid = pairIdField->getValue(3).toUInt(); + bound = (pairid == boundPairId); + m_oplink->PairID4->setText(QString::number(pairid, 16).toUpper()); + m_oplink->PairID4->setEnabled(false); + m_oplink->Bind4->setText(bound ? tr("Unbind") : tr("Bind")); + m_oplink->Bind4->setEnabled(pairid && modemEnabled); + m_oplink->PairSignalStrengthBar4->setValue(((bound && !linkConnected) || !modemEnabled) ? -127 : pairRssiField->getValue(3).toInt()); + m_oplink->PairSignalStrengthLabel4->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar4->value())); // Update the Description field // TODO use UAVObjectUtilManager::descriptionToStructure() UAVObjectField *descField = object->getField("Description"); - if (descField) { - if (descField->getValue(0) != QChar(255)) { - /* - * This looks like a binary with a description at the end: - * 4 bytes: header: "OpFw". - * 4 bytes: GIT commit tag (short version of SHA1). - * 4 bytes: Unix timestamp of compile time. - * 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files. - * 26 bytes: commit tag if it is there, otherwise branch name. '-dirty' may be added if needed. Zero-padded. - * 20 bytes: SHA1 sum of the firmware. - * 20 bytes: SHA1 sum of the uavo definitions. - * 20 bytes: free for now. - */ - char buf[OPLinkStatus::DESCRIPTION_NUMELEM]; - for (unsigned int i = 0; i < 26; ++i) { - buf[i] = descField->getValue(i + 14).toChar().toLatin1(); - } - buf[26] = '\0'; - QString descstr(buf); - quint32 gitDate = descField->getValue(11).toChar().toLatin1() & 0xFF; - for (int i = 1; i < 4; i++) { - gitDate = gitDate << 8; - gitDate += descField->getValue(11 - i).toChar().toLatin1() & 0xFF; - } - QString date = QDateTime::fromTime_t(gitDate).toUTC().toString("yyyy-MM-dd HH:mm"); - m_oplink->FirmwareVersion->setText(descstr + " " + date); - } else { - m_oplink->FirmwareVersion->setText(tr("Unknown")); + if (descField->getValue(0) != QChar(255)) { + /* + * This looks like a binary with a description at the end: + * 4 bytes: header: "OpFw". + * 4 bytes: GIT commit tag (short version of SHA1). + * 4 bytes: Unix timestamp of compile time. + * 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files. + * 26 bytes: commit tag if it is there, otherwise branch name. '-dirty' may be added if needed. Zero-padded. + * 20 bytes: SHA1 sum of the firmware. + * 20 bytes: SHA1 sum of the uavo definitions. + * 20 bytes: free for now. + */ + char buf[OPLinkStatus::DESCRIPTION_NUMELEM]; + for (unsigned int i = 0; i < 26; ++i) { + buf[i] = descField->getValue(i + 14).toChar().toLatin1(); } + buf[26] = '\0'; + QString descstr(buf); + quint32 gitDate = descField->getValue(11).toChar().toLatin1() & 0xFF; + for (int i = 1; i < 4; i++) { + gitDate = gitDate << 8; + gitDate += descField->getValue(11 - i).toChar().toLatin1() & 0xFF; + } + QString date = QDateTime::fromTime_t(gitDate).toUTC().toString("yyyy-MM-dd HH:mm"); + m_oplink->FirmwareVersion->setText(descstr + " " + date); } else { - qDebug() << "ConfigPipXtremeWidget: Failed to read Description field."; + m_oplink->FirmwareVersion->setText(tr("Unknown")); } // Update the serial number field UAVObjectField *serialField = object->getField("CPUSerial"); - if (serialField) { - char buf[OPLinkStatus::CPUSERIAL_NUMELEM * 2 + 1]; - for (unsigned int i = 0; i < OPLinkStatus::CPUSERIAL_NUMELEM; ++i) { - unsigned char val = serialField->getValue(i).toUInt() >> 4; - buf[i * 2] = ((val < 10) ? '0' : '7') + val; - val = serialField->getValue(i).toUInt() & 0xf; - buf[i * 2 + 1] = ((val < 10) ? '0' : '7') + val; - } - buf[OPLinkStatus::CPUSERIAL_NUMELEM * 2] = '\0'; - m_oplink->SerialNumber->setText(buf); - } else { - qDebug() << "ConfigPipXtremeWidget: Failed to read CPUSerial field."; + char buf[OPLinkStatus::CPUSERIAL_NUMELEM * 2 + 1]; + for (unsigned int i = 0; i < OPLinkStatus::CPUSERIAL_NUMELEM; ++i) { + unsigned char val = serialField->getValue(i).toUInt() >> 4; + buf[i * 2] = ((val < 10) ? '0' : '7') + val; + val = serialField->getValue(i).toUInt() & 0xf; + buf[i * 2 + 1] = ((val < 10) ? '0' : '7') + val; } + buf[OPLinkStatus::CPUSERIAL_NUMELEM * 2] = '\0'; + m_oplink->SerialNumber->setText(buf); - // Update the link state - UAVObjectField *linkField = object->getField("LinkState"); - if (linkField) { - m_oplink->LinkState->setText(linkField->getValue().toString()); - } else { - qDebug() << "ConfigPipXtremeWidget: Failed to read LinkState field."; - } + updateEnableControls(); } /*! @@ -239,124 +227,93 @@ void ConfigPipXtremeWidget::updateSettings(UAVObject *object) // Enable components based on the board type connected. UAVObjectField *board_type_field = oplinkStatusObj->getField("BoardType"); - if (board_type_field) { - switch (board_type_field->getValue().toInt()) { - case 0x09: // Revolution - m_oplink->MainPort->setVisible(false); - m_oplink->MainPortLabel->setVisible(false); - m_oplink->FlexiPort->setVisible(false); - m_oplink->FlexiPortLabel->setVisible(false); - m_oplink->VCPPort->setVisible(false); - m_oplink->VCPPortLabel->setVisible(false); - m_oplink->FlexiIOPort->setVisible(false); - m_oplink->FlexiIOPortLabel->setVisible(false); - m_oplink->PPM->setVisible(true); - break; - case 0x03: // OPLinkMini - m_oplink->MainPort->setVisible(true); - m_oplink->MainPortLabel->setVisible(true); - m_oplink->FlexiPort->setVisible(true); - m_oplink->FlexiPortLabel->setVisible(true); - m_oplink->VCPPort->setVisible(true); - m_oplink->VCPPortLabel->setVisible(true); - m_oplink->FlexiIOPort->setVisible(false); - m_oplink->FlexiIOPortLabel->setVisible(false); - m_oplink->PPM->setVisible(false); - break; - case 0x0A: - m_oplink->MainPort->setVisible(true); - m_oplink->MainPortLabel->setVisible(true); - m_oplink->FlexiPort->setVisible(true); - m_oplink->FlexiPortLabel->setVisible(true); - m_oplink->VCPPort->setVisible(true); - m_oplink->VCPPortLabel->setVisible(true); - m_oplink->FlexiIOPort->setVisible(true); - m_oplink->FlexiIOPortLabel->setVisible(true); - m_oplink->PPM->setVisible(false); - break; - default: - // This shouldn't happen. - break; - } - } else { - qDebug() << "BoardType not found."; + switch (board_type_field->getValue().toInt()) { + case 0x09: // Revolution + m_oplink->MainPort->setVisible(false); + m_oplink->MainPortLabel->setVisible(false); + m_oplink->FlexiPort->setVisible(false); + m_oplink->FlexiPortLabel->setVisible(false); + m_oplink->VCPPort->setVisible(false); + m_oplink->VCPPortLabel->setVisible(false); + m_oplink->FlexiIOPort->setVisible(false); + m_oplink->FlexiIOPortLabel->setVisible(false); + m_oplink->PPM->setVisible(true); + break; + case 0x03: // OPLinkMini + m_oplink->MainPort->setVisible(true); + m_oplink->MainPortLabel->setVisible(true); + m_oplink->FlexiPort->setVisible(true); + m_oplink->FlexiPortLabel->setVisible(true); + m_oplink->VCPPort->setVisible(true); + m_oplink->VCPPortLabel->setVisible(true); + m_oplink->FlexiIOPort->setVisible(false); + m_oplink->FlexiIOPortLabel->setVisible(false); + m_oplink->PPM->setVisible(false); + break; + case 0x0A: // OPLink? + m_oplink->MainPort->setVisible(true); + m_oplink->MainPortLabel->setVisible(true); + m_oplink->FlexiPort->setVisible(true); + m_oplink->FlexiPortLabel->setVisible(true); + m_oplink->VCPPort->setVisible(true); + m_oplink->VCPPortLabel->setVisible(true); + m_oplink->FlexiIOPort->setVisible(true); + m_oplink->FlexiIOPortLabel->setVisible(true); + m_oplink->PPM->setVisible(false); + break; + default: + // This shouldn't happen. + break; } - - // Enable the push buttons. - enableControls(true); + updateEnableControls(); } } +void ConfigPipXtremeWidget::updateEnableControls() +{ + enableControls(true); + ppmOnlyChanged(); +} + void ConfigPipXtremeWidget::disconnected() { if (settingsUpdated) { settingsUpdated = false; - - // Enable the push buttons. - enableControls(false); } } -void ConfigPipXtremeWidget::SetPairID(QLineEdit *pairIdWidget) +void ConfigPipXtremeWidget::bind() { - // Get the pair ID out of the selection widget - quint32 pairID = 0; - bool okay; + QPushButton *bindButton = qobject_cast(sender()); - pairID = pairIdWidget->text().toUInt(&okay, 16); - - // Store the ID in the coord ID field. - m_oplink->CoordID->setText(QString::number(pairID, 16).toUpper()); -} - -void ConfigPipXtremeWidget::bind1() -{ - SetPairID(m_oplink->PairID1); -} - -void ConfigPipXtremeWidget::bind2() -{ - SetPairID(m_oplink->PairID1); -} - -void ConfigPipXtremeWidget::bind3() -{ - SetPairID(m_oplink->PairID1); -} - -void ConfigPipXtremeWidget::bind4() -{ - SetPairID(m_oplink->PairID1); -} - -void ConfigPipXtremeWidget::ppmOnlyToggled(bool on) -{ - if (on) { - m_oplink->PPM->setEnabled(false); - m_oplink->OneWayLink->setEnabled(false); - m_oplink->ComSpeed->setEnabled(false); - } else { - m_oplink->PPM->setEnabled(true); - m_oplink->OneWayLink->setEnabled(true); - m_oplink->ComSpeed->setEnabled(true); - // Change the comspeed from 4800 of PPM only is turned off. - if (m_oplink->ComSpeed->currentIndex() == OPLinkSettings::COMSPEED_4800) { - m_oplink->ComSpeed->setCurrentIndex(OPLinkSettings::COMSPEED_9600); + if (bindButton) { + QLineEdit *editField = NULL; + if (bindButton == m_oplink->Bind1) { + editField = m_oplink->PairID1; + } else if (bindButton == m_oplink->Bind2) { + editField = m_oplink->PairID2; + } else if (bindButton == m_oplink->Bind3) { + editField = m_oplink->PairID3; + } else if (bindButton == m_oplink->Bind4) { + editField = m_oplink->PairID4; + } + Q_ASSERT(editField); + bool ok; + quint32 pairid = editField->text().toUInt(&ok, 16); + if (ok) { + quint32 boundPairId = m_oplink->CoordID->text().toUInt(&ok, 16); + (pairid != boundPairId) ? m_oplink->CoordID->setText(QString::number(pairid, 16).toUpper()) : m_oplink->CoordID->setText("0"); } } } -void ConfigPipXtremeWidget::comSpeedChanged(int index) +void ConfigPipXtremeWidget::ppmOnlyChanged() { - qDebug() << "comSpeedChanged: " << index; - switch (index) { - case OPLinkSettings::COMSPEED_4800: - m_oplink->PPMOnly->setChecked(true); - break; - default: - m_oplink->PPMOnly->setChecked(false); - break; - } + bool is_ppm_only = m_oplink->PPMOnly->isChecked(); + + m_oplink->PPM->setEnabled(!is_ppm_only); + m_oplink->OneWayLink->setEnabled(!is_ppm_only); + m_oplink->ComSpeed->setEnabled(!is_ppm_only); } /** diff --git a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.h b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.h index 4b5493103..986f7c7bd 100644 --- a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.h +++ b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.h @@ -55,16 +55,13 @@ private: // Are the settings current? bool settingsUpdated; - void SetPairID(QLineEdit *pairIdWidget); +protected: + void updateEnableControls(); private slots: void disconnected(); - void bind1(); - void bind2(); - void bind3(); - void bind4(); - void ppmOnlyToggled(bool toggled); - void comSpeedChanged(int index); + void bind(); + void ppmOnlyChanged(); }; #endif // CONFIGTXPIDWIDGET_H diff --git a/ground/openpilotgcs/src/plugins/config/pipxtreme.ui b/ground/openpilotgcs/src/plugins/config/pipxtreme.ui index 5730bb139..513aec847 100644 --- a/ground/openpilotgcs/src/plugins/config/pipxtreme.ui +++ b/ground/openpilotgcs/src/plugins/config/pipxtreme.ui @@ -15,1724 +15,1822 @@ - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - - + + + + OPLink configuration + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + true + + + + + 0 + 0 + 812 + 692 + + + + + + + 0 + 0 + + + + + 50 + false + + + + Configuration + + + + + + Com speed in bps. + + + + + + + + 50 + false + + + + Com Speed + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + VCP Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 16777215 + + + + Choose the function for the flexi port + + + + + + + + 50 + false + + + + Main Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 16777215 + + + + Choose the function for the main port + + + + + + + + 16777215 + 16777215 + + + + Set the maximum TX output power the modem will use (mW) + + + Qt::LeftToRight + + + 0 + + + + + + + + 50 + false + + + + Max Power + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 16777215 + + + + Choose the function for the USB virtual com port + + + + + + + + 50 + false + + + + FlexiIO Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + 50 + false + + + + Flexi Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Max Chan + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Channel 0 is 430 MHz, channel 249 is 440 MHz, and the channel spacing is 40 KHz. + + + 249 + + + + + + + + 50 + false + + + + Min Chan + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Channel 0 is 430 MHz, channel 249 is 440 MHz, and the channel spacing is 40 KHz. + + + 249 + + + + + + + + 50 + false + + + + Channel Set + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Sets the random sequence of channels to use for frequency hopping. + + + 249 + + + + + + + + 50 + false + + + + Only PPM packets will be transmitted. + + + PPM Only + + + + + + + + 50 + false + + + + If selected, data will only be transmitted from the coordinator to the Rx modem. + + + One-Way + + + + + + + + 50 + false + + + + PPM packets will be received by this modem. Must be selected if Coordinator modem is configured for PPM. + + + PPM + + + + + + + + 50 + false + + + + This modem will be a coordinator and other modems will bind to it. + + + Coordinator + + + + + + + + + + Remote modems + + + + + + + 50 + false + + + + -100dB + + + + + + + -127 + + + 0 + + + 0 + + + false + + + %v dBm + + + + + + + + 50 + false + + + + -100dB + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + + + + + -127 + + + 0 + + + 0 + + + false + + + %v dBm + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + + + + + -127 + + + 0 + + + -127 + + + false + + + %v dBm + + + + + + + + 50 + false + + + + -100dB + + + + + + + -127 + + + 0 + + + 0 + + + false + + + %v dBm + + + + + + + + 50 + false + + + + -100dB + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + 12345678 + + + + + + + + 50 + false + + + + Bind + + + + + + + + 50 + false + + + + Bind + + + + + + + + 50 + false + + + + Bind + + + + + + + + 50 + false + + + + Bind + + + + + + + + 50 + false + + + + Qt::LeftToRight + + + Coordinator ID + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + This is the coordinator id currently bound to. + + + 8 + + + + + + + + + + + 430 + 0 + + + + + 50 + false + + + + Qt::LeftToRight + + + QLineEdit { + border: none; + border-radius: 1px; + padding: 0 4px; + background: rgba(0, 0, 0, 16); + /* background: transparent; */ + /* selection-background-color: darkgray;*/ + } + + + Status + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + 12345678 + + + + + + + + 50 + false + + + + Link State + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The modems current state + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + Disconnected + + + + + + + + 50 + false + + + + Firmware Ver. + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + true + + + + + + + + 50 + false + + + + Serial Number + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 50 + false + false + + + + false + + + The modems serial number + + + true + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + Device ID + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Link Quality + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + RSSI + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The number of packets that were unable to be transmitted + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + TX Seq. No. + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + TX Rate (B/s) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + RX Seq. No. + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + RX Rate (B/s) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + RX Good + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that were corrected with error correction + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + RX Corrected + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that were corrected with error correction + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + RX Errors + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that could not be corrected with error correction + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + RX Missed + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that were not received at all + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + TX Dropped + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The number of packets that were unable to be transmitted + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + TX Resent + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Tx Failure + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + Free Heap + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + true + + + + + + + + 50 + false + + + + UAVTalk Errors + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + Resets + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + Timeouts + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + RX Failure + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that were not received at all + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + - - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - Qt::Horizontal - - - - 40 - 5 - - - - - - - - - - - - :/core/images/helpicon.svg:/core/images/helpicon.svg - - - - 32 - 32 - - - - true - - - - button:help - url:http://wiki.openpilot.org/x/dACrAQ - - - - - - - - Send settings to the board but do not save to the non-volatile memory - - - Apply - - - - - - - Send settings to the board and save to the non-volatile memory - - - Save - - - false - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - 430 - 0 - - - - - 75 - true - - - - Qt::LeftToRight - - - Status - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - 12345678 - - - - - - - Link State - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The modems current state - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 3px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - Disconnected - - - - - - - Firmware Ver. - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - true - - - - - - - Serial Number - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - - 75 - false - true - - - - false - - - The modems serial number - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - true - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - Device ID - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Link Quality - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - RSSI - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The number of packets that were unable to be transmitted - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - TX Seq. No. - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - TX Rate (B/s) - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - RX Seq. No. - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - RX Rate (B/s) - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - RX Good - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that were corrected with error correction - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - RX Corrected - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that were corrected with error correction - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - RX Errors - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that could not be corrected with error correction - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - RX Missed - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that were not received at all - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - TX Dropped - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The number of packets that were unable to be transmitted - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - TX Resent - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Tx Failure - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - Free Heap - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - true - - - - - - - UAVTalk Errors - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - Resets - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - Timeouts - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - RX Failure - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that were not received at all - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - - - - - - - - 75 - true - - - - Remote Modems - - - - - - - - - -100dB - - - - - - - -127 - - - 0 - - - 0 - - - false - - - %v dBm - - - - - - - -100dB - - - - - - - - 100 - 16777215 - - - - - - - - -127 - - - 0 - - - 0 - - - false - - - %v dBm - - - - - - - - 100 - 16777215 - - - - - - - - -127 - - - 0 - - - -127 - - - false - - - %v dBm - - - - - - - -100dB - - - - - - - -127 - - - 0 - - - 0 - - - false - - - %v dBm - - - - - - - -100dB - - - - - - - - 100 - 16777215 - - - - - - - - - 100 - 16777215 - - - - 12345678 - - - - - - - Bind - - - - - - - Bind - - - - - - - Bind - - - - - - - Bind - - - - - - - Qt::LeftToRight - - - Coord ID - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 100 - 16777215 - - - - 8 - - - - - - - This modem will be a coordinator and other modems will bind to it. - - - Coordinator - - - - - - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Configuration - - - - - - Com speed in bps. - - - - - - - Com Speed - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - VCP Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 16777215 - 16777215 - - - - Choose the function for the flexi port - - - - - - - Main Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 16777215 - 16777215 - - - - Choose the function for the main port - - - - - - - - 16777215 - 16777215 - - - - Set the maximum TX output power the modem will use (mW) - - - Qt::LeftToRight - - - 0 - - - - - - - Max Power - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 16777215 - 16777215 - - - - Choose the function for the USB virtual com port - - - - - - - FlexiIO Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - Flexi Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - If selected, data will only be transmitted from the coordinator to the Rx modem. - - - One-Way Link - - - - - - - Only PPM packets will be transmitted. - - - PPM Only - - - - - - - Max Chan - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Channel 0 is 430 MHz, channel 249 is 440 MHz, and the channel spacing is 40 KHz. - - - 249 - - - - - - - Min Chan - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Channel 0 is 430 MHz, channel 249 is 440 MHz, and the channel spacing is 40 KHz. - - - 249 - - - - - - - Channel Set - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Sets the random sequence of channels to use for frequency hopping. - - - 249 - - - - - - - PPM packets will be received by this modem. Must be selected if Coordinator modem is configured for PPM. - - - PPM - - - - - - - + + + + + + + + + + Qt::Horizontal + + + + 40 + 5 + + + + + + + + + 25 + 25 + + + + + + + + :/core/images/helpicon.svg:/core/images/helpicon.svg + + + + 25 + 25 + + + + true + + + + button:help + url:http://wiki.openpilot.org/x/dACrAQ + + + + + + + + Send settings to the board but do not save to the non-volatile memory + + + Apply + + + + + + + Send settings to the board and save to the non-volatile memory + + + Save + + + false + + + + + From e6a8d8f02c07034e162469a7477fb60e79996a34 Mon Sep 17 00:00:00 2001 From: m_thread Date: Thu, 6 Feb 2014 16:28:26 +0100 Subject: [PATCH 06/29] OP-1191 General Configuration cleanup --- .../src/plugins/config/airframe.ui | 92 +++- .../src/plugins/config/cc_hw_settings.ui | 30 +- .../src/plugins/config/ccattitude.ui | 29 +- .../openpilotgcs/src/plugins/config/input.ui | 24 +- .../openpilotgcs/src/plugins/config/output.ui | 73 ++- .../src/plugins/config/revosensors.ui | 50 +- .../src/plugins/config/stabilization.ui | 435 +----------------- .../openpilotgcs/src/plugins/config/txpid.ui | 16 +- 8 files changed, 243 insertions(+), 506 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/airframe.ui b/ground/openpilotgcs/src/plugins/config/airframe.ui index da2f1898c..a31886748 100644 --- a/ground/openpilotgcs/src/plugins/config/airframe.ui +++ b/ground/openpilotgcs/src/plugins/config/airframe.ui @@ -14,9 +14,6 @@ Form - - 12 - @@ -29,7 +26,16 @@ - + + 9 + + + 9 + + + 9 + + 9 @@ -102,7 +108,16 @@ Mixer Settings - + + 9 + + + 9 + + + 9 + + 9 @@ -197,12 +212,21 @@ 0 0 - 832 - 461 + 840 + 439 - + + 0 + + + 0 + + + 0 + + 0 @@ -244,7 +268,16 @@ 0 - + + 0 + + + 0 + + + 0 + + 0 @@ -327,12 +360,21 @@ 0 0 - 223 - 269 + 275 + 309 - + + 12 + + + 12 + + + 12 + + 12 @@ -341,7 +383,16 @@ Feed Forward Configuration - + + 12 + + + 12 + + + 12 + + 12 @@ -607,7 +658,16 @@ In 'units per second', a sound default is 1000. - + + 0 + + + 0 + + + 0 + + 0 @@ -711,12 +771,12 @@ 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:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Sans Serif'; 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;"></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;"><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;"><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> diff --git a/ground/openpilotgcs/src/plugins/config/cc_hw_settings.ui b/ground/openpilotgcs/src/plugins/config/cc_hw_settings.ui index 1f01e9625..a5d9d9a83 100644 --- a/ground/openpilotgcs/src/plugins/config/cc_hw_settings.ui +++ b/ground/openpilotgcs/src/plugins/config/cc_hw_settings.ui @@ -14,9 +14,6 @@ Form - - 12 - @@ -27,7 +24,16 @@ HW settings - + + 0 + + + 0 + + + 0 + + 0 @@ -110,12 +116,21 @@ 0 0 - 616 - 513 + 624 + 516 - + + 12 + + + 12 + + + 12 + + 12 @@ -627,7 +642,6 @@ Beware of not locking yourself out! - diff --git a/ground/openpilotgcs/src/plugins/config/ccattitude.ui b/ground/openpilotgcs/src/plugins/config/ccattitude.ui index f515dfaa0..4a8bc7535 100644 --- a/ground/openpilotgcs/src/plugins/config/ccattitude.ui +++ b/ground/openpilotgcs/src/plugins/config/ccattitude.ui @@ -14,9 +14,6 @@ Form - - 12 - @@ -27,7 +24,16 @@ Attitude - + + 0 + + + 0 + + + 0 + + 0 @@ -110,12 +116,21 @@ 0 0 - 750 - 483 + 758 + 486 - + + 12 + + + 12 + + + 12 + + 12 diff --git a/ground/openpilotgcs/src/plugins/config/input.ui b/ground/openpilotgcs/src/plugins/config/input.ui index 32a553d7c..aa3d1a7f4 100644 --- a/ground/openpilotgcs/src/plugins/config/input.ui +++ b/ground/openpilotgcs/src/plugins/config/input.ui @@ -14,18 +14,6 @@ Form - - 12 - - - 12 - - - 12 - - - 12 - @@ -128,8 +116,8 @@ 0 0 - 766 - 745 + 774 + 748 @@ -558,8 +546,8 @@ 0 0 - 766 - 745 + 768 + 742 @@ -2176,8 +2164,8 @@ Setup the flight mode channel on the RC Input tab if you have not done so alread 0 0 - 766 - 745 + 768 + 742 diff --git a/ground/openpilotgcs/src/plugins/config/output.ui b/ground/openpilotgcs/src/plugins/config/output.ui index fbe9e0e0a..11a3fb900 100644 --- a/ground/openpilotgcs/src/plugins/config/output.ui +++ b/ground/openpilotgcs/src/plugins/config/output.ui @@ -14,9 +14,6 @@ Form - - 12 - @@ -36,7 +33,16 @@ 0 - + + 0 + + + 0 + + + 0 + + 0 @@ -116,15 +122,24 @@ 0 0 - 668 - 671 + 676 + 674 6 - + + 12 + + + 12 + + + 12 + + 12 @@ -145,7 +160,16 @@ Output Update Speed - + + 12 + + + 12 + + + 12 + + 12 @@ -656,7 +680,16 @@ Leave at 50Hz for fixed wing. - + + 12 + + + 12 + + + 12 + + 12 @@ -668,7 +701,16 @@ Leave at 50Hz for fixed wing. - + + 12 + + + 12 + + + 12 + + 12 @@ -727,7 +769,16 @@ Leave at 50Hz for fixed wing. - + + 12 + + + 12 + + + 12 + + 12 diff --git a/ground/openpilotgcs/src/plugins/config/revosensors.ui b/ground/openpilotgcs/src/plugins/config/revosensors.ui index 390f7acea..90baa76aa 100644 --- a/ground/openpilotgcs/src/plugins/config/revosensors.ui +++ b/ground/openpilotgcs/src/plugins/config/revosensors.ui @@ -6,7 +6,7 @@ 0 0 - 649 + 808 510 @@ -20,7 +20,7 @@ true - 1 + 0 @@ -41,7 +41,16 @@ QFrame::Sunken - + + 3 + + + 3 + + + 3 + + 3 @@ -127,7 +136,16 @@ QFrame::Sunken - + + 3 + + + 3 + + + 3 + + 3 @@ -230,7 +248,16 @@ Hint: run this with engines at cruising speed. QFrame::Raised - + + 3 + + + 3 + + + 3 + + 3 @@ -308,7 +335,7 @@ Hint: run this with engines at cruising speed. <!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:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Sans Serif'; 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;"> @@ -338,7 +365,16 @@ p, li { white-space: pre-wrap; } - + + 6 + + + 6 + + + 6 + + 6 diff --git a/ground/openpilotgcs/src/plugins/config/stabilization.ui b/ground/openpilotgcs/src/plugins/config/stabilization.ui index 7eabe0723..a21cc236d 100644 --- a/ground/openpilotgcs/src/plugins/config/stabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/stabilization.ui @@ -22,421 +22,6 @@ 0 - - - - - - - 0 - 0 - 0 - - - - - - - 240 - 240 - 240 - - - - - - - 255 - 255 - 255 - - - - - - - 247 - 247 - 247 - - - - - - - 120 - 120 - 120 - - - - - - - 160 - 160 - 160 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 240 - 240 - 240 - - - - - - - 0 - 0 - 0 - - - - - - - 247 - 247 - 247 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - 240 - 240 - 240 - - - - - - - 255 - 255 - 255 - - - - - - - 247 - 247 - 247 - - - - - - - 120 - 120 - 120 - - - - - - - 160 - 160 - 160 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 240 - 240 - 240 - - - - - - - 0 - 0 - 0 - - - - - - - 247 - 247 - 247 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 120 - 120 - 120 - - - - - - - 240 - 240 - 240 - - - - - - - 255 - 255 - 255 - - - - - - - 247 - 247 - 247 - - - - - - - 120 - 120 - 120 - - - - - - - 160 - 160 - 160 - - - - - - - 120 - 120 - 120 - - - - - - - 255 - 255 - 255 - - - - - - - 120 - 120 - 120 - - - - - - - 240 - 240 - 240 - - - - - - - 240 - 240 - 240 - - - - - - - 0 - 0 - 0 - - - - - - - 240 - 240 - 240 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - Stabilization @@ -551,8 +136,8 @@ 0 0 - 796 - 708 + 798 + 705 @@ -8759,8 +8344,8 @@ border-radius: 5; 0 0 - 796 - 708 + 553 + 733 @@ -18750,8 +18335,8 @@ border-radius: 5; 0 0 - 796 - 708 + 756 + 562 @@ -26881,8 +26466,8 @@ border-radius: 5; 0 0 - 796 - 708 + 731 + 435 @@ -27727,8 +27312,8 @@ border-radius: 5; 0 0 - 796 - 708 + 391 + 518 diff --git a/ground/openpilotgcs/src/plugins/config/txpid.ui b/ground/openpilotgcs/src/plugins/config/txpid.ui index 550102209..496ffe032 100644 --- a/ground/openpilotgcs/src/plugins/config/txpid.ui +++ b/ground/openpilotgcs/src/plugins/config/txpid.ui @@ -17,18 +17,6 @@ 6 - - 12 - - - 12 - - - 12 - - - 12 - @@ -131,8 +119,8 @@ 0 0 - 742 - 450 + 753 + 475 From 9b50c26e8fdfaff7784ccea3e19a83f5f3725207 Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Tue, 28 Jan 2014 19:42:20 +0100 Subject: [PATCH 07/29] OP-1088 Switched to use 'Fusion' style on the application --- .../src/plugins/coreplugin/mainwindow.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp index f2886eebf..197058f29 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp @@ -50,7 +50,9 @@ #include "ioutputpane.h" #include "icorelistener.h" #include "iconfigurableplugin.h" -#include "manhattanstyle.h" + +#include + #include "rightpane.h" #include "settingsdialog.h" #include "threadmanager.h" @@ -140,20 +142,7 @@ MainWindow::MainWindow() : QCoreApplication::setOrganizationName(QLatin1String("OpenPilot")); QCoreApplication::setOrganizationDomain(QLatin1String("openpilot.org")); QSettings::setDefaultFormat(XmlConfig::XmlSettingsFormat); - QString baseName = qApp->style()->objectName(); -#ifdef Q_WS_X11 - if (baseName == QLatin1String("windows")) { - // Sometimes we get the standard windows 95 style as a fallback - // e.g. if we are running on a KDE4 desktop - QByteArray desktopEnvironment = qgetenv("DESKTOP_SESSION"); - if (desktopEnvironment == "kde") { - baseName = QLatin1String("plastique"); - } else { - baseName = QLatin1String("cleanlooks"); - } - } -#endif - qApp->setStyle(new ManhattanStyle(baseName)); + qApp->setStyle(QStyleFactory::create("Fusion")); setDockNestingEnabled(true); From 6bfbe8881336c9015371fabd636580a290efc496 Mon Sep 17 00:00:00 2001 From: m_thread Date: Thu, 6 Feb 2014 17:51:13 +0100 Subject: [PATCH 09/29] OP-1191 Added message box stating that board reboot is needed after bind/unbind --- .../openpilotgcs/src/plugins/config/configpipxtremewidget.cpp | 2 ++ ground/openpilotgcs/src/plugins/config/pipxtreme.ui | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp index ca49af80a..c806ec30e 100644 --- a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp @@ -30,6 +30,7 @@ #include #include #include +#include ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget(parent) { @@ -304,6 +305,7 @@ void ConfigPipXtremeWidget::bind() quint32 boundPairId = m_oplink->CoordID->text().toUInt(&ok, 16); (pairid != boundPairId) ? m_oplink->CoordID->setText(QString::number(pairid, 16).toUpper()) : m_oplink->CoordID->setText("0"); } + QMessageBox::information(this, tr("Information", "To apply the changes when binding/unbinding the board must be rebooted or power cycled."), QMessageBox::Ok); } } diff --git a/ground/openpilotgcs/src/plugins/config/pipxtreme.ui b/ground/openpilotgcs/src/plugins/config/pipxtreme.ui index 513aec847..7d75bea2d 100644 --- a/ground/openpilotgcs/src/plugins/config/pipxtreme.ui +++ b/ground/openpilotgcs/src/plugins/config/pipxtreme.ui @@ -16,7 +16,7 @@ - + OPLink configuration @@ -686,7 +686,7 @@ - This is the coordinator id currently bound to. + <html><head/><body><p>This is the coordinator id we currently are bound to.</p><p>To manually bind to a specific coordinator, just type</p><p>or paste its device id in this box and save.</p><p>The device must be rebooted for the binding to take place.</p></body></html> 8 From 986f2e3e8ef81adf284c9e98e393ea5531af0e8b Mon Sep 17 00:00:00 2001 From: m_thread Date: Thu, 6 Feb 2014 18:30:01 +0100 Subject: [PATCH 10/29] OP-1191 Fixed a typo. --- .../openpilotgcs/src/plugins/config/configpipxtremewidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp index c806ec30e..ce0616102 100644 --- a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp @@ -305,7 +305,7 @@ void ConfigPipXtremeWidget::bind() quint32 boundPairId = m_oplink->CoordID->text().toUInt(&ok, 16); (pairid != boundPairId) ? m_oplink->CoordID->setText(QString::number(pairid, 16).toUpper()) : m_oplink->CoordID->setText("0"); } - QMessageBox::information(this, tr("Information", "To apply the changes when binding/unbinding the board must be rebooted or power cycled."), QMessageBox::Ok); + QMessageBox::information(this, tr("Information"), tr("To apply the changes when binding/unbinding the board must be rebooted or power cycled."), QMessageBox::Ok); } } From 7d44e38daf598b3e4dd4e28dbe261421ac0b54e8 Mon Sep 17 00:00:00 2001 From: m_thread Date: Tue, 28 Jan 2014 22:13:41 +0100 Subject: [PATCH 11/29] OP-1088 Changes to the Vehicle configuration page. Changed combo box for tab bar and made the tab text translate-able. --- .../src/plugins/config/airframe.ui | 1403 ++++++++--------- .../src/plugins/config/configgadgetwidget.cpp | 2 +- .../config/configvehicletypewidget.cpp | 99 +- .../plugins/config/configvehicletypewidget.h | 18 +- 4 files changed, 737 insertions(+), 785 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/airframe.ui b/ground/openpilotgcs/src/plugins/config/airframe.ui index a31886748..100a9f50a 100644 --- a/ground/openpilotgcs/src/plugins/config/airframe.ui +++ b/ground/openpilotgcs/src/plugins/config/airframe.ui @@ -14,375 +14,303 @@ Form + + 0 + - - - - 0 - 0 - - - - - - - - 9 - - - 9 - - - 9 - - - 9 - - - - - - 0 - 0 - - - - - 75 - true - - - - Vehicle type: - - - - - - - - 0 - 0 - - - - - 50 - false - - - - Select aircraft type here - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 2 - 20 - - - - - - + - - - 0 + + + Qt::LeftToRight - - - true - - - Mixer Settings - - - - 9 - - - 9 - - - 9 - - - 9 - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - 232 - 232 - 232 - - - - - - - - - 255 - 255 - 255 - - - - - - - 232 - 232 - 232 - - - - - - - - - 232 - 232 - 232 - - - - - - - 232 - 232 - 232 - - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - + + true + + + #vehicleTypeFrame{ + color: rgb(180, 180, 180); + margin-top: -1px; +} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 0 + + + true - - - - 0 - 0 - 840 - 439 - + + Mixer Settings + + + + 9 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - QFrame::NoFrame - - - -1 + + 9 + + + 9 + + + 9 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 232 + 232 + 232 + + + + + + + 232 + 232 + 232 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + true + + + + + 0 + 0 + 820 + 478 + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + QFrame::NoFrame + + + -1 + + + + - - - + + + - - - - - - true - - - Feed Forward - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - - 255 - 255 - 255 - - - - - - - 232 - 232 - 232 - - - - - - - - - 255 - 255 - 255 - - - - - - - 232 - 232 - 232 - - - - - - - - - 232 - 232 - 232 - - - - - - - 232 - 232 - 232 - - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - + + true - - - - 0 - 0 - 275 - 309 - + + Feed Forward + + + + 0 - - - 12 - - - 12 - - - 12 - - - 12 - - - - - Feed Forward Configuration + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 232 + 232 + 232 + + + + + + + 232 + 232 + 232 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + true + + + + + 0 + 0 + 271 + 307 + - + 12 @@ -395,191 +323,386 @@ 12 - - - - - - Decel Time Constant - - - - - - - true - - - Qt::StrongFocus - - - When tuning: Slowly raise decel time from zero to just + + + + Feed Forward Configuration + + + + 12 + + + 12 + + + 12 + + + 12 + + + + + + + Decel Time Constant + + + + + + + true + + + Qt::StrongFocus + + + When tuning: Slowly raise decel time from zero to just under the level where the motor starts to undershoot its target speed when decelerating. Do it after accel time is setup. - - - 3 - - - 100.000000000000000 - - - 0.010000000000000 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Accel Time Constant - - - - - - - true - - - Qt::StrongFocus - - - In miliseconds. + + + 3 + + + 100.000000000000000 + + + 0.010000000000000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Accel Time Constant + + + + + + + true + + + Qt::StrongFocus + + + In miliseconds. When tuning: Slowly raise accel time from zero to just under the level where the motor starts to overshoot its target speed. - - - 3 - - - 100.000000000000000 - - - 0.010000000000000 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 16777215 - 16 - - - - 1000 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - true - - - - 0 - 32 - - - - Qt::StrongFocus - - - Overall level of feed forward (in percentage). - - - 100 - - - 1 - - - Qt::Horizontal - - - QSlider::NoTicks - - - - - - - - 0 - 32 - - - - Qt::StrongFocus - - - Limits how much the engines can accelerate or decelerate. + + + 3 + + + 100.000000000000000 + + + 0.010000000000000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 16777215 + 16 + + + + 1000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + true + + + + 0 + 32 + + + + Qt::StrongFocus + + + Overall level of feed forward (in percentage). + + + 100 + + + 1 + + + Qt::Horizontal + + + QSlider::NoTicks + + + + + + + + 0 + 32 + + + + Qt::StrongFocus + + + Limits how much the engines can accelerate or decelerate. In 'units per second', a sound default is 1000. - - - 500 - - - 2000 - - - 1000 - - - Qt::Horizontal - - - false - - - false - + + + 500 + + + 2000 + + + 1000 + + + Qt::Horizontal + + + false + + + false + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16 + + + + MaxAccel + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 30 + 0 + + + + 000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + FeedForward + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + - - + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 267 + 20 + + + + + + + + Qt::StrongFocus + + + <!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:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<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:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</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:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> + + + + + + + + + + Qt::StrongFocus + + + <!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:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<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:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</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:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> + + + + + + + + + + Qt::StrongFocus + + + <!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:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<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:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</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:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> + + + Enable FF tuning + + + + + + + Qt::Horizontal + + + + 267 + 20 + + + + + + + + + - + 0 0 @@ -587,190 +710,13 @@ In 'units per second', a sound default is 1000. 0 - 0 + 40 - - - 16777215 - 16 - - - - MaxAccel - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 30 - 0 - - - - 000 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - FeedForward - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 267 - 20 - - - - - - - - Qt::StrongFocus - - + <!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:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<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:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</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:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> - - - - - - - - - - Qt::StrongFocus - - - <!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:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<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:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</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:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> - - - - - - - - - - Qt::StrongFocus - - - <!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:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<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:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</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:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> - - - Enable FF tuning - - - - - - - Qt::Horizontal - - - - 267 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 0 - 40 - - - - <!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:'Sans Serif'; 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> @@ -781,17 +727,36 @@ p, li { white-space: pre-wrap; } <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;"><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> - + + + + - - - + + + - - - + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 9 + + + + @@ -869,6 +834,14 @@ p, li { white-space: pre-wrap; } + + + QTabBar + QWidget +
qtabbar.h
+ 1 +
+
diff --git a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp index 6e932e870..4ae81eb08 100644 --- a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp @@ -250,7 +250,7 @@ void ConfigGadgetWidget::tabAboutToChange(int i, bool *proceed) } if (wid->isDirty()) { int ans = QMessageBox::warning(this, tr("Unsaved changes"), tr("The tab you are leaving has unsaved changes," - "if you proceed they will be lost." + "if you proceed they will be lost.\n" "Do you still want to proceed?"), QMessageBox::Yes, QMessageBox::No); if (ans == QMessageBox::No) { *proceed = false; diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp index 0d6d4ee05..4bfda4563 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp @@ -122,18 +122,18 @@ ConfigVehicleTypeWidget::ConfigVehicleTypeWidget(QWidget *parent) : ConfigTaskWi addUAVObject("MixerSettings"); addUAVObject("ActuatorSettings"); - ffTuningInProgress = false; - ffTuningPhase = false; + m_ffTuningInProgress = false; + m_ffTuningPhase = false; - QStringList airframeTypes; - airframeTypes << "Fixed Wing" << "Multirotor" << "Helicopter" << "Ground" << "Custom"; - m_aircraft->aircraftType->addItems(airframeTypes); - - // Set default vehicle to MultiRotor - // m_aircraft->aircraftType->setCurrentIndex(3); + // The order of the tabs is important since they correspond with the AirframCategory enum + m_aircraft->aircraftType->addTab(tr("Multirotor")); + m_aircraft->aircraftType->addTab(tr("Fixed Wing")); + m_aircraft->aircraftType->addTab(tr("Helicopter")); + m_aircraft->aircraftType->addTab(tr("Ground")); + m_aircraft->aircraftType->addTab(tr("Custom")); // Connect aircraft type selection dropbox to callback function - connect(m_aircraft->aircraftType, SIGNAL(currentIndexChanged(int)), this, SLOT(switchAirframeType(int))); + connect(m_aircraft->aircraftType, SIGNAL(currentChanged(int)), this, SLOT(switchAirframeType(int))); // Connect the three feed forward test checkboxes connect(m_aircraft->ffTestBox1, SIGNAL(clicked(bool)), this, SLOT(enableFFTest())); @@ -145,9 +145,6 @@ ConfigVehicleTypeWidget::ConfigVehicleTypeWidget(QWidget *parent) : ConfigTaskWi refreshWidgetsValues(); - // register widgets for dirty state management - addWidget(m_aircraft->aircraftType); - // register FF widgets for dirty state management addWidget(m_aircraft->feedForwardSlider); addWidget(m_aircraft->accelTime); @@ -171,10 +168,7 @@ ConfigVehicleTypeWidget::~ConfigVehicleTypeWidget() void ConfigVehicleTypeWidget::switchAirframeType(int index) { - // TODO not safe w/r to translation!!! - QString frameCategory = m_aircraft->aircraftType->currentText(); - - m_aircraft->airframesWidget->setCurrentWidget(getVehicleConfigWidget(frameCategory)); + m_aircraft->airframesWidget->setCurrentWidget(getVehicleConfigWidget(index)); } /** @@ -202,10 +196,9 @@ void ConfigVehicleTypeWidget::refreshWidgetsValues(UAVObject *o) // At this stage, we will need to have some hardcoded settings in this code, this // is not ideal, but there you go. QString frameType = field->getValue().toString(); - qDebug() << "ConfigVehicleTypeWidget::refreshWidgetsValues - frame type:" << frameType; - QString category = frameCategory(frameType); - setComboCurrentIndex(m_aircraft->aircraftType, m_aircraft->aircraftType->findText(category)); + int category = frameCategory(frameType); + m_aircraft->aircraftType->setCurrentIndex(category); VehicleConfig *vehicleConfig = getVehicleConfigWidget(category); if (vehicleConfig) { @@ -215,8 +208,6 @@ void ConfigVehicleTypeWidget::refreshWidgetsValues(UAVObject *o) updateFeedForwardUI(); setDirty(dirty); - - qDebug() << "ConfigVehicleTypeWidget::refreshWidgetsValues - end"; } /** @@ -264,63 +255,61 @@ void ConfigVehicleTypeWidget::updateObjectsFromWidgets() updateFeedForwardUI(); } -QString ConfigVehicleTypeWidget::frameCategory(QString frameType) +int ConfigVehicleTypeWidget::frameCategory(QString frameType) { - QString category; - if (frameType == "FixedWing" || frameType == "Elevator aileron rudder" || frameType == "FixedWingElevon" || frameType == "Elevon" || frameType == "FixedWingVtail" || frameType == "Vtail") { - category = "Fixed Wing"; + return ConfigVehicleTypeWidget::FIXED_WING; } else if (frameType == "Tri" || frameType == "Tricopter Y" || frameType == "QuadX" || frameType == "Quad X" || frameType == "QuadP" || frameType == "Quad +" || frameType == "Hexa" || frameType == "Hexacopter" || frameType == "HexaX" || frameType == "Hexacopter X" || frameType == "HexaCoax" || frameType == "Hexacopter Y6" || frameType == "Octo" || frameType == "Octocopter" || frameType == "OctoV" || frameType == "Octocopter V" || frameType == "OctoCoaxP" || frameType == "Octo Coax +" || frameType == "OctoCoaxX" || frameType == "Octo Coax X") { - category = "Multirotor"; + return ConfigVehicleTypeWidget::MULTIROTOR; } else if (frameType == "HeliCP") { - category = "Helicopter"; + return ConfigVehicleTypeWidget::HELICOPTER; } else if (frameType == "GroundVehicleCar" || frameType == "Turnable (car)" || frameType == "GroundVehicleDifferential" || frameType == "Differential (tank)" || frameType == "GroundVehicleMotorcyle" || frameType == "Motorcycle") { - category = "Ground"; + return ConfigVehicleTypeWidget::GROUND; } else { - category = "Custom"; + return ConfigVehicleTypeWidget::CUSTOM; } - return category; } -VehicleConfig *ConfigVehicleTypeWidget::getVehicleConfigWidget(QString frameCategory) +VehicleConfig *ConfigVehicleTypeWidget::getVehicleConfigWidget(int frameCategory) { VehicleConfig *vehiculeConfig; - if (!vehicleIndexMap.contains(frameCategory)) { + if (!m_vehicleIndexMap.contains(frameCategory)) { // create config widget vehiculeConfig = createVehicleConfigWidget(frameCategory); // bind config widget "field" to this ConfigTaskWodget // this is necessary to get "dirty" state management vehiculeConfig->registerWidgets(*this); + // add config widget to UI int index = m_aircraft->airframesWidget->insertWidget(m_aircraft->airframesWidget->count(), vehiculeConfig); - vehicleIndexMap[frameCategory] = index; + m_vehicleIndexMap[frameCategory] = index; + updateEnableControls(); } - int index = vehicleIndexMap.value(frameCategory); + int index = m_vehicleIndexMap.value(frameCategory); vehiculeConfig = (VehicleConfig *)m_aircraft->airframesWidget->widget(index); return vehiculeConfig; } -VehicleConfig *ConfigVehicleTypeWidget::createVehicleConfigWidget(QString frameCategory) +VehicleConfig *ConfigVehicleTypeWidget::createVehicleConfigWidget(int frameCategory) { - qDebug() << "ConfigVehicleTypeWidget::createVehicleConfigWidget - creating" << frameCategory; - if (frameCategory == "Fixed Wing") { + if (frameCategory == ConfigVehicleTypeWidget::FIXED_WING) { return new ConfigFixedWingWidget(); - } else if (frameCategory == "Multirotor") { + } else if (frameCategory == ConfigVehicleTypeWidget::MULTIROTOR){ return new ConfigMultiRotorWidget(); - } else if (frameCategory == "Helicopter") { + } else if (frameCategory == ConfigVehicleTypeWidget::HELICOPTER) { return new ConfigCcpmWidget(); - } else if (frameCategory == "Ground") { + } else if (frameCategory == ConfigVehicleTypeWidget::GROUND) { return new ConfigGroundVehicleWidget(); - } else if (frameCategory == "Custom") { + } else if (frameCategory ==ConfigVehicleTypeWidget::CUSTOM) { return new ConfigCustomWidget(); } return NULL; @@ -337,17 +326,17 @@ void ConfigVehicleTypeWidget::enableFFTest() // - Every other time event: send FF settings to flight FW if (m_aircraft->ffTestBox1->isChecked() && m_aircraft->ffTestBox2->isChecked() && m_aircraft->ffTestBox3->isChecked()) { - if (!ffTuningInProgress) { + if (!m_ffTuningInProgress) { // Initiate tuning: UAVDataObject *obj = dynamic_cast(getObjectManager()->getObject( QString("ManualControlCommand"))); UAVObject::Metadata mdata = obj->getMetadata(); - accInitialData = mdata; + m_accInitialData = mdata; UAVObject::SetFlightAccess(mdata, UAVObject::ACCESS_READONLY); obj->setMetadata(mdata); } // Depending on phase, either move actuator or send FF settings: - if (ffTuningPhase) { + if (m_ffTuningPhase) { // Send FF settings to the board UAVDataObject *mixer = dynamic_cast(getObjectManager()->getObject(QString("MixerSettings"))); Q_ASSERT(mixer); @@ -369,18 +358,18 @@ void ConfigVehicleTypeWidget::enableFFTest() obj->getField("Throttle")->setValue(target); obj->updated(); } - ffTuningPhase = !ffTuningPhase; - ffTuningInProgress = true; + m_ffTuningPhase = !m_ffTuningPhase; + m_ffTuningInProgress = true; QTimer::singleShot(1000, this, SLOT(enableFFTest())); } else { // - If no: disarm timer, restore actuatorcommand metadata // Disarm! - if (ffTuningInProgress) { - ffTuningInProgress = false; + if (m_ffTuningInProgress) { + m_ffTuningInProgress = false; UAVDataObject *obj = dynamic_cast(getObjectManager()->getObject( QString("ManualControlCommand"))); UAVObject::Metadata mdata = obj->getMetadata(); - mdata = accInitialData; // Restore metadata + mdata = m_accInitialData; // Restore metadata obj->setMetadata(mdata); } } @@ -413,15 +402,3 @@ void ConfigVehicleTypeWidget::openHelp() { QDesktopServices::openUrl(QUrl("http://wiki.openpilot.org/x/44Cf", QUrl::StrictMode)); } - -/** - Helper function: - Sets the current index on supplied combobox to index - if it is within bounds 0 <= index < combobox.count() - */ -void ConfigVehicleTypeWidget::setComboCurrentIndex(QComboBox *box, int index) -{ - if (index >= 0 && index < box->count()) { - box->setCurrentIndex(index); - } -} diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h index 5bee9696c..be40b4d48 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h @@ -64,7 +64,6 @@ class ConfigVehicleTypeWidget : public ConfigTaskWidget { public: static QStringList getChannelDescriptions(); - static void setComboCurrentIndex(QComboBox *box, int index); ConfigVehicleTypeWidget(QWidget *parent = 0); ~ConfigVehicleTypeWidget(); @@ -76,20 +75,23 @@ protected slots: private: Ui_AircraftWidget *m_aircraft; + static enum { MULTIROTOR = 0, FIXED_WING, HELICOPTER, GROUND, CUSTOM } AirframeCategory; + // Maps a frame category to its index in the m_aircraft->airframesWidget QStackedWidget - QMap vehicleIndexMap; + QMap m_vehicleIndexMap; - QString frameCategory(QString frameType); - VehicleConfig *getVehicleConfigWidget(QString frameCategory); - VehicleConfig *createVehicleConfigWidget(QString frameCategory); + int frameCategory(QString frameType); + + VehicleConfig *getVehicleConfigWidget(int frameCategory); + VehicleConfig *createVehicleConfigWidget(int frameCategory); // Feed Forward void updateFeedForwardUI(); - bool ffTuningInProgress; - bool ffTuningPhase; - UAVObject::Metadata accInitialData; + bool m_ffTuningInProgress; + bool m_ffTuningPhase; + UAVObject::Metadata m_accInitialData; private slots: void switchAirframeType(int index); From 0964031ae0cad869ae0db2310158ea24ae813700 Mon Sep 17 00:00:00 2001 From: m_thread Date: Sat, 8 Feb 2014 13:51:42 +0100 Subject: [PATCH 12/29] OP-1191 Minor gui fixes. Removed stuff from linux css file. No need to have minor tweaks to the fusion style. --- .../stylesheets/default_linux.qss | 18 ---- .../src/plugins/config/camerastabilization.ui | 88 +++++++++++-------- .../src/plugins/config/revosensors.ui | 4 +- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss index 64ac641ab..edc9dc8cd 100644 --- a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss +++ b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss @@ -1,19 +1 @@ /* Linux styles */ - -QGroupBox { - border: 1px solid gray; - border-radius: 5px; - margin-top: 1ex; - font-size: 11px; - font-weight: bold; -} - -QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - padding: 0 3px; -} - -MixerCurveWidget { - font-size: 12px; -} diff --git a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui index 5b78247b4..c2b90e525 100644 --- a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui @@ -42,7 +42,16 @@ Camera Stabilization - + + 0 + + + 0 + + + 0 + + 0 @@ -64,15 +73,24 @@ 0 0 - 762 - 658 + 750 + 729 12 - + + 12 + + + 12 + + + 12 + + 12 @@ -1358,6 +1376,37 @@ The same value is used for all axes. + + + + + 0 + 50 + + + + + 16777215 + 16777215 + + + + Messages + + + + + + false + + + + + + + + + @@ -1379,37 +1428,6 @@ The same value is used for all axes. - - - - - 0 - 50 - - - - - 16777215 - 16777215 - - - - Messages - - - - - - false - - - - - - - - - diff --git a/ground/openpilotgcs/src/plugins/config/revosensors.ui b/ground/openpilotgcs/src/plugins/config/revosensors.ui index 90baa76aa..8c6e2de1e 100644 --- a/ground/openpilotgcs/src/plugins/config/revosensors.ui +++ b/ground/openpilotgcs/src/plugins/config/revosensors.ui @@ -874,8 +874,8 @@ A setting of 0.00 disables the filter. - 32 - 32 + 25 + 25 From da137e18e76bf4ee9666ab6cbc8380075f0f9e44 Mon Sep 17 00:00:00 2001 From: m_thread Date: Sat, 8 Feb 2014 13:55:32 +0100 Subject: [PATCH 13/29] OP-1191 Removed all special tweaks to the macosx css. No need to have this for fusion. --- .../stylesheets/default_macos.qss | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_macos.qss b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_macos.qss index 55fa1b6c1..6a22ce96a 100644 --- a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_macos.qss +++ b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_macos.qss @@ -1,22 +1,2 @@ /* MacOS styles */ -QGroupBox { - border: 1px solid gray; - border-radius: 5px; - margin-top: 1ex; - font-size: 11px; - font-weight: bold; -} - -QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - padding: 0 3px; -} - -QTabWidget::pane { - margin: 1px, 1px, 1px, 1px; - border: 2px solid rgb(196, 196, 196); - border-radius: 5px; - padding: 0px; -} From 53c5b511afe63c26028d58a723bd44ae770d5094 Mon Sep 17 00:00:00 2001 From: m_thread Date: Sun, 9 Feb 2014 10:59:50 +0100 Subject: [PATCH 14/29] OP-1191 Fixed Stabilization gui issues. --- .../config/configstabilizationwidget.cpp | 22 +- .../src/plugins/config/stabilization.ui | 5652 +++-------------- 2 files changed, 1051 insertions(+), 4623 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp index 5fae05678..951f94550 100644 --- a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp @@ -117,9 +117,11 @@ ConfigStabilizationWidget::ConfigStabilizationWidget(QWidget *parent) : ConfigTa addWidget(ui->pushButton_23); addWidget(ui->basicResponsivenessGroupBox); - connect(ui->basicResponsivenessGroupBox, SIGNAL(toggled(bool)), this, SLOT(linkCheckBoxes(bool))); + addWidget(ui->basicResponsivenessCheckBox); + connect(ui->basicResponsivenessCheckBox, SIGNAL(toggled(bool)), this, SLOT(linkCheckBoxes(bool))); addWidget(ui->advancedResponsivenessGroupBox); - connect(ui->advancedResponsivenessGroupBox, SIGNAL(toggled(bool)), this, SLOT(linkCheckBoxes(bool))); + addWidget(ui->advancedResponsivenessCheckBox); + connect(ui->advancedResponsivenessCheckBox, SIGNAL(toggled(bool)), this, SLOT(linkCheckBoxes(bool))); connect(this, SIGNAL(widgetContentsChanged(QWidget *)), this, SLOT(processLinkedWidgets(QWidget *))); @@ -138,7 +140,7 @@ void ConfigStabilizationWidget::refreshWidgetsValues(UAVObject *o) { ConfigTaskWidget::refreshWidgetsValues(o); - ui->basicResponsivenessGroupBox->setChecked(ui->rateRollKp_3->value() == ui->ratePitchKp_4->value() && + ui->basicResponsivenessCheckBox->setChecked(ui->rateRollKp_3->value() == ui->ratePitchKp_4->value() && ui->rateRollKi_3->value() == ui->ratePitchKi_4->value()); } @@ -169,14 +171,18 @@ void ConfigStabilizationWidget::linkCheckBoxes(bool value) ui->checkBox_2->setChecked(value); } else if (sender() == ui->checkBox_2) { ui->checkBox_8->setChecked(value); - } else if (sender() == ui->basicResponsivenessGroupBox) { - ui->advancedResponsivenessGroupBox->setChecked(!value); + } else if (sender() == ui->basicResponsivenessCheckBox) { + ui->advancedResponsivenessCheckBox->setChecked(!value); + ui->basicResponsivenessControls->setEnabled(value); + ui->advancedResponsivenessControls->setEnabled(!value); if (value) { processLinkedWidgets(ui->AttitudeResponsivenessSlider); processLinkedWidgets(ui->RateResponsivenessSlider); } - } else if (sender() == ui->advancedResponsivenessGroupBox) { - ui->basicResponsivenessGroupBox->setChecked(!value); + } else if (sender() == ui->advancedResponsivenessCheckBox) { + ui->basicResponsivenessCheckBox->setChecked(!value); + ui->basicResponsivenessControls->setEnabled(!value); + ui->advancedResponsivenessControls->setEnabled(value); } } @@ -218,7 +224,7 @@ void ConfigStabilizationWidget::processLinkedWidgets(QWidget *widget) } } - if (ui->basicResponsivenessGroupBox->isChecked()) { + if (ui->basicResponsivenessCheckBox->isChecked()) { if (widget == ui->AttitudeResponsivenessSlider) { ui->ratePitchKp_4->setValue(ui->AttitudeResponsivenessSlider->value()); } else if (widget == ui->RateResponsivenessSlider) { diff --git a/ground/openpilotgcs/src/plugins/config/stabilization.ui b/ground/openpilotgcs/src/plugins/config/stabilization.ui index a21cc236d..f33da0062 100644 --- a/ground/openpilotgcs/src/plugins/config/stabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/stabilization.ui @@ -167,9 +167,6 @@ margin-top: -1px; - - - @@ -183,9 +180,9 @@ margin-top: -1px; false - true + false - + 9 @@ -198,7 +195,7 @@ margin-top: -1px; 9 - + @@ -221,21 +218,8 @@ margin-top: -1px; - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - + + QGroupBox{border: 0px;} @@ -2202,6 +2186,29 @@ border-radius: 5; + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Use Basic Configuration + + + true + + + @@ -2699,7 +2706,7 @@ border-radius: 5; true - + 0 @@ -2709,19 +2716,6 @@ border-radius: 5; 0 - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -2748,6 +2742,760 @@ border-radius: 5; + + + + + 50 + 22 + + + + + 50 + 22 + + + + Qt::StrongFocus + + + As a rule of thumb, you can set the Integral at roughly the same +value as the Kp. + + + 200 + + + 200 + + + + objname:StabilizationSettingsBankX + fieldname:YawRatePID + element:Ki + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + Qt::StrongFocus + + + <html><head/><body><p>This adjusts how much stability your vehicle will have when flying tilted (ie forward flight) in Rate mode. A good starting point for Integral is the same as Proportional</p></body></html> + + + + + + 100 + + + 50 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 25 + + + + objname:StabilizationSettingsBankX + fieldname:YawRatePID + element:Ki + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + Qt::StrongFocus + + + <html><head/><body><p>This adjusts how much stability your vehicle will have when flying tilted (ie forward flight) in Rate mode. A good starting point for Integral is the same as Proportional</p></body></html> + + + + + + 100 + + + 50 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 25 + + + + objname:StabilizationSettingsBankX + fieldname:PitchRatePID + element:Ki + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 50 + 22 + + + + + 50 + 22 + + + + Qt::StrongFocus + + + As a rule of thumb, you can set the Integral at roughly the same +value as the Kp. + + + 200 + + + 200 + + + + objname:StabilizationSettingsBankX + fieldname:PitchRatePID + element:Ki + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 0 + 0 + + + + + 0 + 16 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 58 + 58 + 58 + + + + + + + 48 + 48 + 48 + + + + + + + 19 + 19 + 19 + + + + + + + 26 + 26 + 26 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 0 + 0 + 0 + + + + + + + 19 + 19 + 19 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 58 + 58 + 58 + + + + + + + 48 + 48 + 48 + + + + + + + 19 + 19 + 19 + + + + + + + 26 + 26 + 26 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 0 + 0 + 0 + + + + + + + 19 + 19 + 19 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 58 + 58 + 58 + + + + + + + 48 + 48 + 48 + + + + + + + 19 + 19 + 19 + + + + + + + 26 + 26 + 26 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 0 + 0 + 0 + + + + + + + 39 + 39 + 39 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 75 + true + + + + false + + + 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; + + + Roll + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -3901,170 +4649,6 @@ border-radius: 5; - - - - - 50 - 22 - - - - - 50 - 22 - - - - Qt::StrongFocus - - - Slowly raise Proportional until you start seeing clear oscillations when you fly. -Then lower the value by 5 or so. - - - 200 - - - 200 - - - - objname:StabilizationSettingsBankX - fieldname:RollRatePID - element:Kp - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 0 - 0 - - - - - 78 - 16 - - - - - - - Proportional - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 25 - - - - Qt::StrongFocus - - - <html><head/><body><p>This adjusts how much leveling stability is set into Rate mode (inner loop). Too much will make your vehicle oscillate in Rate mode.</p></body></html> - - - - - - 100 - - - 50 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 25 - - - - objname:StabilizationSettingsBankX - fieldname:YawRatePID - element:Kp - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 0 - 0 - - - - - 0 - 25 - - - - Qt::StrongFocus - - - <html><head/><body><p>This adjusts how much leveling stability is set into Rate mode (inner loop). Too much will make your vehicle oscillate in Rate mode.</p></body></html> - - - - - - 100 - - - 50 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 25 - - - - objname:StabilizationSettingsBankX - fieldname:PitchRatePID - element:Kp - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - @@ -4251,8 +4835,8 @@ value as the Kp. - - + + 50 @@ -4269,8 +4853,8 @@ value as the Kp. Qt::StrongFocus - As a rule of thumb, you can set the Integral at roughly the same -value as the Kp. + Slowly raise Proportional until you start seeing clear oscillations when you fly. +Then lower the value by 5 or so. 200 @@ -4281,8 +4865,8 @@ value as the Kp. objname:StabilizationSettingsBankX - fieldname:YawRatePID - element:Ki + fieldname:RollRatePID + element:Kp haslimits:yes scale:0.0001 buttongroup:1,10 @@ -4290,707 +4874,130 @@ value as the Kp. - - + + - + 0 0 - 0 - 25 - - - - Qt::StrongFocus - - - <html><head/><body><p>This adjusts how much stability your vehicle will have when flying tilted (ie forward flight) in Rate mode. A good starting point for Integral is the same as Proportional</p></body></html> - - - - - - 100 - - - 50 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 25 - - - - objname:StabilizationSettingsBankX - fieldname:YawRatePID - element:Ki - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 0 - 0 - - - - - 0 - 25 - - - - Qt::StrongFocus - - - <html><head/><body><p>This adjusts how much stability your vehicle will have when flying tilted (ie forward flight) in Rate mode. A good starting point for Integral is the same as Proportional</p></body></html> - - - - - - 100 - - - 50 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 25 - - - - objname:StabilizationSettingsBankX - fieldname:PitchRatePID - element:Ki - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 50 - 22 - - - - - 50 - 22 - - - - Qt::StrongFocus - - - As a rule of thumb, you can set the Integral at roughly the same -value as the Kp. - - - 200 - - - 200 - - - - objname:StabilizationSettingsBankX - fieldname:PitchRatePID - element:Ki - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 0 - 0 - - - - - 0 + 78 16 - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 58 - 58 - 58 - - - - - - - 48 - 48 - 48 - - - - - - - 19 - 19 - 19 - - - - - - - 26 - 26 - 26 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 0 - 0 - 0 - - - - - - - 19 - 19 - 19 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 58 - 58 - 58 - - - - - - - 48 - 48 - 48 - - - - - - - 19 - 19 - 19 - - - - - - - 26 - 26 - 26 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 0 - 0 - 0 - - - - - - - 19 - 19 - 19 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 58 - 58 - 58 - - - - - - - 48 - 48 - 48 - - - - - - - 19 - 19 - 19 - - - - - - - 26 - 26 - 26 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 0 - 0 - 0 - - - - - - - 39 - 39 - 39 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 75 - true - - - - false - - 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; + - Roll + Proportional - Qt::AlignCenter + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - + + + + + 0 + 0 + + + + + 0 + 25 + + + + Qt::StrongFocus + + + <html><head/><body><p>This adjusts how much leveling stability is set into Rate mode (inner loop). Too much will make your vehicle oscillate in Rate mode.</p></body></html> + + + + + + 100 + + + 50 + Qt::Horizontal - + + QSlider::TicksBelow + + + 25 + + + + objname:StabilizationSettingsBankX + fieldname:YawRatePID + element:Kp + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 0 + 0 + + + - 40 - 20 + 0 + 25 - + + Qt::StrongFocus + + + <html><head/><body><p>This adjusts how much leveling stability is set into Rate mode (inner loop). Too much will make your vehicle oscillate in Rate mode.</p></body></html> + + + + + + 100 + + + 50 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 25 + + + + objname:StabilizationSettingsBankX + fieldname:PitchRatePID + element:Kp + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + @@ -5096,520 +5103,6 @@ border-radius: 5; 195 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - false @@ -8344,7 +7837,7 @@ border-radius: 5; 0 0 - 553 + 784 733 @@ -8390,520 +7883,6 @@ border-radius: 5; 16777215 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - Responsiveness @@ -8911,7 +7890,7 @@ border-radius: 5; Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - true + false false @@ -8932,62 +7911,11 @@ border-radius: 5; 6 - - - - Qt::Horizontal + + + + false - - QSizePolicy::Expanding - - - - 632 - 20 - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - Reset all values to GCS defaults - - - - - - Default - - - - objname:StabilizationSettings - button:default - buttongroup:6 - - - - - - 0 @@ -11728,596 +10656,21 @@ border-radius: 5; - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - Rate Stabilization (Inner Loop) - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - false - - - - 9 - - - 9 - - - 9 - - - 9 - - - 6 - - - - - Qt::Horizontal - - - - 497 - 20 - - - - - - - - <html><head/><body><p>Link roll &amp; pitch values together, thus giving the same value for each when setting up a symetrical vehicle that requires both to be the same.</p></body></html> - - - + + + + + 0 + 0 + - Link Roll and Pitch + Use Advanced Configuration - - + + 0 @@ -12349,11 +10702,72 @@ border-radius: 5; objname:StabilizationSettings button:default - buttongroup:4 + buttongroup:6 + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Rate Stabilization (Inner Loop) + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + false + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + @@ -15061,6 +13475,70 @@ border-radius: 5; + + + + Qt::Horizontal + + + + 497 + 20 + + + + + + + + <html><head/><body><p>Link roll &amp; pitch values together, thus giving the same value for each when setting up a symetrical vehicle that requires both to be the same.</p></body></html> + + + + + + Link Roll and Pitch + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Reset all values to GCS defaults + + + + + + Default + + + + objname:StabilizationSettings + button:default + buttongroup:4 + + + + @@ -15084,520 +13562,6 @@ border-radius: 5; 16777215 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - false @@ -18335,8 +16299,8 @@ border-radius: 5; 0 0 - 756 - 562 + 798 + 705 @@ -23450,520 +21414,6 @@ border-radius: 5; - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - false @@ -26466,8 +23916,8 @@ border-radius: 5; 0 0 - 731 - 435 + 798 + 705 @@ -27312,8 +24762,8 @@ border-radius: 5; 0 0 - 391 - 518 + 798 + 705 @@ -27337,520 +24787,6 @@ border-radius: 5; 16777215 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - Tuning @@ -29264,520 +26200,6 @@ border-radius: 5; 16777215 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - Vario Altitude From 277410061afe0c23d2435d3668494588fd4a4317 Mon Sep 17 00:00:00 2001 From: Fredrik Arvidsson Date: Tue, 28 Jan 2014 19:41:07 +0100 Subject: [PATCH 15/29] OP-1166 Channel number dropdowns not initialized properly. --- .../src/plugins/config/configinputwidget.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configinputwidget.cpp b/ground/openpilotgcs/src/plugins/config/configinputwidget.cpp index 002b81fff..c6f7313a6 100644 --- a/ground/openpilotgcs/src/plugins/config/configinputwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configinputwidget.cpp @@ -82,12 +82,13 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) : InputChannelForm *inpForm = new InputChannelForm(this, index == 0); ui->channelSettings->layout()->addWidget(inpForm); // Add the row to the UI inpForm->setName(name); - addWidgetBinding("ManualControlSettings", "ChannelGroups", inpForm->ui->channelGroup, index); - addWidgetBinding("ManualControlSettings", "ChannelNumber", inpForm->ui->channelNumber, index); - // The order of the following three binding calls is important. Since the values will be populated + // The order of the following binding calls is important. Since the values will be populated // in reverse order of the binding order otherwise the 'Reversed' logic will floor the neutral value - // to the max value ( which is smaller than the neutral value when reversed ) + // to the max value ( which is smaller than the neutral value when reversed ) and the channel number + // will not be set correctly. + addWidgetBinding("ManualControlSettings", "ChannelNumber", inpForm->ui->channelNumber, index); + addWidgetBinding("ManualControlSettings", "ChannelGroups", inpForm->ui->channelGroup, index); addWidgetBinding("ManualControlSettings", "ChannelNeutral", inpForm->ui->channelNeutral, index); addWidgetBinding("ManualControlSettings", "ChannelNeutral", inpForm->ui->neutralValue, index); addWidgetBinding("ManualControlSettings", "ChannelMin", inpForm->ui->channelMin, index); From 64d0f861b1238ebe2996a56939f9fb9d9ebd8ce0 Mon Sep 17 00:00:00 2001 From: m_thread Date: Sun, 9 Feb 2014 11:36:57 +0100 Subject: [PATCH 16/29] OP-1191 Gui fixes to Output configuration gui. --- .../openpilotgcs/src/plugins/config/output.ui | 73 +-- .../src/plugins/config/outputchannelform.ui | 443 ++++++++++-------- 2 files changed, 254 insertions(+), 262 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/output.ui b/ground/openpilotgcs/src/plugins/config/output.ui index 11a3fb900..aa2f892c7 100644 --- a/ground/openpilotgcs/src/plugins/config/output.ui +++ b/ground/openpilotgcs/src/plugins/config/output.ui @@ -160,21 +160,6 @@ Output Update Speed - - 12 - - - 12 - - - 12 - - - 12 - - - 6 - @@ -197,12 +182,6 @@ - - - 75 - true - - Channel: @@ -415,12 +394,6 @@ Leave at 50Hz for fixed wing. 20 - - - 75 - true - - Update rate: @@ -677,21 +650,9 @@ Leave at 50Hz for fixed wing. - + Output Channel Configuration - - 12 - - - 12 - - - 12 - - - 12 - @@ -701,24 +662,12 @@ Leave at 50Hz for fixed wing. - - 12 - - - 12 - - - 12 - - - 12 - 519 - 0 + 20 @@ -749,7 +698,7 @@ Leave at 50Hz for fixed wing. 20 - 542 + 0 @@ -766,21 +715,9 @@ Leave at 50Hz for fixed wing. - + Live Testing - - 12 - - - 12 - - - 12 - - - 12 - @@ -789,7 +726,7 @@ Leave at 50Hz for fixed wing. 105 - 0 + 20 diff --git a/ground/openpilotgcs/src/plugins/config/outputchannelform.ui b/ground/openpilotgcs/src/plugins/config/outputchannelform.ui index 3b4079ce7..84ee3a2be 100644 --- a/ground/openpilotgcs/src/plugins/config/outputchannelform.ui +++ b/ground/openpilotgcs/src/plugins/config/outputchannelform.ui @@ -23,29 +23,7 @@ 12 - - - - - 0 - 0 - - - - - 0 - 25 - - - - Current value of slider. - - - 0000 - - - - + @@ -55,7 +33,7 @@ - 0 + 45 20 @@ -81,22 +59,55 @@ margin:1px; - - + + + + + 0 + 25 + + + + Qt::StrongFocus + + + Maximum PWM value, beware of not overdriving your servo. + + + 9999 + + + + + - + 0 0 - 110 - 25 + 0 + 20 + + + 75 + false + true + + + + 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; +margin:1px; + - TextLabel + Neutral (slowest for motor) Qt::AlignCenter @@ -145,110 +156,21 @@ margin:1px; - - - - - 0 - 0 - + + + + Qt::Horizontal - + + QSizePolicy::Minimum + + - 20 - 25 - - - - Channel Number - - - Qt::LeftToRight - - - TextLabel - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 25 - - - - Qt::StrongFocus - - - Minimum PWM value, beware of not overdriving your servo. - - - 9999 - - - - - - - - 0 - 0 - - - - - 45 - 25 - - - - Qt::StrongFocus - - - Check to invert the channel. - - - - - - - - 0 - 0 - - - - - 0 + 5 20 - - - 75 - false - true - - - - 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; -margin:1px; - - - Neutral (slowest for motor) - - - Qt::AlignCenter - - + @@ -286,26 +208,29 @@ margin:1px; - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - + + + - 5 - 20 + 0 + 25 - + + Qt::StrongFocus + + + Minimum PWM value, beware of not overdriving your servo. + + + 9999 + + - - + + - + 0 0 @@ -313,28 +238,17 @@ margin:1px; 0 - 20 + 25 - - - 75 - false - true - + + Qt::StrongFocus - - 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; -margin:1px; + + 9999 - - Min - - - Qt::AlignCenter + + Qt::Horizontal @@ -374,30 +288,33 @@ margin:1px; - - + + - + 0 0 - 45 + 20 25 - - Qt::StrongFocus - - Output mode + Channel Number + + + TextLabel + + + Qt::AlignCenter - - + + Qt::Horizontal @@ -412,6 +329,28 @@ margin:1px; + + + + + 0 + 0 + + + + + 110 + 25 + + + + TextLabel + + + Qt::AlignCenter + + + @@ -441,17 +380,17 @@ font:bold; margin:1px; - Rev + Reversed Qt::AlignCenter - - + + - + 0 0 @@ -462,34 +401,152 @@ margin:1px; 25 - - Qt::StrongFocus + + Current value of slider. - - 9999 - - - Qt::Horizontal + + 0000 - - + + + + + 0 + 0 + + 0 - 25 + 20 - - Qt::StrongFocus + + + 75 + false + true + - - Maximum PWM value, beware of not overdriving your servo. + + 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; +margin:1px; - - 9999 + + Min + + Qt::AlignCenter + + + + + + + + 75 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Check to invert the channel. + + + + + + + + + + + 45 + 0 + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Output mode + + + + @@ -498,8 +555,6 @@ margin:1px; actuatorMin actuatorNeutral actuatorMax - actuatorRev - actuatorLink
From 590c27af292655fd2a8197628058e063d6082cde Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 9 Feb 2014 11:37:02 +0100 Subject: [PATCH 17/29] OP-1218 fix thread safety issue with pios_com PIOS_COM_SendBufferNonBlocking (kudos @filnet for finding this) --- flight/pios/common/pios_com.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/flight/pios/common/pios_com.c b/flight/pios/common/pios_com.c index a90d88e19..edc4dd0c9 100644 --- a/flight/pios/common/pios_com.c +++ b/flight/pios/common/pios_com.c @@ -51,6 +51,7 @@ struct pios_com_dev { #if defined(PIOS_INCLUDE_FREERTOS) xSemaphoreHandle tx_sem; xSemaphoreHandle rx_sem; + xSemaphoreHandle sendbuffer_sem; #endif bool has_rx; @@ -155,6 +156,9 @@ int32_t PIOS_COM_Init(uint32_t *com_id, const struct pios_com_driver *driver, ui #endif /* PIOS_INCLUDE_FREERTOS */ (com_dev->driver->bind_tx_cb)(lower_id, PIOS_COM_TxOutCallback, (uint32_t)com_dev); } +#if defined(PIOS_INCLUDE_FREERTOS) + com_dev->sendbuffer_sem = xSemaphoreCreateMutex(); +#endif /* PIOS_INCLUDE_FREERTOS */ *com_id = (uint32_t)com_dev; return 0; @@ -275,6 +279,8 @@ int32_t PIOS_COM_ChangeBaud(uint32_t com_id, uint32_t baud) * \return -1 if port not available * \return -2 if non-blocking mode activated: buffer is full * caller should retry until buffer is free again + * \return -3 another thread is already sending, caller should + * retry until com is available again * \return number of bytes transmitted on success */ int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, uint16_t len) @@ -287,7 +293,11 @@ int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, u } PIOS_Assert(com_dev->has_tx); - +#if defined(PIOS_INCLUDE_FREERTOS) + if(xSemaphoreTake(com_dev->sendbuffer_sem, 0) != pdTRUE){ + return -3; + } +#endif /* PIOS_INCLUDE_FREERTOS */ if (com_dev->driver->available && !com_dev->driver->available(com_dev->lower_id)) { /* * Underlying device is down/unconnected. @@ -297,10 +307,16 @@ int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, u * no longer accepting data. */ fifoBuf_clearData(&com_dev->tx); +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ return len; } if (len > fifoBuf_getFree(&com_dev->tx)) { +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ /* Buffer cannot accept all requested bytes (retry) */ return -2; } @@ -314,7 +330,9 @@ int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, u fifoBuf_getUsed(&com_dev->tx)); } } - +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ return bytes_into_fifo; } From 5fa390ec9d28cef0b7f4d14556acae58fd165ae5 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sat, 8 Feb 2014 12:44:12 +0100 Subject: [PATCH 18/29] OP-1149 fix low temperature compensation formula --- flight/pios/common/pios_ms5611.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flight/pios/common/pios_ms5611.c b/flight/pios/common/pios_ms5611.c index db8d16f1b..3a502993c 100644 --- a/flight/pios/common/pios_ms5611.c +++ b/flight/pios/common/pios_ms5611.c @@ -166,7 +166,6 @@ uint32_t PIOS_MS5611_GetDelayUs() /** * Read the ADC conversion value (once ADC conversion has completed) - * \param[in] PresOrTemp BMP085_PRES_ADDR or BMP085_TEMP_ADDR * \return 0 if successfully read the ADC, -1 if failed */ int32_t PIOS_MS5611_ReadADC(void) @@ -206,14 +205,15 @@ int32_t PIOS_MS5611_ReadADC(void) } // check if temperature is less than 20°C if (Temperature < 2000) { - Offset2 = 5 * (Temperature - 2000) >> 1; - Sens2 = Offset2 >> 1; + int64_t tcorr = (Temperature - 2000) * (Temperature - 2000); + Offset2 = (5 * tcorr) >> 1; + Sens2 = (5 * tcorr) >> 2; compensation_t2 = (deltaTemp * deltaTemp) >> 31; // Apply the "Very low temperature compensation" when temp is less than -15°C if (Temperature < -1500) { - int64_t tcorr = (Temperature + 1500) * (Temperature + 1500); - Offset2 += 7 * tcorr; - Sens2 += (11 * tcorr) >> 1; + int64_t tcorr2 = (Temperature + 1500) * (Temperature + 1500); + Offset2 += 7 * tcorr2; + Sens2 += (11 * tcorr2) >> 1; } } else { compensation_t2 = 0; From 1569881e948b252c12833236a3d927928e2874a1 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sat, 8 Feb 2014 15:29:14 +0100 Subject: [PATCH 19/29] OP-1149 Remove shifts as they can have bad behaviours for negative numbers. Documents correction algorithms as described in ms5611 documentation --- flight/pios/common/pios_ms5611.c | 36 +++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/flight/pios/common/pios_ms5611.c b/flight/pios/common/pios_ms5611.c index 3a502993c..7aaf6fcf7 100644 --- a/flight/pios/common/pios_ms5611.c +++ b/flight/pios/common/pios_ms5611.c @@ -32,6 +32,7 @@ #ifdef PIOS_INCLUDE_MS5611 +#define POW2(x) (2 << (x - 1)) // TODO: Clean this up. Getting around old constant. #define PIOS_MS5611_OVERSAMPLING oversampling @@ -189,9 +190,12 @@ int32_t PIOS_MS5611_ReadADC(void) } RawTemperature = (Data[0] << 16) | (Data[1] << 8) | Data[2]; - - deltaTemp = ((int32_t)RawTemperature) - (CalibData.C[4] << 8); - Temperature = 2000l + ((deltaTemp * CalibData.C[5]) >> 23); + // Difference between actual and reference temperature + // dT = D2 - TREF = D2 - C5 * 2^8 + deltaTemp = ((int32_t)RawTemperature) - (CalibData.C[4] * POW2(8)); + // Actual temperature (-40…85°C with 0.01°C resolution) + // TEMP = 20°C + dT * TEMPSENS = 2000 + dT * C6 / 2^23 + Temperature = 2000l + ((deltaTemp * CalibData.C[5]) / POW2(23)); } else { int64_t Offset; int64_t Sens; @@ -205,15 +209,22 @@ int32_t PIOS_MS5611_ReadADC(void) } // check if temperature is less than 20°C if (Temperature < 2000) { + // Apply compensation + // T2 = dT^2 / 2^31 + // OFF2 = 5 ⋅ (TEMP – 2000)^2/2 + // SENS2 = 5 ⋅ (TEMP – 2000)^2/2^2 + int64_t tcorr = (Temperature - 2000) * (Temperature - 2000); - Offset2 = (5 * tcorr) >> 1; - Sens2 = (5 * tcorr) >> 2; + Offset2 = (5 * tcorr) / 2; + Sens2 = (5 * tcorr) / 4; compensation_t2 = (deltaTemp * deltaTemp) >> 31; // Apply the "Very low temperature compensation" when temp is less than -15°C if (Temperature < -1500) { + // OFF2 = OFF2 + 7 ⋅ (TEMP + 1500)^2 + // SENS2 = SENS2 + 11 ⋅ (TEMP + 1500)^2 / 2 int64_t tcorr2 = (Temperature + 1500) * (Temperature + 1500); Offset2 += 7 * tcorr2; - Sens2 += (11 * tcorr2) >> 1; + Sens2 += (11 * tcorr2) / 2; } } else { compensation_t2 = 0; @@ -221,10 +232,15 @@ int32_t PIOS_MS5611_ReadADC(void) Sens2 = 0; } RawPressure = ((Data[0] << 16) | (Data[1] << 8) | Data[2]); - Offset = (((int64_t)CalibData.C[1]) << 16) + ((((int64_t)CalibData.C[3]) * deltaTemp) >> 7) - Offset2; - Sens = ((int64_t)CalibData.C[0]) << 15; - Sens = Sens + ((((int64_t)CalibData.C[2]) * deltaTemp) >> 8) - Sens2; - Pressure = (((((int64_t)RawPressure) * Sens) >> 21) - Offset) >> 15; + // Offset at actual temperature + // OFF = OFFT1 + TCO * dT = C2 * 2^16 + (C4 * dT) / 2^7 + Offset = ((int64_t)CalibData.C[1]) * POW2(16) + (((int64_t)CalibData.C[3]) * deltaTemp) / POW2(7) - Offset2; + // Sensitivity at actual temperature + // SENS = SENST1 + TCS * dT = C1 * 2^15 + (C3 * dT) / 2^8 + Sens = ((int64_t)CalibData.C[0]) * POW2(15) + (((int64_t)CalibData.C[2]) * deltaTemp) / POW2(8) - Sens2; + // Temperature compensated pressure (10…1200mbar with 0.01mbar resolution) + // P = D1 * SENS - OFF = (D1 * SENS / 2^21 - OFF) / 2^15 + Pressure = (((((int64_t)RawPressure) * Sens) / POW2(21)) - Offset) / POW2(15); } return 0; } From 67117d228d271de2eaae9e3c6fde2a3268ac58d2 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 9 Feb 2014 12:03:36 +0100 Subject: [PATCH 20/29] OP-1149 change POW2 as POW2(0) led to undefined results --- flight/pios/common/pios_ms5611.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flight/pios/common/pios_ms5611.c b/flight/pios/common/pios_ms5611.c index 7aaf6fcf7..3268289b4 100644 --- a/flight/pios/common/pios_ms5611.c +++ b/flight/pios/common/pios_ms5611.c @@ -32,7 +32,7 @@ #ifdef PIOS_INCLUDE_MS5611 -#define POW2(x) (2 << (x - 1)) +#define POW2(x) (1 << x) // TODO: Clean this up. Getting around old constant. #define PIOS_MS5611_OVERSAMPLING oversampling From 9f02d3c17098a2bf00edfd51c92a675ea57d65e8 Mon Sep 17 00:00:00 2001 From: m_thread Date: Sun, 9 Feb 2014 14:08:07 +0100 Subject: [PATCH 21/29] OP-1191 Added some tooltips and fixed tooltip font color in css to make it work in Fusion style on Linux. --- .../share/openpilotgcs/stylesheets/default_linux.qss | 4 ++++ ground/openpilotgcs/src/plugins/config/stabilization.ui | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss index edc9dc8cd..863ad4f2f 100644 --- a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss +++ b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss @@ -1 +1,5 @@ /* Linux styles */ + +QToolTip { + color: black; + } diff --git a/ground/openpilotgcs/src/plugins/config/stabilization.ui b/ground/openpilotgcs/src/plugins/config/stabilization.ui index f33da0062..f89f15087 100644 --- a/ground/openpilotgcs/src/plugins/config/stabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/stabilization.ui @@ -25391,6 +25391,9 @@ border-radius: 5; + + <html><head/><body><p>How fast the vehicle should climb or descent to compensate a certain altitude difference. higher values could result in more accurate altitude hold but also more violent control actions, lower values are safer and ensure smoother flight. The default value should be fine for the majority of crafts.</p></body></html> + 100 @@ -25417,6 +25420,9 @@ border-radius: 5; + + <html><head/><body><p>How much the vehicle should throttle up or down to compensate or achieve a certain vertical speed. Higher values lead to more aggressive throttle changes and could lead to oscillations. This is the most likely candidate to change depending on the crafts engine thrust. Heavy craft with weak engines might require higher values.</p></body></html> + 100 @@ -25443,6 +25449,9 @@ border-radius: 5; + + <html><head/><body><p>How fast the vehicle should adjust its neutral throttle estimation. Altitude assumes that when engaged the throttle is in the range required to hover. If the throttle is a lot higher or lower, it needs to adjust this &quot;throttle trim&quot; Higher values make it do this adjustment faster, but this could lead to ugly oscillations. Leave at default unless you know what you are doing.</p></body></html> + 1000 From 184b161d45b53432ea982be3fe72fbfbb52a4ee1 Mon Sep 17 00:00:00 2001 From: m_thread Date: Sun, 9 Feb 2014 17:39:16 +0100 Subject: [PATCH 22/29] OP-1191 Fixed weirdness showing in 'Edit Gadgets Mode' after switch to Fusion style. --- .../coreplugin/uavgadgetmanager/uavgadgetview.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp index 86ec14f21..96def978a 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp @@ -104,7 +104,7 @@ UAVGadgetView::UAVGadgetView(Core::UAVGadgetManager *uavGadgetManager, IUAVGadge ++index; } - m_defaultToolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + m_defaultToolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); m_activeToolBar = m_defaultToolBar; QHBoxLayout *toolBarLayout = new QHBoxLayout(m_toolBar); @@ -115,7 +115,7 @@ UAVGadgetView::UAVGadgetView(Core::UAVGadgetManager *uavGadgetManager, IUAVGadge m_toolBar->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::MinimumExpanding); QWidget *spacerWidget = new QWidget(this); - spacerWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + spacerWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); m_activeLabel->setTextFormat(Qt::RichText); m_activeLabel->setText("" + tr("Active") + ""); @@ -124,9 +124,10 @@ UAVGadgetView::UAVGadgetView(Core::UAVGadgetManager *uavGadgetManager, IUAVGadge m_closeButton->setIcon(QIcon(":/core/images/closebutton.png")); m_top = new Utils::StyledBar(this); + m_top->setMaximumHeight(35); QHBoxLayout *toplayout = new QHBoxLayout(m_top); - toplayout->setSpacing(0); - toplayout->setMargin(0); + toplayout->setSpacing(4); + toplayout->setMargin(4); toplayout->addWidget(m_uavGadgetList); toplayout->addWidget(m_toolBar); // Custom toolbar stretches toplayout->addWidget(spacerWidget); From 3e6192f2d162cdbe31c073dcd8985c0f2d69b175 Mon Sep 17 00:00:00 2001 From: m_thread Date: Sun, 9 Feb 2014 19:12:45 +0100 Subject: [PATCH 23/29] OP-1191 Uncrustify. --- .../src/plugins/config/configpipxtremewidget.cpp | 10 +++++----- .../src/plugins/config/configvehicletypewidget.cpp | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp index ce0616102..6595b6366 100644 --- a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp @@ -121,9 +121,9 @@ void ConfigPipXtremeWidget::updateStatus(UAVObject *object) // Update the link state UAVObjectField *linkField = object->getField("LinkState"); m_oplink->LinkState->setText(linkField->getValue().toString()); - bool linkConnected = (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_CONNECTED)); + bool linkConnected = (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_CONNECTED)); bool modemEnabled = linkConnected || (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_DISCONNECTED)) || - (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_ENABLED)); + (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_ENABLED)); UAVObjectField *pairRssiField = object->getField("PairSignalStrengths"); @@ -143,7 +143,7 @@ void ConfigPipXtremeWidget::updateStatus(UAVObject *object) m_oplink->PairSignalStrengthLabel1->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar1->value())); pairid = pairIdField->getValue(1).toUInt(); - bound = (pairid == boundPairId); + bound = (pairid == boundPairId); m_oplink->PairID2->setText(QString::number(pairid, 16).toUpper()); m_oplink->PairID2->setEnabled(false); m_oplink->Bind2->setText(bound ? tr("Unbind") : tr("Bind")); @@ -152,7 +152,7 @@ void ConfigPipXtremeWidget::updateStatus(UAVObject *object) m_oplink->PairSignalStrengthLabel2->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar2->value())); pairid = pairIdField->getValue(2).toUInt(); - bound = (pairid == boundPairId); + bound = (pairid == boundPairId); m_oplink->PairID3->setText(QString::number(pairid, 16).toUpper()); m_oplink->PairID3->setEnabled(false); m_oplink->Bind3->setText(bound ? tr("Unbind") : tr("Bind")); @@ -161,7 +161,7 @@ void ConfigPipXtremeWidget::updateStatus(UAVObject *object) m_oplink->PairSignalStrengthLabel3->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar3->value())); pairid = pairIdField->getValue(3).toUInt(); - bound = (pairid == boundPairId); + bound = (pairid == boundPairId); m_oplink->PairID4->setText(QString::number(pairid, 16).toUpper()); m_oplink->PairID4->setEnabled(false); m_oplink->Bind4->setText(bound ? tr("Unbind") : tr("Bind")); diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp index 4bfda4563..8a49d6421 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp @@ -197,7 +197,7 @@ void ConfigVehicleTypeWidget::refreshWidgetsValues(UAVObject *o) // is not ideal, but there you go. QString frameType = field->getValue().toString(); - int category = frameCategory(frameType); + int category = frameCategory(frameType); m_aircraft->aircraftType->setCurrentIndex(category); VehicleConfig *vehicleConfig = getVehicleConfigWidget(category); @@ -303,13 +303,13 @@ VehicleConfig *ConfigVehicleTypeWidget::createVehicleConfigWidget(int frameCateg { if (frameCategory == ConfigVehicleTypeWidget::FIXED_WING) { return new ConfigFixedWingWidget(); - } else if (frameCategory == ConfigVehicleTypeWidget::MULTIROTOR){ + } else if (frameCategory == ConfigVehicleTypeWidget::MULTIROTOR) { return new ConfigMultiRotorWidget(); } else if (frameCategory == ConfigVehicleTypeWidget::HELICOPTER) { return new ConfigCcpmWidget(); } else if (frameCategory == ConfigVehicleTypeWidget::GROUND) { return new ConfigGroundVehicleWidget(); - } else if (frameCategory ==ConfigVehicleTypeWidget::CUSTOM) { + } else if (frameCategory == ConfigVehicleTypeWidget::CUSTOM) { return new ConfigCustomWidget(); } return NULL; From 79b68ae88657fcb02136e45c72cc41a6031d8ca7 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 9 Feb 2014 19:57:05 +0100 Subject: [PATCH 24/29] OP-1218 locks SendBuffer under the same mutex as SendBufferNonBlocking --- flight/pios/common/pios_com.c | 97 ++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 41 deletions(-) diff --git a/flight/pios/common/pios_com.c b/flight/pios/common/pios_com.c index edc4dd0c9..31f67176a 100644 --- a/flight/pios/common/pios_com.c +++ b/flight/pios/common/pios_com.c @@ -271,6 +271,40 @@ int32_t PIOS_COM_ChangeBaud(uint32_t com_id, uint32_t baud) return 0; } + +static int32_t PIOS_COM_SendBufferNonBlockingInternal(struct pios_com_dev *com_dev, const uint8_t *buffer, uint16_t len) +{ +PIOS_Assert(com_dev); +PIOS_Assert(com_dev->has_tx); +if (com_dev->driver->available && !com_dev->driver->available(com_dev->lower_id)) { + /* + * Underlying device is down/unconnected. + * Dump our fifo contents and act like an infinite data sink. + * Failure to do this results in stale data in the fifo as well as + * possibly having the caller block trying to send to a device that's + * no longer accepting data. + */ + fifoBuf_clearData(&com_dev->tx); + return len; +} + +if (len > fifoBuf_getFree(&com_dev->tx)) { + /* Buffer cannot accept all requested bytes (retry) */ + return -2; +} + +uint16_t bytes_into_fifo = fifoBuf_putData(&com_dev->tx, buffer, len); + +if (bytes_into_fifo > 0) { + /* More data has been put in the tx buffer, make sure the tx is started */ + if (com_dev->driver->tx_start) { + com_dev->driver->tx_start(com_dev->lower_id, + fifoBuf_getUsed(&com_dev->tx)); + } +} +return bytes_into_fifo; +} + /** * Sends a package over given port * \param[in] port COM port @@ -291,51 +325,19 @@ int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, u /* Undefined COM port for this board (see pios_board.c) */ return -1; } - - PIOS_Assert(com_dev->has_tx); #if defined(PIOS_INCLUDE_FREERTOS) - if(xSemaphoreTake(com_dev->sendbuffer_sem, 0) != pdTRUE){ + if (xSemaphoreTake(com_dev->sendbuffer_sem, 0) != pdTRUE) { return -3; } #endif /* PIOS_INCLUDE_FREERTOS */ - if (com_dev->driver->available && !com_dev->driver->available(com_dev->lower_id)) { - /* - * Underlying device is down/unconnected. - * Dump our fifo contents and act like an infinite data sink. - * Failure to do this results in stale data in the fifo as well as - * possibly having the caller block trying to send to a device that's - * no longer accepting data. - */ - fifoBuf_clearData(&com_dev->tx); + int32_t ret = PIOS_COM_SendBufferNonBlockingInternal(com_dev, buffer, len); #if defined(PIOS_INCLUDE_FREERTOS) - xSemaphoreGive(com_dev->sendbuffer_sem); + xSemaphoreGive(com_dev->sendbuffer_sem); #endif /* PIOS_INCLUDE_FREERTOS */ - return len; - } - - if (len > fifoBuf_getFree(&com_dev->tx)) { -#if defined(PIOS_INCLUDE_FREERTOS) - xSemaphoreGive(com_dev->sendbuffer_sem); -#endif /* PIOS_INCLUDE_FREERTOS */ - /* Buffer cannot accept all requested bytes (retry) */ - return -2; - } - - uint16_t bytes_into_fifo = fifoBuf_putData(&com_dev->tx, buffer, len); - - if (bytes_into_fifo > 0) { - /* More data has been put in the tx buffer, make sure the tx is started */ - if (com_dev->driver->tx_start) { - com_dev->driver->tx_start(com_dev->lower_id, - fifoBuf_getUsed(&com_dev->tx)); - } - } -#if defined(PIOS_INCLUDE_FREERTOS) - xSemaphoreGive(com_dev->sendbuffer_sem); -#endif /* PIOS_INCLUDE_FREERTOS */ - return bytes_into_fifo; + return ret; } + /** * Sends a package over given port * (blocking function) @@ -343,6 +345,7 @@ int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, u * \param[in] buffer character buffer * \param[in] len buffer length * \return -1 if port not available + * \return -2 if mutex can't be taken; * \return number of bytes transmitted on success */ int32_t PIOS_COM_SendBuffer(uint32_t com_id, const uint8_t *buffer, uint16_t len) @@ -353,9 +356,12 @@ int32_t PIOS_COM_SendBuffer(uint32_t com_id, const uint8_t *buffer, uint16_t len /* Undefined COM port for this board (see pios_board.c) */ return -1; } - PIOS_Assert(com_dev->has_tx); - +#if defined(PIOS_INCLUDE_FREERTOS) + if (xSemaphoreTake(com_dev->sendbuffer_sem, 0) != pdTRUE) { + return -2; + } +#endif /* PIOS_INCLUDE_FREERTOS */ uint32_t max_frag_len = fifoBuf_getSize(&com_dev->tx); uint32_t bytes_to_send = len; while (bytes_to_send) { @@ -366,13 +372,16 @@ int32_t PIOS_COM_SendBuffer(uint32_t com_id, const uint8_t *buffer, uint16_t len } else { frag_size = bytes_to_send; } - int32_t rc = PIOS_COM_SendBufferNonBlocking(com_id, buffer, frag_size); + int32_t rc = PIOS_COM_SendBufferNonBlockingInternal(com_dev, buffer, frag_size); if (rc >= 0) { bytes_to_send -= rc; buffer += rc; } else { switch (rc) { case -1: +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ /* Device is invalid, this will never work */ return -1; @@ -385,17 +394,23 @@ int32_t PIOS_COM_SendBuffer(uint32_t com_id, const uint8_t *buffer, uint16_t len } #if defined(PIOS_INCLUDE_FREERTOS) if (xSemaphoreTake(com_dev->tx_sem, 5000) != pdTRUE) { + xSemaphoreGive(com_dev->sendbuffer_sem); return -3; } #endif continue; default: /* Unhandled return code */ +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ return rc; } } } - +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ return len; } From e16cf0ef8d37ea494039ab122ede110ae69567f9 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 9 Feb 2014 19:57:16 +0100 Subject: [PATCH 25/29] OP-1218 changes to RadioComBridge to support return code. --- .../modules/RadioComBridge/RadioComBridge.c | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/flight/modules/RadioComBridge/RadioComBridge.c b/flight/modules/RadioComBridge/RadioComBridge.c index 22341a771..55fb1f1e4 100644 --- a/flight/modules/RadioComBridge/RadioComBridge.c +++ b/flight/modules/RadioComBridge/RadioComBridge.c @@ -415,7 +415,11 @@ static void radioRxTask(__attribute__((unused)) void *parameters) // Send the data straight to the telemetry port. // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - PIOS_COM_SendBufferNonBlocking(PIOS_COM_TELEMETRY, serial_data, bytes_to_process); + int32_t ret = -2; + uint8_t count = 5; + while(count-- > 0 && ret < -1){ + ret = PIOS_COM_SendBufferNonBlocking(PIOS_COM_TELEMETRY, serial_data, bytes_to_process); + } } } } else { @@ -511,7 +515,11 @@ static void serialRxTask(__attribute__((unused)) void *parameters) // Send the data over the radio link. // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - PIOS_COM_SendBufferNonBlocking(PIOS_COM_RADIO, data->serialRxBuf, bytes_to_process); + int32_t ret = -2; + uint8_t count = 5; + while(count-- > 0 && ret < -1){ + PIOS_COM_SendBufferNonBlocking(PIOS_COM_RADIO, data->serialRxBuf, bytes_to_process); + } } } else { vTaskDelay(5); @@ -541,7 +549,11 @@ static int32_t UAVTalkSendHandler(uint8_t *buf, int32_t length) if (outputPort) { // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - ret = PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); + ret = -2; + uint8_t count = 5; + while(count-- > 0 && ret < -1){ + ret = PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); + } } else { ret = -1; } @@ -567,7 +579,12 @@ static int32_t RadioSendHandler(uint8_t *buf, int32_t length) if (outputPort && PIOS_COM_Available(outputPort)) { // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - return PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); + int32_t ret = -2; + uint8_t count = 5; + while(count-- > 0 && ret < -1){ + ret = PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); + } + return ret; } else { return -1; } From d1252ce26147c482e5f17335f1f3a939f8ab9138 Mon Sep 17 00:00:00 2001 From: Laurent Lalanne Date: Sun, 9 Feb 2014 20:09:37 +0100 Subject: [PATCH 26/29] OP-1187 rel-14.01 Updates --- .../translations/openpilotgcs_fr.ts | 283 +++++++++++++++--- 1 file changed, 234 insertions(+), 49 deletions(-) diff --git a/ground/openpilotgcs/share/openpilotgcs/translations/openpilotgcs_fr.ts b/ground/openpilotgcs/share/openpilotgcs/translations/openpilotgcs_fr.ts index 50d6a417e..90fe5dbca 100644 --- a/ground/openpilotgcs/share/openpilotgcs/translations/openpilotgcs_fr.ts +++ b/ground/openpilotgcs/share/openpilotgcs/translations/openpilotgcs_fr.ts @@ -123,7 +123,7 @@ Core::Internal::MainWindow - + &File &Fichier @@ -148,12 +148,12 @@ &Aide - + OpenPilot GCS - + Ctrl+Shift+S Ctrl+Maj+S @@ -4123,9 +4123,8 @@ Le SNR du satellite est affiché au-dessus (en dBHz) Formulaire - Select aircraft type here - Sélectionner ici le type d'appareil + Sélectionner ici le type d'appareil @@ -4148,10 +4147,9 @@ Le SNR du satellite est affiché au-dessus (en dBHz) Paramètres de Mixage - Vehicle type: véhicule / appareil ? - Type de Véhicule : + Type de Véhicule : @@ -4261,7 +4259,6 @@ p, li { white-space: pre-wrap; } Enregistrer - <!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; } @@ -4274,6 +4271,35 @@ p, li { white-space: pre-wrap; } <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;"><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;"><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> + <!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:'MS Shell Dlg 2'; font-size:8.25pt; 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;">LA MISE EN PLACE DE FEED FORWARD EXIGE DE LA PRUDENCE</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;"></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;"><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;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Attention : L'activation du réglage Feed Forward lancera tous les moteurs à mi-gaz, vous avez été averti !</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;">Dans un premier temps retirez vos hélices, puis pour affiner assurez-vous que le châssis est maintenu bien en place. Portez des lunettes et protégez-vous le visage et le corps.</span></p></td></tr></table></body></html> + + + + <!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:'Sans Serif'; 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;"><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;"><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> <!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"> @@ -6808,6 +6834,16 @@ Applique et Enregistre tous les paramètres sur la SD Save Enregistrer + + + Output Channel Configuration + Configuration Canaux de Sortie + + + + Live Testing + Test en Temps Réel + outputChannelForm @@ -6882,15 +6918,19 @@ Applique et Enregistre tous les paramètres sur la SD Mode de sortie - Rev - Inv + Inv Maximum PWM value, beware of not overdriving your servo. Valeur maximum PWM, attention de respecter les limites de votre servo. + + + Reversed + Inversé + RevoSensorsWidget @@ -7015,7 +7055,6 @@ en utilisant le bouton spécifique de calibration en haut de l'écran. #1 : Calibration magnétomètre - <!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; } @@ -7034,7 +7073,7 @@ p, li { white-space: pre-wrap; } <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;">#3: Accelerometer bias calibration:</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:'Ubuntu'; font-size:11pt;">This step will ensure that accelerometer bias is accurate. Place your airframe as horizontally as possible (use a spirit level if necessary), then press Start below and do not move your airframe at all until the end of the calibration.</span></p></td></tr></table></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <!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:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> @@ -7216,6 +7255,45 @@ Une valeur de 0.00 désactive le filtre. Pas toucher ! + + + <!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:'Sans Serif'; 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 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; font-weight:600;">Help</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:'Ubuntu'; font-size:11pt;">Step #1 and #2 are really necessary. Step #3 will help you achieve the best possible results.</span></p> +<p align="center" 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;">#1: Multi-Point calibration:</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:'Ubuntu'; font-size:11pt;">This calibration will compute the scale for all sensors on the INS. Press &quot;Start&quot; to begin calibration, and follow the instructions which will be displayed here. Note that your HomeLocation must be set first, including the local magnetic field vector (Be) and acceleration due to gravity (g_e).</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;">#2: Sensor noise calibration:</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:'Ubuntu'; font-size:11pt;">This calibration will compute sensor variance under standard conditions. You can leave your engines running at low to mid throttle to take their vibration into account before pressing &quot;Start&quot;.</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;">#3: Accelerometer bias calibration:</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:'Ubuntu'; font-size:11pt;">This step will ensure that accelerometer bias is accurate. Place your airframe as horizontally as possible (use a spirit level if necessary), then press Start below and do not move your airframe at all until the end of the calibration.</span></p></td></tr></table></body></html> + <!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:'Sans Serif'; 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 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; font-weight:600;">Help</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:'Ubuntu'; font-size:11pt;">Les étapes #1 et #2 sont réellement nécessaires. L'étape #3 vous aidera à atteindre les meilleurs résultats possibles.</span></p> +<p align="center" 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;">#1: Calibration Multipoints :</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:'Ubuntu'; font-size:11pt;">Cette calibration va calculer l'amplitude de tous les capteurs de la carte. Appuyez sur &quot;Démarrer&quot; pour commencer l'étalonnage puis suivez les instructions qui sont affichées ici. Veuillez noter que votre position Home doit être définie en premier, ainsi que le vecteur de champ magnétique (Be) et l'accélération due à la gravité (g_e).</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;">#2: Calibration du bruit des capteurs :</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:'Ubuntu'; font-size:11pt;">Cette calibration calcule les variations des capteurs dans des conditions normales. Vous pouvez laisser les moteurs tourner au mini ou à mi-gaz pour tenir compte de leurs vibrations avant d'appuyer sur &quot;Démarrer&quot;.</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;">#3: Calibration de l'ajustement des Accéléromètres :</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:'Ubuntu'; font-size:11pt;">Cette étape fera en sorte que l'ajustement des accéléromètres soit parfait. Veuillez placer l'appareil le plus horizontalement possible (utilisez un niveau à bulle si nécessaire), puis appuyez sur Démarrer ci-dessus et ne bougez pas du tout votre appareil jusqu'à la fin de l'étalonnage.</span></p></td></tr></table></body></html> + StabilizationWidget @@ -8246,6 +8324,31 @@ Useful if you have accidentally changed some settings. Pas toucher ! + + + Use Basic Configuration + Utiliser Configuration Basique + + + + Use Advanced Configuration + Utiliser Configuration Avancée + + + + <html><head/><body><p>How fast the vehicle should climb or descent to compensate a certain altitude difference. higher values could result in more accurate altitude hold but also more violent control actions, lower values are safer and ensure smoother flight. The default value should be fine for the majority of crafts.</p></body></html> + <html><head/><body><p>Détermine la vitesse à laquelle doit monter ou descendre le véhicule pour compenser une certaine différence d'altitude. Des valeurs plus élevées pourraient entraîner un maintien d'altitude plus précis mais aussi des réactions plus violentes, des valeurs inférieures sont plus sûres et donnent un vol plus doux. La valeur par défaut devrait être bonne pour la plupart des appareils.</p></body></html> + + + + <html><head/><body><p>How much the vehicle should throttle up or down to compensate or achieve a certain vertical speed. Higher values lead to more aggressive throttle changes and could lead to oscillations. This is the most likely candidate to change depending on the crafts engine thrust. Heavy craft with weak engines might require higher values.</p></body></html> + <html><head/><body><p>Détermine de combien le véhicule augmente ou diminue les gaz pour compenser ou atteindre une certaine vitesse verticale. Des valeurs plus élevées entraînent des variations de gaz plus agressives qui peuvent produire des oscillations. C'est le paramètre à changer en fonction de la poussée moteur de l'appareil. Des appareils chargés avec des moteurs faibles peuvent demander des valeurs plus élevées.</p></body></html> + + + + <html><head/><body><p>How fast the vehicle should adjust its neutral throttle estimation. Altitude assumes that when engaged the throttle is in the range required to hover. If the throttle is a lot higher or lower, it needs to adjust this &quot;throttle trim&quot; Higher values make it do this adjustment faster, but this could lead to ugly oscillations. Leave at default unless you know what you are doing.</p></body></html> + <html><head/><body><p>Détermine la vitesse à laquelle le véhicule doit ajuster son estimation de gaz au neutre. Le Maintien d'Altitude suppose que lorsque il est activé, il est la plage nécessaire pour se maintenir en l'air. Si les gaz est beaucoup plus élevé ou plus bas, il faut ajuster ce "trim". Des valeurs plus élevées peuvent lui permettre de faire cet ajustement plus rapidement mais cela pourrait conduire à des oscillations. A laisser par défaut, à moins de savoir ce que vous faites.</p></body></html> + TxPIDWidget @@ -8469,7 +8572,7 @@ uniquement lorsque le système est armé, sans désactiver le module. PID Bank - Banque PID + Banque PID @@ -8678,27 +8781,27 @@ uniquement lorsque le système est armé, sans désactiver le module. Armed state - + Disarmed - + Arming - + Armed - Armé + Channels - Canaux + Canaux @@ -10114,7 +10217,7 @@ automatiquement lorsque vous arrêtez une carte en fonctionnement. <html><head/><body><p>Reboot the board and clear its settings memory.</p><p> Useful if the board cannot boot properly.</p><p> Blue led starts blinking quick for 20-30 seconds than the board will start normally</p><p><br/></p><p>If telemetry is not running, select the link using the dropdown</p><p>menu on the right.</p><p>PLEASE NOTE: Supported with bootloader versions 4.0 and earlier</p></body></html> - <html><head/><body> + <html><head/><body> <p>Redémarre la carte et efface ses paramètres en mémoire.</p> <p>Utile si la carte n'arrive pas à booter correctement.</p> <p>La led Bleue clignote rapidement pendant 20-30 secondes lorsque la carte démarre normalement</p> @@ -10263,14 +10366,20 @@ p, li { white-space: pre-wrap; } + The tab you are leaving has unsaved changes,if you proceed they will be lost. +Do you still want to proceed? + L'onglet que vous quittez contient des modifications non sauvegardées, si vous continuez elles seront perdues. +Voulez-vous toujours continuer ? + + The tab you are leaving has unsaved changes,if you proceed they will be lost.Do you still want to proceed? - L'onglet que vous quittez contient des modifications non sauvegardées, si vous continuez elles seront perdues. Voulez-vous toujours continuer ? + L'onglet que vous quittez contient des modifications non sauvegardées, si vous continuez elles seront perdues. Voulez-vous toujours continuer ? ConfigInputWidget - + Arming Settings are now set to 'Always Disarmed' for your safety. Contexte : Onglet "Paramètres d'Armement" @@ -10497,7 +10606,7 @@ Bougez le manche %1. USB : OPLinkMini - + Connections: Connexions : @@ -10507,8 +10616,8 @@ Bougez le manche %1. Déconnecter - - + + Connect Connecter @@ -12345,9 +12454,8 @@ Méfiez-vous de ne pas vous verrouiller l'accès ! Rx Défaillants - Remote Modems - Modems Distants + Modems Distants @@ -12365,9 +12473,8 @@ Méfiez-vous de ne pas vous verrouiller l'accès ! Associer - Coord ID - ID Coord + ID Coord @@ -12445,9 +12552,8 @@ Méfiez-vous de ne pas vous verrouiller l'accès ! Si coché, les données sont uniquement transmises du coordinateur vers le modem Rx. - One-Way Link - Liaison Unidirectionnelle + Liaison Unidirectionnelle @@ -12494,6 +12600,31 @@ Méfiez-vous de ne pas vous verrouiller l'accès ! PPM + + + OPLink configuration + + + + + One-Way + + + + + Remote modems + + + + + Coordinator ID + + + + + <html><head/><body><p>This is the coordinator id we currently are bound to.</p><p>To manually bind to a specific coordinator, just type</p><p>or paste its device id in this box and save.</p><p>The device must be rebooted for the binding to take place.</p></body></html> + + OsgEarthview @@ -13370,10 +13501,36 @@ p, li { white-space: pre-wrap; } ConfigPipXtremeWidget - + + + + + Unbind + + + + + + + + Bind + Associer + + + Unknown Inconnu + + + Information + + + + + To apply the changes when binding/unbinding the board must be rebooted or power cycled. + + ConfigStabilizationWidget @@ -13450,22 +13607,22 @@ p, li { white-space: pre-wrap; } Form - Formulaire + Formulaire Channel neutral - Neutre canal + Neutre canal Neutral - Neutre + Neutre Response time - Temps de réponse (RT) + Temps de réponse (RT) @@ -13475,52 +13632,52 @@ p, li { white-space: pre-wrap; } Channel values are inverted - Les valeurs du canal sont inversées + Les valeurs du canal sont inversées Reversed - Inversé + Inversé Channel function - Fonction canal + Fonction canal Function - Fonction + Fonction Channel type - Type canal + Type canal Type - Type + Type Channel number - Numéro canal + Numéro canal Number - Nombre + Numéro Channel min - Valeur mini canal + Valeur mini canal Min - Mini + Mini @@ -13531,12 +13688,12 @@ p, li { white-space: pre-wrap; } Channel max - Valeur maxi canal + Valeur maxi canal Max - Maxi + Maxi @@ -13548,7 +13705,7 @@ Warning: this is an expert mode feature, mostly used for aerial video camera control (airframe yaw and camera gimbal accessory channels). Too high values for main controls can cause undesirable effects and even lead to crash. Use with caution. - Filtrage optionnel du temps de réponse d'entrée. + Filtrage optionnel du temps de réponse d'entrée. Plage : 0-999ms; 0 désactive le filtre (défaut). @@ -13560,7 +13717,35 @@ et même conduire au crash. A utiliser avec prudence. Chan %1 - Canal %1 + Canal %1 + + + + ConfigVehicleTypeWidget + + + Multirotor + Multirotor + + + + Fixed Wing + Aile + + + + Helicopter + Hélicoptère + + + + Ground + Voiture + + + + Custom + Personnalisé From 1ba5dbaca85b45ea50117b286e850777bc59f11e Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Mon, 10 Feb 2014 22:57:24 +0100 Subject: [PATCH 27/29] uncrustify --- .../modules/RadioComBridge/RadioComBridge.c | 14 ++--- flight/pios/common/pios_com.c | 56 +++++++++---------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/flight/modules/RadioComBridge/RadioComBridge.c b/flight/modules/RadioComBridge/RadioComBridge.c index 55fb1f1e4..7c1416e81 100644 --- a/flight/modules/RadioComBridge/RadioComBridge.c +++ b/flight/modules/RadioComBridge/RadioComBridge.c @@ -415,9 +415,9 @@ static void radioRxTask(__attribute__((unused)) void *parameters) // Send the data straight to the telemetry port. // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - int32_t ret = -2; + int32_t ret = -2; uint8_t count = 5; - while(count-- > 0 && ret < -1){ + while (count-- > 0 && ret < -1) { ret = PIOS_COM_SendBufferNonBlocking(PIOS_COM_TELEMETRY, serial_data, bytes_to_process); } } @@ -515,9 +515,9 @@ static void serialRxTask(__attribute__((unused)) void *parameters) // Send the data over the radio link. // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - int32_t ret = -2; + int32_t ret = -2; uint8_t count = 5; - while(count-- > 0 && ret < -1){ + while (count-- > 0 && ret < -1) { PIOS_COM_SendBufferNonBlocking(PIOS_COM_RADIO, data->serialRxBuf, bytes_to_process); } } @@ -551,7 +551,7 @@ static int32_t UAVTalkSendHandler(uint8_t *buf, int32_t length) // it is the caller responsibility to retry in such cases... ret = -2; uint8_t count = 5; - while(count-- > 0 && ret < -1){ + while (count-- > 0 && ret < -1) { ret = PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); } } else { @@ -579,9 +579,9 @@ static int32_t RadioSendHandler(uint8_t *buf, int32_t length) if (outputPort && PIOS_COM_Available(outputPort)) { // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - int32_t ret = -2; + int32_t ret = -2; uint8_t count = 5; - while(count-- > 0 && ret < -1){ + while (count-- > 0 && ret < -1) { ret = PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); } return ret; diff --git a/flight/pios/common/pios_com.c b/flight/pios/common/pios_com.c index 31f67176a..e5adc5b7c 100644 --- a/flight/pios/common/pios_com.c +++ b/flight/pios/common/pios_com.c @@ -274,35 +274,35 @@ int32_t PIOS_COM_ChangeBaud(uint32_t com_id, uint32_t baud) static int32_t PIOS_COM_SendBufferNonBlockingInternal(struct pios_com_dev *com_dev, const uint8_t *buffer, uint16_t len) { -PIOS_Assert(com_dev); -PIOS_Assert(com_dev->has_tx); -if (com_dev->driver->available && !com_dev->driver->available(com_dev->lower_id)) { - /* - * Underlying device is down/unconnected. - * Dump our fifo contents and act like an infinite data sink. - * Failure to do this results in stale data in the fifo as well as - * possibly having the caller block trying to send to a device that's - * no longer accepting data. - */ - fifoBuf_clearData(&com_dev->tx); - return len; -} - -if (len > fifoBuf_getFree(&com_dev->tx)) { - /* Buffer cannot accept all requested bytes (retry) */ - return -2; -} - -uint16_t bytes_into_fifo = fifoBuf_putData(&com_dev->tx, buffer, len); - -if (bytes_into_fifo > 0) { - /* More data has been put in the tx buffer, make sure the tx is started */ - if (com_dev->driver->tx_start) { - com_dev->driver->tx_start(com_dev->lower_id, - fifoBuf_getUsed(&com_dev->tx)); + PIOS_Assert(com_dev); + PIOS_Assert(com_dev->has_tx); + if (com_dev->driver->available && !com_dev->driver->available(com_dev->lower_id)) { + /* + * Underlying device is down/unconnected. + * Dump our fifo contents and act like an infinite data sink. + * Failure to do this results in stale data in the fifo as well as + * possibly having the caller block trying to send to a device that's + * no longer accepting data. + */ + fifoBuf_clearData(&com_dev->tx); + return len; } -} -return bytes_into_fifo; + + if (len > fifoBuf_getFree(&com_dev->tx)) { + /* Buffer cannot accept all requested bytes (retry) */ + return -2; + } + + uint16_t bytes_into_fifo = fifoBuf_putData(&com_dev->tx, buffer, len); + + if (bytes_into_fifo > 0) { + /* More data has been put in the tx buffer, make sure the tx is started */ + if (com_dev->driver->tx_start) { + com_dev->driver->tx_start(com_dev->lower_id, + fifoBuf_getUsed(&com_dev->tx)); + } + } + return bytes_into_fifo; } /** From 357ebff76812e603d7f08368c9718d225a1e172a Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Mon, 10 Feb 2014 22:58:11 +0100 Subject: [PATCH 28/29] Fix WHATSNEW.txt for release --- WHATSNEW.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/WHATSNEW.txt b/WHATSNEW.txt index fb184e8b4..5bfddcace 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,3 +1,9 @@ +--- RELEASE-14.01-RC3 --- Cruising Ratt --- +this issue includes the following fixes to previous RC2: +OP-1088 OP-1141 OP-1166 OP-1187 OP-1191 OP-1195 OP-1211 OP-1218 + +Full list of bug fixed in this release is accessible here +http://progress.openpilot.org/issues/?filter=11361 --- RELEASE-14.01-RC2 --- Cruising Ratt --- This is the RC2 for the first 2014 software release. From 4fa62d71f88bbdfe6cb70a55f7335764b4a44caf Mon Sep 17 00:00:00 2001 From: Corvus Corax Date: Sun, 16 Feb 2014 12:18:41 +0100 Subject: [PATCH 29/29] drive-by-enhancement: assert on existance of qml fields in debug mode, helps debugging qml --- .../src/plugins/uavobjectwidgetutils/configtaskwidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp index fbc68e1fe..84505cd26 100644 --- a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp +++ b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp @@ -138,6 +138,7 @@ void ConfigTaskWidget::doAddWidgetBinding(QString objectName, QString fieldName, if (!fieldName.isEmpty() && object) { field = object->getField(QString(fieldName)); + Q_ASSERT(field); } WidgetBinding *binding = new WidgetBinding(widget, object, field, index, scale, isLimited);