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
+
+
+
+
+
+
+
+
+
-
-