mirror of
https://github.com/opentx/opentx.git
synced 2025-07-17 05:15:18 +03:00
Add room for more telemetry units
This commit is contained in:
parent
765b17f36b
commit
dcc803c5af
10 changed files with 110 additions and 36 deletions
|
@ -278,10 +278,13 @@ enum TelemetryUnit {
|
|||
UNIT_METERS_PER_SECOND,
|
||||
UNIT_FEET_PER_SECOND,
|
||||
UNIT_KMH,
|
||||
UNIT_SPEED = UNIT_KMH,
|
||||
UNIT_MPH,
|
||||
UNIT_METERS,
|
||||
UNIT_DIST = UNIT_METERS,
|
||||
UNIT_FEET,
|
||||
UNIT_CELSIUS,
|
||||
UNIT_TEMPERATURE = UNIT_CELSIUS,
|
||||
UNIT_FAHRENHEIT,
|
||||
UNIT_PERCENT,
|
||||
UNIT_MAH,
|
||||
|
@ -294,6 +297,18 @@ enum TelemetryUnit {
|
|||
UNIT_RADIANS,
|
||||
UNIT_MILLILITERS,
|
||||
UNIT_FLOZ,
|
||||
UNIT_MILLILITERS_PER_MINUTE,
|
||||
UNIT_MAX = UNIT_MILLILITERS_PER_MINUTE,
|
||||
UNIT_SPARE1,
|
||||
UNIT_SPARE2,
|
||||
UNIT_SPARE3,
|
||||
UNIT_SPARE4,
|
||||
UNIT_SPARE5,
|
||||
UNIT_SPARE6,
|
||||
UNIT_SPARE7,
|
||||
UNIT_SPARE8,
|
||||
UNIT_SPARE9,
|
||||
UNIT_SPARE10,
|
||||
UNIT_HOURS,
|
||||
UNIT_MINUTES,
|
||||
UNIT_SECONDS,
|
||||
|
@ -312,10 +327,6 @@ enum TelemetryUnit {
|
|||
UNIT_DATETIME_HOUR_MIN,
|
||||
UNIT_DATETIME_SEC
|
||||
};
|
||||
#define UNIT_MAX UNIT_FLOZ
|
||||
#define UNIT_DIST UNIT_METERS
|
||||
#define UNIT_TEMPERATURE UNIT_CELSIUS
|
||||
#define UNIT_SPEED UNIT_KMH
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define NUM_LINE_ITEMS 3
|
||||
|
|
|
@ -340,15 +340,16 @@ PACK(struct TelemetrySensor {
|
|||
NOBACKUP(uint8_t formula);
|
||||
};
|
||||
char label[TELEM_LABEL_LEN]; // user defined label
|
||||
uint8_t type:1; // 0=custom / 1=calculated
|
||||
uint8_t unit:5; // user can choose what unit to display each value in
|
||||
uint8_t subId;
|
||||
uint8_t type:2; // 0=custom / 1=calculated// user can choose what unit to display each value in
|
||||
uint8_t unit:6;
|
||||
uint8_t prec:2;
|
||||
uint8_t autoOffset:1;
|
||||
uint8_t filter:1;
|
||||
uint8_t logs:1;
|
||||
uint8_t persistent:1;
|
||||
uint8_t onlyPositive:1;
|
||||
uint8_t subId:3;
|
||||
uint8_t spare:1;
|
||||
union {
|
||||
NOBACKUP(PACK(struct {
|
||||
uint16_t ratio;
|
||||
|
@ -898,7 +899,7 @@ static inline void check_struct()
|
|||
#endif /* board specific ifdefs*/
|
||||
|
||||
CHKSIZE(LogicalSwitchData, 9);
|
||||
CHKSIZE(TelemetrySensor, 13);
|
||||
CHKSIZE(TelemetrySensor, 14);
|
||||
CHKSIZE(ModuleData, 29);
|
||||
CHKSIZE(GVarData, 7);
|
||||
CHKSIZE(RssiAlarmData, 2);
|
||||
|
@ -906,25 +907,25 @@ static inline void check_struct()
|
|||
|
||||
#if defined(PCBXLITES)
|
||||
CHKSIZE(RadioData, 860);
|
||||
CHKSIZE(ModelData, 6117);
|
||||
CHKSIZE(ModelData, 6157);
|
||||
#elif defined(PCBXLITE)
|
||||
CHKSIZE(RadioData, 852);
|
||||
CHKSIZE(ModelData, 6117);
|
||||
CHKSIZE(ModelData, 6157);
|
||||
#elif defined(PCBX7)
|
||||
CHKSIZE(RadioData, 858);
|
||||
CHKSIZE(ModelData, 6117);
|
||||
CHKSIZE(ModelData, 6157);
|
||||
#elif defined(PCBX9E)
|
||||
CHKSIZE(RadioData, 960);
|
||||
CHKSIZE(ModelData, 6554);
|
||||
CHKSIZE(ModelData, 6614);
|
||||
#elif defined(PCBX9D) || defined(PCBX9DP)
|
||||
CHKSIZE(RadioData, 880);
|
||||
CHKSIZE(ModelData, 6541);
|
||||
CHKSIZE(ModelData, 6601);
|
||||
#elif defined(PCBSKY9X)
|
||||
CHKSIZE(RadioData, 735);
|
||||
CHKSIZE(ModelData, 5279);
|
||||
CHKSIZE(ModelData, 5319);
|
||||
#elif defined(PCBHORUS)
|
||||
CHKSIZE(RadioData, 855);
|
||||
CHKSIZE(ModelData, 9674);
|
||||
CHKSIZE(ModelData, 9734);
|
||||
#endif
|
||||
|
||||
#undef CHKSIZE
|
||||
|
|
|
@ -132,7 +132,6 @@ void menuModelSensor(event_t event)
|
|||
|
||||
case SENSOR_FIELD_UNIT:
|
||||
lcdDrawTextAlignedLeft(y, STR_UNIT);
|
||||
// TODO flash saving with editChoice where I copied those 2 lines?
|
||||
lcdDrawTextAtIndex(SENSOR_2ND_COLUMN, y, STR_VTELEMUNIT, sensor->unit, attr);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, sensor->unit, UNIT_MAX);
|
||||
|
|
|
@ -134,7 +134,6 @@ bool menuModelSensor(event_t event)
|
|||
|
||||
case SENSOR_FIELD_UNIT:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_UNIT);
|
||||
// TODO flash saving with editChoice where I copied those 2 lines?
|
||||
lcdDrawTextAtIndex(SENSOR_2ND_COLUMN, y, STR_VTELEMUNIT, sensor->unit, attr);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, sensor->unit, UNIT_MAX);
|
||||
|
|
|
@ -1510,6 +1510,7 @@ const luaR_value_entry opentxConstants[] = {
|
|||
{"UNIT_RADIANS", UNIT_RADIANS },
|
||||
{"UNIT_MILLILITERS", UNIT_MILLILITERS },
|
||||
{"UNIT_FLOZ", UNIT_FLOZ },
|
||||
{"UNIT_MILLILITERS_PER_MINUTE", UNIT_MILLILITERS_PER_MINUTE },
|
||||
{"UNIT_HOURS", UNIT_HOURS },
|
||||
{"UNIT_MINUTES", UNIT_MINUTES },
|
||||
{"UNIT_SECONDS", UNIT_SECONDS },
|
||||
|
|
|
@ -652,7 +652,7 @@ PACK(typedef struct {
|
|||
|
||||
MODELDATA_EXTRA_217
|
||||
|
||||
TelemetrySensor telemetrySensors[MAX_TELEMETRY_SENSORS_218];
|
||||
TelemetrySensor_218 telemetrySensors[MAX_TELEMETRY_SENSORS_218];
|
||||
|
||||
TARANIS_PCBX9E_FIELD(uint8_t toplcdTimer)
|
||||
}) ModelData_v217;
|
||||
|
|
|
@ -132,20 +132,34 @@ void convertModelData_218_to_219(ModelData &model)
|
|||
newModel.trainerData.pulsePol = oldModel.moduleData[NUM_MODULES].ppm.pulsePol;
|
||||
|
||||
#if defined(PCBHORUS) || defined(PCBTARANIS)
|
||||
memcpy(newModel.scriptsData, oldModel.scriptsData,
|
||||
memmove(newModel.scriptsData, oldModel.scriptsData,
|
||||
sizeof(newModel.scriptsData) +
|
||||
sizeof(newModel.inputNames) +
|
||||
sizeof(newModel.potsWarnEnabled) +
|
||||
sizeof(newModel.potsWarnPosition) +
|
||||
sizeof(oldModel.telemetrySensors));
|
||||
sizeof(newModel.potsWarnPosition));
|
||||
#else
|
||||
memcpy(newModel.inputNames, oldModel.inputNames,
|
||||
memmove(newModel.inputNames, oldModel.inputNames,
|
||||
sizeof(newModel.inputNames) +
|
||||
sizeof(newModel.potsWarnEnabled) +
|
||||
sizeof(newModel.potsWarnPosition) +
|
||||
sizeof(oldModel.telemetrySensors));
|
||||
sizeof(newModel.potsWarnPosition));
|
||||
#endif
|
||||
|
||||
for (uint8_t i=0; i<MAX_TELEMETRY_SENSORS_218; i++) {
|
||||
memmove(&newModel.telemetrySensors[i], &oldModel.telemetrySensors[i], 7);
|
||||
newModel.telemetrySensors[i].subId = oldModel.telemetrySensors[i].subId;
|
||||
newModel.telemetrySensors[i].type = oldModel.telemetrySensors[i].type;
|
||||
newModel.telemetrySensors[i].unit = oldModel.telemetrySensors[i].unit;
|
||||
if (newModel.telemetrySensors[i].unit >= UNIT_MILLILITERS_PER_MINUTE)
|
||||
newModel.telemetrySensors[i].unit += 11;
|
||||
newModel.telemetrySensors[i].prec = oldModel.telemetrySensors[i].prec;
|
||||
newModel.telemetrySensors[i].autoOffset = oldModel.telemetrySensors[i].autoOffset;
|
||||
newModel.telemetrySensors[i].filter = oldModel.telemetrySensors[i].filter;
|
||||
newModel.telemetrySensors[i].logs = oldModel.telemetrySensors[i].logs;
|
||||
newModel.telemetrySensors[i].persistent = oldModel.telemetrySensors[i].persistent;
|
||||
newModel.telemetrySensors[i].onlyPositive = oldModel.telemetrySensors[i].onlyPositive;
|
||||
memmove(((uint8_t *)&newModel.telemetrySensors[i]) + 10, ((uint8_t *)&oldModel.telemetrySensors[i]) + 9, 4);
|
||||
}
|
||||
|
||||
#if defined(PCBX9E)
|
||||
newModel.toplcdTimer = oldModel.toplcdTimer;
|
||||
#endif
|
||||
|
|
|
@ -338,6 +338,55 @@ PACK(struct FrSkyTelemetryData_v217 {
|
|||
#define MODELDATA_EXTRA_218
|
||||
#endif
|
||||
|
||||
PACK(struct TelemetrySensor_218 {
|
||||
union {
|
||||
uint16_t id; // data identifier, for FrSky we can reuse existing ones. Source unit is derived from type.
|
||||
uint16_t persistentValue;
|
||||
};
|
||||
union {
|
||||
PACK(struct {
|
||||
uint8_t physID:5;
|
||||
uint8_t rxIndex:3; // 1 bit for module index, 2 bits for receiver index
|
||||
}) frskyInstance;
|
||||
uint8_t instance;
|
||||
uint8_t formula;
|
||||
};
|
||||
char label[TELEM_LABEL_LEN]; // user defined label
|
||||
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 autoOffset:1;
|
||||
uint8_t filter:1;
|
||||
uint8_t logs:1;
|
||||
uint8_t persistent:1;
|
||||
uint8_t onlyPositive:1;
|
||||
uint8_t subId:3;
|
||||
union {
|
||||
PACK(struct {
|
||||
uint16_t ratio;
|
||||
int16_t offset;
|
||||
}) custom;
|
||||
PACK(struct {
|
||||
uint8_t source;
|
||||
uint8_t index;
|
||||
uint16_t spare;
|
||||
}) cell;
|
||||
PACK(struct {
|
||||
int8_t sources[4];
|
||||
}) calc;
|
||||
PACK(struct {
|
||||
uint8_t source;
|
||||
uint8_t spare[3];
|
||||
}) consumption;
|
||||
PACK(struct {
|
||||
uint8_t gps;
|
||||
uint8_t alt;
|
||||
uint16_t spare;
|
||||
}) dist;
|
||||
uint32_t param;
|
||||
};
|
||||
});
|
||||
|
||||
PACK(typedef struct {
|
||||
ModelHeader header;
|
||||
TimerData_v218 timers[MAX_TIMERS_218];
|
||||
|
@ -377,7 +426,7 @@ PACK(typedef struct {
|
|||
|
||||
MODELDATA_EXTRA_218
|
||||
|
||||
TelemetrySensor telemetrySensors[MAX_TELEMETRY_SENSORS_218];
|
||||
TelemetrySensor_218 telemetrySensors[MAX_TELEMETRY_SENSORS_218];
|
||||
|
||||
TARANIS_PCBX9E_FIELD(uint8_t toplcdTimer)
|
||||
|
||||
|
|
|
@ -75,9 +75,9 @@ const FrSkySportSensor sportSensors[] = {
|
|||
{ GASSUIT_SPEED_FIRST_ID, GASSUIT_SPEED_LAST_ID, 0, ZSTR_GASSUIT_RPM, UNIT_RPMS, 0 },
|
||||
{ GASSUIT_RES_VOL_FIRST_ID, GASSUIT_RES_VOL_LAST_ID, 0, ZSTR_GASSUIT_RES_VOL, UNIT_MILLILITERS, 0 },
|
||||
{ GASSUIT_RES_PERC_FIRST_ID, GASSUIT_RES_PERC_LAST_ID, 0, ZSTR_GASSUIT_RES_PERC, UNIT_PERCENT, 0 },
|
||||
{ GASSUIT_FLOW_FIRST_ID, GASSUIT_FLOW_LAST_ID, 0, ZSTR_GASSUIT_FLOW, UNIT_MILLILITERS, 0 }, //TODO this needs to be changed to ml/min, but need eeprom conversion
|
||||
{ GASSUIT_MAX_FLOW_FIRST_ID, GASSUIT_MAX_FLOW_LAST_ID, 0, ZSTR_GASSUIT_MAX_FLOW, UNIT_MILLILITERS, 0 }, //TODO this needs to be changed to ml/min, but need eeprom conversion
|
||||
{ GASSUIT_AVG_FLOW_FIRST_ID, GASSUIT_AVG_FLOW_LAST_ID, 0, ZSTR_GASSUIT_AVG_FLOW, UNIT_MILLILITERS, 0 }, //TODO this needs to be changed to ml/min, but need eeprom conversion
|
||||
{ GASSUIT_FLOW_FIRST_ID, GASSUIT_FLOW_LAST_ID, 0, ZSTR_GASSUIT_FLOW, UNIT_MILLILITERS_PER_MINUTE, 0 },
|
||||
{ GASSUIT_MAX_FLOW_FIRST_ID, GASSUIT_MAX_FLOW_LAST_ID, 0, ZSTR_GASSUIT_MAX_FLOW, UNIT_MILLILITERS_PER_MINUTE, 0 },
|
||||
{ GASSUIT_AVG_FLOW_FIRST_ID, GASSUIT_AVG_FLOW_LAST_ID, 0, ZSTR_GASSUIT_AVG_FLOW, UNIT_MILLILITERS_PER_MINUTE, 0 },
|
||||
{ SBEC_POWER_FIRST_ID, SBEC_POWER_LAST_ID, 0, ZSTR_SBEC_VOLTAGE, UNIT_VOLTS, 2 },
|
||||
{ SBEC_POWER_FIRST_ID, SBEC_POWER_LAST_ID, 1, ZSTR_SBEC_CURRENT, UNIT_AMPS, 2 },
|
||||
{ 0, 0, 0, NULL, UNIT_RAW, 0 } // sentinel
|
||||
|
|
|
@ -322,10 +322,10 @@
|
|||
#define LENGTH_UNIT_METR "m\0 "
|
||||
#define SPEED_UNIT_METR "kmh"
|
||||
|
||||
#define LEN_VUNITSSYSTEM TR("\006", "\010")
|
||||
#define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial")
|
||||
#define LEN_VTELEMUNIT "\003"
|
||||
#define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""rad""ml\0""fOz"
|
||||
#define LEN_VUNITSSYSTEM TR("\006", "\010")
|
||||
#define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial")
|
||||
#define LEN_VTELEMUNIT "\003"
|
||||
#define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""f/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""mW\0""dB\0""rpm""g\0 ""@\0 ""rad""ml\0""fOz""mlm"
|
||||
|
||||
#define STR_V (STR_VTELEMUNIT+1)
|
||||
#define STR_A (STR_VTELEMUNIT+4)
|
||||
|
@ -339,10 +339,10 @@
|
|||
#define LEN_VTELPROTO "\007"
|
||||
#define TR_VTELPROTO "None\0 ""Hub\0 ""WSHHigh"
|
||||
|
||||
#define LEN_AMPSRC TR("\003", "\005")
|
||||
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells")
|
||||
#define LEN_VOLTSRC TR("\003", "\005")
|
||||
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells")
|
||||
#define LEN_AMPSRC TR("\003", "\005")
|
||||
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells")
|
||||
#define LEN_VOLTSRC TR("\003", "\005")
|
||||
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells")
|
||||
|
||||
#define LEN_VARIOSRC "\004"
|
||||
#if defined(TELEMETRY_FRSKY_SPORT)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue