diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index f72721f79..052b5a176 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -211,21 +211,31 @@ QString RotaryEncoderString(int index) QString RawSource::toString() { - static const QString trims[] = { QObject::tr("TrmR"), QObject::tr("TrmE"), QObject::tr("TrmT"), QObject::tr("TrmA")}; + static const QString trims[] = { + QObject::tr("TrmR"), QObject::tr("TrmE"), QObject::tr("TrmT"), QObject::tr("TrmA") + }; - static const QString telemetry[] = { QObject::tr("Batt"), QObject::tr("Timer1"), QObject::tr("Timer2"), - (IS_TARANIS(GetEepromInterface()->getBoard()) ? QObject::tr("SWR") : QObject::tr("Tx")), (IS_TARANIS(GetEepromInterface()->getBoard()) ? QObject::tr("RSSI") : QObject::tr("Rx")), QObject::tr("A1"), QObject::tr("A2"), QObject::tr("Alt"), QObject::tr("Rpm"), QObject::tr("Fuel"), QObject::tr("T1"), - QObject::tr("T2"), QObject::tr("Speed"), QObject::tr("Dist"), QObject::tr("GPS Alt"), QObject::tr("Cell"), QObject::tr("Cels"), QObject::tr("Vfas"), QObject::tr("Curr"), - QObject::tr("Cnsp"), QObject::tr("Powr"), QObject::tr("AccX"), QObject::tr("AccY"), QObject::tr("AccZ"), QObject::tr("HDG "), QObject::tr("VSpd"), QObject::tr("ASpd"), QObject::tr("dTE"), - QObject::tr("A1-"), QObject::tr("A2-"), QObject::tr("Alt-"), QObject::tr("Alt+"), QObject::tr("Rpm+"), QObject::tr("T1+"), QObject::tr("T2+"), QObject::tr("Spd+"), QObject::tr("Dst+"), QObject::tr("Cel-"), QObject::tr("Vfs-"), QObject::tr("Cur+"), QObject::tr("Pwr+"), - QObject::tr("ACC "), QObject::tr("Time"), - }; + static const QString telemetry[] = { + QObject::tr("Batt"), QObject::tr("Timer1"), QObject::tr("Timer2"), + QObject::tr("SWR"), QObject::tr("RSSI Tx"), QObject::tr("RSSI Rx"), QObject::tr("Rx Batt"), + QObject::tr("A1"), QObject::tr("A2"), QObject::tr("A3"), QObject::tr("A4"), + QObject::tr("Alt"), QObject::tr("Rpm"), QObject::tr("Fuel"), QObject::tr("T1"), QObject::tr("T2"), + QObject::tr("Speed"), QObject::tr("Dist"), QObject::tr("GPS Alt"), + QObject::tr("Cell"), QObject::tr("Cels"), QObject::tr("Vfas"), QObject::tr("Curr"), QObject::tr("Cnsp"), QObject::tr("Powr"), + QObject::tr("AccX"), QObject::tr("AccY"), QObject::tr("AccZ"), + QObject::tr("HDG "), QObject::tr("VSpd"), QObject::tr("ASpd"), QObject::tr("dTE"), + QObject::tr("A1-"), QObject::tr("A2-"), QObject::tr("A3-"), QObject::tr("A4-"), + QObject::tr("Alt-"), QObject::tr("Alt+"), QObject::tr("Rpm+"), QObject::tr("T1+"), QObject::tr("T2+"), QObject::tr("Spd+"), QObject::tr("Dst+"), + QObject::tr("Cel-"), QObject::tr("Cels-"), QObject::tr("Vfs-"), QObject::tr("Cur+"), QObject::tr("Pwr+"), + QObject::tr("ACC"), QObject::tr("Time"), + }; - static const QString virtualSwitches[] = { QObject::tr("LS1"), QObject::tr("LS2"), QObject::tr("LS3"), QObject::tr("LS4"), QObject::tr("LS5"), QObject::tr("LS6"), QObject::tr("LS7"), QObject::tr("LS8"), QObject::tr("LS9"), QObject::tr("LSA"), - QObject::tr("LSB"), QObject::tr("LSC"), QObject::tr("LSD"), QObject::tr("LSE"), QObject::tr("LSF"), QObject::tr("LSG"), QObject::tr("LSH"), QObject::tr("LSI"), QObject::tr("LSJ"), QObject::tr("LSK"), - QObject::tr("LSL"), QObject::tr("LSM"), QObject::tr("LSN"), QObject::tr("LSO"), QObject::tr("LSP"), QObject::tr("LSQ"), QObject::tr("LSR"), QObject::tr("LSS"), QObject::tr("LST"), QObject::tr("LSU"), - QObject::tr("LSV"), QObject::tr("LSW") - }; + static const QString virtualSwitches[] = { + QObject::tr("LS1"), QObject::tr("LS2"), QObject::tr("LS3"), QObject::tr("LS4"), QObject::tr("LS5"), QObject::tr("LS6"), QObject::tr("LS7"), QObject::tr("LS8"), QObject::tr("LS9"), QObject::tr("LSA"), + QObject::tr("LSB"), QObject::tr("LSC"), QObject::tr("LSD"), QObject::tr("LSE"), QObject::tr("LSF"), QObject::tr("LSG"), QObject::tr("LSH"), QObject::tr("LSI"), QObject::tr("LSJ"), QObject::tr("LSK"), + QObject::tr("LSL"), QObject::tr("LSM"), QObject::tr("LSN"), QObject::tr("LSO"), QObject::tr("LSP"), QObject::tr("LSQ"), QObject::tr("LSR"), QObject::tr("LSS"), QObject::tr("LST"), QObject::tr("LSU"), + QObject::tr("LSV"), QObject::tr("LSW") + }; if (index<0) { return QObject::tr("----"); diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index a59d276cc..78ee98ff3 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -162,7 +162,7 @@ enum HeliSwashTypes { #define BOARD_X9D_NUM_POTS 4 #define C9X_NUM_POTS 4 #define NUM_CAL_PPM 4 -#define NUM_PPM 8 +#define NUM_PPM(board) (IS_ARM(board) ? 16 : 8) #define NUM_CYC 3 #define C9X_NUM_SWITCHES 10 #define C9X_NUM_KEYS 6 @@ -175,10 +175,14 @@ enum TelemetrySource { TELEMETRY_SOURCE_TX_BATT, TELEMETRY_SOURCE_TIMER1, TELEMETRY_SOURCE_TIMER2, + TELEMETRY_SOURCE_SWR, TELEMETRY_SOURCE_RSSI_TX, TELEMETRY_SOURCE_RSSI_RX, + TELEMETRY_SOURCE_RX_BATT, TELEMETRY_SOURCE_A1, TELEMETRY_SOURCE_A2, + TELEMETRY_SOURCE_A3, + TELEMETRY_SOURCE_A4, TELEMETRY_SOURCE_ALT, TELEMETRY_SOURCE_RPM, TELEMETRY_SOURCE_FUEL, @@ -202,6 +206,8 @@ enum TelemetrySource { TELEMETRY_SOURCE_DTE, TELEMETRY_SOURCE_A1_MIN, TELEMETRY_SOURCE_A2_MIN, + TELEMETRY_SOURCE_A3_MIN, + TELEMETRY_SOURCE_A4_MIN, TELEMETRY_SOURCE_ALT_MIN, TELEMETRY_SOURCE_ALT_MAX, TELEMETRY_SOURCE_RPM_MAX, @@ -210,14 +216,15 @@ enum TelemetrySource { TELEMETRY_SOURCE_SPEED_MAX, TELEMETRY_SOURCE_DIST_MAX, TELEMETRY_SOURCE_CELL_MIN, + TELEMETRY_SOURCE_CELLS_MIN, TELEMETRY_SOURCE_VFAS_MIN, TELEMETRY_SOURCE_POWER_MAX, TELEMETRY_SOURCE_ACC, TELEMETRY_SOURCE_GPS_TIME, - TELEMETRY_SOURCES_STATUS_COUNT, - TELEMETRY_SOURCES_DISPLAY_COUNT = TELEMETRY_SOURCES_STATUS_COUNT-2, - - TELEMETRY_SOURCES_COUNT = TELEMETRY_SOURCE_VERTICAL_SPEED, + TELEMETRY_SOURCES_STATUS_COUNT = TELEMETRY_SOURCE_GPS_TIME+1, + TELEMETRY_SOURCES_DISPLAY_COUNT = TELEMETRY_SOURCE_POWER_MAX+1, + TELEMETRY_SOURCES_COUNT = TELEMETRY_SOURCE_DTE+1, + TELEMETRY_SOURCE_RESERVE = -1 }; #define TM_HASTELEMETRY 0x01 @@ -662,7 +669,8 @@ enum AssignFunc { FuncBackgroundMusicPause, FuncAdjustGV1, FuncAdjustGVLast = FuncAdjustGV1+C9X_MAX_GVARS-1, - FuncCount + FuncCount, + FuncReserve = -1 }; class FuncSwData { // Function Switches data diff --git a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp index 01a7a01b2..36b6229ac 100644 --- a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp +++ b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp @@ -268,11 +268,11 @@ t_Open9xArmMixData_v208::operator MixData () else if (srcRaw <= 9+9+O9X_ARM_NUM_CSW+NUM_CYC) { c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-10-9-O9X_ARM_NUM_CSW); } - else if (srcRaw <= 9+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM) { + else if (srcRaw <= 9+9+O9X_ARM_NUM_CSW+NUM_CYC+8) { c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-10-9-O9X_ARM_NUM_CSW-NUM_CYC); } else { - c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-10-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM); + c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-10-9-O9X_ARM_NUM_CSW-NUM_CYC-8); } c9x.weight = weight; c9x.swtch = open9xArmToSwitch(swtch); @@ -334,11 +334,11 @@ t_Open9xArmMixData_v209::operator MixData () else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC) { c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-14-9-O9X_ARM_NUM_CSW); } - else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM) { + else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC+8) { c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC); } else { - c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM); + c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-8); } c9x.weight = weight; @@ -400,11 +400,11 @@ t_Open9xArmMixData_v210::operator MixData () else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC) { c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-14-9-O9X_ARM_NUM_CSW); } - else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM) { + else if (srcRaw <= 13+9+O9X_ARM_NUM_CSW+NUM_CYC+8) { c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC); } else { - c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM); + c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-14-9-O9X_ARM_NUM_CSW-NUM_CYC-8); } c9x.weight = weight; @@ -470,11 +470,11 @@ t_Open9xArmMixData_v212::operator MixData () else if (srcRaw <= 14+9+O9X_ARM_NUM_CSW+NUM_CYC) { c9x.srcRaw = RawSource(SOURCE_TYPE_CYC, srcRaw-15-9-O9X_ARM_NUM_CSW); } - else if (srcRaw <= 14+9+O9X_ARM_NUM_CSW+NUM_CYC+NUM_PPM) { + else if (srcRaw <= 14+9+O9X_ARM_NUM_CSW+NUM_CYC+8) { c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-15-9-O9X_ARM_NUM_CSW-NUM_CYC); } else { - c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-15-9-O9X_ARM_NUM_CSW-NUM_CYC-NUM_PPM); + c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-15-9-O9X_ARM_NUM_CSW-NUM_CYC-8); } c9x.weight = weight; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 8090aaf33..5be9f0917 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -23,6 +23,7 @@ #define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? (version >= 216 ? 64 : 32) : (IS_DBLEEPROM(board, version) ? 24 : 16)) #define MAX_CURVES(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 32 : 16) : O9X_MAX_CURVES) #define MAX_GVARS(board, version) ((IS_ARM(board) && version >= 216) ? 9 : 5) +#define NUM_PPM_INPUTS(board, version) ((IS_ARM(board) && version >= 216) ? 16 : 8) #define IS_AFTER_RELEASE_21_MARCH_2013(board, version) (version >= 214 || (!IS_ARM(board) && version >= 213)) #define IS_AFTER_RELEASE_23_MARCH_2013(board, version) (version >= 214 || (board==BOARD_STOCK && version >= 213)) @@ -218,7 +219,7 @@ class SourcesConversionTable: public ConversionTable { addConversion(RawSource(SOURCE_TYPE_CYC, i), val++); } - for (int i=0; i<8; i++) + for (int i=0; i= 216 && IS_ARM(board)) { + if (i==TELEMETRY_SOURCE_DTE) + val += 5; + if (i==TELEMETRY_SOURCE_POWER_MAX) + val += 5; + } } } } @@ -314,6 +318,103 @@ class SwitchField: public ConversionField< SignedField > { int _switch; }; +class TelemetrySourcesConversionTable: public ConversionTable { + + public: + TelemetrySourcesConversionTable(BoardEnum board, unsigned int version) + { + int val = 0; + + if (IS_AFTER_RELEASE_21_MARCH_2013(board, version)) { + addConversion(0, val++); + } + + addConversion(1+TELEMETRY_SOURCE_TX_BATT, val++); + addConversion(1+TELEMETRY_SOURCE_TIMER1, val++); + addConversion(1+TELEMETRY_SOURCE_TIMER2, val++); + if (IS_ARM(board) && version >= 216) + addConversion(1+TELEMETRY_SOURCE_SWR, val++); + addConversion(1+TELEMETRY_SOURCE_RSSI_TX, val++); + addConversion(1+TELEMETRY_SOURCE_RSSI_RX, val++); + if (IS_ARM(board) && version >= 216) + addConversion(1+TELEMETRY_SOURCE_RX_BATT, val++); + addConversion(1+TELEMETRY_SOURCE_A1, val++); + addConversion(1+TELEMETRY_SOURCE_A2, val++); + if (IS_ARM(board) && version >= 216) { + addConversion(1+TELEMETRY_SOURCE_A3, val++); + addConversion(1+TELEMETRY_SOURCE_A4, val++); + } + addConversion(1+TELEMETRY_SOURCE_ALT, val++); + addConversion(1+TELEMETRY_SOURCE_RPM, val++); + addConversion(1+TELEMETRY_SOURCE_FUEL, val++); + addConversion(1+TELEMETRY_SOURCE_T1, val++); + addConversion(1+TELEMETRY_SOURCE_T2, val++); + addConversion(1+TELEMETRY_SOURCE_SPEED, val++); + addConversion(1+TELEMETRY_SOURCE_DIST, val++); + addConversion(1+TELEMETRY_SOURCE_GPS_ALT, val++); + addConversion(1+TELEMETRY_SOURCE_CELL, val++); + addConversion(1+TELEMETRY_SOURCE_CELLS_SUM, val++); + addConversion(1+TELEMETRY_SOURCE_VFAS, val++); + addConversion(1+TELEMETRY_SOURCE_CURRENT, val++); + addConversion(1+TELEMETRY_SOURCE_CONSUMPTION, val++); + addConversion(1+TELEMETRY_SOURCE_POWER, val++); + addConversion(1+TELEMETRY_SOURCE_ACCX, val++); + addConversion(1+TELEMETRY_SOURCE_ACCY, val++); + addConversion(1+TELEMETRY_SOURCE_ACCZ, val++); + addConversion(1+TELEMETRY_SOURCE_HDG, val++); + addConversion(1+TELEMETRY_SOURCE_VERTICAL_SPEED, val++); + if (version >= 216) { + addConversion(1+TELEMETRY_SOURCE_ASPD, val++); + addConversion(1+TELEMETRY_SOURCE_DTE, val++); + } + if (IS_ARM(board) && version >= 216) { + for (int i=0; i<5; i++) + addConversion(1+TELEMETRY_SOURCE_RESERVE, val++); + } + addConversion(1+TELEMETRY_SOURCE_A1_MIN, val++); + addConversion(1+TELEMETRY_SOURCE_A2_MIN, val++); + if (IS_ARM(board) && version >= 216) { + addConversion(1+TELEMETRY_SOURCE_A3_MIN, val++); + addConversion(1+TELEMETRY_SOURCE_A4_MIN, val++); + } + addConversion(1+TELEMETRY_SOURCE_ALT_MIN, val++); + addConversion(1+TELEMETRY_SOURCE_ALT_MAX, val++); + addConversion(1+TELEMETRY_SOURCE_RPM_MAX, val++); + addConversion(1+TELEMETRY_SOURCE_T1_MAX, val++); + addConversion(1+TELEMETRY_SOURCE_T2_MAX, val++); + addConversion(1+TELEMETRY_SOURCE_SPEED_MAX, val++); + addConversion(1+TELEMETRY_SOURCE_DIST_MAX, val++); + addConversion(1+TELEMETRY_SOURCE_CELL_MIN, val++); + addConversion(1+TELEMETRY_SOURCE_VFAS_MIN, val++); + addConversion(1+TELEMETRY_SOURCE_POWER_MAX, val++); + if (IS_ARM(board) && version >= 216) { + for (int i=0; i<5; i++) + addConversion(1+TELEMETRY_SOURCE_RESERVE, val++); + } + addConversion(1+TELEMETRY_SOURCE_ACC, val++); + addConversion(1+TELEMETRY_SOURCE_GPS_TIME, val++); + } +}; + +template +class TelemetrySourceField: public ConversionField< UnsignedField > { + public: + TelemetrySourceField(unsigned int & source, BoardEnum board, unsigned int version): + ConversionField< UnsignedField >(source, &conversionTable, "Telemetry source"), + conversionTable(board, version), + source(source), + board(board), + version(version) + { + } + + protected: + TelemetrySourcesConversionTable conversionTable; + unsigned int & source; + BoardEnum board; + unsigned int version; +}; + template class SourceField: public ConversionField< UnsignedField > { public: @@ -1365,7 +1466,9 @@ class CustomFunctionsConversionTable: public ConversionTable { addConversion(FuncTrainerTHR, val++); addConversion(FuncTrainerAIL, val++); } + addConversion(FuncInstantTrim, val++); + if (version >= 216) { addConversion(FuncReset, val++); if (IS_ARM(board)) { @@ -1376,14 +1479,21 @@ class CustomFunctionsConversionTable: public ConversionTable { for (int i=0; i= 213 && !IS_ARM(board)) addConversion(FuncPlayBoth, val++); addConversion(FuncPlayValue, val++); if (IS_ARM(board)) { + addConversion(FuncReserve, val++); + addConversion(FuncReserve, val++); + addConversion(FuncReserve, val++); addConversion(FuncBackgroundMusic, val++); addConversion(FuncBackgroundMusicPause, val++); } @@ -1822,15 +1932,15 @@ class FrskyScreenField: public DataField { version(version) { for (int i=0; i<4; i++) { - bars.Append(new UnsignedField<8>(_screen.body.bars[i].source)); - bars.Append(new UnsignedField<8>(_screen.body.bars[i].barMin)); - bars.Append(new UnsignedField<8>(_screen.body.bars[i].barMax)); + bars.Append(new TelemetrySourceField<8>(screen.body.bars[i].source, board, version)); + bars.Append(new UnsignedField<8>(screen.body.bars[i].barMin)); + bars.Append(new UnsignedField<8>(screen.body.bars[i].barMax)); } int columns=(IS_TARANIS(board) ? 3:2); for (int i=0; i<4; i++) { for (int j=0; j(_screen.body.lines[i].source[j])); + numbers.Append(new TelemetrySourceField<8>(screen.body.lines[i].source[j], board, version)); } } if (!IS_TARANIS(board)) { @@ -1842,23 +1952,6 @@ class FrskyScreenField: public DataField { virtual void ExportBits(QBitArray & output) { - _screen = screen; - - bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version); - if (!afterrelease21March2013) { - for (int i=0; i<4; i++) { - if (_screen.body.bars[i].source > 0) - _screen.body.bars[i].source--; - } - int columns=(IS_TARANIS(board) ? 3:2); - for (int i=0; i<4; i++) { - for (int j=0; j 0) - _screen.body.lines[i].source[j]--; - } - } - } - if (screen.type == 0) numbers.ExportBits(output); else @@ -1867,34 +1960,14 @@ class FrskyScreenField: public DataField { virtual void ImportBits(QBitArray & input) { - _screen = screen; - - bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version); - // NOTA: screen.type should have been imported first! if (screen.type == 0) { numbers.ImportBits(input); - if (!afterrelease21March2013) { - int columns=(IS_TARANIS(board) ? 3:2); - for (int i=0; i<4; i++) { - for (int j=0; j 0) - _screen.body.lines[i].source[j]++; - } - } - } } else { bars.ImportBits(input); - if (!afterrelease21March2013) { - for (int i=0; i<4; i++) { - if (_screen.body.bars[i].source > 0) - _screen.body.bars[i].source++; - } - } } - screen = _screen; } virtual unsigned int size() @@ -1908,7 +1981,6 @@ class FrskyScreenField: public DataField { protected: FrSkyScreenData & screen; - FrSkyScreenData _screen; BoardEnum board; unsigned int version; StructField bars; diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index 17d908ecc..5c9ca7fbd 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -102,7 +102,7 @@ void populateCustomScreenFieldCB(QComboBox *b, unsigned int value, bool last=fal b->addItem(RawSource(SOURCE_TYPE_NONE, 0).toString()); - for (unsigned int i = 0; i < (last ? TELEMETRY_SOURCES_DISPLAY_COUNT : TELEMETRY_SOURCES_STATUS_COUNT); i++) { + for (unsigned int i = 0; i <= (last ? TELEMETRY_SOURCES_DISPLAY_COUNT : TELEMETRY_SOURCES_STATUS_COUNT); i++) { b->addItem(RawSource(SOURCE_TYPE_TELEMETRY, i).toString()); if (!(i>=sizeof(telem_hub)/sizeof(int) || telem_hub[i]==0 || ((telem_hub[i]>=hubproto) && hubproto!=0))) { QModelIndex index = b->model()->index(i, 0); @@ -599,7 +599,7 @@ void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData & if (item == source) b->setCurrentIndex(b->count()-1); } - for (int i=0; igetBoard()); i++) { item = RawSource(SOURCE_TYPE_PPM, i); b->addItem(item.toString(), item.toValue()); if (item == source) b->setCurrentIndex(b->count()-1); diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index 32ee65bed..a4d79de2a 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -235,6 +235,33 @@ void ConvertGeneralSettings_215_to_216(EEGeneral &settings) settings.chkSum = evalChkSum(); } +int ConvertTelemetrySource_215_to_216(int source) +{ + // TELEM_RSSI_TX added + if (source >= TELEM_RSSI_TX) + source += 1; + // RxBatt added + if (source >= TELEM_RX_VOLTAGE) + source += 1; + // A3 and A4 added + if (source >= TELEM_A3) + source += 2; + // ASpd and dTE added + 5 reserve + if (source >= TELEM_ASPD) + source += 7; + // A3 and A4 MIN added + if (source >= TELEM_MIN_A3) + source += 2; + // Cel- Cels- and Vfas- added + if (source >= TELEM_MIN_CELL) + source += 3; + // 5 reserve added + if (source >= TELEM_RESERVE6) + source += 5; + + return source; +} + #if defined(PCBTARANIS) int ConvertSource_215_to_216(int source, bool insertZero=false) { @@ -243,15 +270,15 @@ int ConvertSource_215_to_216(int source, bool insertZero=false) // Virtual Inputs and Lua Outputs added if (source > 0) source += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS; + // PPM9-PPM16 added + if (source > MIXSRC_FIRST_PPM+7) + source += 8; // 4 GVARS added if (source > MIXSRC_GVAR1+4) source += 4; - // ASpd and dTE added - if (source >= MIXSRC_FIRST_TELEM-1+TELEM_ASPD) - source += 2; - // Cel- and Vfas- added - if (source >= MIXSRC_FIRST_TELEM-1+TELEM_MIN_CELL) - source += 2; + // Telemetry conversions + if (source >= MIXSRC_FIRST_TELEM) + source = MIXSRC_FIRST_TELEM + ConvertTelemetrySource_215_to_216(source-MIXSRC_FIRST_TELEM+1) - 1; return source; } @@ -273,12 +300,10 @@ int ConvertSource_215_to_216(int source, bool insertZero=false) // 4 GVARS added if (source > MIXSRC_GVAR1+4) source += 4; - // ASpd and dTE added - if (source >= MIXSRC_FIRST_TELEM-1+TELEM_ASPD) - source += 2; - // Cel- and Vfas- added - if (source >= MIXSRC_FIRST_TELEM-1+TELEM_MIN_CELL) - source += 2; + // Telemetry conversions + if (source >= MIXSRC_FIRST_TELEM) + source = MIXSRC_FIRST_TELEM + ConvertTelemetrySource_215_to_216(source-MIXSRC_FIRST_TELEM+1) - 1; + return source; } @@ -637,6 +662,24 @@ void ConvertModel_215_to_216(ModelData &model) } memcpy(&g_model.frsky, &oldModel.frsky, sizeof(oldModel.frsky)); + for (int i=0; i<3; i++) { + if (g_model.frsky.screensType & (1<0) ? BLINK|INVERS : INVERS) : 0); switch(i) { case ITEM_HELI_SWASHTYPE: - g_model.swashR.type = selectMenuItem(HELI_PARAM_OFS, y, STR_SWASHTYPE, STR_VSWASHTYPE, g_model.swashR.type, 0, SWASH_TYPE_NUM, attr, event); + g_model.swashR.type = selectMenuItem(HELI_PARAM_OFS, y, STR_SWASHTYPE, STR_VSWASHTYPE, g_model.swashR.type, 0, SWASH_TYPE_MAX, attr, event); break; case ITEM_HELI_COLLECTIVE: @@ -5754,7 +5754,7 @@ void menuModelTelemetry(uint8_t event) if (attr && (s_editMode>0 || p1valdiff)) { switch (m_posHorz) { case 0: - bar.source = checkIncDecModel(event, barSource, 0, TELEM_DISPLAY_MAX); + bar.source = CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, barSource, TELEM_DISPLAY_MAX, isTelemetrySourceAvailable); if (checkIncDec_Ret) { bar.barMin = 0; bar.barMax = 255 - maxBarTelemValue(bar.source); @@ -5782,7 +5782,7 @@ void menuModelTelemetry(uint8_t event) #endif lcd_putsiAtt(pos[c], y, STR_VTELEMCHNS, value, cellAttr); if (cellAttr && (s_editMode>0 || p1valdiff)) { - CHECK_INCDEC_MODELVAR_ZERO(event, value, (lineIndex==3 && c==0) ? TELEM_STATUS_MAX : TELEM_DISPLAY_MAX); + CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, value, (lineIndex==3 && c==0) ? TELEM_STATUS_MAX : TELEM_DISPLAY_MAX, isTelemetrySourceAvailable); } } if (attr && m_posHorz == NUM_LINE_ITEMS) { diff --git a/radio/src/gui/menus.cpp b/radio/src/gui/menus.cpp index b062f8751..d73dde5ce 100644 --- a/radio/src/gui/menus.cpp +++ b/radio/src/gui/menus.cpp @@ -113,7 +113,7 @@ int16_t checkIncDec(uint8_t event, int16_t val, int16_t i_min, int16_t i_max, ui #endif { int16_t newval = val; - + #if defined(DBLKEYS) uint8_t in = KEYS_PRESSED(); if (EVT_KEY_MASK(event)) { @@ -1333,7 +1333,7 @@ void drawStatusLine() #endif #if defined(CPUARM) -bool isSourceAvailable(int16_t source) +bool isSourceAvailable(int source) { #if defined(PCBTARANIS) if (source>=MIXSRC_FIRST_INPUT && source<=MIXSRC_LAST_INPUT) { @@ -1376,10 +1376,35 @@ bool isSourceAvailable(int16_t source) return false; #endif + if (source>=MIXSRC_FIRST_TELEM && source<=MIXSRC_LAST_TELEM) + return isTelemetrySourceAvailable(source-MIXSRC_FIRST_TELEM+1); + return true; } -bool isInputSourceAvailable(int16_t source) +bool isTelemetrySourceAvailable(int source) +{ + if (source == TELEM_RX_VOLTAGE || source == TELEM_A3 || source == TELEM_A4 || source == TELEM_MIN_A3 || source == TELEM_MIN_A4) + return false; + +#if defined(PCBTARANIS) + if (source == TELEM_RSSI_TX) + return false; +#endif + + if (source >= TELEM_RESERVE1 && source <= TELEM_RESERVE5) + return false; + + if (source >= TELEM_RESERVE6 && source <= TELEM_RESERVE10) + return false; + + if (source == TELEM_DTE) + return false; + + return true; +} + +bool isInputSourceAvailable(int source) { if (source>=MIXSRC_Rud && source<=MIXSRC_MAX) return true; @@ -1391,12 +1416,12 @@ bool isInputSourceAvailable(int16_t source) return true; if (source>=MIXSRC_FIRST_TELEM && source<=MIXSRC_LAST_TELEM) - return true; + return isTelemetrySourceAvailable(source-MIXSRC_FIRST_TELEM+1); return false; } -bool isSwitchAvailableInLogicalSwitches(int16_t swtch) +bool isSwitchAvailableInLogicalSwitches(int swtch) { if (swtch < 0) { if (swtch <= -SWSRC_ON) @@ -1425,7 +1450,7 @@ bool isSwitchAvailableInLogicalSwitches(int16_t swtch) return true; } -bool isSwitchAvailable(int16_t swtch) +bool isSwitchAvailable(int swtch) { if (!isSwitchAvailableInLogicalSwitches(swtch)) { return false; @@ -1439,13 +1464,12 @@ bool isSwitchAvailable(int16_t swtch) return true; } -// Not available yet, will be needed if we implement the Range function later... -bool isLogicalSwitchFunctionAvailable(int16_t function) +bool isLogicalSwitchFunctionAvailable(int function) { return function != LS_FUNC_RANGE; } -bool isAssignableFunctionAvailable(int16_t function) +bool isAssignableFunctionAvailable(int function) { switch (function) { @@ -1459,6 +1483,14 @@ bool isAssignableFunctionAvailable(int16_t function) return false; #endif + case FUNC_PLAY_DIFF: + case FUNC_RESERVE1: + case FUNC_RESERVE2: + case FUNC_RESERVE3: + case FUNC_RESERVE4: + case FUNC_RESERVE5: + return false; + default: return true; } diff --git a/radio/src/gui/menus.h b/radio/src/gui/menus.h index fca197017..3ee37c250 100644 --- a/radio/src/gui/menus.h +++ b/radio/src/gui/menus.h @@ -171,7 +171,7 @@ extern int8_t s_editMode; // global editmode #define HIDDEN_ROW ((uint8_t)-2) #if defined(CPUARM) -typedef bool (*IsValueAvailable)(int16_t); +typedef bool (*IsValueAvailable)(int); int16_t checkIncDec(uint8_t event, int16_t i_pval, int16_t i_min, int16_t i_max, uint8_t i_flags=0, IsValueAvailable isValueAvailable=NULL); #else int16_t checkIncDec(uint8_t event, int16_t i_pval, int16_t i_min, int16_t i_max, uint8_t i_flags=0); @@ -194,10 +194,18 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max); var = checkIncDecModelZero(event,var,max) #if defined(CPUARM) - bool isLogicalSwitchFunctionAvailable(int16_t function); - bool isAssignableFunctionAvailable(int16_t function); - bool isSwitchAvailable(int16_t swtch); - bool isSwitchAvailableInLogicalSwitches(int16_t swtch); + #define CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, var, max, check) \ + var = checkIncDec(event, var, 0, max, EE_MODEL, check) +#else + #define CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, var, max, check) \ + CHECK_INCDEC_MODELVAR_ZERO(event, var, max) +#endif + +#if defined(CPUARM) + bool isLogicalSwitchFunctionAvailable(int function); + bool isAssignableFunctionAvailable(int function); + bool isSwitchAvailable(int swtch); + bool isSwitchAvailableInLogicalSwitches(int swtch); #define AUTOSWITCH_ENTER_LONG() (attr && event==EVT_KEY_LONG(KEY_ENTER)) #define CHECK_INCDEC_MODELSWITCH(event, var, min, max) \ var = checkIncDec(event,var,min,max,EE_MODEL|INCDEC_SWITCH|NO_INCDEC_MARKS, isSwitchAvailable) @@ -211,8 +219,9 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max); #endif #if defined(CPUARM) - bool isSourceAvailable(int16_t source); - bool isInputSourceAvailable(int16_t source); + bool isSourceAvailable(int source); + bool isTelemetrySourceAvailable(int source); + bool isInputSourceAvailable(int source); #define CHECK_INCDEC_MODELSOURCE(event, var, min, max) \ var = checkIncDec(event,var,min,max,EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable) #elif defined(AUTOSOURCE) diff --git a/radio/src/lcd.cpp b/radio/src/lcd.cpp index 85ef0a709..65c201968 100644 --- a/radio/src/lcd.cpp +++ b/radio/src/lcd.cpp @@ -1243,6 +1243,7 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, case TELEM_TX_VOLTAGE-1: case TELEM_VFAS-1: case TELEM_CELLS_SUM-1: + case TELEM_MIN_CELLS_SUM-1: case TELEM_MIN_VFAS-1: putsTelemetryValue(x, y, val, UNIT_VOLTS, att|PREC1); break; @@ -1269,6 +1270,9 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val, putsTelemetryValue(x, y, val, UNIT_RAW, att|PREC2); break; +#if defined(CPUARM) + case TELEM_SWR-1: +#endif case TELEM_RSSI_TX-1: case TELEM_RSSI_RX-1: putsTelemetryValue(x, y, val, UNIT_RAW, att); diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 3a1604c21..b3b5b7de5 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -77,6 +77,7 @@ #define NUM_CFN 64 // number of functions assigned to switches #define MAX_SCRIPTS 7 #define MAX_INPUTS 32 + #define NUM_PPM 16 #elif defined(CPUARM) #define MAX_MODELS 60 #define NUM_CHNOUT 32 // number of real output channels CH1-CH32 @@ -85,6 +86,7 @@ #define MAX_EXPOS 32 #define NUM_CSW 32 // number of custom switches #define NUM_CFN 64 // number of functions assigned to switches + #define NUM_PPM 16 #elif defined(CPUM2560) || defined(CPUM2561) #define MAX_MODELS 30 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -93,6 +95,7 @@ #define MAX_EXPOS 16 #define NUM_CSW 15 // number of custom switches #define NUM_CFN 24 // number of functions assigned to switches + #define NUM_PPM 8 #elif defined(CPUM128) #define MAX_MODELS 30 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -101,6 +104,7 @@ #define MAX_EXPOS 14 #define NUM_CSW 15 // number of custom switches #define NUM_CFN 24 // number of functions assigned to switches + #define NUM_PPM 8 #else #define MAX_MODELS 16 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -109,9 +113,12 @@ #define MAX_EXPOS 14 #define NUM_CSW 12 // number of custom switches #define NUM_CFN 16 // number of functions assigned to switches + #define NUM_PPM 8 #endif #define MAX_TIMERS 2 +#define NUM_CYC 3 +#define NUM_CAL_PPM 4 #if defined(PCBTARANIS) enum CurveType { @@ -755,6 +762,9 @@ enum Functions { FUNC_ADJUST_GVAR, #if defined(CPUARM) FUNC_VOLUME, + FUNC_RESERVE1, + FUNC_RESERVE2, + FUNC_RESERVE3, #endif // then the other functions @@ -766,6 +776,9 @@ enum Functions { #endif FUNC_PLAY_VALUE, #if defined(CPUARM) + FUNC_PLAY_DIFF, + FUNC_RESERVE4, + FUNC_RESERVE5, FUNC_BACKGND_MUSIC, FUNC_BACKGND_MUSIC_PAUSE, #endif @@ -954,10 +967,20 @@ enum TelemetrySource { TELEM_TX_VOLTAGE, TELEM_TM1, TELEM_TM2, +#if defined(CPUARM) + TELEM_SWR, +#endif TELEM_RSSI_TX, TELEM_RSSI_RX, +#if defined(CPUARM) + TELEM_RX_VOLTAGE, +#endif TELEM_A1, TELEM_A2, +#if defined(CPUARM) + TELEM_A3, + TELEM_A4, +#endif TELEM_ALT, TELEM_RPM, TELEM_FUEL, @@ -979,8 +1002,19 @@ enum TelemetrySource { TELEM_VSPD, TELEM_ASPD, TELEM_DTE, +#if defined(CPUARM) + TELEM_RESERVE1, + TELEM_RESERVE2, + TELEM_RESERVE3, + TELEM_RESERVE4, + TELEM_RESERVE5, +#endif TELEM_MIN_A1, TELEM_MIN_A2, +#if defined(CPUARM) + TELEM_MIN_A3, + TELEM_MIN_A4, +#endif TELEM_MIN_ALT, TELEM_MAX_ALT, TELEM_MAX_RPM, @@ -989,9 +1023,17 @@ enum TelemetrySource { TELEM_MAX_SPEED, TELEM_MAX_DIST, TELEM_MIN_CELL, + TELEM_MIN_CELLS_SUM, TELEM_MIN_VFAS, TELEM_MAX_CURRENT, TELEM_MAX_POWER, +#if defined(CPUARM) + TELEM_RESERVE6, + TELEM_RESERVE7, + TELEM_RESERVE8, + TELEM_RESERVE9, + TELEM_RESERVE10, +#endif TELEM_ACC, TELEM_GPS_TIME, TELEM_CSW_MAX = TELEM_MAX_POWER, @@ -1002,12 +1044,7 @@ enum TelemetrySource { TELEM_DISPLAY_MAX = TELEM_TM2, // because used also in PlayValue #endif TELEM_STATUS_MAX = TELEM_GPS_TIME, -#if defined(FRSKY_SPORT) - TELEM_SWR = TELEM_RSSI_TX, - TELEM_FIRST_STREAMED_VALUE = TELEM_RSSI_RX, -#else TELEM_FIRST_STREAMED_VALUE = TELEM_RSSI_TX, -#endif }; enum VarioSource { @@ -1126,6 +1163,14 @@ PACK(typedef struct t_MavlinkData { }) MavlinkData; #endif +enum SwashType { + SWASH_TYPE_120, + SWASH_TYPE_120X, + SWASH_TYPE_140, + SWASH_TYPE_90, + SWASH_TYPE_MAX = SWASH_TYPE_90 +}; + PACK(typedef struct t_SwashRingData { // Swash Ring data uint8_t invertELE:1; uint8_t invertAIL:1; @@ -1397,7 +1442,7 @@ enum MixSources { MIXSRC_LAST_CSW = MIXSRC_FIRST_CSW+NUM_CSW-1, MIXSRC_FIRST_PPM, - MIXSRC_LAST_PPM = MIXSRC_FIRST_PPM + 7, + MIXSRC_LAST_PPM = MIXSRC_FIRST_PPM+NUM_PPM-1, MIXSRC_FIRST_CH, MIXSRC_CH1 = MIXSRC_FIRST_CH, diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 9e3694ea9..96e19bfff 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1269,6 +1269,9 @@ getvalue_t getValue(uint8_t i) else if (i==MIXSRC_FIRST_TELEM-1+TELEM_TX_VOLTAGE) return g_vbat100mV; else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_TM2) return timersStates[i-MIXSRC_FIRST_TELEM+1-TELEM_TM1].val; #if defined(FRSKY) +#if defined(CPUARM) + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_SWR) return frskyData.swr.value; +#endif else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_TX) return frskyData.rssi[1].value; else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_RX) return frskyData.rssi[0].value; else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_A2) return frskyData.analog[i-MIXSRC_FIRST_TELEM+1-TELEM_A1].value; @@ -2001,6 +2004,9 @@ ls_telemetry_value_t minTelemValue(uint8_t channel) { switch (channel) { case TELEM_FUEL: +#if defined(CPUARM) + case TELEM_SWR: +#endif case TELEM_RSSI_TX: case TELEM_RSSI_RX: return 0; @@ -2020,6 +2026,9 @@ ls_telemetry_value_t maxTelemValue(uint8_t channel) { switch (channel) { case TELEM_FUEL: +#if defined(CPUARM) + case TELEM_SWR: +#endif case TELEM_RSSI_TX: case TELEM_RSSI_RX: return 100; @@ -3207,13 +3216,13 @@ PLAY_FUNCTION(playValue, uint8_t idx) case MIXSRC_FIRST_TELEM+TELEM_TM2-1: PLAY_DURATION(val); break; -#if defined(FRSKY) - case MIXSRC_FIRST_TELEM+TELEM_RSSI_TX-1: -#if defined(PCBTARANIS) - // On Taranis RSSI_TX is used for SWR +#if defined(CPUARM) + case MIXSRC_FIRST_TELEM+TELEM_SWR-1: PLAY_NUMBER(val, 0, 0); break; #endif +#if defined(FRSKY) + case MIXSRC_FIRST_TELEM+TELEM_RSSI_TX-1: case MIXSRC_FIRST_TELEM+TELEM_RSSI_RX-1: PLAY_NUMBER(val, 1+UNIT_DBM, 0); break; @@ -3244,6 +3253,7 @@ PLAY_FUNCTION(playValue, uint8_t idx) case MIXSRC_FIRST_TELEM+TELEM_VFAS-1: case MIXSRC_FIRST_TELEM+TELEM_CELLS_SUM-1: + case MIXSRC_FIRST_TELEM+TELEM_MIN_CELLS_SUM-1: case MIXSRC_FIRST_TELEM+TELEM_MIN_VFAS-1: PLAY_NUMBER(val, 1+UNIT_VOLTS, PREC1); break; @@ -4865,10 +4875,10 @@ void perMain() #endif } } -} //endfunc void perMain() +} -int16_t g_ppmIns[8]; -uint8_t ppmInState = 0; //0=unsync 1..8= wait for value i-1 +int16_t g_ppmIns[NUM_PPM]; +uint8_t ppmInState = 0; // 0=unsync 1..8= wait for value i-1 #if !defined(SIMU) && !defined(CPUARM) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 4b8da9dbe..0ee4b3bf1 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -622,16 +622,6 @@ enum BaseCurves { CURVE_BASE }; -#define SWASH_TYPE_120 1 -#define SWASH_TYPE_120X 2 -#define SWASH_TYPE_140 3 -#define SWASH_TYPE_90 4 -#define SWASH_TYPE_NUM 4 - -#define NUM_CYC 3 -#define NUM_CAL_PPM 4 -#define NUM_PPM 8 - #define THRCHK_DEADBAND 16 #if defined(FSPLASH) || defined(XSPLASH) @@ -1205,7 +1195,7 @@ extern uint8_t g_beepCnt; extern uint8_t g_beepVal[5]; extern uint8_t ppmInState; //0=unsync 1..8= wait for value i-1 -extern int16_t g_ppmIns[8]; +extern int16_t g_ppmIns[NUM_PPM]; extern int32_t chans[NUM_CHNOUT]; extern int16_t ex_chans[NUM_CHNOUT]; // Outputs (before LIMITS) of the last perMain extern int16_t channelOutputs[NUM_CHNOUT]; diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 8e2a4bda2..d92a6bd7d 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -700,6 +700,9 @@ void telemetryInterrupt10ms() voltage += frskyData.hub.cellVolts[i]; voltage /= 5; frskyData.hub.cellsSum = voltage; + if (frskyData.hub.cellsSum < frskyData.hub.minCells) { + frskyData.hub.minCells = frskyData.hub.cellsSum; + } #endif if (TELEMETRY_STREAMING()) { diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 5acce01ac..c0b9985bf 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -140,6 +140,7 @@ PACK(struct FrskySerialData { uint16_t maxGpsSpeed; uint16_t maxGpsDistance; int16_t minCell; + int16_t minCells; int16_t minVfas; uint16_t maxCurrent; uint16_t maxPower; @@ -187,6 +188,9 @@ PACK(struct FrskySerialData { struct FrskyData { FrskyValueWithMinMax analog[2]; FrskyValueWithMin rssi[2]; +#if defined(CPUARM) + FrskyValueWithMinMax swr; +#endif FrskySerialData hub; }; diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index 646dd2246..c3bd2427c 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -323,7 +323,7 @@ void processSportPacket(uint8_t *packet) frskyData.rssi[0].set(SPORT_DATA_U8(packet)); } if (appId == SWR_ID) { - frskyData.rssi[1].set(SPORT_DATA_U8(packet)); + frskyData.swr.set(SPORT_DATA_U8(packet)); } else if (appId == ADC1_ID || appId == ADC2_ID) { // A1/A2 of DxR receivers @@ -577,6 +577,9 @@ void telemetryInterrupt10ms() voltage += frskyData.hub.cellVolts[i]; voltage /= 10; frskyData.hub.cellsSum = voltage; + if (frskyData.hub.cellsSum < frskyData.hub.minCells) { + frskyData.hub.minCells = frskyData.hub.cellsSum; + } #endif if (TELEMETRY_STREAMING()) { @@ -667,7 +670,7 @@ void telemetryWakeup() alarmsCheckTime = get_tmr10ms() + 100; /* next check in 1second */ if (alarmsCheckStep == 0) { - if ((IS_MODULE_XJT(0) || IS_MODULE_XJT(1)) && frskyData.rssi[1].value > 0x33) { + if ((IS_MODULE_XJT(0) || IS_MODULE_XJT(1)) && frskyData.swr.value > 0x33) { AUDIO_SWR_RED(); s_global_warning = STR_ANTENNAPROBLEM; alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3seconds */ @@ -760,7 +763,7 @@ void resetTelemetry() frskyData.analog[0].set(120); frskyData.analog[1].set(240); frskyData.rssi[0].value = 75; - frskyData.rssi[1].value = 30; + frskyData.swr.value = 30; frskyData.hub.fuelLevel = 75; frskyData.hub.rpm = 12000; frskyData.hub.vfas = 100; diff --git a/radio/src/telemetry/frsky_sport.h b/radio/src/telemetry/frsky_sport.h index 4b39022a1..a59899cf7 100644 --- a/radio/src/telemetry/frsky_sport.h +++ b/radio/src/telemetry/frsky_sport.h @@ -124,6 +124,7 @@ PACK(struct FrskySerialData { uint16_t maxGpsSpeed; uint16_t maxGpsDistance; int16_t minCell; + int16_t minCells; int16_t minVfas; uint16_t maxCurrent; uint16_t maxPower; @@ -150,6 +151,7 @@ PACK(struct FrskySerialData { struct FrskyData { FrskyValueWithMinMax analog[2]; FrskyValueWithMinMax rssi[2]; + FrskyValueWithMinMax swr; FrskySerialData hub; }; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 407b0a513..4a6fba404 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -271,7 +271,7 @@ #define TR_RSSI_0 "Tx\0 " #define TR_RSSI_1 "Rx\0 " #endif -#define TR_VTELEMCHNS "---\0""Bat\0""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Vfs-""Cur+""Pwr+""Acc\0""Time" +#define TR_VTELEMCHNS "---\0""Bat\0""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Time" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index f30778dbd..5d99446cd 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -271,7 +271,7 @@ #define TR_RSSI_0 "Tx\0 " #define TR_RSSI_1 "Rx\0 " #endif -#define TR_VTELEMCHNS "---\0""Batt""Uhr1""Uhr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""H\203he""Umdr""Fuel""T1\0 ""T2\0 ""Gesc""Dist""GH\203h""Zell""Zels""Vfas""Strm""Verb""Leis""BesX""BesY""BesZ""Rich""VGes""ASpd""dTE\0""A1-\0""A2-\0""H\203h-""H\203h+""Umd+""T1+\0""T2+\0""Ges+""Dst+""Cel-""Vfs-""Str+""Pwr+""Besc""Zeit" +#define TR_VTELEMCHNS "---\0""Batt""Uhr1""Uhr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""H\203he""Umdr""Fuel""T1\0 ""T2\0 ""Gesc""Dist""GH\203h""Zell""Zels""Vfas""Strm""Verb""Leis""BesX""BesY""BesZ""Rich""VGes""ASpd""dTE\0""A1-\0""A2-\0""H\203h-""H\203h+""Umd+""T1+\0""T2+\0""Ges+""Dst+""Cel-""Cls-""Vfs-""Str+""Pwr+""Besc""Zeit" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 87229cb3b..32940a94e 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -234,8 +234,10 @@ #define TR_CFN_TEST #endif +#define TR_CFN_RESERVE "[reserve]\0" + #if defined(CPUARM) - #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST + #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_RESERVE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST #elif defined(PCBGRUVIN9X) #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST #else @@ -264,14 +266,22 @@ #define TR_FUNCSOUNDS TR("Bp1\0""Bp2\0""Bp3\0""Wrn1""Wrn2""Chee""Rata""Tick""Sirn""Ring""SciF""Robt""Chrp""Tada""Crck""Alrm", "Beep1 ""Beep2 ""Beep3 ""Warn1 ""Warn2 ""Cheep ""Ratata""Tick ""Siren ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""AlmClk") #define LEN_VTELEMCHNS "\004" -#if defined(PCBTARANIS) - #define TR_RSSI_0 "SWR\0" - #define TR_RSSI_1 "RSSI" + +#if defined(CPUARM) + #define TR_TELEM_RESERVE "[--]" + #define TR_SWR "SWR\0" + #define TR_RX_BATT "RxBt" + #define TR_A3_A4 "A3\0 ""A4\0 " + #define TR_A3_A4_MIN "A3-\0""A4-\0" #else - #define TR_RSSI_0 "Tx\0 " - #define TR_RSSI_1 "Rx\0 " + #define TR_TELEM_RESERVE + #define TR_SWR + #define TR_RX_BATT + #define TR_A3_A4 + #define TR_A3_A4_MIN #endif -#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Vfs-""Cur+""Pwr+""Acc\0""Time" + +#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_SWR "Tx\0 ""Rx\0 " TR_RX_BATT "A1\0 ""A2\0 " TR_A3_A4 "Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0" TR_A3_A4_MIN "Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Cls-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Time" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index c32e0c71c..44d96759a 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -271,7 +271,7 @@ #define TR_RSSI_0 "Tx\0 " #define TR_RSSI_1 "Rx\0 " #endif -#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Vfs-""Cur+""Pwr+""Acc\0""Hora" +#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Hora" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 3c5ea9eb5..6b1dea41a 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -271,7 +271,7 @@ #define TR_RSSI_0 "Tx\0 " #define TR_RSSI_1 "Rx\0 " #endif -#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Vfs-""Cel-""Vfs-""Cur+""Pwr+""Acc\0""Time" +#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Cls-""Vfs-""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Time" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 8f1b5c11e..47f278e30 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -271,7 +271,7 @@ #define TR_RSSI_0 "Tx\0 " #define TR_RSSI_1 "Rx\0 " #endif -#define TR_VTELEMCHNS "---\0""Batt""Chr1""Chr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Carb""T1\0 ""T2\0 ""Vit\0""Dist""AltG""Elem""Velm""Vfas""Cour""Cnsm""Puis""AccX""AccY""AccZ""Cap\0""VitV""VitA""dET\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vit+""Dst+""Elm-""Vfs-""Cur+""Pui+""Acc\0""Tmps" +#define TR_VTELEMCHNS "---\0""Batt""Chr1""Chr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Carb""T1\0 ""T2\0 ""Vit\0""Dist""AltG""Elem""Velm""Vfas""Cour""Cnsm""Puis""AccX""AccY""AccZ""Cap\0""VitV""VitA""dET\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vit+""Dst+""Elm-""Els-""Vfs-""Cur+""Pui+""Acc\0""Tmps" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\012") diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 9a27f9bb6..5b6857738 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -271,7 +271,7 @@ #define TR_RSSI_0 "Tx\0 " #define TR_RSSI_1 "Rx\0 " #endif -#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Carb""T1\0 ""T2\0 ""Vel\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsm""Powr""AccX""AccY""AccZ""Dir\0""VelV""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vel+""Dst+""Cel-""Vfs-""Cur+""Pwr+""Acc\0""Time" +#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Carb""T1\0 ""T2\0 ""Vel\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsm""Powr""AccX""AccY""AccZ""Dir\0""VelV""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vel+""Dst+""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Time" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\011") diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index fd9f6a01d..0a3bde330 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -271,7 +271,7 @@ #define TR_RSSI_0 "Tx\0 " #define TR_RSSI_1 "Rx\0 " #endif -#define TR_VTELEMCHNS "---\0""Bat\0""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Wys\0""Rpm\0""Pali""T1\0 ""T2\0 ""Spd\0""Dyst""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Moc\0""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Wys-""Wys+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Vfs-""Cur+""Moc+""Acc\0""Time" +#define TR_VTELEMCHNS "---\0""Bat\0""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Wys\0""Rpm\0""Pali""T1\0 ""T2\0 ""Spd\0""Dyst""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Moc\0""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Wys-""Wys+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Cls-""Vfs-""Cur+""Moc+""Acc\0""Time" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\012") diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index f72db245c..f831cf0a1 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -271,7 +271,7 @@ #define TR_RSSI_0 "Tx\0 " #define TR_RSSI_1 "Rx\0 " #endif -#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VVel""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vel+""Dst+""Cel-""Vfs-""Cur+""Pwr+""Acc\0""Hora" +#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VVel""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Vel+""Dst+""Cel-""Cls-""Vfs-""Cur+""Pwr+""Acc\0""Hora" #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010")