diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 02cc9650d..222bdf6f1 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -51,7 +51,8 @@ enum BoardEnum { BOARD_TARANIS_REV4a }; -#define IS_STOCK(board) (board==BOARD_STOCK || board==BOARD_M128) +#define IS_9X(board) (board==BOARD_STOCK || board==BOARD_M128) +#define IS_STOCK(board) (board==BOARD_STOCK) #define IS_2560(board) (board==BOARD_GRUVIN9X || board==BOARD_MEGA2560) #define IS_ARM(board) (board==BOARD_SKY9X || board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a) #define IS_TARANIS(board) (board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a) @@ -753,6 +754,9 @@ class FrSkyData { int varioCenterMin; // if increment in 0.2m/s = 3.0m/s max int varioCenterMax; int varioMax; + bool mAhPersistent; + unsigned int storedMah; + int fasOffset; void clear() { memset(this, 0, sizeof(FrSkyData)); rssiAlarms[0].clear(2, 45); rssiAlarms[1].clear(3, 42); varioSource = 2/*VARIO*/; } }; @@ -1012,7 +1016,9 @@ enum Capability { LuaInputs, LimitsPer1000, EnhancedCurves, - TelemetryInternalAlarms + TelemetryInternalAlarms, + HasFasOffset, + HasMahPersistent }; enum UseContext { diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index b723ac0a2..c72b0a4b5 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -1688,8 +1688,7 @@ class FrskyField: public StructField { Append(new UnsignedField<8>(frsky.usrProto)); if (version >= 216) { Append(new UnsignedField<7>(frsky.voltsSource)); - // TODO altitude displayed - Append(new SpareBitsField<1>()); + Append(new BoolField<1>(frsky.altitudeDisplayed)); } else { Append(new UnsignedField<8>(frsky.voltsSource)); @@ -1718,10 +1717,9 @@ class FrskyField: public StructField { Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3)); } if (version >= 216) { - // TODO uint16_t mAhPersistent:1; - // uint16_t storedMah:15; - // int8_t fasOffset; - Append(new SpareBitsField<24>()); + Append(new BoolField<1>(frsky.mAhPersistent)); + Append(new UnsignedField<15>(frsky.storedMah)); + Append(new SignedField<8>(frsky.fasOffset)); } } else { @@ -2043,7 +2041,7 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE internalField.Append(new SpareBitsField<1>()); internalField.Append(new UnsignedField<8>(generalData.inactivityTimer)); - if (IS_STOCK(board) && version >= 215) { + if (IS_9X(board) && version >= 215) { internalField.Append(new UnsignedField<3>(generalData.mavbaud)); } else { diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 73738e0b4..c24a1e471 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -701,6 +701,10 @@ int Open9xInterface::getCapability(const Capability capability) case EnhancedCurves: case TelemetryInternalAlarms: return IS_TARANIS(board); + case HasFasOffset: + return (IS_STOCK(board) ? false : true); + case HasMahPersistent: + return (IS_ARM(board) ? true : false); default: return 0; } @@ -1078,6 +1082,7 @@ void RegisterOpen9xFirmwares() open9x->addOption("novario", QObject::tr("No vario support")); open9x->addOption("nogps", QObject::tr("No GPS support")); open9x->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen")); + open9x->addOption("fasoffset", QObject::tr("Allow compensating for offset errors in FrSky FAS current sensors")); open9x->addOptions(fai_options); firmwares.push_back(open9x); diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index 22db68ae4..8b286f281 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -375,8 +375,7 @@ void TelemetryPanel::setup() ui->AltitudeGPS_ChkB->setChecked(model.frsky.FrSkyGpsAlt); } int varioCap=GetEepromInterface()->getCapability(HasVario); - // if (IS_TARANIS(GetEepromInterface()->getBoard())) { - if (false) { + if (IS_TARANIS(GetEepromInterface()->getBoard())) { ui->AltitudeToolbar_ChkB->setChecked(model.frsky.altitudeDisplayed); } else { ui->AltitudeToolbar_ChkB->hide(); @@ -481,6 +480,29 @@ void TelemetryPanel::setup() } else { ui->frskyProtoCB->addItem(tr("Winged Shadow How High (not supported)")); } + + ui->variousGB->hide(); + if (!(GetEepromInterface()->getCapability(HasFasOffset)) && !(firmware_id.contains("fasoffset"))) { + ui->fasOffset_label->hide(); + ui->fasOffset_DSB->hide(); + } else { + ui->fasOffset_DSB->setValue(model.frsky.fasOffset/10.0); + ui->variousGB->show(); + } + + if (!(GetEepromInterface()->getCapability(HasMahPersistent))) { + ui->mahCount_label->hide(); + ui->mahCount_SB->hide(); + ui->mahCount_ChkB->hide(); + } else { + if (model.frsky.mAhPersistent) { + ui->mahCount_ChkB->setChecked(true); + ui->mahCount_SB->setValue(model.frsky.storedMah); + } else { + ui->mahCount_SB->setDisabled(true); + } + ui->variousGB->show(); + } ui->frskyProtoCB->setCurrentIndex(model.frsky.usrProto); ui->frskyUnitsCB->setCurrentIndex(model.frsky.imperial); @@ -715,6 +737,25 @@ void TelemetryPanel::on_varioLimitCenterMax_DSB_editingFinished() emit modified(); } +void TelemetryPanel::on_fasOffset_DSB_editingFinished() +{ + model.frsky.fasOffset = ui->fasOffset_DSB->value()*10; + emit modified(); +} + +void TelemetryPanel::on_mahCount_SB_editingFinished() +{ + model.frsky.storedMah = ui->mahCount_SB->value(); + emit modified(); +} + +void TelemetryPanel::on_mahCount_ChkB_toggled(bool checked) +{ + model.frsky.mAhPersistent = checked; + ui->mahCount_SB->setDisabled(!checked); + emit modified(); +} + void TelemetryPanel::telBarUpdate() { int index; diff --git a/companion/src/modeledit/telemetry.h b/companion/src/modeledit/telemetry.h index 6984a9f51..e8f634463 100644 --- a/companion/src/modeledit/telemetry.h +++ b/companion/src/modeledit/telemetry.h @@ -74,6 +74,9 @@ class TelemetryPanel : public ModelPanel void on_varioLimitCenterMin_DSB_editingFinished(); void on_varioLimitMinOff_ChkB_toggled(bool checked); void on_varioLimitCenterMax_DSB_editingFinished(); + void on_fasOffset_DSB_editingFinished(); + void on_mahCount_SB_editingFinished(); + void on_mahCount_ChkB_toggled(bool checked); void telBarCBcurrentIndexChanged(int index); void ScreenTypeCBcurrentIndexChanged(int index); void telMaxSBeditingFinished(); diff --git a/companion/src/modeledit/telemetry.ui b/companion/src/modeledit/telemetry.ui index b03ab1091..bb6bae9c9 100644 --- a/companion/src/modeledit/telemetry.ui +++ b/companion/src/modeledit/telemetry.ui @@ -7,13 +7,13 @@ 0 0 692 - 540 + 568 Form - + @@ -770,6 +770,106 @@ + + + + + 0 + 0 + + + + Various + + + + 1 + + + 1 + + + + + + + + 0 + 0 + + + + 32767 + + + + + + + mAh count + + + + + + + + 0 + 0 + + + + FAS Offset + + + + + + + Persistent mAh + + + + + + + + 0 + 0 + + + + 1 + + + -1.500000000000000 + + + 1.500000000000000 + + + 0.100000000000000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + +