From 517123d5216e911f7845b933fa261cbad3a4d5c8 Mon Sep 17 00:00:00 2001 From: m_thread Date: Thu, 6 Feb 2014 16:27:58 +0100 Subject: [PATCH] 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 + + + + +