diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index a9799200b..68aeac48e 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -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 diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 2c4c44069..0c717c408 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -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 diff --git a/radio/src/gui/212x64/model_telemetry_sensor.cpp b/radio/src/gui/212x64/model_telemetry_sensor.cpp index 57be6d766..5ebfe5ae2 100644 --- a/radio/src/gui/212x64/model_telemetry_sensor.cpp +++ b/radio/src/gui/212x64/model_telemetry_sensor.cpp @@ -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); diff --git a/radio/src/gui/480x272/model_telemetry_sensor.cpp b/radio/src/gui/480x272/model_telemetry_sensor.cpp index 7aceeb792..f50aebd95 100644 --- a/radio/src/gui/480x272/model_telemetry_sensor.cpp +++ b/radio/src/gui/480x272/model_telemetry_sensor.cpp @@ -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); diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 998c02ce4..4a0a9f287 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -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 }, diff --git a/radio/src/storage/conversions/conversions_216_218.cpp b/radio/src/storage/conversions/conversions_216_218.cpp index 6fee1dd12..4c628a593 100644 --- a/radio/src/storage/conversions/conversions_216_218.cpp +++ b/radio/src/storage/conversions/conversions_216_218.cpp @@ -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; diff --git a/radio/src/storage/conversions/conversions_218_219.cpp b/radio/src/storage/conversions/conversions_218_219.cpp index 00f9aff11..84480c32e 100644 --- a/radio/src/storage/conversions/conversions_218_219.cpp +++ b/radio/src/storage/conversions/conversions_218_219.cpp @@ -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= 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 diff --git a/radio/src/storage/conversions/datastructs_218.h b/radio/src/storage/conversions/datastructs_218.h index 275003336..c456d6ac0 100644 --- a/radio/src/storage/conversions/datastructs_218.h +++ b/radio/src/storage/conversions/datastructs_218.h @@ -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) diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index da05316a5..15d4ea308 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -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 diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index b95aa1225..cc51b591d 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -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)