diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 1c65c9c5d..b982da9d0 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -906,7 +906,8 @@ class SensorData { char label[4+1]; unsigned int unit; unsigned int prec; - unsigned int inputFlags; + bool autoOffset; + bool filter; bool logs; bool persistent; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index a0531d166..139ea6fe9 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -2696,7 +2696,8 @@ class SensorField: public TransformedField { internalField.Append(new UnsignedField<1>(sensor.type, "type")); internalField.Append(new UnsignedField<5>(sensor.unit, "unit")); internalField.Append(new UnsignedField<2>(sensor.prec, "prec")); - internalField.Append(new UnsignedField<2>(sensor.inputFlags, "inputFlags")); + internalField.Append(new BoolField<1>(sensor.autoOffset)); + internalField.Append(new BoolField<1>(sensor.filter)); internalField.Append(new BoolField<1>(sensor.logs)); internalField.Append(new BoolField<1>(sensor.persistent)); internalField.Append(new SpareBitsField<4>()); diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index ee2215640..5eb2fb33f 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -486,7 +486,8 @@ TelemetrySensorPanel::TelemetrySensorPanel(QWidget *parent, SensorData & sensor, ui->instance->setField(sensor.instance); ui->ratio->setField(sensor.ratio); ui->offset->setField(sensor.offset); - ui->inputFlags->setField(sensor.inputFlags); + ui->autoOffset->setField(sensor.autoOffset); + ui->filter->setField(sensor.filter); ui->logs->setField(sensor.logs); ui->persistent->setField(sensor.persistent); ui->gpsSensor->setField(sensor.gps); diff --git a/companion/src/modeledit/telemetry_sensor.ui b/companion/src/modeledit/telemetry_sensor.ui index 8d9e03ce1..182159ebb 100644 --- a/companion/src/modeledit/telemetry_sensor.ui +++ b/companion/src/modeledit/telemetry_sensor.ui @@ -13,7 +13,7 @@ Form - + 0 @@ -521,28 +521,23 @@ - - - - 0 - 0 - + + + Qt::LeftToRight + + + Auto Offset + + + + + + + Qt::LeftToRight + + + Filter - - - --- - - - - - Auto Offset - - - - - Filtered - - diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index 5ec076707..9e2450ef0 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -355,6 +355,12 @@ void evalFunctions() break; #endif } +#if defined(CPUARM) + if (CFN_PARAM(cfn)>=FUNC_RESET_PARAM_FIRST_TELEM) { + TelemetryItem * telemetryItem = & telemetryItems[CFN_PARAM(cfn)-FUNC_RESET_PARAM_FIRST_TELEM]; + telemetryItem->clear(); + } +#endif break; #if defined(CPUARM) diff --git a/radio/src/gui/9X/menu_model_telemetry.cpp b/radio/src/gui/9X/menu_model_telemetry.cpp index bbfbaba1b..0750de2f9 100644 --- a/radio/src/gui/9X/menu_model_telemetry.cpp +++ b/radio/src/gui/9X/menu_model_telemetry.cpp @@ -192,7 +192,9 @@ enum SensorFields { SENSOR_FIELD_PARAM2, SENSOR_FIELD_PARAM3, SENSOR_FIELD_PARAM4, - SENSOR_FIELD_INPUT_FLAGS, + SENSOR_FIELD_AUTOOFFSET, + SENSOR_FIELD_FILTER, + SENSOR_FIELD_PERSISTENT, SENSOR_FIELD_LOGS, SENSOR_FIELD_MAX }; @@ -243,18 +245,21 @@ bool isSensorAvailable(int sensor) #define SENSOR_2ND_COLUMN (12*FW) #define SENSOR_3RD_COLUMN (18*FW) -#define SENSOR_UNIT_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) -#define SENSOR_PREC_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_UNIT_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_PREC_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME) ? HIDDEN_ROW : (uint8_t)0) #define SENSOR_PARAM1_ROWS (sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0 -#define SENSOR_PARAM2_ROWS (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)) ? 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->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_FILTER_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_PERSISTENT_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) void menuModelSensor(uint8_t event) { TelemetrySensor * sensor = & g_model.telemetrySensors[s_currIdx]; - SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, {0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, 0 }); + SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, {0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, SENSOR_AUTOOFFSET_ROWS, SENSOR_FILTER_ROWS, SENSOR_PERSISTENT_ROWS, 0 }); lcd_outdezAtt(PSIZE(TR_MENUSENSOR)*FW+1, 0, s_currIdx+1, INVERS|LEFT); putsTelemetryChannelValue(SENSOR_2ND_COLUMN, 0, s_currIdx, getValue(MIXSRC_FIRST_TELEM+3*s_currIdx), LEFT); @@ -279,12 +284,13 @@ void menuModelSensor(uint8_t event) break; case SENSOR_FIELD_TYPE: - sensor->type = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_TYPE, "\012Custom\0 Calculated", sensor->type, 0, 1, attr, event); + sensor->type = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_TYPE, STR_VSENSORTYPES, sensor->type, 0, 1, attr, event); if (attr && checkIncDec_Ret) { sensor->instance = 0; if (sensor->type == TELEM_TYPE_CALCULATED) { sensor->param = 0; - sensor->inputFlags = 0; + sensor->autoOffset = 0; + sensor->filter = 0; } } break; @@ -307,7 +313,7 @@ void menuModelSensor(uint8_t event) } } else { - sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, "Formula", "\010Add\0 Average\0Min\0 Max\0 MultiplyCell\0 ConsumptDistance", sensor->formula, 0, TELEM_FORMULA_DIST, attr, event); + sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_FORMULA, STR_VFORMULAS, sensor->formula, 0, TELEM_FORMULA_DIST, attr, event); if (attr && checkIncDec_Ret) { sensor->param = 0; if (sensor->formula == TELEM_FORMULA_CELL) { @@ -339,7 +345,7 @@ void menuModelSensor(uint8_t event) break; case SENSOR_FIELD_PRECISION: - sensor->prec = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_PRECISION, "\005PREC0PREC1PREC2", sensor->prec, 0, 2, attr, event); + sensor->prec = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_PRECISION, STR_VPREC, sensor->prec, 0, 2, attr, event); if (attr && checkIncDec_Ret) { telemetryItems[s_currIdx].clear(); } @@ -348,7 +354,7 @@ void menuModelSensor(uint8_t event) case SENSOR_FIELD_PARAM1: if (sensor->type == TELEM_TYPE_CALCULATED) { if (sensor->formula == TELEM_FORMULA_CELL) { - lcd_putsLeft(y, "Cells sensor"); + lcd_putsLeft(y, STR_CELLSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->cell.source ? MIXSRC_FIRST_TELEM+3*(sensor->cell.source-1) : 0, attr); if (attr) { sensor->cell.source = checkIncDec(event, sensor->cell.source, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isCellsSensor); @@ -356,7 +362,7 @@ void menuModelSensor(uint8_t event) break; } else if (sensor->formula == TELEM_FORMULA_DIST) { - lcd_putsLeft(y, "GPS sensor"); + lcd_putsLeft(y, STR_GPSSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->dist.gps ? MIXSRC_FIRST_TELEM+3*(sensor->dist.gps-1) : 0, attr); if (attr) { sensor->dist.gps = checkIncDec(event, sensor->dist.gps, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isGPSSensor); @@ -364,7 +370,7 @@ void menuModelSensor(uint8_t event) break; } else if (sensor->formula == TELEM_FORMULA_CONSUMPTION) { - lcd_putsLeft(y, "Amps sensor"); + lcd_putsLeft(y, STR_CURRENTSENSOR); 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, isCurrentSensor); @@ -373,24 +379,32 @@ void menuModelSensor(uint8_t event) } } else { - lcd_putsLeft(y, "Ratio"); - if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 0, 30000); - if (sensor->custom.ratio == 0) - lcd_putcAtt(SENSOR_2ND_COLUMN, y, '-', attr); - else - lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr|PREC1); - break; + if (sensor->unit == UNIT_RPMS) { + lcd_putsLeft(y, NO_INDENT(STR_BLADES)); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 1, 30000); + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr); + break; + } + else { + lcd_putsLeft(y, STR_RATIO); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 0, 30000); + if (sensor->custom.ratio == 0) + lcd_putcAtt(SENSOR_2ND_COLUMN, y, '-', attr); + else + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr|PREC1); + break; + } } // no break case SENSOR_FIELD_PARAM2: if (sensor->type == TELEM_TYPE_CALCULATED) { if (sensor->formula == TELEM_FORMULA_CELL) { - sensor->cell.index = selectMenuItem(SENSOR_2ND_COLUMN, y, "Cell index", "\007Lowest\0001\0 2\0 3\0 4\0 5\0 6\0 HighestDelta\0", sensor->cell.index, 0, 8, attr, event); + sensor->cell.index = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_CELLINDEX, STR_VCELLINDEX, sensor->cell.index, 0, 8, attr, event); break; } else if (sensor->formula == TELEM_FORMULA_DIST) { - lcd_putsLeft(y, "Alt sensor"); + lcd_putsLeft(y, STR_ALTSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->dist.alt ? MIXSRC_FIRST_TELEM+3*(sensor->dist.alt-1) : 0, attr); if (attr) { sensor->dist.alt = checkIncDec(event, sensor->dist.alt, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isAltSensor); @@ -412,7 +426,7 @@ void menuModelSensor(uint8_t event) case SENSOR_FIELD_PARAM4: { - putsStrIdx(0, y, "Source", k-SENSOR_FIELD_PARAM1+1); + putsStrIdx(0, y, NO_INDENT(STR_SOURCE), k-SENSOR_FIELD_PARAM1+1); int8_t & source = sensor->calc.sources[k-SENSOR_FIELD_PARAM1]; if (attr) { source = checkIncDec(event, source, -TELEM_VALUES_MAX, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isSensorAvailable); @@ -427,12 +441,20 @@ void menuModelSensor(uint8_t event) break; } - case SENSOR_FIELD_INPUT_FLAGS: - sensor->inputFlags = selectMenuItem(SENSOR_2ND_COLUMN, y, "Options", "\013None\0 ""Auto Offset""Filter\0", sensor->inputFlags, 0, TELEM_INPUT_FLAGS_MAX, attr, event); + case SENSOR_FIELD_AUTOOFFSET: + ON_OFF_MENU_ITEM(sensor->autoOffset, SENSOR_2ND_COLUMN, y, STR_AUTOOFFSET, attr, event); + break; + + case SENSOR_FIELD_FILTER: + ON_OFF_MENU_ITEM(sensor->filter, SENSOR_2ND_COLUMN, y, STR_FILTER, attr, event); + break; + + case SENSOR_FIELD_PERSISTENT: + ON_OFF_MENU_ITEM(sensor->persistent, SENSOR_2ND_COLUMN, y, NO_INDENT(STR_PERSISTENT), attr, event); break; case SENSOR_FIELD_LOGS: - ON_OFF_MENU_ITEM(sensor->logs, SENSOR_2ND_COLUMN, y, "Logs", attr, event); + ON_OFF_MENU_ITEM(sensor->logs, SENSOR_2ND_COLUMN, y, STR_LOGS, attr, event); break; } @@ -552,6 +574,9 @@ void menuModelTelemetry(uint8_t event) s_currIdx = res; pushMenu(menuModelSensor); } + else { + POPUP_WARNING(STR_TELEMETRYFULL); + } } break; #endif diff --git a/radio/src/gui/Taranis/menu_model_custom_functions.cpp b/radio/src/gui/Taranis/menu_model_custom_functions.cpp index 7e142c888..f246762e6 100644 --- a/radio/src/gui/Taranis/menu_model_custom_functions.cpp +++ b/radio/src/gui/Taranis/menu_model_custom_functions.cpp @@ -211,8 +211,18 @@ void menuCustomFunctions(uint8_t event, CustomFunctionData * functions, CustomFu int16_t val_min = 0; int16_t val_max = 255; if (func == FUNC_RESET) { - val_max = FUNC_RESET_PARAM_LAST; - lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, CFN_PARAM(cfn), attr); + val_max = FUNC_RESET_PARAM_FIRST_TELEM+lastUsedTelemetryIndex(); + int param = CFN_PARAM(cfn); + if (param < FUNC_RESET_PARAM_FIRST_TELEM) { + lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, param, attr); + } + else { + if (param > FUNC_RESET_PARAM_FIRST_TELEM) { + INCDEC_ENABLE_CHECK(isSensorAvailableInResetSpecialFunction); + } + TelemetrySensor * sensor = & g_model.telemetrySensors[param-FUNC_RESET_PARAM_FIRST_TELEM]; + lcd_putsnAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, sensor->label, TELEM_LABEL_LEN, attr|ZCHAR); + } } #if defined(OVERRIDE_CHANNEL_FUNCTION) else if (func == FUNC_OVERRIDE_CHANNEL) { diff --git a/radio/src/gui/Taranis/menu_model_telemetry.cpp b/radio/src/gui/Taranis/menu_model_telemetry.cpp index 1f6bb9860..409674bcd 100644 --- a/radio/src/gui/Taranis/menu_model_telemetry.cpp +++ b/radio/src/gui/Taranis/menu_model_telemetry.cpp @@ -149,7 +149,9 @@ enum SensorFields { SENSOR_FIELD_PARAM2, SENSOR_FIELD_PARAM3, SENSOR_FIELD_PARAM4, - SENSOR_FIELD_INPUT_FLAGS, + SENSOR_FIELD_AUTOOFFSET, + SENSOR_FIELD_FILTER, + SENSOR_FIELD_PERSISTENT, SENSOR_FIELD_LOGS, SENSOR_FIELD_MAX }; @@ -200,18 +202,21 @@ bool isSensorAvailable(int sensor) #define SENSOR_2ND_COLUMN (12*FW) #define SENSOR_3RD_COLUMN (18*FW) -#define SENSOR_UNIT_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) -#define SENSOR_PREC_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_UNIT_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_PREC_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME) ? HIDDEN_ROW : (uint8_t)0) #define SENSOR_PARAM1_ROWS (sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0 -#define SENSOR_PARAM2_ROWS (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)) ? 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->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_FILTER_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_PERSISTENT_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) void menuModelSensor(uint8_t event) { TelemetrySensor * sensor = & g_model.telemetrySensors[s_currIdx]; - SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, {0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, 0 }); + SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, {0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, SENSOR_AUTOOFFSET_ROWS, SENSOR_FILTER_ROWS, SENSOR_PERSISTENT_ROWS, 0 }); lcd_outdezAtt(PSIZE(TR_MENUSENSOR)*FW+1, 0, s_currIdx+1, INVERS|LEFT); putsTelemetryChannelValue(SENSOR_2ND_COLUMN, 0, s_currIdx, getValue(MIXSRC_FIRST_TELEM+3*s_currIdx), LEFT); @@ -236,12 +241,13 @@ void menuModelSensor(uint8_t event) break; case SENSOR_FIELD_TYPE: - sensor->type = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_TYPE, "\012Custom\0 Calculated", sensor->type, 0, 1, attr, event); + sensor->type = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_TYPE, STR_VSENSORTYPES, sensor->type, 0, 1, attr, event); if (attr && checkIncDec_Ret) { sensor->instance = 0; if (sensor->type == TELEM_TYPE_CALCULATED) { sensor->param = 0; - sensor->inputFlags = 0; + sensor->filter = 0; + sensor->autoOffset = 0; } } break; @@ -264,7 +270,7 @@ void menuModelSensor(uint8_t event) } } else { - sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_FORMULA, "\010Add\0 Average\0Min\0 Max\0 MultiplyCell\0 ConsumptDistance", sensor->formula, 0, TELEM_FORMULA_DIST, attr, event); + sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_FORMULA, STR_VFORMULAS, sensor->formula, 0, TELEM_FORMULA_DIST, attr, event); if (attr && checkIncDec_Ret) { sensor->param = 0; if (sensor->formula == TELEM_FORMULA_CELL) { @@ -296,7 +302,7 @@ void menuModelSensor(uint8_t event) break; case SENSOR_FIELD_PRECISION: - sensor->prec = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_PRECISION, "\005PREC0PREC1PREC2", sensor->prec, 0, 2, attr, event); + sensor->prec = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_PRECISION, STR_VPREC, sensor->prec, 0, 2, attr, event); if (attr && checkIncDec_Ret) { telemetryItems[s_currIdx].clear(); } @@ -330,20 +336,28 @@ void menuModelSensor(uint8_t event) } } else { - lcd_putsLeft(y, STR_RATIO); - if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 0, 30000); - if (sensor->custom.ratio == 0) - lcd_putcAtt(SENSOR_2ND_COLUMN, y, '-', attr); - else - lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr|PREC1); - break; + if (sensor->unit == UNIT_RPMS) { + lcd_putsLeft(y, NO_INDENT(STR_BLADES)); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 1, 30000); + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr); + break; + } + else { + lcd_putsLeft(y, STR_RATIO); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 0, 30000); + if (sensor->custom.ratio == 0) + lcd_putcAtt(SENSOR_2ND_COLUMN, y, '-', attr); + else + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr|PREC1); + break; + } } // no break case SENSOR_FIELD_PARAM2: if (sensor->type == TELEM_TYPE_CALCULATED) { if (sensor->formula == TELEM_FORMULA_CELL) { - sensor->cell.index = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_CELLINDEX, "\007Lowest\0001\0 2\0 3\0 4\0 5\0 6\0 HighestDelta\0", sensor->cell.index, 0, 8, attr, event); + sensor->cell.index = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_CELLINDEX, STR_VCELLINDEX, sensor->cell.index, 0, 8, attr, event); break; } else if (sensor->formula == TELEM_FORMULA_DIST) { @@ -384,8 +398,16 @@ void menuModelSensor(uint8_t event) break; } - case SENSOR_FIELD_INPUT_FLAGS: - sensor->inputFlags = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_OPTIONS, "\013None\0 ""Auto Offset""Filter\0", sensor->inputFlags, 0, TELEM_INPUT_FLAGS_MAX, attr, event); + case SENSOR_FIELD_AUTOOFFSET: + ON_OFF_MENU_ITEM(sensor->autoOffset, SENSOR_2ND_COLUMN, y, STR_AUTOOFFSET, attr, event); + break; + + case SENSOR_FIELD_FILTER: + ON_OFF_MENU_ITEM(sensor->filter, SENSOR_2ND_COLUMN, y, STR_FILTER, attr, event); + break; + + case SENSOR_FIELD_PERSISTENT: + ON_OFF_MENU_ITEM(sensor->persistent, SENSOR_2ND_COLUMN, y, NO_INDENT(STR_PERSISTENT), attr, event); break; case SENSOR_FIELD_LOGS: @@ -516,6 +538,9 @@ void menuModelTelemetry(uint8_t event) s_currIdx = res; pushMenu(menuModelSensor); } + else { + POPUP_WARNING(STR_TELEMETRYFULL); + } } break; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index c02fcc6a5..1aaaad001 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -130,6 +130,7 @@ #define NUM_POTS 5 #define NUM_XPOTS 3 #endif + #define TELEM_VALUES_MAX 32 #elif defined(CPUARM) #define MAX_MODELS 60 #define NUM_CHNOUT 32 // number of real output channels CH1-CH32 @@ -141,6 +142,7 @@ #define NUM_TRAINER 16 #define NUM_POTS 3 #define NUM_XPOTS 0 + #define TELEM_VALUES_MAX 16 #elif defined(CPUM2560) || defined(CPUM2561) #define MAX_MODELS 30 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -152,6 +154,7 @@ #define NUM_TRAINER 8 #define NUM_POTS 3 #define NUM_XPOTS 0 + #define TELEM_VALUES_MAX 0 #elif defined(CPUM128) #define MAX_MODELS 30 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -163,6 +166,7 @@ #define NUM_TRAINER 8 #define NUM_POTS 3 #define NUM_XPOTS 0 + #define TELEM_VALUES_MAX 0 #else #define MAX_MODELS 16 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -174,6 +178,7 @@ #define NUM_TRAINER 8 #define NUM_POTS 3 #define NUM_XPOTS 0 + #define TELEM_VALUES_MAX 0 #endif #if defined(CPUARM) @@ -584,9 +589,13 @@ enum ResetFunctionParam { #endif #if ROTARY_ENCODERS > 1 FUNC_RESET_ROTENC2, +#endif +#if defined(CPUARM) + FUNC_RESET_PARAM_FIRST_TELEM, + FUNC_RESET_PARAM_LAST_TELEM = FUNC_RESET_PARAM_FIRST_TELEM + TELEM_VALUES_MAX, #endif FUNC_RESET_PARAMS_COUNT, - FUNC_RESET_PARAM_LAST = FUNC_RESET_PARAMS_COUNT-1 + FUNC_RESET_PARAM_LAST = FUNC_RESET_PARAMS_COUNT-1, }; enum AdjustGvarFunctionParam { @@ -1211,11 +1220,6 @@ PACK(typedef struct { #endif #if defined(CPUARM) -#if defined(PCBTARANIS) - #define TELEM_VALUES_MAX 32 -#else - #define TELEM_VALUES_MAX 16 -#endif #define TELEM_LABEL_LEN 4 //#define TELEM_FLAG_TIMEOUT 0x01 #define TELEM_FLAG_LOG 0x02 @@ -1243,14 +1247,6 @@ enum TelemetrySensorFormula TELEM_FORMULA_DIST, }; -enum TelemetrySensorInputFlags -{ - TELEM_INPUT_FLAGS_NONE, - TELEM_INPUT_FLAGS_AUTO_OFFSET, - TELEM_INPUT_FLAGS_FILTERING, - TELEM_INPUT_FLAGS_MAX=TELEM_INPUT_FLAGS_FILTERING -}; - PACK(typedef struct { union { uint16_t id; // data identifier, for FrSky we can reuse existing ones. Source unit is derived from type. @@ -1264,7 +1260,8 @@ PACK(typedef struct { uint8_t type:1; // 0=custom / 1=calculated uint8_t unit:5; // user can choose what unit to display each value in uint8_t prec:2; - uint8_t inputFlags:2; + uint8_t autoOffset:1; + uint8_t filter:1; uint8_t logs:1; uint8_t persistent:1; uint8_t spare:4; diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 16586f305..757eb92b9 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -578,6 +578,7 @@ void telemetryReset() setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, ALT_FIRST_ID, 1, 1000, UNIT_METERS, 2); 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); #endif } diff --git a/radio/src/telemetry/frsky_d.cpp b/radio/src/telemetry/frsky_d.cpp index 1565971da..0ddcd133e 100644 --- a/radio/src/telemetry/frsky_d.cpp +++ b/radio/src/telemetry/frsky_d.cpp @@ -643,10 +643,10 @@ void frskyDSetDefault(int index, uint16_t id) if (id >= D_A1_ID && id <= D_A2_ID) { telemetrySensor.prec = 1; telemetrySensor.custom.ratio = 132; - telemetrySensor.inputFlags = TELEM_INPUT_FLAGS_FILTERING; + telemetrySensor.filter = 1; } else if (id == D_RSSI_ID) { - telemetrySensor.inputFlags = TELEM_INPUT_FLAGS_FILTERING; + telemetrySensor.filter = 1; } } else { diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index 6fe757915..7dd5e7033 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -254,7 +254,10 @@ void frskySportSetDefault(int index, uint16_t id, uint8_t instance) telemetrySensor.init(sensor->name, unit, prec); if (id >= ADC1_ID && id <= BATT_ID) { telemetrySensor.custom.ratio = 132; - telemetrySensor.inputFlags = TELEM_INPUT_FLAGS_FILTERING; + telemetrySensor.filter = 1; + } + if (unit == UNIT_RPMS) { + telemetrySensor.custom.ratio = 1; } } else { diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index bca364d52..cbc68b997 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -169,30 +169,33 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t newVal, uin datetime.timestate = 1; newVal = 0; } + else if (unit == UNIT_RPMS) { + newVal = newVal / sensor.custom.ratio; + } else { newVal = sensor.getValue(newVal, unit, prec); - if (sensor.inputFlags == TELEM_INPUT_FLAGS_AUTO_OFFSET) { + if (sensor.autoOffset) { if (!isAvailable()) { - offsetAuto = -newVal; + std.offsetAuto = -newVal; } - newVal += offsetAuto; + newVal += std.offsetAuto; } - else if (sensor.inputFlags == TELEM_INPUT_FLAGS_FILTERING) { + else if (sensor.filter) { if (!isAvailable()) { for (int i=0; i= 0) { - switch (protocol) { -#if defined(FRSKY_SPORT) - case TELEM_PROTO_FRSKY_SPORT: - frskySportSetDefault(available, id, instance); - break; -#endif -#if defined(FRSKY) - case TELEM_PROTO_FRSKY_D: - frskyDSetDefault(available, id); - break; -#endif - default: - break; - } - } - - return available; -} - void delTelemetryIndex(uint8_t index) { memclear(&g_model.telemetrySensors[index], sizeof(TelemetrySensor)); @@ -481,15 +450,56 @@ int availableTelemetryIndex() return -1; } +int lastUsedTelemetryIndex() +{ + for (int index=TELEM_VALUES_MAX-1; index>=0; index--) { + TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index]; + if (telemetrySensor.isAvailable()) { + return index; + } + } + return -1; +} + +bool isSensorAvailableInResetSpecialFunction(int index) +{ + TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index-FUNC_RESET_PARAM_FIRST_TELEM]; + return telemetrySensor.isAvailable(); +} + void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec) { - int index = getTelemetryIndex(protocol, id, instance); - - if (index >= 0) { - telemetryItems[index].setValue(g_model.telemetrySensors[index], value, unit, prec); + bool available = false; + + for (int index=0; index= 0) { + switch (protocol) { +#if defined(FRSKY_SPORT) + case TELEM_PROTO_FRSKY_SPORT: + frskySportSetDefault(index, id, instance); + break; +#endif +#if defined(FRSKY) + case TELEM_PROTO_FRSKY_D: + frskyDSetDefault(index, id); + break; +#endif + default: + break; + } + } + else { + POPUP_WARNING(STR_TELEMETRYFULL); + } } } diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index ddb9160a7..981d623f2 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -97,8 +97,10 @@ class TelemetryItem uint8_t lastReceived; // for detection of sensor loss union { - int32_t offsetAuto; - int32_t filterValues[TELEMETRY_AVERAGE_COUNT]; + struct { + int32_t offsetAuto; + int32_t filterValues[TELEMETRY_AVERAGE_COUNT]; + } std; struct { uint16_t prescale; } consumption; @@ -182,9 +184,13 @@ inline bool isTelemetryFieldComparisonAvailable(int index) return (sensor.id != 0); } +extern TelemetryItem telemetryItems[]; + void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec); void delTelemetryIndex(uint8_t index); int availableTelemetryIndex(); +int lastUsedTelemetryIndex(); +bool isSensorAvailableInResetSpecialFunction(int index); int32_t getTelemetryValue(uint8_t index, uint8_t & prec); int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t destUnit, uint8_t destPrec); diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 5ad95b3bd..8414e8863 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -121,6 +121,10 @@ const pm_char STR_OPEN9X[] PROGMEM = ISTR(DSM_PROTOCOLS) ISTR(VOLTSRC) ISTR(CURVE_TYPES) + ISTR(VSENSORTYPES) + ISTR(VFORMULAS) + ISTR(VPREC) + ISTR(VCELLINDEX) #endif #if defined(MAVLINK) ISTR(MAVLINK_BAUDS) @@ -552,6 +556,9 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR; const pm_char STR_CELLSENSOR[] PROGMEM = TR_CELLSENSOR; const pm_char STR_GPSSENSOR[] PROGMEM = TR_GPSSENSOR; const pm_char STR_CURRENTSENSOR[] PROGMEM = TR_CURRENTSENSOR; + const pm_char STR_AUTOOFFSET[] PROGMEM = TR_AUTOOFFSET; + const pm_char STR_FILTER[] PROGMEM = TR_FILTER; + const pm_char STR_TELEMETRYFULL[] PROGMEM = TR_TELEMETRYFULL; #endif #if defined(PCBTARANIS) diff --git a/radio/src/translations.h b/radio/src/translations.h index 139146342..74eb7f43d 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -192,7 +192,11 @@ extern const pm_char STR_OPEN9X[]; #define OFS_DSM_PROTOCOLS (OFS_XJT_PROTOCOLS + sizeof(TR_XJT_PROTOCOLS)) #define OFS_VOLTSRC (OFS_DSM_PROTOCOLS + sizeof(TR_DSM_PROTOCOLS)) #define OFS_CURVE_TYPES (OFS_VOLTSRC + sizeof(TR_VOLTSRC)) - #define OFS_MAVLINK_BAUDS (OFS_CURVE_TYPES + sizeof(TR_CURVE_TYPES)) + #define OFS_VSENSORTYPES (OFS_CURVE_TYPES + sizeof(TR_CURVE_TYPES)) + #define OFS_VFORMULAS (OFS_VSENSORTYPES + sizeof(TR_VSENSORTYPES)) + #define OFS_VPREC (OFS_VFORMULAS + sizeof(TR_VFORMULAS)) + #define OFS_VCELLINDEX (OFS_VPREC + sizeof(TR_VPREC)) + #define OFS_MAVLINK_BAUDS (OFS_VCELLINDEX + sizeof(TR_VCELLINDEX)) #else #define OFS_MAVLINK_BAUDS (OFS_VTRAINERMODES) #endif @@ -298,6 +302,10 @@ extern const pm_char STR_OPEN9X[]; #define STR_XJT_PROTOCOLS (STR_OPEN9X + OFS_XJT_PROTOCOLS) #define STR_DSM_PROTOCOLS (STR_OPEN9X + OFS_DSM_PROTOCOLS) #define STR_CURVE_TYPES (STR_OPEN9X + OFS_CURVE_TYPES) + #define STR_VSENSORTYPES (STR_OPEN9X + OFS_VSENSORTYPES) + #define STR_VFORMULAS (STR_OPEN9X + OFS_VFORMULAS) + #define STR_VPREC (STR_OPEN9X + OFS_VPREC) + #define STR_VCELLINDEX (STR_OPEN9X + OFS_VCELLINDEX) #endif #if defined(MAVLINK) @@ -758,6 +766,9 @@ extern const pm_char STR_BLCOLOR[]; extern const pm_char STR_CELLSENSOR[]; extern const pm_char STR_GPSSENSOR[]; extern const pm_char STR_CURRENTSENSOR[]; + extern const pm_char STR_AUTOOFFSET[]; + extern const pm_char STR_FILTER[]; + extern const pm_char STR_TELEMETRYFULL[]; #endif #if defined(PCBTARANIS) diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 5d765b36a..f8a31e100 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -531,6 +531,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #if defined(COLORLCD) #define INDENT "\007" @@ -1049,6 +1061,9 @@ #define TR_CELLSENSOR "Cell sensor" #define TR_GPSSENSOR "GPS sensor" #define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index aa2769fa1..6ea81624b 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -530,6 +530,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #if defined(COLORLCD) #define INDENT "\007" @@ -1048,6 +1060,9 @@ #define TR_CELLSENSOR "Cell sensor" #define TR_GPSSENSOR "GPS sensor" #define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 6e0a9895f..ec3a2f59d 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -530,6 +530,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #if defined(COLORLCD) #define INDENT "\007" @@ -1048,6 +1060,9 @@ #define TR_CELLSENSOR "Cell sensor" #define TR_GPSSENSOR "GPS sensor" #define TR_CURRENTSENSOR "Curr. sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 460a28f72..0c905f589 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -491,6 +491,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circulo ""Estabilizar ""Entrenamiento""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guiado ""Inicialisando""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -984,6 +996,9 @@ #define TR_CELLSENSOR "Cell sensor" #define TR_GPSSENSOR "GPS sensor" #define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index dc55d8478..21b6e91a2 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -491,6 +491,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -984,6 +996,9 @@ #define TR_CELLSENSOR "Cell sensor" #define TR_GPSSENSOR "GPS sensor" #define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 6f35d6dc2..dccdeb64b 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -534,6 +534,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Perso\0 ""Calculé\0 " + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Addition""Moyenne\0""Min\0 ""Max\0 ""Multipl.""Elément\0""Consomm.""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Mini.\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Maxi.\0 ""Diff.\0 " + // ZERO TERMINATED STRINGS #if defined(COLORLCD) #define INDENT "\007" @@ -1043,7 +1055,10 @@ #define TR_ALTSENSOR "Capteur Alt" #define TR_CELLSENSOR "Capteur Elém" #define TR_GPSSENSOR "Capteur GPS" -#define TR_CURRENTSENSOR "Capteur cour." +#define TR_CURRENTSENSOR "Capt courant" +#define TR_AUTOOFFSET "Offset auto" +#define TR_FILTER "Filtrage" +#define TR_TELEMETRYFULL "Plus de capteurs libres!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 6f15cac05..06395e850 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -491,6 +491,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Inizializza ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -984,6 +996,9 @@ #define TR_CELLSENSOR "Cell sensor" #define TR_GPSSENSOR "GPS sensor" #define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index f13b8fdb6..89b35da3a 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -489,6 +489,18 @@ #define TR_MAVLINK_AP_MODES "Ręczny ""Koło ""Stabilizacja ""Trening ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Sterowany ""Inicjalizacja""BŁĘDNY " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -982,6 +994,9 @@ #define TR_CELLSENSOR "Cell sensor" #define TR_GPSSENSOR "GPS sensor" #define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 86fc41cce..bb85bb40b 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -491,6 +491,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -984,6 +996,9 @@ #define TR_CELLSENSOR "Cell sensor" #define TR_GPSSENSOR "GPS sensor" #define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index ce24e7532..6461e4d6f 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -491,6 +491,18 @@ #define TR_MAVLINK_AP_MODES "Manuell ""Cirkla ""Stabilisera ""Övning ""Fly by Wire A""Fly by Wire A""Automatisk ""Flyg Hem ""Hovra ""Guidad ""Initialiserar""OGILTIG " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -984,6 +996,9 @@ #define TR_CELLSENSOR "Cell sensor" #define TR_GPSSENSOR "GPS sensor" #define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" #define ZSTR_RSSI "RSSI" #define ZSTR_SWR "SWR"