Merge pull request #2161 from opentx/kilrah/telemetry_enhancements

Kilrah/telemetry enhancements
This commit is contained in:
Andre Bernet
2015-03-22 22:59:47 +04:00
26 changed files with 391 additions and 142 deletions
+2 -1
View File
@@ -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;
@@ -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>());
+2 -1
View File
@@ -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);
+17 -22
View File
@@ -13,7 +13,7 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,0,1">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0,0,0,1,1,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1">
<property name="leftMargin">
<number>0</number>
</property>
@@ -521,28 +521,23 @@
</widget>
</item>
<item>
<widget class="AutoComboBox" name="inputFlags">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<widget class="AutoCheckBox" name="autoOffset">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Auto Offset</string>
</property>
</widget>
</item>
<item>
<widget class="AutoCheckBox" name="filter">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Filter</string>
</property>
<item>
<property name="text">
<string>---</string>
</property>
</item>
<item>
<property name="text">
<string>Auto Offset</string>
</property>
</item>
<item>
<property name="text">
<string>Filtered</string>
</property>
</item>
</widget>
</item>
<item>
+6
View File
@@ -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)
+50 -25
View File
@@ -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
@@ -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) {
+44 -19
View File
@@ -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;
+12 -15
View File
@@ -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;
+1
View File
@@ -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
}
+2 -2
View File
@@ -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 {
+4 -1
View File
@@ -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 {
+59 -49
View File
@@ -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<TELEMETRY_AVERAGE_COUNT; i++) {
filterValues[i] = newVal;
std.filterValues[i] = newVal;
}
}
else {
// calculate the average from values[] and value
// also shift readings in values [] array
unsigned int sum = filterValues[0];
unsigned int sum = std.filterValues[0];
for (int i=0; i<TELEMETRY_AVERAGE_COUNT-1; i++) {
int32_t tmp = filterValues[i+1];
filterValues[i] = tmp;
int32_t tmp = std.filterValues[i+1];
std.filterValues[i] = tmp;
sum += tmp;
}
filterValues[TELEMETRY_AVERAGE_COUNT-1] = newVal;
std.filterValues[TELEMETRY_AVERAGE_COUNT-1] = newVal;
sum += newVal;
newVal = sum/(TELEMETRY_AVERAGE_COUNT+1);
}
@@ -429,40 +432,6 @@ void TelemetryItem::eval(const TelemetrySensor & sensor)
}
}
int getTelemetryIndex(TelemetryProtocol protocol, uint16_t id, uint8_t instance)
{
int available = -1;
for (int index=0; index<TELEM_VALUES_MAX; index++) {
TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index];
if (telemetrySensor.id == id && telemetrySensor.instance == instance) {
return index;
}
else if (available < 0 && telemetrySensor.id == 0) {
available = index;
}
}
if (available >= 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<TELEM_VALUES_MAX; index++) {
TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index];
if (telemetrySensor.id == id && telemetrySensor.instance == instance) {
telemetryItems[index].setValue(g_model.telemetrySensors[index], value, unit, prec);
available = true;
}
}
else {
// TODO error too many sensors
if (!available) {
int index = availableTelemetryIndex();
if (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);
}
}
}
+8 -2
View File
@@ -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);
+7
View File
@@ -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)
+12 -1
View File
@@ -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)
+15
View File
@@ -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"
+15
View File
@@ -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"
+15
View File
@@ -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"
+15
View File
@@ -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"
+15
View File
@@ -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"
+16 -1
View File
@@ -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"
+15
View File
@@ -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"
+15
View File
@@ -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"
+15
View File
@@ -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"
+15
View File
@@ -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"