diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index d5d87e63e..2187a98fb 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -320,7 +320,7 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability) else if (IS_TARANIS_XLITES(board)) return 6; else if (IS_TARANIS_XLITE(board)) - return 4; + return 6; else if (board == Board::BOARD_TARANIS_X9DP_2019) return 9; else if (IS_HORUS_OR_TARANIS(board)) diff --git a/companion/src/firmwares/modeldata.h b/companion/src/firmwares/modeldata.h index c4c0b0854..732434434 100644 --- a/companion/src/firmwares/modeldata.h +++ b/companion/src/firmwares/modeldata.h @@ -185,6 +185,7 @@ class ModelData { MavlinkData mavlink; unsigned int telemetryProtocol; FrSkyData frsky; + unsigned int rssiSource; RSSIAlarmData rssiAlarms; char bitmap[10+1]; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index ef926f666..c990b6c89 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -42,7 +42,18 @@ inline int MAX_SWITCHES(Board::Type board, int version) return Boards::getCapability(board, Board::Switches); } -#define MAX_SWITCH_SLOTS(board, version) (IS_TARANIS_X9E(board) ? 32 : (version >= 219 ? 16 : 8)) // bitsize of swconfig_t / 2 (see radio/src/datastructs.h) +// bitsize of swconfig_t / 2 (see radio/src/datastructs.h) +inline int MAX_SWITCH_SLOTS(Board::Type board, int version) +{ + if (IS_TARANIS_X9E(board)) + return 32; + + if (version >= 219 && IS_TARANIS_X9D(board)) + return 16; + + return 8; +} + #define MAX_SWITCHES_POSITION(board, version) (Boards::getCapability(board, Board::SwitchPositions)) #define MAX_ROTARY_ENCODERS(board) (IS_SKY9X(board) ? 1 : 0) #define MAX_FLIGHT_MODES(board, version) 9 @@ -1717,9 +1728,9 @@ class TelemetryCurrentSourceConversionTable: public ConversionTable } }; -class FrskyField: public StructField { +class Frsky218Field: public StructField { public: - FrskyField(DataField * parent, FrSkyData & frsky, RSSIAlarmData & rssiAlarms, Board::Type board, unsigned int version, unsigned int variant): + Frsky218Field(DataField * parent, FrSkyData & frsky, RSSIAlarmData & rssiAlarms, Board::Type board, unsigned int version, unsigned int variant): StructField(parent, "FrSky"), telemetryVarioSourceConversionTable(board, version), screenTypesConversionTable(board, version), @@ -1766,6 +1777,20 @@ class FrskyField: public StructField { TelemetryCurrentSourceConversionTable telemetryCurrentSourceConversionTable; }; +class VarioField: public StructField { + public: + VarioField(DataField * parent, FrSkyData & frsky, Board::Type board, unsigned int version, unsigned int variant): + StructField(parent, "Vario") + { + Append(new UnsignedField<7>(this, frsky.varioSource, "Vario Source")); + Append(new BoolField<1>(this, frsky.varioCenterSilent)); + Append(new SignedField<8>(this, frsky.varioCenterMax)); + Append(new SignedField<8>(this, frsky.varioCenterMin)); + Append(new SignedField<8>(this, frsky.varioMin)); + Append(new SignedField<8>(this, frsky.varioMax)); + } +}; + /* * TODO */ @@ -2018,20 +2043,23 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig } } - // TODO rename to VARIO - internalField.Append(new FrskyField(this, modelData.frsky, modelData.rssiAlarms, board, version, variant)); - - if (version >= 219) { - // TODO RSSI SOURCE - internalField.Append(new SpareBitsField<8>(this)); + if (version <= 218) { + internalField.Append(new Frsky218Field(this, modelData.frsky, modelData.rssiAlarms, board, version, variant)); + } + else { + internalField.Append(new VarioField(this, modelData.frsky, board, version, variant)); + internalField.Append(new UnsignedField<8>(this, modelData.rssiSource)); if (IS_TARANIS_X9(board)) { // TODO TOPBAR internalField.Append(new SpareBitsField<16>(this)); } - // TODO RSSI ALARMS - internalField.Append(new SpareBitsField<16>(this)); + internalField.Append(new BoolField<1>(this, modelData.rssiAlarms.disabled)); + internalField.Append(new SpareBitsField<1>(this)); + internalField.Append(new ConversionField >(this, modelData.rssiAlarms.warning, -45)); + internalField.Append(new SpareBitsField<2>(this)); + internalField.Append(new ConversionField >(this, modelData.rssiAlarms.critical, -42)); } if (IS_STM32(board) && version <= 218) { @@ -2325,7 +2353,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type } internalField.Append(new UnsignedField<8>(this, generalData.inactivityTimer)); - internalField.Append(new SpareBitsField<3>(this)); + internalField.Append(new SpareBitsField<3>(this)); // telemetryBaudrate if (IS_HORUS(board)) internalField.Append(new SpareBitsField<3>(this)); else if (IS_TARANIS(board)) diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index a06db920d..64d2dda46 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -830,7 +830,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin } if (IS_ARM(firmware->getBoard())) { - ui->varioSource->setField(model.frsky.varioSource, this); + ui->varioSource->setField(model.frsky.varioSource, this); ui->varioCenterSilent->setField(model.frsky.varioCenterSilent, this); ui->A1GB->hide(); ui->A2GB->hide(); @@ -844,7 +844,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin } else { ui->sensorsGB->hide(); - ui->altimetryGB->hide(); + ui->altimetryGB->hide(); analogs[0] = new TelemetryAnalog(this, model.frsky.channels[0], model, generalSettings, firmware); ui->A1Layout->addWidget(analogs[0]); connect(analogs[0], SIGNAL(modified()), this, SLOT(onAnalogModified())); @@ -893,6 +893,7 @@ void TelemetryPanel::update() ui->telemetryProtocol->setCurrentIndex(0); } + populateTelemetrySourcesComboBox(ui->rssiSourceCB, model, false); populateTelemetrySourcesComboBox(ui->voltsSource, model, false); populateTelemetrySourcesComboBox(ui->altitudeSource, model, false); populateTelemetrySourcesComboBox(ui->varioSource, model, false); @@ -934,10 +935,18 @@ void TelemetryPanel::setup() ui->rssiAlarmWarningSB->setValue(model->rssiAlarms.warning); ui->rssiAlarmCriticalSB->setValue(model->rssiAlarms.critical); if (!IS_ARM(firmware->getBoard())) { + ui->rssiSourceLabel->hide(); + ui->rssiSourceCB->hide(); ui->rssiAlarmWarningCB->setCurrentIndex(model->rssiAlarms.level[0]); ui->rssiAlarmCriticalCB->setCurrentIndex(model->rssiAlarms.level[1]); } else { + ui->rssiSourceLabel->show(); + ui->rssiSourceLabel->setText(tr("Source")); + ui->rssiSourceCB->setField(model->rssiSource, this); + ui->rssiSourceCB->show(); + populateTelemetrySourcesComboBox(ui->rssiSourceCB, model, false); + ui->rssiAlarmWarningCB->hide(); ui->rssiAlarmCriticalCB->hide(); ui->rssiAlarmWarningLabel->setText(tr("Low Alarm")); diff --git a/companion/src/modeledit/telemetry.ui b/companion/src/modeledit/telemetry.ui index 13e2fe4a5..b064167ba 100644 --- a/companion/src/modeledit/telemetry.ui +++ b/companion/src/modeledit/telemetry.ui @@ -74,7 +74,167 @@ 4 - + + + + + 75 + true + + + + RSSI + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + + + + Alarm 1 + + + + + + + true + + + + 0 + 0 + + + + + + + 20 + + + 80 + + + 1 + + + 50 + + + + + + + + 0 + 0 + + + + + ---- + + + + + Yellow + + + + + Orange + + + + + Red + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + true + + + + 0 + 0 + + + + + + + 20 + + + 80 + + + 1 + + + 50 + + + + + + + Disable telemetry audio warnings + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + Alarm 2 + + + + @@ -105,164 +265,14 @@ - - - - 0 - 0 - - - - - 100 - 0 - - - - - + - Alarm 1 + Source - - - - - 0 - 0 - - - - - ---- - - - - - Yellow - - - - - Orange - - - - - Red - - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - Alarm 2 - - - - - - - true - - - - 0 - 0 - - - - - - - 20 - - - 80 - - - 1 - - - 50 - - - - - - - true - - - - 0 - 0 - - - - - - - 20 - - - 80 - - - 1 - - - 50 - - - - - - - - 75 - true - - - - RSSI - - - - - - - Qt::Vertical - - - - 20 - 0 - - - - - - - - Disable telemetry audio warnings - - + +