diff --git a/companion/src/firmwares/edgetx/yaml_modeldata.cpp b/companion/src/firmwares/edgetx/yaml_modeldata.cpp
index 7f65516ad..0d9afa8e7 100644
--- a/companion/src/firmwares/edgetx/yaml_modeldata.cpp
+++ b/companion/src/firmwares/edgetx/yaml_modeldata.cpp
@@ -34,6 +34,7 @@
#include "output_data.h"
#include "eeprominterface.h"
#include "version.h"
+#include "helpers.h"
#include
@@ -1140,6 +1141,19 @@ bool convert::decode(const Node& node, ModelData& rhs)
node["functionSwitchStartConfig"] >> rhs.functionSwitchStartConfig;
node["functionSwitchLogicalState"] >> rhs.functionSwitchLogicalState;
node["switchNames"] >> rhs.functionSwitchNames;
+
+ // preferably perform conversions here to avoid cluttering the field decodes
+
+ if (SemanticVersion(QString(rhs.semver)) < SemanticVersion("2.8.0")) {
+ // Cells 7 and 8 introduced requiring Highest and Delta to be shifted + 2
+ for (int i = 0; i < CPN_MAX_SENSORS; i++) {
+ SensorData &sd = rhs.sensorData[i];
+ if (!sd.isEmpty() && sd.type == SensorData::TELEM_TYPE_CALCULATED &&
+ sd.formula == SensorData::TELEM_FORMULA_CELL && sd.index > 6)
+ sd.index += 2;
+ }
+ }
+
return true;
}
diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp
index 8c3a8da3f..0be495661 100644
--- a/companion/src/firmwares/opentx/opentxeeprom.cpp
+++ b/companion/src/firmwares/opentx/opentxeeprom.cpp
@@ -2066,6 +2066,12 @@ class SensorField: public TransformedField {
}
}
+ // Cells 7 and 8 introduced in v2.8 requiring Highest and Delta to be shifted + 2
+ if (version < 221) {
+ if (sensor.formula == SensorData::TELEM_FORMULA_CELL && sensor.index > 6)
+ sensor.index += 2;
+ }
+
qCDebug(eepromImport) << QString("imported %1").arg(internalField.getName());
}
diff --git a/companion/src/firmwares/sensordata.h b/companion/src/firmwares/sensordata.h
index 4722f9453..948b1807d 100644
--- a/companion/src/firmwares/sensordata.h
+++ b/companion/src/firmwares/sensordata.h
@@ -76,6 +76,8 @@ class SensorData {
TELEM_CELL_INDEX_4,
TELEM_CELL_INDEX_5,
TELEM_CELL_INDEX_6,
+ TELEM_CELL_INDEX_7,
+ TELEM_CELL_INDEX_8,
TELEM_CELL_INDEX_HIGHEST,
TELEM_CELL_INDEX_DELTA,
TELEM_CELL_INDEX_LAST = TELEM_CELL_INDEX_DELTA
diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp
index e4701aea6..5c89fe82a 100644
--- a/companion/src/helpers.cpp
+++ b/companion/src/helpers.cpp
@@ -726,3 +726,87 @@ QString Helpers::removeAccents(const QString & str)
}
return result;
}
+
+SemanticVersion::SemanticVersion(QString vers)
+{
+ if (!isValid(vers))
+ return;
+
+ QStringList strl = vers.split(".");
+ version.major = strl.at(0).toInt();
+ version.minor = strl.at(1).toInt();
+ if (strl.count() > 2) {
+ if (!strl.at(2).contains("-")) {
+ version.patch = strl.at(2).toInt();
+ } else {
+ QStringList ptch = strl.at(2).toLower().split("-");
+ version.patch = ptch.at(0).toInt();
+ if (ptch.at(1).left(2) == "rc") {
+ version.preReleaseType = PR_RC;
+ version.preReleaseNumber = ptch.at(1).mid(2).toInt();
+ } else if (ptch.at(1).left(5) == "alpha") {
+ version.preReleaseType = PR_ALPHA;
+ version.preReleaseNumber = ptch.at(1).mid(5).toInt();
+ } else if (ptch.at(1).left(4) == "beta") {
+ version.preReleaseType = PR_BETA;
+ version.preReleaseNumber = ptch.at(1).mid(4).toInt();
+ }
+ }
+ }
+}
+
+bool SemanticVersion::isValid(QString vers)
+{
+ if (vers.trimmed().isEmpty())
+ return false;
+
+ QStringList strl = vers.split(".");
+ if (strl.count() < 2)
+ return false;
+
+ return true;
+}
+
+QString SemanticVersion::toString() const
+{
+ QString ret(QString("%1.%2.%3").arg(version.major).arg(version.minor).arg(version.patch));
+
+ if (version.preReleaseType != PR_NONE) {
+ ret.append("-");
+ if (version.preReleaseType == PR_RC)
+ ret.append("RC");
+ else if (version.preReleaseType == PR_ALPHA)
+ ret.append("ALPHA");
+ else if (version.preReleaseType == PR_BETA)
+ ret.append("BETA");
+
+ ret.append(QString::number(version.preReleaseNumber));
+ }
+
+ return ret;
+}
+
+int SemanticVersion::compare(const SemanticVersion& other)
+{
+ if (version.major != other.version.major) {
+ return version.major - other.version.major;
+ }
+
+ if (version.minor != other.version.minor) {
+ return version.minor - other.version.minor;
+ }
+
+ if (version.patch != other.version.patch) {
+ return version.patch - other.version.patch;
+ }
+
+ if (version.preReleaseType != other.version.preReleaseType) {
+ return version.preReleaseType - other.version.preReleaseType;
+ }
+
+ if (version.preReleaseNumber != other.version.preReleaseNumber) {
+ return version.preReleaseNumber - other.version.preReleaseNumber;
+ }
+
+ return 0;
+}
diff --git a/companion/src/helpers.h b/companion/src/helpers.h
index fc3492546..2f0e5ee4e 100644
--- a/companion/src/helpers.h
+++ b/companion/src/helpers.h
@@ -240,3 +240,58 @@ private:
};
extern Stopwatch gStopwatch;
+
+class SemanticVersion
+{
+ public:
+ explicit SemanticVersion(QString vers);
+ ~SemanticVersion() = default;;
+
+ bool isValid(const QString vers);
+ QString toString() const;
+
+ bool operator==(const SemanticVersion& rhs) {
+ return compare(rhs) == 0;
+ }
+
+ bool operator!=(const SemanticVersion& rhs) {
+ return compare(rhs) != 0;
+ }
+
+ bool operator>(const SemanticVersion& rhs) {
+ return compare(rhs) > 0;
+ }
+
+ bool operator>=(const SemanticVersion& rhs) {
+ return compare(rhs) >= 0;
+ }
+
+ bool operator<(const SemanticVersion& rhs) {
+ return compare(rhs) < 0;
+ }
+
+ bool operator<=(const SemanticVersion& rhs) {
+ return compare(rhs) <= 0;
+ }
+
+ private:
+ enum PreRelease {
+ PR_ALPHA = 0,
+ PR_BETA = 1,
+ PR_RC = 2,
+ PR_NONE = 3
+ };
+
+ struct Version {
+ int major = 0;
+ int minor = 1;
+ int patch = 0;
+ PreRelease preReleaseType = PR_NONE;
+ int preReleaseNumber = 0;
+ };
+
+ Version version;
+
+ int compare(const SemanticVersion& other);
+
+};
diff --git a/companion/src/simulation/telemetrysimu.cpp b/companion/src/simulation/telemetrysimu.cpp
index bb8899ba6..f0ac155ce 100644
--- a/companion/src/simulation/telemetrysimu.cpp
+++ b/companion/src/simulation/telemetrysimu.cpp
@@ -442,6 +442,8 @@ void TelemetrySimulator::generateTelemetryFrame()
cellValues[3] = ui->cell4->value();
cellValues[4] = ui->cell5->value();
cellValues[5] = ui->cell6->value();
+ cellValues[6] = ui->cell7->value();
+ cellValues[7] = ui->cell8->value();
generateSportPacket(buffer, ui->cells_inst->text().toInt(&ok, 0) - 1, DATA_FRAME, CELLS_FIRST_ID, flvss->setAllCells_GetNextPair(cellValues));
}
else {
@@ -547,6 +549,7 @@ void TelemetrySimulator::FlvssEmulator::encodeAllCells()
cellData1 = encodeCellPair(numCells, 0, cellFloats[0], cellFloats[1]);
if (numCells > 2) cellData2 = encodeCellPair(numCells, 2, cellFloats[2], cellFloats[3]); else cellData2 = 0;
if (numCells > 4) cellData3 = encodeCellPair(numCells, 4, cellFloats[4], cellFloats[5]); else cellData3 = 0;
+ if (numCells > 6) cellData4 = encodeCellPair(numCells, 6, cellFloats[6], cellFloats[7]); else cellData4 = 0;
}
void TelemetrySimulator::FlvssEmulator::splitIntoCells(double totalVolts)
@@ -564,7 +567,7 @@ void TelemetrySimulator::FlvssEmulator::splitIntoCells(double totalVolts)
numCells = numCells > MAXCELLS ? MAXCELLS : numCells; // force into valid cell count in case of input out of range
}
-uint32_t TelemetrySimulator::FlvssEmulator::setAllCells_GetNextPair(double cellValues[6])
+uint32_t TelemetrySimulator::FlvssEmulator::setAllCells_GetNextPair(double cellValues[MAXCELLS])
{
numCells = 0;
for (uint32_t i = 0; i < MAXCELLS; i++) {
@@ -603,6 +606,9 @@ uint32_t TelemetrySimulator::FlvssEmulator::setAllCells_GetNextPair(double cellV
case 4:
cellData = cellData3;
break;
+ case 6:
+ cellData = cellData4;
+ break;
}
nextCellNum += 2;
return cellData;
@@ -1198,6 +1204,10 @@ void TelemetrySimulator::on_saveTelemetryvalues_clicked()
out<<"\r\n";
out << ui -> cell6 -> text();
out<<"\r\n";
+ out << ui -> cell7 -> text();
+ out<<"\r\n";
+ out << ui -> cell8 -> text();
+ out<<"\r\n";
out << ui -> aspeed -> text();
out<<"\r\n";
out << ui -> gps_alt -> text();
@@ -1330,6 +1340,14 @@ void TelemetrySimulator::on_loadTelemetryvalues_clicked()
ns = n.toDouble();
ui -> cell6 -> setValue(ns);
+ n = in.readLine();
+ ns = n.toDouble();
+ ui -> cell7 -> setValue(ns);
+
+ n = in.readLine();
+ ns = n.toDouble();
+ ui -> cell8 -> setValue(ns);
+
n = in.readLine();
ns = n.toDouble();
ui -> aspeed -> setValue(ns);
diff --git a/companion/src/simulation/telemetrysimu.h b/companion/src/simulation/telemetrysimu.h
index 34596f755..a5497b2c3 100644
--- a/companion/src/simulation/telemetrysimu.h
+++ b/companion/src/simulation/telemetrysimu.h
@@ -171,19 +171,20 @@ class TelemetrySimulator : public QWidget
class FlvssEmulator
{
public:
- uint32_t setAllCells_GetNextPair(double cellValues[6]);
- static const uint32_t MAXCELLS = 6;
+ static const uint32_t MAXCELLS = 8;
+ uint32_t setAllCells_GetNextPair(double cellValues[MAXCELLS]);
private:
void encodeAllCells();
void splitIntoCells(double totalVolts);
static uint32_t encodeCellPair(uint8_t cellNum, uint8_t firstCellNo, double cell1, double cell2);
- double cellFloats[6];
+ double cellFloats[MAXCELLS];
uint32_t nextCellNum;
uint32_t numCells;
uint32_t cellData1;
uint32_t cellData2;
uint32_t cellData3;
+ uint32_t cellData4;
}; // FlvssEmulator
class GPSEmulator
diff --git a/companion/src/simulation/telemetrysimu.ui b/companion/src/simulation/telemetrysimu.ui
index 1aa273773..1719ead22 100644
--- a/companion/src/simulation/telemetrysimu.ui
+++ b/companion/src/simulation/telemetrysimu.ui
@@ -2587,6 +2587,54 @@ hh:mm:ss
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 8
+
+
+
+ 8.190000000000000
+
+
+ 0.100000000000000
+
+
+ 4.200000000000000
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 8
+
+
+
+ 8.190000000000000
+
+
+ 0.100000000000000
+
+
+ 4.200000000000000
+
+
+
-
@@ -3184,6 +3232,8 @@ Timestamp
cell4
cell5
cell6
+ cell7
+ cell8
aspd_inst
aspeed
gpsa_inst
diff --git a/radio/src/gui/128x64/model_telemetry_sensor.cpp b/radio/src/gui/128x64/model_telemetry_sensor.cpp
index 9fe460415..925a0940f 100644
--- a/radio/src/gui/128x64/model_telemetry_sensor.cpp
+++ b/radio/src/gui/128x64/model_telemetry_sensor.cpp
@@ -229,7 +229,7 @@ void menuModelSensor(event_t event)
case SENSOR_FIELD_PARAM2:
if (sensor->type == TELEM_TYPE_CALCULATED) {
if (sensor->formula == TELEM_FORMULA_CELL) {
- sensor->cell.index = editChoice(SENSOR_2ND_COLUMN, y, STR_CELLINDEX, STR_VCELLINDEX, sensor->cell.index, 0, 8, attr, event);
+ sensor->cell.index = editChoice(SENSOR_2ND_COLUMN, y, STR_CELLINDEX, STR_VCELLINDEX, sensor->cell.index, TELEM_CELL_INDEX_LOWEST, TELEM_CELL_INDEX_LAST, attr, event);
break;
}
else if (sensor->formula == TELEM_FORMULA_DIST) {
diff --git a/radio/src/gui/212x64/model_telemetry_sensor.cpp b/radio/src/gui/212x64/model_telemetry_sensor.cpp
index 93c004a52..b1e9b4f17 100644
--- a/radio/src/gui/212x64/model_telemetry_sensor.cpp
+++ b/radio/src/gui/212x64/model_telemetry_sensor.cpp
@@ -243,7 +243,7 @@ void menuModelSensor(event_t event)
case SENSOR_FIELD_PARAM2:
if (sensor->type == TELEM_TYPE_CALCULATED) {
if (sensor->formula == TELEM_FORMULA_CELL) {
- sensor->cell.index = editChoice(SENSOR_2ND_COLUMN, y, STR_CELLINDEX, STR_VCELLINDEX, sensor->cell.index, 0, 8, attr, event);
+ sensor->cell.index = editChoice(SENSOR_2ND_COLUMN, y, STR_CELLINDEX, STR_VCELLINDEX, sensor->cell.index, TELEM_CELL_INDEX_LOWEST, TELEM_CELL_INDEX_LAST, attr, event);
break;
}
else if (sensor->formula == TELEM_FORMULA_DIST) {
diff --git a/radio/src/gui/colorlcd/model_telemetry.cpp b/radio/src/gui/colorlcd/model_telemetry.cpp
index dc1fa69bb..672458711 100644
--- a/radio/src/gui/colorlcd/model_telemetry.cpp
+++ b/radio/src/gui/colorlcd/model_telemetry.cpp
@@ -308,7 +308,7 @@ class SensorEditWindow : public Page {
if (sensor->type == TELEM_TYPE_CALCULATED) {
if (sensor->formula == TELEM_FORMULA_CELL) {
new StaticText(sensorParametersWindow, grid.getLabelSlot(), STR_CELLINDEX, 0, COLOR_THEME_PRIMARY1);
- new Choice(sensorParametersWindow, grid.getFieldSlot(), STR_VCELLINDEX, 0, 8, GET_SET_DEFAULT(sensor->cell.index));
+ new Choice(sensorParametersWindow, grid.getFieldSlot(), STR_VCELLINDEX, TELEM_CELL_INDEX_LOWEST, TELEM_CELL_INDEX_LAST, GET_SET_DEFAULT(sensor->cell.index));
}
else if (sensor->formula == TELEM_FORMULA_DIST) {
new StaticText(sensorParametersWindow, grid.getLabelSlot(), STR_ALTSENSOR, 0, COLOR_THEME_PRIMARY1);
diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h
index a27eeb134..277d2e651 100644
--- a/radio/src/telemetry/telemetry.h
+++ b/radio/src/telemetry/telemetry.h
@@ -94,8 +94,11 @@ enum {
TELEM_CELL_INDEX_4,
TELEM_CELL_INDEX_5,
TELEM_CELL_INDEX_6,
+ TELEM_CELL_INDEX_7,
+ TELEM_CELL_INDEX_8,
TELEM_CELL_INDEX_HIGHEST,
TELEM_CELL_INDEX_DELTA,
+ TELEM_CELL_INDEX_LAST = TELEM_CELL_INDEX_DELTA
};
PACK(struct CellValue
diff --git a/radio/src/telemetry/telemetry_holders.h b/radio/src/telemetry/telemetry_holders.h
index d345434c8..fa17e6b50 100644
--- a/radio/src/telemetry/telemetry_holders.h
+++ b/radio/src/telemetry/telemetry_holders.h
@@ -28,7 +28,7 @@
#define TELEMETRY_AVERAGE_COUNT 3 // we actually average one more reading!
#define RAW_FRSKY_MINMAX(v) v.values[TELEMETRY_AVERAGE_COUNT-1]
-#define MAX_CELLS 6
+#define MAX_CELLS 8
class TelemetryValue {
public:
diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h
index 3175bae8c..64f437e70 100644
--- a/radio/src/translations/cn.h
+++ b/radio/src/translations/cn.h
@@ -278,7 +278,7 @@
#define TR_VSENSORTYPES "自定义","运算"
#define TR_VFORMULAS "加","平均值","最小值","最大值","乘","总计值","单节电池","消耗量","距离"
#define TR_VPREC "0.--","0.0-","0.00"
-#define TR_VCELLINDEX "最低值","1","2","3","4","5","6","最高值","差值"
+#define TR_VCELLINDEX "最低值","1","2","3","4","5","6","7","8","最高值","差值"
#define TR_TEXT_SIZE "标准","小","较小","中等","双倍"
#define TR_SUBTRIMMODES STR_CHAR_DELTA "(中点)", "=(整体)"
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h
index 0e2e902d2..7efbc720e 100644
--- a/radio/src/translations/cz.h
+++ b/radio/src/translations/cz.h
@@ -296,7 +296,7 @@
#define TR_VSENSORTYPES "Vlastní","Vypočtený"
#define TR_VFORMULAS "Součet","Průměr","Min","Max","Násobení","Celkem","Článek","Spotřeba","Vzdálenost"
#define TR_VPREC "X","X.X","X.XX"
-#define TR_VCELLINDEX "Nízký","1","2","3","4","5","6","Nejvíce","Delta"
+#define TR_VCELLINDEX "Nízký","1","2","3","4","5","6","7","8","Nejvíce","Delta"
#define TR_SUBTRIMMODES STR_CHAR_DELTA"(pouze středy)","= (symetrický)"
#define TR_TIMER_DIR TR("Zbývající", "Zobrazit zbývající"), TR("Uplynulý", "Zobrazit uplynulý")
diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h
index 983ae413f..d6142a184 100644
--- a/radio/src/translations/da.h
+++ b/radio/src/translations/da.h
@@ -278,7 +278,7 @@
#define TR_VSENSORTYPES "Tilpasset","Beregnet"
#define TR_VFORMULAS "Tillæg","Gennems.","Min","Max","Gange","Sum","Cell","Forbrug","Afstand"
#define TR_VPREC "0.--","0.0 ","0.00"
-#define TR_VCELLINDEX "Lavest","1","2","3","4","5","6","Højst","Delta"
+#define TR_VCELLINDEX "Lavest","1","2","3","4","5","6","7","8","Højst","Delta"
#define TR_TEXT_SIZE "Standard","Tynd","Lille","Medium","Dobbelt"
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center kun)","= (symmetrisk)"
#define TR_TIMER_DIR TR("Rest", "Vis rest"), TR("Gået tid", "Vis gået tid")
diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h
index 2d6a0a8f0..755ae2c34 100644
--- a/radio/src/translations/de.h
+++ b/radio/src/translations/de.h
@@ -281,7 +281,7 @@
#define TR_VSENSORTYPES "Sensor","Berechnung"
#define TR_VFORMULAS "Addieren","Mittelwert","Min","Max","Multiplizier","Gesamt","Zelle","Verbrauch","Distanz"
#define TR_VPREC "0.--","0.0","0.00"
-#define TR_VCELLINDEX "Niedrigst","1. Zelle","2. Zelle","3. Zelle","4. Zelle","5. Zelle","6. Zelle","Höchster","Differenz"
+#define TR_VCELLINDEX "Niedrigst","1. Zelle","2. Zelle","3. Zelle","4. Zelle","5. Zelle","6. Zelle","7. Zelle","8. Zelle","Höchster","Differenz"
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h
index 9eedec587..adca52bb8 100644
--- a/radio/src/translations/en.h
+++ b/radio/src/translations/en.h
@@ -278,7 +278,7 @@
#define TR_VSENSORTYPES "Custom","Calculated"
#define TR_VFORMULAS "Add","Average","Min","Max","Multiply","Totalize","Cell","Consumpt","Distance"
#define TR_VPREC "0.--","0.0 ","0.00"
-#define TR_VCELLINDEX "Lowest","1","2","3","4","5","6","Highest","Delta"
+#define TR_VCELLINDEX "Lowest","1","2","3","4","5","6","7","8","Highest","Delta"
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symmetrical)"
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h
index a0f2509da..7c6631fa3 100644
--- a/radio/src/translations/es.h
+++ b/radio/src/translations/es.h
@@ -278,7 +278,7 @@
#define TR_VSENSORTYPES "Custom","Calculado"
#define TR_VFORMULAS "Suma","Media","Min","Máx","Multipl.","Total","Cell","Consumo","Distancia"
#define TR_VPREC "0.--","0.0 ","0.00"
-#define TR_VCELLINDEX "Menor","1","2","3","4","5","6","Mayor","Delta"
+#define TR_VCELLINDEX "Menor","1","2","3","4","5","6","7","8","Mayor","Delta"
#define TR_TEXT_SIZE "Normal","Muy pequeño","Pequeño","Medio","Doble"
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h
index 9c9c19735..e895280a5 100644
--- a/radio/src/translations/fi.h
+++ b/radio/src/translations/fi.h
@@ -296,7 +296,7 @@
#define TR_VSENSORTYPES "Custom","Calculated"
#define TR_VFORMULAS "Add","Average","Min","Max","Multiply","Totalize","Cell","Kulutus","Etäisyys"
#define TR_VPREC "0.--","0.0","0.00"
-#define TR_VCELLINDEX "Alin","1","2","3","4","5","6","Korkein","Ero"
+#define TR_VCELLINDEX "Alin","1","2","3","4","5","6","7","8","Korkein","Ero"
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h
index c56e913aa..87e7d299e 100644
--- a/radio/src/translations/fr.h
+++ b/radio/src/translations/fr.h
@@ -299,7 +299,7 @@
#define TR_VSENSORTYPES "Perso","Calculé"
#define TR_VFORMULAS "Addition","Moyenne","Min","Max","Multipl.","Totalise","Elément","Consomm.","Distance"
#define TR_VPREC "0.--","0.0","0.00"
-#define TR_VCELLINDEX "Mini.","1","2","3","4","5","6","Maxi.","Diff."
+#define TR_VCELLINDEX "Mini.","1","2","3","4","5","6","7","8","Maxi.","Diff."
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h
index 81056d7c8..6ac860c53 100644
--- a/radio/src/translations/it.h
+++ b/radio/src/translations/it.h
@@ -283,7 +283,7 @@
#define TR_VSENSORTYPES "Person.","Calcolato"
#define TR_VFORMULAS "Somma","Media","Min","Max","Moltipl","Totalizza","Cella","Consumo","Distanza"
#define TR_VPREC "0.--","0.0 ","0.00"
-#define TR_VCELLINDEX "Minore","1","2","3","4","5","6","Maggiore","Delta"
+#define TR_VCELLINDEX "Minore","1","2","3","4","5","6","7","8","Maggiore","Delta"
#define TR_TEXT_SIZE "Standard","Minusc.","Piccolo","Medio","Doppio"
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
#define TR_TIMER_DIR TR("Riman.", "Mostra Riman."), TR("Trasc.", "Mostra Trascorso")
diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h
index 2333e3b59..5f6374eac 100644
--- a/radio/src/translations/nl.h
+++ b/radio/src/translations/nl.h
@@ -282,7 +282,7 @@
#define TR_VSENSORTYPES "Custom","Berekend"
#define TR_VFORMULAS "Optellen","Gemiddeld","Min","Max","Vermenigvuld","Totaal","Cellen","Verbruik","Afstand"
#define TR_VPREC "0.--","0.0 ","0.00"
-#define TR_VCELLINDEX "Laagste","1e Cel","2e Cel","3e Cel","4e Cel","5e Cel","6e Cel","Hoogste","Delta"
+#define TR_VCELLINDEX "Laagste","1e Cel","2e Cel","3e Cel","4e Cel","5e Cel","6e Cel","7e Cel","8e Cel","Hoogste","Delta"
#define TR_GYROS "GyrX","GyrY"
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h
index bd60132bc..fdd6d1de1 100644
--- a/radio/src/translations/pl.h
+++ b/radio/src/translations/pl.h
@@ -278,7 +278,7 @@
#define TR_VSENSORTYPES "Użytkownik","Obliczone"
#define TR_VFORMULAS "Dodaj","Średnie","Min","Max","Mnóż","Zliczani","Komórka","Zużycie","Zasięg"
#define TR_VPREC "0.--","0.0 ","0.00"
-#define TR_VCELLINDEX "Niskie","1","2","3","4","5","6","Wysokie","Delta"
+#define TR_VCELLINDEX "Niskie","1","2","3","4","5","6","7","8","Wysokie","Delta"
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h
index 7a60845cc..b79429e43 100644
--- a/radio/src/translations/pt.h
+++ b/radio/src/translations/pt.h
@@ -276,7 +276,7 @@
#define TR_VSENSORTYPES "Custom","Calculated"
#define TR_VFORMULAS "Add","Average","Min","Max","Multiply","Totalize","Cell","Consumpt","Distance"
#define TR_VPREC "0.--","0.0 ","0.00"
-#define TR_VCELLINDEX "Lowest","1","2","3","4","5","6","Highest","Delta"
+#define TR_VCELLINDEX "Lowest","1","2","3","4","5","6","7","8","Highest","Delta"
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h
index 8ab1bf605..acba24494 100644
--- a/radio/src/translations/se.h
+++ b/radio/src/translations/se.h
@@ -307,7 +307,7 @@
#define TR_VSENSORTYPES "Anpassad","Beräknad"
#define TR_VFORMULAS "Addera","Medel","Min","Max","Multipl.","Summa","Cell","Förbrukning","Sträcka"
#define TR_VPREC "0.--","0.0","0.00"
-#define TR_VCELLINDEX "Lägsta","1","2","3","4","5","6","Högsta","Skillnad"
+#define TR_VCELLINDEX "Lägsta","1","2","3","4","5","6","7","8","Högsta","Skillnad"
#define TR_GYROS "GyrX","GyrY"
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (endast center)","= (symmetrisk)"
#define TR_TIMER_DIR TR("Återst.", "Visa återstående"), TR("Förbrukad", "Visa förbrukad")
diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h
index 275629b27..7135d22a8 100644
--- a/radio/src/translations/tw.h
+++ b/radio/src/translations/tw.h
@@ -278,7 +278,7 @@
#define TR_VSENSORTYPES "自定義","運算"
#define TR_VFORMULAS "加","平均值","最小值","最大值","乘","總計值","單節電池","消耗量","距離"
#define TR_VPREC "0.--","0.0-","0.00"
-#define TR_VCELLINDEX "最低值","1","2","3","4","5","6","最高值","差值"
+#define TR_VCELLINDEX "最低值","1","2","3","4","5","6","7","8","最高值","差值"
#define TR_TEXT_SIZE "標準","小","較小","中等","雙倍"
#define TR_SUBTRIMMODES STR_CHAR_DELTA "(中点)","=(整體)"
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")