diff --git a/companion/src/modeledit/telemetry_sensor.ui b/companion/src/modeledit/telemetry_sensor.ui
index 182159ebb..ce8fafaca 100644
--- a/companion/src/modeledit/telemetry_sensor.ui
+++ b/companion/src/modeledit/telemetry_sensor.ui
@@ -419,6 +419,46 @@
Percentage (%)
+ -
+
+ Energy (mAh)
+
+
+ -
+
+ Power (W)
+
+
+ -
+
+ RF Power (dBm)
+
+
+ -
+
+ RPM
+
+
+ -
+
+ Acceleration (g)
+
+
+ -
+
+ Heading (°)
+
+
+ -
+
+ Volume (mL)
+
+
+ -
+
+ Volume (US fl.Oz.)
+
+
-
diff --git a/radio/src/gui/9X/menu_model_telemetry.cpp b/radio/src/gui/9X/menu_model_telemetry.cpp
index 6a3a9356b..4fb45ae15 100644
--- a/radio/src/gui/9X/menu_model_telemetry.cpp
+++ b/radio/src/gui/9X/menu_model_telemetry.cpp
@@ -248,7 +248,7 @@ bool isSensorAvailable(int sensor)
#define SENSOR_UNIT_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW)
#define SENSOR_PREC_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW)
#define SENSOR_PARAM1_ROWS (sensor->unit >= UNIT_FIRST_VIRTUAL ? HIDDEN_ROW : (uint8_t)0)
-#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && sensor->formula==TELEM_FORMULA_CONSUMPTION)) ? HIDDEN_ROW : (uint8_t)0
+#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && (sensor->formula==TELEM_FORMULA_CONSUMPTION || sensor->formula==TELEM_FORMULA_TOTALIZE)) ? HIDDEN_ROW : (uint8_t)0)
#define SENSOR_PARAM3_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW
#define SENSOR_PARAM4_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW
#define SENSOR_AUTOOFFSET_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW)
@@ -313,7 +313,7 @@ void menuModelSensor(uint8_t event)
}
}
else {
- sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_FORMULA, STR_VFORMULAS, sensor->formula, 0, TELEM_FORMULA_DIST, attr, event);
+ sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_FORMULA, STR_VFORMULAS, sensor->formula, 0, TELEM_FORMULA_LAST, attr, event);
if (attr && checkIncDec_Ret) {
sensor->param = 0;
if (sensor->formula == TELEM_FORMULA_CELL) {
diff --git a/radio/src/gui/Taranis/menu_model_telemetry.cpp b/radio/src/gui/Taranis/menu_model_telemetry.cpp
index b98e89b93..1972e80ff 100644
--- a/radio/src/gui/Taranis/menu_model_telemetry.cpp
+++ b/radio/src/gui/Taranis/menu_model_telemetry.cpp
@@ -205,7 +205,7 @@ bool isSensorAvailable(int sensor)
#define SENSOR_UNIT_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW)
#define SENSOR_PREC_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW)
#define SENSOR_PARAM1_ROWS (sensor->unit >= UNIT_FIRST_VIRTUAL ? HIDDEN_ROW : (uint8_t)0)
-#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && sensor->formula==TELEM_FORMULA_CONSUMPTION)) ? HIDDEN_ROW : (uint8_t)0
+#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && (sensor->formula==TELEM_FORMULA_CONSUMPTION || sensor->formula==TELEM_FORMULA_TOTALIZE)) ? HIDDEN_ROW : (uint8_t)0)
#define SENSOR_PARAM3_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW
#define SENSOR_PARAM4_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW
#define SENSOR_AUTOOFFSET_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW)
@@ -270,7 +270,7 @@ void menuModelSensor(uint8_t event)
}
}
else {
- sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_FORMULA, STR_VFORMULAS, sensor->formula, 0, TELEM_FORMULA_DIST, attr, event);
+ sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_FORMULA, STR_VFORMULAS, sensor->formula, 0, TELEM_FORMULA_LAST, attr, event);
if (attr && checkIncDec_Ret) {
sensor->param = 0;
if (sensor->formula == TELEM_FORMULA_CELL) {
@@ -334,6 +334,14 @@ void menuModelSensor(uint8_t event)
}
break;
}
+ else if (sensor->formula == TELEM_FORMULA_TOTALIZE) {
+ lcd_putsLeft(y, NO_INDENT(STR_SOURCE));
+ putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->consumption.source ? MIXSRC_FIRST_TELEM+3*(sensor->consumption.source-1) : 0, attr);
+ if (attr) {
+ sensor->consumption.source = checkIncDec(event, sensor->consumption.source, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isTelemetryFieldComparisonAvailable);
+ }
+ break;
+ }
}
else {
if (sensor->unit == UNIT_RPMS) {
@@ -501,7 +509,9 @@ void menuModelTelemetry(uint8_t event)
lcd_putsAtt(TELEM_COL2, y, "---", 0); // TODO shortcut
}
TelemetrySensor * sensor = & g_model.telemetrySensors[index];
- lcd_outdezAtt(TELEM_COL3+1*FW, y, sensor->instance, LEFT);
+ if (sensor->type == TELEM_TYPE_CUSTOM) {
+ lcd_outdezAtt(TELEM_COL3+1*FW, y, sensor->instance, LEFT);
+ }
if (attr) {
s_editMode = 0;
s_currIdx = index;
diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h
index af4a513d7..e1028213f 100644
--- a/radio/src/myeeprom.h
+++ b/radio/src/myeeprom.h
@@ -1150,6 +1150,8 @@ enum TelemetryUnit {
UNIT_RPMS,
UNIT_G,
UNIT_DEGREE,
+ UNIT_MILLILITERS,
+ UNIT_FLOZ,
UNIT_HOURS,
UNIT_MINUTES,
UNIT_SECONDS,
@@ -1167,7 +1169,7 @@ enum TelemetryUnit {
UNIT_DATETIME_HOUR_MIN,
UNIT_DATETIME_SEC
};
-#define UNIT_MAX UNIT_DEGREE
+#define UNIT_MAX UNIT_FLOZ
#define UNIT_DIST UNIT_METERS
#define UNIT_TEMPERATURE UNIT_CELSIUS
#define UNIT_SPEED UNIT_KMH
@@ -1243,9 +1245,11 @@ enum TelemetrySensorFormula
TELEM_FORMULA_MIN,
TELEM_FORMULA_MAX,
TELEM_FORMULA_MULTIPLY,
+ TELEM_FORMULA_TOTALIZE,
TELEM_FORMULA_CELL,
TELEM_FORMULA_CONSUMPTION,
TELEM_FORMULA_DIST,
+ TELEM_FORMULA_LAST = TELEM_FORMULA_DIST
};
PACK(typedef struct {
diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp
index 757eb92b9..067fc2408 100644
--- a/radio/src/telemetry/frsky.cpp
+++ b/radio/src/telemetry/frsky.cpp
@@ -579,6 +579,7 @@ void telemetryReset()
setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, CELLS_FIRST_ID, 2, 0x80280220, UNIT_CELLS, 0);
setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, CURR_FIRST_ID, 3, 100, UNIT_AMPS, 2);
setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, RPM_FIRST_ID, 5, 3600, UNIT_RPMS, 0);
+ setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, FUEL_QTY_FIRST_ID, 11, 1000, UNIT_MILLILITERS, 2);
#endif
}
diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h
index 19f4da929..dcfb7442d 100644
--- a/radio/src/telemetry/frsky.h
+++ b/radio/src/telemetry/frsky.h
@@ -140,6 +140,8 @@
#define BATT_ID 0xf104
#define SWR_ID 0xf105
#define XJT_VERSION_ID 0xf106
+#define FUEL_QTY_FIRST_ID 0x0a10
+#define FUEL_QTY_LAST_ID 0x0a1f
// Default sensor data IDs (Physical IDs + CRC)
#define DATA_ID_VARIO 0x00 // 0
diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp
index 7dd5e7033..848701106 100644
--- a/radio/src/telemetry/frsky_sport.cpp
+++ b/radio/src/telemetry/frsky_sport.cpp
@@ -80,6 +80,7 @@ const FrSkySportSensor sportSensors[] = {
{ GPS_ALT_FIRST_ID, GPS_ALT_LAST_ID, ZSTR_GPSALT, UNIT_METERS, 2 },
{ GPS_TIME_DATE_FIRST_ID, GPS_TIME_DATE_LAST_ID, ZSTR_GPSDATETIME, UNIT_DATETIME, 0 },
{ GPS_LONG_LATI_FIRST_ID, GPS_LONG_LATI_LAST_ID, ZSTR_GPS, UNIT_GPS, 0 },
+ { FUEL_QTY_FIRST_ID, FUEL_QTY_LAST_ID, ZSTR_FUEL, UNIT_MILLILITERS, 2 },
{ 0, 0, NULL, UNIT_RAW, 0 } // sentinel
};
diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp
index 154a25fd3..9b4933333 100644
--- a/radio/src/telemetry/telemetry.cpp
+++ b/radio/src/telemetry/telemetry.cpp
@@ -14,8 +14,10 @@ void TelemetryItem::gpsReceived()
lastReceived = now();
}
-void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t newVal, uint32_t unit, uint32_t prec)
+void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32_t unit, uint32_t prec)
{
+ int32_t newVal = val;
+
if (unit == UNIT_CELLS) {
uint32_t data = uint32_t(newVal);
uint8_t cellIndex = data & 0xF;
@@ -216,6 +218,15 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t newVal, uin
}
}
+ for (int i=0; i