From 0c01f66272927f072b715f32db6bfaa87255148c Mon Sep 17 00:00:00 2001 From: bsongis Date: Tue, 26 May 2015 07:14:25 +0200 Subject: [PATCH] Fixes #2299 --- companion/src/eeprominterface.cpp | 2 +- companion/src/eeprominterface.h | 14 +-- .../firmwares/opentx/open9xGruvin9xeeprom.cpp | 21 ----- .../firmwares/opentx/open9xSky9xeeprom.cpp | 38 -------- .../firmwares/opentx/open9xStockeeprom.cpp | 33 +------ .../src/firmwares/opentx/opentxeeprom.cpp | 94 ++++++++++++++----- companion/src/helpers.cpp | 3 +- companion/src/helpers.h | 17 ++-- companion/src/modeledit/customfunctions.cpp | 6 +- companion/src/modeledit/expodialog.cpp | 2 +- companion/src/modeledit/heli.cpp | 6 +- companion/src/modeledit/logicalswitches.cpp | 6 +- companion/src/modeledit/mixerdialog.cpp | 2 +- companion/src/modeledit/telemetry.cpp | 44 ++++----- companion/src/modeledit/telemetry.h | 2 +- 15 files changed, 122 insertions(+), 168 deletions(-) diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index b8270f629..a9d62183e 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -423,7 +423,7 @@ QString RotaryEncoderString(int index) return CHECK_IN_ARRAY(rotary, index); } -QString RawSource::toString(const ModelData * model) +QString RawSource::toString(const ModelData * model) const { static const QString trims[] = { QObject::tr("TrmR"), QObject::tr("TrmE"), QObject::tr("TrmT"), QObject::tr("TrmA") diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index ce9d13c67..057978de5 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -316,7 +316,7 @@ class RawSource { { } - RawSource(int value): + explicit RawSource(int value): type(RawSourceType(abs(value)/65536)), index(value >= 0 ? abs(value)%65536 : -(abs(value)%65536)) { @@ -333,7 +333,7 @@ class RawSource { return index >= 0 ? (type * 65536 + index) : -(type * 65536 - index); } - QString toString(const ModelData * model = NULL); + QString toString(const ModelData * model = NULL) const; RawSourceRange getRange(const ModelData * model, const GeneralSettings & settings, unsigned int flags=0) const; @@ -692,13 +692,13 @@ class FrSkyChannelData { }; struct FrSkyBarData { - unsigned int source; - unsigned int barMin; // minimum for bar display - unsigned int barMax; // ditto for max display (would usually = ratio) + RawSource source; + unsigned int barMin; // minimum for bar display + unsigned int barMax; // ditto for max display (would usually = ratio) }; struct FrSkyLineData { - unsigned int source[3]; + RawSource source[3]; }; struct TelemetryScriptData { @@ -716,7 +716,7 @@ class FrSkyScreenData { public: FrSkyScreenData() { clear(); } - typedef union { + typedef struct { FrSkyBarData bars[4]; FrSkyLineData lines[4]; TelemetryScriptData script; diff --git a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp index 63df8e9d1..77ce0ee70 100644 --- a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp +++ b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.cpp @@ -502,13 +502,6 @@ t_Open9xGruvin9xModelData_v207::operator ModelData () c9x.moduleData[0].ppmFrameLength = ppmFrameLength; c9x.thrTraceSrc = thrTraceSrc; c9x.moduleData[0].modelId = modelId; - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - c9x.frsky.screens[1].body.lines[line].source[col] = (col==0 ? (frskyLines[line] & 0x0f) : ((frskyLines[line] & 0xf0) / 16)); - c9x.frsky.screens[1].body.lines[line].source[col] += (((frskyLinesXtra >> (4*line+2*col)) & 0x03) * 16); - } - } - return c9x; } @@ -588,16 +581,9 @@ t_Open9xGruvin9xModelData_v208::operator ModelData () c9x.moduleData[0].ppmFrameLength = ppmFrameLength; c9x.thrTraceSrc = thrTraceSrc; c9x.moduleData[0].modelId = modelId; - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - c9x.frsky.screens[1].body.lines[line].source[col] = (col==0 ? (frskyLines[line] & 0x0f) : ((frskyLines[line] & 0xf0) / 16)); - c9x.frsky.screens[1].body.lines[line].source[col] += (((frskyLinesXtra >> (4*line+2*col)) & 0x03) * 16); - } - } for (int i=0; i<16; i++) { c9x.limitData[i].ppmCenter = servoCenter[i]; } - return c9x; } @@ -678,16 +664,9 @@ t_Open9xGruvin9xModelData_v209::operator ModelData () c9x.moduleData[0].ppmFrameLength = ppmFrameLength; c9x.thrTraceSrc = thrTraceSrc; c9x.moduleData[0].modelId = modelId; - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - c9x.frsky.screens[1].body.lines[line].source[col] = (col==0 ? (frskyLines[line] & 0x0f) : ((frskyLines[line] & 0xf0) / 16)); - c9x.frsky.screens[1].body.lines[line].source[col] += (((frskyLinesXtra >> (4*line+2*col)) & 0x03) * 16); - } - } for (int i=0; i<16; i++) { c9x.limitData[i].ppmCenter = servoCenter[i]; } - return c9x; } diff --git a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp index 9f0ab590c..4122bd573 100644 --- a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp +++ b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp @@ -683,21 +683,8 @@ t_Open9xArmFrSkyData_v210::operator FrSkyData () c9x.blades = blades+2; c9x.currentSource=currentSource; c9x.screens[0].type = 1; - for (int i=0; i<4; i++) { - c9x.screens[0].body.bars[i].source = bars[i].source; - c9x.screens[0].body.bars[i].barMin = bars[i].barMin; - c9x.screens[0].body.bars[i].barMax = bars[i].barMax; - } c9x.rssiAlarms[0] = rssiAlarms[0].get(0); c9x.rssiAlarms[1] = rssiAlarms[1].get(1); - - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - int i=line*2+col; - c9x.screens[1].body.lines[line].source[col] = lines[i]; - } - } - return c9x; } @@ -711,21 +698,8 @@ t_Open9xArmFrSkyData_v211::operator FrSkyData () c9x.blades = blades+2; c9x.currentSource=currentSource; c9x.screens[0].type = 1; - for (int i=0; i<4; i++) { - c9x.screens[0].body.bars[i].source = bars[i].source; - c9x.screens[0].body.bars[i].barMin = bars[i].barMin; - c9x.screens[0].body.bars[i].barMax = bars[i].barMax; - } c9x.rssiAlarms[0] = rssiAlarms[0].get(0); c9x.rssiAlarms[1] = rssiAlarms[1].get(1); - - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - int i=line*2+col; - c9x.screens[1].body.lines[line].source[col] = lines[i]; - } - } - c9x.varioSource = varioSource; c9x.varioCenterMax = varioSpeedUpMin; c9x.varioCenterMin = varioSpeedDownMin; @@ -809,12 +783,6 @@ t_Open9xArmModelData_v208::operator ModelData () c9x.moduleData[0].ppmFrameLength = ppmFrameLength; c9x.thrTraceSrc = thrTraceSrc; c9x.moduleData[0].modelId = modelId; - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - c9x.frsky.screens[1].body.lines[line].source[col] = (col==0 ? (frskyLines[line] & 0x0f) : ((frskyLines[line] & 0xf0) / 16)); - c9x.frsky.screens[1].body.lines[line].source[col] += (((frskyLinesXtra >> (4*line+2*col)) & 0x03) * 16); - } - } for (int i=0; i<16; i++) { c9x.limitData[i].ppmCenter = servoCenter[i]; } @@ -899,12 +867,6 @@ t_Open9xArmModelData_v209::operator ModelData () c9x.moduleData[0].ppmFrameLength = ppmFrameLength; c9x.thrTraceSrc = thrTraceSrc; c9x.moduleData[0].modelId = modelId; - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - c9x.frsky.screens[1].body.lines[line].source[col] = (col==0 ? (frskyLines[line] & 0x0f) : ((frskyLines[line] & 0xf0) / 16)); - c9x.frsky.screens[1].body.lines[line].source[col] += (((frskyLinesXtra >> (4*line+2*col)) & 0x03) * 16); - } - } for (int i=0; i<16; i++) { c9x.limitData[i].ppmCenter = servoCenter[i]; } diff --git a/companion/src/firmwares/opentx/open9xStockeeprom.cpp b/companion/src/firmwares/opentx/open9xStockeeprom.cpp index 040d6ab07..bc510dc0a 100644 --- a/companion/src/firmwares/opentx/open9xStockeeprom.cpp +++ b/companion/src/firmwares/opentx/open9xStockeeprom.cpp @@ -24,8 +24,8 @@ int8_t char2idx(char c) if (c>='0' && c<='9') return 27+c-'0'; for (int8_t i=0;;i++) { char cc = specialCharsTab[i]; - if(cc==0) return 0; - if(cc==c) return 37+i; + if (cc==0) return 0; + if (cc==c) return 37+i; } } @@ -828,7 +828,7 @@ t_Open9xFrSkyData_v203::operator FrSkyData () t_Open9xFrSkyBarData_v204::operator FrSkyBarData () { FrSkyBarData c9x; - c9x.source = source; + c9x.source = RawSource(SOURCE_TYPE_TELEMETRY, source); c9x.barMin = barMin; c9x.barMax = barMax; return c9x; @@ -899,12 +899,6 @@ t_Open9xFrSkyData_v210::operator FrSkyData () } c9x.screens[lines_screen_index].type = 0; - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - c9x.screens[lines_screen_index].body.lines[line].source[col] = (col==0 ? (lines[line] & 0x0f) : ((lines[line] & 0xf0) / 16)); - c9x.screens[lines_screen_index].body.lines[line].source[col] += (((linesXtra >> (4*line+2*col)) & 0x03) * 16); - } - } c9x.rssiAlarms[0] = rssiAlarms[0].get(0); c9x.rssiAlarms[1] = rssiAlarms[1].get(1); @@ -1289,13 +1283,6 @@ t_Open9xModelData_v205::operator ModelData () c9x.thrTraceSrc = thrTraceSrc; c9x.moduleData[0]. modelId = modelId; c9x.frsky.screens[1].type = 0; - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - c9x.frsky.screens[1].body.lines[line].source[col] = (col==0 ? (frskyLines[line] & 0x0f) : ((frskyLines[line] & 0xf0) / 16)); - c9x.frsky.screens[1].body.lines[line].source[col] += (((frskyLinesXtra >> (4*line+2*col)) & 0x03) * 16); - } - } - return c9x; } @@ -1379,16 +1366,9 @@ t_Open9xModelData_v208::operator ModelData () c9x.thrTraceSrc = thrTraceSrc; c9x.moduleData[0].modelId = modelId; c9x.frsky.screens[1].type = 0; - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - c9x.frsky.screens[1].body.lines[line].source[col] = (col==0 ? (frskyLines[line] & 0x0f) : ((frskyLines[line] & 0xf0) / 16)); - c9x.frsky.screens[1].body.lines[line].source[col] += (((frskyLinesXtra >> (4*line+2*col)) & 0x03) * 16); - } - } for (int i=0; i<16; i++) { c9x.limitData[i].ppmCenter = servoCenter[i]; } - return c9x; } @@ -1473,16 +1453,9 @@ t_Open9xModelData_v209::operator ModelData () c9x.thrTraceSrc = thrTraceSrc; c9x.moduleData[0].modelId = modelId; c9x.frsky.screens[1].type = 0; - for (int line=0; line<4; line++) { - for (int col=0; col<2; col++) { - c9x.frsky.screens[1].body.lines[line].source[col] = (col==0 ? (frskyLines[line] & 0x0f) : ((frskyLines[line] & 0xf0) / 16)); - c9x.frsky.screens[1].body.lines[line].source[col] += (((frskyLinesXtra >> (4*line+2*col)) & 0x03) * 16); - } - } for (int i=0; i<16; i++) { c9x.limitData[i].ppmCenter = servoCenter[i]; } - return c9x; } diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 5d9cc8bd3..9e01379e4 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -277,8 +277,9 @@ class SourcesConversionTable: public ConversionTable { addConversion(RawSource(SOURCE_TYPE_SPECIAL, 2), val++); // Timer1 addConversion(RawSource(SOURCE_TYPE_SPECIAL, 3), val++); // Timer2 addConversion(RawSource(SOURCE_TYPE_SPECIAL, 4), val++); // Timer3 - for (int i=0; i > { { } + virtual ~SwitchField() + { + } + virtual void beforeExport() { _switch = sw.toValue(); @@ -517,20 +522,38 @@ class TelemetrySourcesConversionTable: public ConversionTable { template class TelemetrySourceField: public ConversionField< UnsignedField > { public: - TelemetrySourceField(unsigned int & source, BoardEnum board, unsigned int version): - ConversionField< UnsignedField >(source, &conversionTable, "Telemetry source"), + TelemetrySourceField(RawSource & source, BoardEnum board, unsigned int version): + ConversionField< UnsignedField >(_source, &conversionTable, "Telemetry source"), conversionTable(board, version), source(source), board(board), - version(version) + version(version), + _source(0) { } + virtual ~TelemetrySourceField() + { + } + + virtual void beforeExport() + { + _source = (source.type == SOURCE_TYPE_TELEMETRY ? source.index+1 : 0); + ConversionField< UnsignedField >::beforeExport(); + } + + virtual void afterImport() + { + ConversionField< UnsignedField >::afterImport(); + source = (_source == 0 ? RawSource(0) : RawSource(SOURCE_TYPE_TELEMETRY, _source-1)); + } + protected: TelemetrySourcesConversionTable conversionTable; - unsigned int & source; + RawSource & source; BoardEnum board; unsigned int version; + unsigned int _source; }; template @@ -538,14 +561,19 @@ class SourceField: public ConversionField< UnsignedField > { public: SourceField(RawSource & source, BoardEnum board, unsigned int version, unsigned int variant, unsigned long flags=0): ConversionField< UnsignedField >(_source, SourcesConversionTable::getInstance(board, version, variant, flags), - "Source", "Source "+ source.toString()+" cannot be exported on this board!"), + "Source", QObject::tr("Source %1 cannot be exported on this board!").arg(source.toString())), source(source), _source(0) { } + virtual ~SourceField() + { + } + virtual void beforeExport() { + if (source.type == SOURCE_TYPE_TELEMETRY) qDebug() << source.type << source.index; _source = source.toValue(); ConversionField< UnsignedField >::beforeExport(); } @@ -2203,6 +2231,7 @@ class AvrCustomFunctionField: public TransformedField { functionsConversionTable(board, version), sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, version >= 216 ? 0 : FLAG_NONONE)), _param(0), + _mode(0), _union_param(0), _active(0) { @@ -2380,7 +2409,7 @@ class AvrCustomFunctionField: public TransformedField { class FrskyScreenField: public DataField { public: - FrskyScreenField(FrSkyScreenData & screen, BoardEnum board, unsigned int version): + FrskyScreenField(FrSkyScreenData & screen, BoardEnum board, unsigned int version, unsigned int variant): DataField("Frsky Screen"), screen(screen), board(board), @@ -2389,9 +2418,9 @@ class FrskyScreenField: public DataField { for (int i=0; i<4; i++) { if (IS_ARM(board) && version >= 217) { if (IS_TARANIS(board)) - bars.Append(new TelemetrySourceField<16>(screen.body.bars[i].source, board, version)); + bars.Append(new SourceField<16>(screen.body.bars[i].source, board, version, variant)); else - bars.Append(new TelemetrySourceField<8>(screen.body.bars[i].source, board, version)); + bars.Append(new SourceField<8>(screen.body.bars[i].source, board, version, variant)); bars.Append(new UnsignedField<16>(screen.body.bars[i].barMin)); bars.Append(new UnsignedField<16>(screen.body.bars[i].barMax)); } @@ -2406,7 +2435,9 @@ class FrskyScreenField: public DataField { for (int i=0; i<4; i++) { for (int j=0; j= 217) - numbers.Append(new TelemetrySourceField<16>(screen.body.lines[i].source[j], board, version)); + numbers.Append(new SourceField<16>(screen.body.lines[i].source[j], board, version, variant)); + else if (IS_ARM(board) && version >= 217) + numbers.Append(new SourceField<8>(screen.body.lines[i].source[j], board, version, variant)); else numbers.Append(new TelemetrySourceField<8>(screen.body.lines[i].source[j], board, version)); } @@ -2419,12 +2450,12 @@ class FrskyScreenField: public DataField { numbers.Append(new SpareBitsField<4*8>()); } - if (version >= 217) { - if (IS_TARANIS(board)) - none.Append(new SpareBitsField<24*8>()); - else - none.Append(new SpareBitsField<20*8>()); - } + if (IS_TARANIS(board)) + none.Append(new SpareBitsField<24*8>()); + else if (IS_ARM(board)) + none.Append(new SpareBitsField<20*8>()); + else + none.Append(new SpareBitsField<12*8>()); if (IS_TARANIS(board) && version >= 217) { script.Append(new CharField<8>(screen.body.script.filename)); @@ -2532,6 +2563,20 @@ class TelemetryVoltsSourceConversionTable: public ConversionTable } }; +class ScreenTypesConversionTable: public ConversionTable +{ + public: + ScreenTypesConversionTable(BoardEnum board, unsigned int version) + { + int val = 0; + if (IS_ARM(board)) { + addConversion(TELEMETRY_SCREEN_NONE, val++); + } + addConversion(TELEMETRY_SCREEN_NUMBERS, val++); + addConversion(TELEMETRY_SCREEN_BARS, val++); + } +}; + class TelemetryCurrentSourceConversionTable: public ConversionTable { public: @@ -2551,9 +2596,10 @@ class TelemetryCurrentSourceConversionTable: public ConversionTable class FrskyField: public StructField { public: - FrskyField(FrSkyData & frsky, BoardEnum board, unsigned int version): + FrskyField(FrSkyData & frsky, BoardEnum board, unsigned int version, unsigned int variant): StructField("FrSky"), telemetryVarioSourceConversionTable(board, version), + screenTypesConversionTable(board, version), telemetryVoltsSourceConversionTable(board, version), telemetryCurrentSourceConversionTable(board, version) { @@ -2596,7 +2642,7 @@ class FrskyField: public StructField { Append(new UnsignedField<2>(frsky.screens[i].type)); } for (int i=0; i<4; i++) { - Append(new FrskyScreenField(frsky.screens[i], board, version)); + Append(new FrskyScreenField(frsky.screens[i], board, version, variant)); } } else { @@ -2605,7 +2651,7 @@ class FrskyField: public StructField { Append(new UnsignedField<1>(frsky.screens[2].type)); Append(new SpareBitsField<5>()); for (int i=0; i<3; i++) { - Append(new FrskyScreenField(frsky.screens[i], board, version)); + Append(new FrskyScreenField(frsky.screens[i], board, version, variant)); } } @@ -2639,8 +2685,9 @@ class FrskyField: public StructField { } Append(new UnsignedField<2>(frsky.usrProto, "USR Proto")); Append(new ConversionField< UnsignedField<2> >((unsigned int &)frsky.blades, -2)); - Append(new UnsignedField<1>(frsky.screens[0].type)); - Append(new UnsignedField<1>(frsky.screens[1].type)); + for (int i=0; i<2; i++) { + Append(new ConversionField< UnsignedField<1> >(frsky.screens[i].type, &screenTypesConversionTable, "Screen Type")); + } Append(new ConversionField< UnsignedField<2> >(frsky.voltsSource, &telemetryVoltsSourceConversionTable, "Volts Source")); Append(new SignedField<4>(frsky.varioMin, "Vario Min")); Append(new SignedField<4>(frsky.varioMax)); @@ -2649,7 +2696,7 @@ class FrskyField: public StructField { Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3, 0, 0, 100, "RSSI value")); } for (int i=0; i<2; i++) { - Append(new FrskyScreenField(frsky.screens[i], board, version)); + Append(new FrskyScreenField(frsky.screens[i], board, version, variant)); } Append(new UnsignedField<3>(frsky.varioSource)); Append(new SignedField<5>(frsky.varioCenterMin)); @@ -2664,6 +2711,7 @@ class FrskyField: public StructField { protected: RSSIConversionTable rssiConversionTable[2]; TelemetryVarioSourceConversionTable telemetryVarioSourceConversionTable; + ScreenTypesConversionTable screenTypesConversionTable; TelemetryVoltsSourceConversionTable telemetryVoltsSourceConversionTable; TelemetryCurrentSourceConversionTable telemetryCurrentSourceConversionTable; }; @@ -2940,7 +2988,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne } if ((board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) || (variant & FRSKY_VARIANT)) { - internalField.Append(new FrskyField(modelData.frsky, board, version)); + internalField.Append(new FrskyField(modelData.frsky, board, version, variant)); } else if ((board == BOARD_STOCK || board == BOARD_M128) && (variant & MAVLINK_VARIANT)) { internalField.Append(new MavlinkField(modelData.mavlink, board, version)); diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index 91a9f1f7a..8bb4199eb 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -534,7 +534,7 @@ void populateSourceCB(QComboBox *b, const RawSource & source, const GeneralSetti b->clear(); - if (flags & POPULATE_SOURCES) { + if (flags & POPULATE_NONE) { item = RawSource(SOURCE_TYPE_NONE); b->addItem(item.toString(model), item.toValue()); if (item == source) b->setCurrentIndex(b->count()-1); @@ -639,6 +639,7 @@ void populateSourceCB(QComboBox *b, const RawSource & source, const GeneralSetti for (int j=0; j<3; ++j) { item = RawSource(SOURCE_TYPE_TELEMETRY, 3*i+j); b->addItem(item.toString(model), item.toValue()); + // qDebug() << item.toString(model) << source.toString(model); if (item == source) b->setCurrentIndex(b->count()-1); } } diff --git a/companion/src/helpers.h b/companion/src/helpers.h index 5824e2235..aec01b20f 100644 --- a/companion/src/helpers.h +++ b/companion/src/helpers.h @@ -101,14 +101,15 @@ void populateGvarUseCB(QComboBox *b, unsigned int phase); QString getProtocolStr(const int proto); QString getPhasesStr(unsigned int phases, ModelData * model); -#define POPULATE_SOURCES (1<<0) -#define POPULATE_TRIMS (1<<1) -#define POPULATE_SWITCHES (1<<2) -#define POPULATE_GVARS (1<<3) -#define POPULATE_TELEMETRY (1<<4) -#define POPULATE_TELEMETRYEXT (1<<5) -#define POPULATE_VIRTUAL_INPUTS (1<<6) -#define POPULATE_SCRIPT_OUTPUTS (1<<7) +#define POPULATE_NONE (1<<0) +#define POPULATE_SOURCES (1<<1) +#define POPULATE_TRIMS (1<<2) +#define POPULATE_SWITCHES (1<<3) +#define POPULATE_GVARS (1<<4) +#define POPULATE_TELEMETRY (1<<5) +#define POPULATE_TELEMETRYEXT (1<<6) +#define POPULATE_VIRTUAL_INPUTS (1<<7) +#define POPULATE_SCRIPT_OUTPUTS (1<<8) #define GVARS_VARIANT 0x0001 #define FRSKY_VARIANT 0x0002 diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index 0e02072a2..da6c7f3d4 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -715,15 +715,15 @@ void CustomFunctionsPanel::populateFuncParamCB(QComboBox *b, uint function, unsi b->setCurrentIndex(value); } else if (function==FuncVolume) { - populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS); + populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_NONE|POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS); } else if (function==FuncPlayValue) { - populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT); + populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_NONE|POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT); } else if (function>=FuncAdjustGV1 && function<=FuncAdjustGVLast) { switch (adjustmode) { case 1: - populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS|POPULATE_SWITCHES); + populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_NONE|POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS|POPULATE_SWITCHES); break; case 2: populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_GVARS); diff --git a/companion/src/modeledit/expodialog.cpp b/companion/src/modeledit/expodialog.cpp index 54f7fb61f..d64c0887c 100644 --- a/companion/src/modeledit/expodialog.cpp +++ b/companion/src/modeledit/expodialog.cpp @@ -60,7 +60,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G if (firmware->getCapability(VirtualInputs)) { ui->inputName->setMaxLength(4); - populateSourceCB(ui->sourceCB, ed->srcRaw, generalSettings, &model, POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY); + populateSourceCB(ui->sourceCB, ed->srcRaw, generalSettings, &model, POPULATE_NONE | POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY); ui->sourceCB->removeItem(0); } else { diff --git a/companion/src/modeledit/heli.cpp b/companion/src/modeledit/heli.cpp index 391c1c328..7de479a11 100644 --- a/companion/src/modeledit/heli.cpp +++ b/companion/src/modeledit/heli.cpp @@ -70,11 +70,11 @@ void HeliPanel::edited() { if (!lock) { model->swashRingData.type = ui->swashType->currentIndex(); - model->swashRingData.collectiveSource = ui->swashCollectiveSource->itemData(ui->swashCollectiveSource->currentIndex()).toInt(); + model->swashRingData.collectiveSource = RawSource(ui->swashCollectiveSource->itemData(ui->swashCollectiveSource->currentIndex()).toInt()); model->swashRingData.value = ui->swashRingVal->value(); if (firmware->getCapability(VirtualInputs)) { - model->swashRingData.elevatorSource = ui->swashElevatorSource->itemData(ui->swashElevatorSource->currentIndex()).toInt(); - model->swashRingData.aileronSource = ui->swashAileronSource->itemData(ui->swashAileronSource->currentIndex()).toInt(); + model->swashRingData.elevatorSource = RawSource(ui->swashElevatorSource->itemData(ui->swashElevatorSource->currentIndex()).toInt()); + model->swashRingData.aileronSource = RawSource(ui->swashAileronSource->itemData(ui->swashAileronSource->currentIndex()).toInt()); model->swashRingData.elevatorWeight = ui->swashElevatorWeight->value(); model->swashRingData.aileronWeight = ui->swashAileronWeight->value(); model->swashRingData.collectiveWeight = ui->swashCollectiveWeight->value(); diff --git a/companion/src/modeledit/logicalswitches.cpp b/companion/src/modeledit/logicalswitches.cpp index dcb138072..60dfbeb64 100644 --- a/companion/src/modeledit/logicalswitches.cpp +++ b/companion/src/modeledit/logicalswitches.cpp @@ -301,7 +301,7 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i) { case LS_FAMILY_VOFS: mask |= SOURCE1_VISIBLE; - populateSourceCB(cswitchSource1[i], source, generalSettings, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); + populateSourceCB(cswitchSource1[i], source, generalSettings, model, POPULATE_NONE | POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); cswitchOffset[i]->setDecimals(range.decimals); cswitchOffset[i]->setSingleStep(range.step); if (source.isTimeBased()) { @@ -346,8 +346,8 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i) break; case LS_FAMILY_VCOMP: mask |= SOURCE1_VISIBLE | SOURCE2_VISIBLE; - populateSourceCB(cswitchSource1[i], RawSource(model->logicalSw[i].val1), generalSettings, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); - populateSourceCB(cswitchSource2[i], RawSource(model->logicalSw[i].val2), generalSettings, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); + populateSourceCB(cswitchSource1[i], RawSource(model->logicalSw[i].val1), generalSettings, model, POPULATE_NONE | POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); + populateSourceCB(cswitchSource2[i], RawSource(model->logicalSw[i].val2), generalSettings, model, POPULATE_NONE | POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); break; case LS_FAMILY_TIMER: mask |= VALUE1_VISIBLE | VALUE2_VISIBLE; diff --git a/companion/src/modeledit/mixerdialog.cpp b/companion/src/modeledit/mixerdialog.cpp index 12a754673..b4191d9ca 100644 --- a/companion/src/modeledit/mixerdialog.cpp +++ b/companion/src/modeledit/mixerdialog.cpp @@ -19,7 +19,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, G this->setWindowTitle(tr("DEST -> CH%1").arg(md->destCh)); - populateSourceCB(ui->sourceCB, md->srcRaw, generalSettings, &model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); + populateSourceCB(ui->sourceCB, md->srcRaw, generalSettings, &model, POPULATE_NONE | POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); ui->sourceCB->removeItem(0); int limit = firmware->getCapability(OffsetWeight); diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index ab66467f1..e21bae6ca 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -333,28 +333,13 @@ TelemetryCustomScreen::TelemetryCustomScreen(QWidget *parent, ModelData & model, update(); } -void TelemetryCustomScreen::populateTelemetrySourceCB(QComboBox *b, unsigned int value, bool last, int hubproto) +void TelemetryCustomScreen::populateTelemetrySourceCB(QComboBox * b, RawSource & source, bool last) { - b->clear(); - if (IS_ARM(firmware->getBoard())) { - // TODO + populateSourceCB(b, source, generalSettings, model, POPULATE_NONE | POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); } else { - b->addItem(RawSource(SOURCE_TYPE_NONE, 0).toString(model)); - - for (unsigned int i = 0; i < (last ? TELEMETRY_SOURCES_STATUS_COUNT : TELEMETRY_SOURCES_DISPLAY_COUNT); i++) { - b->addItem(RawSource(SOURCE_TYPE_TELEMETRY, i).toString(model)); - if (!firmware->isTelemetrySourceAvailable(i)) { - // disable item - QModelIndex index = b->model()->index(i+1, 0); - QVariant v(0); - b->model()->setData(index, v, Qt::UserRole - 1); - } - } - - b->setCurrentIndex(value); - b->setMaxVisibleItems(10); + populateSourceCB(b, source, generalSettings, model, POPULATE_NONE | (last ? POPULATE_TELEMETRYEXT : POPULATE_TELEMETRY)); } } @@ -373,12 +358,12 @@ void TelemetryCustomScreen::update() for (int l=0; l<4; l++) { for (int c=0; cgetCapability(TelemetryCustomScreensFieldsPerLine); c++) { - populateTelemetrySourceCB(fieldsCB[l][c], screen.body.lines[l].source[c], l==3, model->frsky.usrProto); + populateTelemetrySourceCB(fieldsCB[l][c], screen.body.lines[l].source[c], l==3); } } for (int l=0; l<4; l++) { - populateTelemetrySourceCB(barsCB[l], screen.body.bars[l].source, false, model->frsky.usrProto); + populateTelemetrySourceCB(barsCB[l], screen.body.bars[l].source); } if (screen.type == TELEMETRY_SCREEN_BARS) { @@ -394,6 +379,7 @@ void TelemetryCustomScreen::updateBar(int line) { lock = true; +#if 0 int index = screen.body.bars[line].source; barsCB[line]->setCurrentIndex(index); if (index) { @@ -419,6 +405,7 @@ void TelemetryCustomScreen::updateBar(int line) minSB[line]->setDisabled(true); maxSB[line]->setDisabled(true); } +#endif lock = false; } @@ -437,20 +424,20 @@ void TelemetryCustomScreen::customFieldChanged(int value) { if (!lock) { int index = sender()->property("index").toInt(); - screen.body.lines[index/256].source[index%256] = value; + screen.body.lines[index/256].source[index%256] = RawSource(((QComboBox *)sender())->itemData(value).toInt()); emit modified(); } } -void TelemetryCustomScreen::barSourceChanged(int index) +void TelemetryCustomScreen::barSourceChanged(int value) { if (!lock) { QComboBox * cb = qobject_cast(sender()); - int line = cb->property("index").toInt(); - screen.body.bars[line].source = index; - screen.body.bars[line].barMin = 0; - screen.body.bars[line].barMax = 0; - updateBar(line); + int index = cb->property("index").toInt(); + screen.body.bars[index].source = RawSource(((QComboBox *)sender())->itemData(value).toInt()); + screen.body.bars[index].barMin = 0; + screen.body.bars[index].barMax = 0; + updateBar(index); emit modified(); } } @@ -745,6 +732,9 @@ void TelemetryPanel::update() for (int i=0; iupdate(); } + for (int i=0; igetCapability(TelemetryCustomScreens); i++) { + telemetryCustomScreens[i]->update(); + } } } diff --git a/companion/src/modeledit/telemetry.h b/companion/src/modeledit/telemetry.h index c7f993e3f..f30a1cd21 100644 --- a/companion/src/modeledit/telemetry.h +++ b/companion/src/modeledit/telemetry.h @@ -66,7 +66,7 @@ class TelemetryCustomScreen: public ModelPanel void barMaxChanged(double value); protected: - void populateTelemetrySourceCB(QComboBox *b, unsigned int value, bool last, int hubproto); + void populateTelemetrySourceCB(QComboBox * b, RawSource & source, bool last=false); private: void updateBar(int line);