1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-19 14:25:09 +03:00

Add room for more telemetry units

This commit is contained in:
Bertrand Songis 2019-04-17 18:05:56 +02:00
parent 765b17f36b
commit dcc803c5af
10 changed files with 110 additions and 36 deletions

View file

@ -278,10 +278,13 @@ enum TelemetryUnit {
UNIT_METERS_PER_SECOND, UNIT_METERS_PER_SECOND,
UNIT_FEET_PER_SECOND, UNIT_FEET_PER_SECOND,
UNIT_KMH, UNIT_KMH,
UNIT_SPEED = UNIT_KMH,
UNIT_MPH, UNIT_MPH,
UNIT_METERS, UNIT_METERS,
UNIT_DIST = UNIT_METERS,
UNIT_FEET, UNIT_FEET,
UNIT_CELSIUS, UNIT_CELSIUS,
UNIT_TEMPERATURE = UNIT_CELSIUS,
UNIT_FAHRENHEIT, UNIT_FAHRENHEIT,
UNIT_PERCENT, UNIT_PERCENT,
UNIT_MAH, UNIT_MAH,
@ -294,6 +297,18 @@ enum TelemetryUnit {
UNIT_RADIANS, UNIT_RADIANS,
UNIT_MILLILITERS, UNIT_MILLILITERS,
UNIT_FLOZ, 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_HOURS,
UNIT_MINUTES, UNIT_MINUTES,
UNIT_SECONDS, UNIT_SECONDS,
@ -312,10 +327,6 @@ enum TelemetryUnit {
UNIT_DATETIME_HOUR_MIN, UNIT_DATETIME_HOUR_MIN,
UNIT_DATETIME_SEC 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 #if LCD_W >= 212
#define NUM_LINE_ITEMS 3 #define NUM_LINE_ITEMS 3

View file

@ -340,15 +340,16 @@ PACK(struct TelemetrySensor {
NOBACKUP(uint8_t formula); NOBACKUP(uint8_t formula);
}; };
char label[TELEM_LABEL_LEN]; // user defined label char label[TELEM_LABEL_LEN]; // user defined label
uint8_t type:1; // 0=custom / 1=calculated uint8_t subId;
uint8_t unit:5; // user can choose what unit to display each value in 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 prec:2;
uint8_t autoOffset:1; uint8_t autoOffset:1;
uint8_t filter:1; uint8_t filter:1;
uint8_t logs:1; uint8_t logs:1;
uint8_t persistent:1; uint8_t persistent:1;
uint8_t onlyPositive:1; uint8_t onlyPositive:1;
uint8_t subId:3; uint8_t spare:1;
union { union {
NOBACKUP(PACK(struct { NOBACKUP(PACK(struct {
uint16_t ratio; uint16_t ratio;
@ -898,7 +899,7 @@ static inline void check_struct()
#endif /* board specific ifdefs*/ #endif /* board specific ifdefs*/
CHKSIZE(LogicalSwitchData, 9); CHKSIZE(LogicalSwitchData, 9);
CHKSIZE(TelemetrySensor, 13); CHKSIZE(TelemetrySensor, 14);
CHKSIZE(ModuleData, 29); CHKSIZE(ModuleData, 29);
CHKSIZE(GVarData, 7); CHKSIZE(GVarData, 7);
CHKSIZE(RssiAlarmData, 2); CHKSIZE(RssiAlarmData, 2);
@ -906,25 +907,25 @@ static inline void check_struct()
#if defined(PCBXLITES) #if defined(PCBXLITES)
CHKSIZE(RadioData, 860); CHKSIZE(RadioData, 860);
CHKSIZE(ModelData, 6117); CHKSIZE(ModelData, 6157);
#elif defined(PCBXLITE) #elif defined(PCBXLITE)
CHKSIZE(RadioData, 852); CHKSIZE(RadioData, 852);
CHKSIZE(ModelData, 6117); CHKSIZE(ModelData, 6157);
#elif defined(PCBX7) #elif defined(PCBX7)
CHKSIZE(RadioData, 858); CHKSIZE(RadioData, 858);
CHKSIZE(ModelData, 6117); CHKSIZE(ModelData, 6157);
#elif defined(PCBX9E) #elif defined(PCBX9E)
CHKSIZE(RadioData, 960); CHKSIZE(RadioData, 960);
CHKSIZE(ModelData, 6554); CHKSIZE(ModelData, 6614);
#elif defined(PCBX9D) || defined(PCBX9DP) #elif defined(PCBX9D) || defined(PCBX9DP)
CHKSIZE(RadioData, 880); CHKSIZE(RadioData, 880);
CHKSIZE(ModelData, 6541); CHKSIZE(ModelData, 6601);
#elif defined(PCBSKY9X) #elif defined(PCBSKY9X)
CHKSIZE(RadioData, 735); CHKSIZE(RadioData, 735);
CHKSIZE(ModelData, 5279); CHKSIZE(ModelData, 5319);
#elif defined(PCBHORUS) #elif defined(PCBHORUS)
CHKSIZE(RadioData, 855); CHKSIZE(RadioData, 855);
CHKSIZE(ModelData, 9674); CHKSIZE(ModelData, 9734);
#endif #endif
#undef CHKSIZE #undef CHKSIZE

View file

@ -132,7 +132,6 @@ void menuModelSensor(event_t event)
case SENSOR_FIELD_UNIT: case SENSOR_FIELD_UNIT:
lcdDrawTextAlignedLeft(y, STR_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); lcdDrawTextAtIndex(SENSOR_2ND_COLUMN, y, STR_VTELEMUNIT, sensor->unit, attr);
if (attr) { if (attr) {
CHECK_INCDEC_MODELVAR_ZERO(event, sensor->unit, UNIT_MAX); CHECK_INCDEC_MODELVAR_ZERO(event, sensor->unit, UNIT_MAX);

View file

@ -134,7 +134,6 @@ bool menuModelSensor(event_t event)
case SENSOR_FIELD_UNIT: case SENSOR_FIELD_UNIT:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_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); lcdDrawTextAtIndex(SENSOR_2ND_COLUMN, y, STR_VTELEMUNIT, sensor->unit, attr);
if (attr) { if (attr) {
CHECK_INCDEC_MODELVAR_ZERO(event, sensor->unit, UNIT_MAX); CHECK_INCDEC_MODELVAR_ZERO(event, sensor->unit, UNIT_MAX);

View file

@ -1510,6 +1510,7 @@ const luaR_value_entry opentxConstants[] = {
{"UNIT_RADIANS", UNIT_RADIANS }, {"UNIT_RADIANS", UNIT_RADIANS },
{"UNIT_MILLILITERS", UNIT_MILLILITERS }, {"UNIT_MILLILITERS", UNIT_MILLILITERS },
{"UNIT_FLOZ", UNIT_FLOZ }, {"UNIT_FLOZ", UNIT_FLOZ },
{"UNIT_MILLILITERS_PER_MINUTE", UNIT_MILLILITERS_PER_MINUTE },
{"UNIT_HOURS", UNIT_HOURS }, {"UNIT_HOURS", UNIT_HOURS },
{"UNIT_MINUTES", UNIT_MINUTES }, {"UNIT_MINUTES", UNIT_MINUTES },
{"UNIT_SECONDS", UNIT_SECONDS }, {"UNIT_SECONDS", UNIT_SECONDS },

View file

@ -652,7 +652,7 @@ PACK(typedef struct {
MODELDATA_EXTRA_217 MODELDATA_EXTRA_217
TelemetrySensor telemetrySensors[MAX_TELEMETRY_SENSORS_218]; TelemetrySensor_218 telemetrySensors[MAX_TELEMETRY_SENSORS_218];
TARANIS_PCBX9E_FIELD(uint8_t toplcdTimer) TARANIS_PCBX9E_FIELD(uint8_t toplcdTimer)
}) ModelData_v217; }) ModelData_v217;

View file

@ -132,20 +132,34 @@ void convertModelData_218_to_219(ModelData &model)
newModel.trainerData.pulsePol = oldModel.moduleData[NUM_MODULES].ppm.pulsePol; newModel.trainerData.pulsePol = oldModel.moduleData[NUM_MODULES].ppm.pulsePol;
#if defined(PCBHORUS) || defined(PCBTARANIS) #if defined(PCBHORUS) || defined(PCBTARANIS)
memcpy(newModel.scriptsData, oldModel.scriptsData, memmove(newModel.scriptsData, oldModel.scriptsData,
sizeof(newModel.scriptsData) + sizeof(newModel.scriptsData) +
sizeof(newModel.inputNames) + sizeof(newModel.inputNames) +
sizeof(newModel.potsWarnEnabled) + sizeof(newModel.potsWarnEnabled) +
sizeof(newModel.potsWarnPosition) + sizeof(newModel.potsWarnPosition));
sizeof(oldModel.telemetrySensors));
#else #else
memcpy(newModel.inputNames, oldModel.inputNames, memmove(newModel.inputNames, oldModel.inputNames,
sizeof(newModel.inputNames) + sizeof(newModel.inputNames) +
sizeof(newModel.potsWarnEnabled) + sizeof(newModel.potsWarnEnabled) +
sizeof(newModel.potsWarnPosition) + sizeof(newModel.potsWarnPosition));
sizeof(oldModel.telemetrySensors));
#endif #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) #if defined(PCBX9E)
newModel.toplcdTimer = oldModel.toplcdTimer; newModel.toplcdTimer = oldModel.toplcdTimer;
#endif #endif

View file

@ -338,6 +338,55 @@ PACK(struct FrSkyTelemetryData_v217 {
#define MODELDATA_EXTRA_218 #define MODELDATA_EXTRA_218
#endif #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 { PACK(typedef struct {
ModelHeader header; ModelHeader header;
TimerData_v218 timers[MAX_TIMERS_218]; TimerData_v218 timers[MAX_TIMERS_218];
@ -377,7 +426,7 @@ PACK(typedef struct {
MODELDATA_EXTRA_218 MODELDATA_EXTRA_218
TelemetrySensor telemetrySensors[MAX_TELEMETRY_SENSORS_218]; TelemetrySensor_218 telemetrySensors[MAX_TELEMETRY_SENSORS_218];
TARANIS_PCBX9E_FIELD(uint8_t toplcdTimer) TARANIS_PCBX9E_FIELD(uint8_t toplcdTimer)

View file

@ -75,9 +75,9 @@ const FrSkySportSensor sportSensors[] = {
{ GASSUIT_SPEED_FIRST_ID, GASSUIT_SPEED_LAST_ID, 0, ZSTR_GASSUIT_RPM, UNIT_RPMS, 0 }, { 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_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_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_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, 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_PER_MINUTE, 0 },
{ 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_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, 0, ZSTR_SBEC_VOLTAGE, UNIT_VOLTS, 2 },
{ SBEC_POWER_FIRST_ID, SBEC_POWER_LAST_ID, 1, ZSTR_SBEC_CURRENT, UNIT_AMPS, 2 }, { SBEC_POWER_FIRST_ID, SBEC_POWER_LAST_ID, 1, ZSTR_SBEC_CURRENT, UNIT_AMPS, 2 },
{ 0, 0, 0, NULL, UNIT_RAW, 0 } // sentinel { 0, 0, 0, NULL, UNIT_RAW, 0 } // sentinel

View file

@ -322,10 +322,10 @@
#define LENGTH_UNIT_METR "m\0 " #define LENGTH_UNIT_METR "m\0 "
#define SPEED_UNIT_METR "kmh" #define SPEED_UNIT_METR "kmh"
#define LEN_VUNITSSYSTEM TR("\006", "\010") #define LEN_VUNITSSYSTEM TR("\006", "\010")
#define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial")
#define LEN_VTELEMUNIT "\003" #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 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_V (STR_VTELEMUNIT+1)
#define STR_A (STR_VTELEMUNIT+4) #define STR_A (STR_VTELEMUNIT+4)
@ -339,10 +339,10 @@
#define LEN_VTELPROTO "\007" #define LEN_VTELPROTO "\007"
#define TR_VTELPROTO "None\0 ""Hub\0 ""WSHHigh" #define TR_VTELPROTO "None\0 ""Hub\0 ""WSHHigh"
#define LEN_AMPSRC TR("\003", "\005") #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 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 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 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" #define LEN_VARIOSRC "\004"
#if defined(TELEMETRY_FRSKY_SPORT) #if defined(TELEMETRY_FRSKY_SPORT)