diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index a51151d4f..614a14b6a 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -99,6 +99,7 @@ const int Boards::getEEpromSize(Board::Type board) case BOARD_TARANIS_XLITES: case BOARD_TARANIS_XLITE: case BOARD_TARANIS_X7: + case BOARD_TARANIS_X3: case BOARD_TARANIS_X9D: case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9E: @@ -128,6 +129,7 @@ const int Boards::getFlashSize(Type board) case BOARD_TARANIS_XLITES: case BOARD_TARANIS_XLITE: case BOARD_TARANIS_X7: + case BOARD_TARANIS_X3: case BOARD_TARANIS_X9D: case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9E: @@ -429,6 +431,8 @@ const QString Boards::getBoardName(Board::Type board) return "Taranis X9D+"; case BOARD_TARANIS_X9E: return "Taranis X9E"; + case BOARD_TARANIS_X3: + return "Taranis X3"; case BOARD_SKY9X: return "Sky9x"; case BOARD_9XRPRO: diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 87f9733e0..14319f38c 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -47,6 +47,7 @@ namespace Board { BOARD_X10, BOARD_TARANIS_XLITE, BOARD_TARANIS_XLITES, + BOARD_TARANIS_X3, BOARD_ENUM_COUNT }; @@ -190,12 +191,13 @@ class Boards #define IS_TARANIS_XLITE(board) (board==Board::BOARD_TARANIS_XLITE || board==Board::BOARD_TARANIS_XLITES) #define IS_TARANIS_XLITES(board) (board==Board::BOARD_TARANIS_XLITES) #define IS_TARANIS_X7(board) (board==Board::BOARD_TARANIS_X7) +#define IS_TARANIS_X3(board) (board==Board::BOARD_TARANIS_X3) #define IS_TARANIS_X9(board) (board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9E) #define IS_TARANIS_X9D(board) (board==Board::BOARD_TARANIS_X9D || board==Board::BOARD_TARANIS_X9DP) #define IS_TARANIS_PLUS(board) (board==Board::BOARD_TARANIS_X9DP || board==Board::BOARD_TARANIS_X9E) #define IS_TARANIS_X9E(board) (board==Board::BOARD_TARANIS_X9E) -#define IS_TARANIS(board) (IS_TARANIS_X9(board) || IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board) || IS_TARANIS_XLITES(board)) -#define IS_TARANIS_SMALL(board) (board==Board::BOARD_TARANIS_X7 || board==Board::BOARD_TARANIS_XLITE || board==Board::BOARD_TARANIS_XLITES) +#define IS_TARANIS(board) (IS_TARANIS_X9(board) || IS_TARANIS_X7(board) || IS_TARANIS_X3(board) || IS_TARANIS_XLITE(board) || IS_TARANIS_XLITES(board)) +#define IS_TARANIS_SMALL(board) (board==Board::BOARD_TARANIS_X7 || board==Board::BOARD_TARANIS_XLITE || board==Board::BOARD_TARANIS_XLITES || board==Board::BOARD_TARANIS_X3) #define IS_TARANIS_NOT_X9E(board) (IS_TARANIS(board) && !IS_TARANIS_X9E(board)) #define IS_HORUS_X12S(board) (board==Board::BOARD_X12S) #define IS_HORUS_X10(board) (board==Board::BOARD_X10) diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index 93035f9f6..8ca9920b8 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -122,7 +122,7 @@ GeneralSettings::GeneralSettings() templateSetup = g.profile[g.sessionId()].channelOrder(); stickMode = g.profile[g.sessionId()].defaultMode(); - QString t_calib = g.profile[g.sessionId()].stickPotCalib(); + QString t_calib; // TODO SEGFAULT = g.profile[g.sessionId()].stickPotCalib(); int potsnum = getBoardCapability(getCurrentBoard(), Board::Pots); if (!t_calib.isEmpty()) { QString t_trainercalib=g.profile[g.sessionId()].trainerCalib(); diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 144486234..f7a947d0c 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -27,42 +27,33 @@ using namespace Board; -#define IS_DBLEEPROM(board, version) ((IS_2560(board) || board==BOARD_M128) && version >= 213) -// Macro used for Gruvin9x board and M128 board between versions 213 and 214 (when there were stack overflows!) -#define IS_DBLRAM(board, version) ((IS_2560(board) && version >= 213) || (board==BOARD_M128 && version >= 213 && version <= 214)) - -#define HAS_PERSISTENT_TIMERS(board) (IS_ARM(board) || IS_2560(board)) #define MAX_VIEWS(board) (HAS_LARGE_LCD(board) ? 2 : 256) -#define MAX_POTS(board, version) (IS_TARANIS_NOT_X9E(board) && version < 216 ? 2 : Boards::getCapability(board, Board::Pots)) +#define MAX_POTS(board, version) (Boards::getCapability(board, Board::Pots)) #define MAX_SLIDERS(board) (IS_HORUS_X10(board) ? 4 : (Boards::getCapability(board, Board::Sliders))) //TODO need to be remove when x10 eeprom gets fixed #define MAX_MOUSE_ANALOGS(board) (IS_HORUS_X10(board) ? 2 : (Boards::getCapability(board, Board::MouseAnalogs))) //TODO need to be remove when x10 eeprom gets fixed #define MAX_SWITCHES(board, version) (Boards::getCapability(board, Board::Switches)) #define MAX_SWITCH_SLOTS(board, version) (IS_TARANIS_X9E(board) ? 32 : 8) // bitsize of swconfig_t / 2 (see radio/src/datastructs.h) #define MAX_SWITCHES_POSITION(board, version) (Boards::getCapability(board, Board::SwitchPositions)) -#define MAX_ROTARY_ENCODERS(board) (IS_2560(board) ? 2 : (IS_SKY9X(board) ? 1 : 0)) -#define MAX_FLIGHT_MODES(board, version) (IS_ARM(board) ? 9 : (IS_DBLRAM(board, version) ? 6 : 5)) -#define MAX_TIMERS(board, version) ((IS_ARM(board) && version >= 217) ? 3 : 2) -#define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32) -#define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16) +#define MAX_ROTARY_ENCODERS(board) (IS_SKY9X(board) ? 1 : 0) +#define MAX_FLIGHT_MODES(board, version) 9 +#define MAX_TIMERS(board, version) 3 +#define MAX_MIXERS(board, version) 64 +#define MAX_CHANNELS(board, version) 32 #define MAX_TRIMS(board) (Boards::getCapability(board, Board::NumTrims)) -#define MAX_EXPOS(board, version) (IS_ARM(board) ? ((IS_HORUS_OR_TARANIS(board) && version >= 216) ? 64 : 32) : (IS_DBLRAM(board, version) ? 16 : 14)) -#define MAX_LOGICAL_SWITCHES(board, version) (IS_ARM(board) ? (version >= 218 ? 64 : 32) : ((IS_DBLEEPROM(board, version) && version<217) ? 15 : 12)) -#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) ? ((HAS_LARGE_LCD(board) && version >= 216) ? 32 : 16) : 8) -#define MAX_GVARS(board, version) ((IS_ARM(board) && version >= 216) ? 9 : 5) +#define MAX_EXPOS(board, version) (IS_HORUS_OR_TARANIS(board) ? 64 : 32) +#define MAX_LOGICAL_SWITCHES(board, version) (version >= 218 ? 64 : 32) +#define MAX_CUSTOM_FUNCTIONS(board, version) 64 +#define MAX_CURVES(board, version) (HAS_LARGE_LCD(board) ? 32 : 16) +#define MAX_GVARS(board, version) 9 #define MAX_SCRIPTS(board) (IS_HORUS(board) ? 9 : 7) #define MAX_TELEMETRY_SENSORS(board, version) (32) -#define NUM_PPM_INPUTS(board, version) ((IS_ARM(board) && version >= 216) ? 16 : 8) -#define ROTENC_COUNT(board, version) (IS_ARM(board) ? ((IS_STM32(board) && version >= 218) ? 0 : 1) : (IS_2560(board) ? 2 : 0)) +#define NUM_PPM_INPUTS(board, version) 16 +#define ROTENC_COUNT(board, version) ((IS_STM32(board) && version >= 218) ? 0 : 1) #define MAX_AUX_TRIMS(board) (IS_HORUS(board) ? 2 : 0) -#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)) - inline int switchIndex(int i, Board::Type board, unsigned int version) { - bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version); - if (!IS_HORUS_OR_TARANIS(board) && afterrelease21March2013) + if (!IS_HORUS_OR_TARANIS(board)) return (i<=3 ? i+3 : (i<=6 ? i-3 : i)); else return i; @@ -87,44 +78,26 @@ class SwitchesConversionTable: public ConversionTable { for (int i=1; i<=MAX_SWITCHES_POSITION(board, version); i++) { int s = switchIndex(i, board, version); - if (IS_TARANIS(board) && version < 217) { - // SF positions 16 and 17 => 16 and 18 - // SH positions 21 and 22 => 22 and 24 - if (s == 17 || s == 23) { - continue; - } - if (s >= 22) { - addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val); - addImportConversion(RawSwitch(SWITCH_TYPE_SWITCH, 21+22-s), -val+offset); - addExportConversion(RawSwitch(SWITCH_TYPE_SWITCH, -s), -val+offset); - val++; - continue; - } - } addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val); addConversion(RawSwitch(SWITCH_TYPE_SWITCH, -s), -val+offset); val++; } - if (IS_HORUS_OR_TARANIS(board) && version >= 216) { + if (IS_HORUS_OR_TARANIS(board)) { for (int i=1; i<=MAX_POTS(board, version)*6; i++) { addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, -i), -val+offset); addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, i), val++); } } - if (version >= 216) { - for (int i=1; i<=2*MAX_TRIMS(board); i++) { - addConversion(RawSwitch(SWITCH_TYPE_TRIM, -i), -val+offset); - addConversion(RawSwitch(SWITCH_TYPE_TRIM, i), val++); - } + for (int i=1; i<=2*MAX_TRIMS(board); i++) { + addConversion(RawSwitch(SWITCH_TYPE_TRIM, -i), -val+offset); + addConversion(RawSwitch(SWITCH_TYPE_TRIM, i), val++); } - if (version >= 216) { - for (int i=1; i<=MAX_ROTARY_ENCODERS(board); i++) { - addConversion(RawSwitch(SWITCH_TYPE_ROTARY_ENCODER, -i), -val+offset); - addConversion(RawSwitch(SWITCH_TYPE_ROTARY_ENCODER, i), val++); - } + for (int i=1; i<=MAX_ROTARY_ENCODERS(board); i++) { + addConversion(RawSwitch(SWITCH_TYPE_ROTARY_ENCODER, -i), -val+offset); + addConversion(RawSwitch(SWITCH_TYPE_ROTARY_ENCODER, i), val++); } for (int i=1; i<=MAX_LOGICAL_SWITCHES(board, version); i++) { @@ -135,18 +108,14 @@ class SwitchesConversionTable: public ConversionTable { addConversion(RawSwitch(SWITCH_TYPE_OFF), -val+offset); addConversion(RawSwitch(SWITCH_TYPE_ON), val++); - if (version >= 216) { - addConversion(RawSwitch(SWITCH_TYPE_ONE, -1), -val+offset); - addConversion(RawSwitch(SWITCH_TYPE_ONE, 1), val++); - if (IS_ARM(board)) { - for (int i=1; i<=MAX_FLIGHT_MODES(board, version); i++) { - addConversion(RawSwitch(SWITCH_TYPE_FLIGHT_MODE, -i), -val+offset); - addConversion(RawSwitch(SWITCH_TYPE_FLIGHT_MODE, i), val++); - } - } + addConversion(RawSwitch(SWITCH_TYPE_ONE, -1), -val+offset); + addConversion(RawSwitch(SWITCH_TYPE_ONE, 1), val++); + for (int i=1; i<=MAX_FLIGHT_MODES(board, version); i++) { + addConversion(RawSwitch(SWITCH_TYPE_FLIGHT_MODE, -i), -val+offset); + addConversion(RawSwitch(SWITCH_TYPE_FLIGHT_MODE, i), val++); } - if (IS_ARM(board) && version >= 218) { + if (version >= 218) { addConversion(RawSwitch(SWITCH_TYPE_TELEMETRY, -1), -val+offset); addConversion(RawSwitch(SWITCH_TYPE_TELEMETRY, 1), val++); for (int i=1; i<=CPN_MAX_SENSORS; i++) { @@ -154,21 +123,6 @@ class SwitchesConversionTable: public ConversionTable { addConversion(RawSwitch(SWITCH_TYPE_SENSOR, i), val++); } } - - if (version < 216) { - // previous "moment" switches - for (int i=1; i<=MAX_SWITCHES_POSITION(board, version); i++) { - int s = switchIndex(i, board, version); - addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++); - } - - for (int i=1; i<=MAX_LOGICAL_SWITCHES(board, version); i++) { - addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++); - } - - // previous "One" switch - addConversion(RawSwitch(SWITCH_TYPE_ON), val++); - } } @@ -179,16 +133,6 @@ class SwitchesConversionTable: public ConversionTable { ConversionTable::addConversion(sw.toValue(), b); } - void addImportConversion(const RawSwitch & sw, const int b) - { - ConversionTable::addImportConversion(sw.toValue(), b); - } - - void addExportConversion(const RawSwitch & sw, const int b) - { - ConversionTable::addExportConversion(sw.toValue(), b); - } - class Cache { public: Cache(Board::Type board, unsigned int version, unsigned long flags, SwitchesConversionTable * table): @@ -242,21 +186,19 @@ class SourcesConversionTable: public ConversionTable { public: SourcesConversionTable(Board::Type board, unsigned int version, unsigned int variant, unsigned long flags=0) { - bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version); - int val=0; if (!(flags & FLAG_NONONE)) { addConversion(RawSource(SOURCE_TYPE_NONE), val++); } - if ((IS_ARM(board) && version >= 218) || (IS_STM32(board) && version >= 216)) { + if (version >= 218 || IS_STM32(board)) { for (int i=0; i<32; i++) { addConversion(RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i), val++); } } - if (IS_STM32(board) && version >= 216) { + if (IS_STM32(board)) { for (int i = 0; i < MAX_SCRIPTS(board); i++) { for (int j = 0; j < 6; j++) { addConversion(RawSource(SOURCE_TYPE_LUA_OUTPUT, i * 16 + j), val++); @@ -272,48 +214,21 @@ class SourcesConversionTable: public ConversionTable { addConversion(RawSource(SOURCE_TYPE_ROTARY_ENCODER, 0), val++); } - if (!afterrelease21March2013) { - for (int i=0; i=4 && i<=6) - addConversion(RawSource(SOURCE_TYPE_SWITCH, 0), val++); - else - addConversion(RawSource(SOURCE_TYPE_SWITCH, i), val++); - } - } - for (int i=0; i= 217) { - for (int i=0; i= 216 && IS_ARM(board)) { - if (i==TELEMETRY_SOURCE_RSSI_RX) - val += 1; - if (i==TELEMETRY_SOURCE_TX_TIME) - val += 5; - if (i==TELEMETRY_SOURCE_DTE) - val += 5; - if (i==TELEMETRY_SOURCE_POWER_MAX) - val += 5; - } - } + for (int i=0; i > { Board::Type board; }; -class TelemetrySourcesConversionTable: public ConversionTable { - - public: - TelemetrySourcesConversionTable(Board::Type 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++); - if (IS_ARM(board) && version >= 216) { - addConversion(1+TELEMETRY_SOURCE_TX_TIME, val++); - for (int i=0; i<5; i++) - addConversion(1+TELEMETRY_SOURCE_RESERVE, val++); - } - addConversion(1+TELEMETRY_SOURCE_TIMER1, val++); - addConversion(1+TELEMETRY_SOURCE_TIMER2, val++); - if (IS_ARM(board) && version >= 217) - addConversion(1+TELEMETRY_SOURCE_TIMER3, val++); - if (IS_ARM(board) && version >= 216) - addConversion(1+TELEMETRY_SOURCE_RAS, 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_RESERVE, 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_ASPEED, 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++); - if (version >= 216) { - addConversion(1+TELEMETRY_SOURCE_ASPEED_MAX, val++); - addConversion(1+TELEMETRY_SOURCE_CELL_MIN, val++); - addConversion(1+TELEMETRY_SOURCE_CELLS_MIN, val++); - addConversion(1+TELEMETRY_SOURCE_VFAS_MIN, val++); - } - addConversion(1+TELEMETRY_SOURCE_CURRENT_MAX, 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(DataField * parent, RawSource & source, Board::Type board, unsigned int version): - ConversionField< UnsignedField >(parent, _source, &conversionTable, "Telemetry source"), - conversionTable(board, version), - source(source), - board(board), - 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)); - qCDebug(eepromImport) << QString("imported %1: %2").arg(ConversionField< UnsignedField >::internalField.getName()).arg(source.toString()); - } - - protected: - TelemetrySourcesConversionTable conversionTable; - RawSource & source; - Board::Type board; - unsigned int version; - unsigned int _source; -}; - template class SourceField: public ConversionField< UnsignedField > { public: @@ -651,68 +405,41 @@ int smallGvarExport(int gvar) void splitGvarParam(const int gvar, int & _gvar, unsigned int & _gvarParam, const Board::Type board, const int version) { - if (version >= 214 || (!IS_ARM(board) && version >= 213)) { - if (gvar < -10000) { - _gvarParam = 0; - _gvar = 256 + gvar + 10000; - } - else if (gvar > 10000) { - _gvarParam = 1; - _gvar = gvar - 10001; - } - else { - if (gvar < 0) _gvarParam = 1; - else _gvarParam = 0; - _gvar = gvar; // save routine throws away all unused bits; therefore no 2er complement compensation needed here - } + if (gvar < -10000) { + _gvarParam = 0; + _gvar = 256 + gvar + 10000; + } + else if (gvar > 10000) { + _gvarParam = 1; + _gvar = gvar - 10001; } else { - if (gvar < -10000) { - _gvarParam = 1; - _gvar = gvar + 10000; - } - else if (gvar > 10000) { - _gvarParam = 1; - _gvar = gvar - 10001; - } - else { - _gvarParam = 0; - _gvar = gvar; - } + if (gvar < 0) _gvarParam = 1; + else _gvarParam = 0; + _gvar = gvar; // save routine throws away all unused bits; therefore no 2er complement compensation needed here } } void concatGvarParam(int & gvar, const int _gvar, const unsigned int _gvarParam, const Board::Type board, const int version) { - if (version >= 214 || (!IS_ARM(board) && version >= 213)) { - gvar = _gvar; - if (gvar<0) gvar+=256; // remove 2er complement, because 8bit part is in this case unsigned - if (_gvarParam) { // here is the real sign bit - gvar|=-256; // set all higher bits to simulate negative value - } + gvar = _gvar; + if (gvar<0) gvar+=256; // remove 2er complement, because 8bit part is in this case unsigned + if (_gvarParam) { // here is the real sign bit + gvar|=-256; // set all higher bits to simulate negative value + } - if (gvar>245) { - gvar = gvar-256 - 10000; - } else if (gvar<-245) { - gvar = gvar+256 + 10001; - } + if (gvar>245) { + gvar = gvar-256 - 10000; } - else { - if (_gvarParam == 0) { - gvar = _gvar; - } - else if (_gvar >= 0) { - gvar = 10001 + _gvar; - } - else { - gvar = -10000 + _gvar; - } + else if (gvar<-245) { + gvar = gvar+256 + 10001; } + } void exportGvarParam(const int gvar, int & _gvar, int version) { - int GV1 = (version >= 217 ? 1024 : (version >= 216 ? 4096 : 512)); + int GV1 = 1024; if (gvar < -10000) { _gvar = GV1 + gvar + 10000; @@ -727,7 +454,7 @@ void exportGvarParam(const int gvar, int & _gvar, int version) void importGvarParam(int & gvar, const int _gvar, int version) { - int GV1 = (version >= 217 ? 1024 : (version >= 216 ? 4096 : 512)); + int GV1 = 1024; if (_gvar >= GV1) { gvar = 10001 + _gvar - GV1; @@ -800,7 +527,7 @@ class HeliField: public StructField { HeliField(DataField * parent, SwashRingData & heli, Board::Type board, unsigned int version, unsigned int variant): StructField(parent, "Heli") { - if ((IS_ARM(board) && version >= 218) || (IS_STM32(board) && version >= 217)) { + if (version >= 218 || IS_STM32(board)) { Append(new UnsignedField<8>(this, heli.type)); Append(new UnsignedField<8>(this, heli.value)); Append(new SourceField<8>(this, heli.collectiveSource, board, version, variant)); @@ -833,20 +560,13 @@ class FlightModeField: public TransformedField { version(version), rotencCount(ROTENC_COUNT(board, version)) { - if (board == BOARD_STOCK || (board==BOARD_M128 && version>=215)) { - // On stock we use 10bits per trim - for (int i=0; i(this, trimBase[i])); - for (int i=0; i(this, trimExt[i])); - } - else if (IS_ARM(board) && version >= 218) { + if (version >= 218) { for (int i=0; i(this, phase.trim[i])); internalField.Append(new UnsignedField<5>(this, trimMode[i])); } } - else if (IS_TARANIS(board) && version >= 216) { + else if (IS_TARANIS(board)) { for (int i=0; i(this, phase.trim[i])); internalField.Append(new UnsignedField<5>(this, trimMode[i])); @@ -857,7 +577,7 @@ class FlightModeField: public TransformedField { internalField.Append(new SignedField<16>(this, trimBase[i])); } } - if (IS_ARM(board) && version >= 218) { + if (version >= 218) { if (HAS_LARGE_LCD(board)) internalField.Append(new ZCharField<10>(this, phase.name, "Flight mode name")); else @@ -872,30 +592,22 @@ class FlightModeField: public TransformedField { else internalField.Append(new ZCharField<6>(this, phase.name)); } - if (IS_ARM(board) && version >= 214) { - internalField.Append(new UnsignedField<8>(this, phase.fadeIn)); - internalField.Append(new UnsignedField<8>(this, phase.fadeOut)); - } - else { - internalField.Append(new UnsignedField<4>(this, phase.fadeIn)); - internalField.Append(new UnsignedField<4>(this, phase.fadeOut)); - } + internalField.Append(new UnsignedField<8>(this, phase.fadeIn)); + internalField.Append(new UnsignedField<8>(this, phase.fadeOut)); for (int i=0; i(this, phase.rotaryEncoders[i])); } - if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) { - for (int i=0; i(this, phase.gvars[i])); - } + for (int i=0; i(this, phase.gvars[i])); } } virtual void beforeExport() { for (int i=0; i= 216) || (IS_ARM(board) && version >= 218)) { + if (IS_HORUS_OR_TARANIS(board) || version >= 218) { if (phase.trimMode[i] < 0) trimMode[i] = TRIM_MODE_NONE; else @@ -923,7 +635,7 @@ class FlightModeField: public TransformedField { virtual void afterImport() { for (int i=0; i= 216) || (IS_ARM(board) && version >= 218)) { + if (IS_HORUS_OR_TARANIS(board) || version >= 218) { if (trimMode[i] == TRIM_MODE_NONE) { phase.trimMode[i] = -1; } @@ -984,7 +696,7 @@ class MixField: public TransformedField { version(version), model(model) { - if (IS_ARM(board) && version >= 218) { + if (version >= 218) { internalField.Append(new SignedField<11>(this, _weight)); internalField.Append(new UnsignedField<5>(this, _destCh)); internalField.Append(new SourceField<10>(this, mix.srcRaw, board, version, FLAG_NOTELEMETRY)); @@ -1007,7 +719,7 @@ class MixField: public TransformedField { else internalField.Append(new ZCharField<6>(this, mix.name)); } - else if (IS_TARANIS(board) && version == 217) { + else if (IS_TARANIS(board)) { internalField.Append(new UnsignedField<8>(this, _destCh)); internalField.Append(new UnsignedField<9>(this, mix.flightModes)); internalField.Append(new UnsignedField<2>(this, (unsigned int &)mix.mltpx)); @@ -1024,7 +736,7 @@ class MixField: public TransformedField { internalField.Append(new UnsignedField<8>(this, mix.speedDown)); internalField.Append(new ZCharField<8>(this, mix.name)); } - else if (IS_ARM(board) && version == 217) { + else { internalField.Append(new UnsignedField<5>(this, _destCh)); internalField.Append(new UnsignedField<3>(this, mix.mixWarn)); internalField.Append(new UnsignedField<9>(this, mix.flightModes)); @@ -1043,125 +755,6 @@ class MixField: public TransformedField { internalField.Append(new SignedField<16>(this, _offset)); internalField.Append(new ZCharField<6>(this, mix.name)); } - else if (IS_TARANIS(board) && version == 216) { - internalField.Append(new UnsignedField<8>(this, _destCh)); - internalField.Append(new UnsignedField<16>(this, mix.flightModes)); - internalField.Append(new UnsignedField<2>(this, (unsigned int &)mix.mltpx)); - internalField.Append(new UnsignedField<1>(this, (unsigned int &)mix.carryTrim)); - internalField.Append(new SpareBitsField<5>(this)); - internalField.Append(new SignedField<16>(this, _weight)); - internalField.Append(new SwitchField<8>(this, mix.swtch, board, version)); - internalField.Append(new CurveReferenceField(this, mix.curve, board, version)); - internalField.Append(new UnsignedField<4>(this, mix.mixWarn)); - internalField.Append(new SpareBitsField<4>(this)); - internalField.Append(new UnsignedField<8>(this, mix.delayUp)); - internalField.Append(new UnsignedField<8>(this, mix.delayDown)); - internalField.Append(new UnsignedField<8>(this, mix.speedUp)); - internalField.Append(new UnsignedField<8>(this, mix.speedDown)); - internalField.Append(new SourceField<8>(this, mix.srcRaw, board, version, FLAG_NOTELEMETRY)); - internalField.Append(new SignedField<16>(this, _offset)); - internalField.Append(new ZCharField<8>(this, mix.name)); - internalField.Append(new SpareBitsField<8>(this)); - } - else if (IS_ARM(board) && version == 216) { - internalField.Append(new UnsignedField<5>(this, _destCh)); - internalField.Append(new UnsignedField<3>(this, mix.mixWarn)); - internalField.Append(new UnsignedField<16>(this, mix.flightModes)); - internalField.Append(new BoolField<1>(this, _curveMode)); - internalField.Append(new BoolField<1>(this, mix.noExpo)); - internalField.Append(new SignedField<3>(this, mix.carryTrim)); - internalField.Append(new UnsignedField<2>(this, (unsigned int &)mix.mltpx)); - internalField.Append(new SpareBitsField<1>(this)); - internalField.Append(new SignedField<16>(this, _weight)); - internalField.Append(new SwitchField<8>(this, mix.swtch, board, version)); - internalField.Append(new SignedField<8>(this, _curveParam)); - internalField.Append(new UnsignedField<8>(this, mix.delayUp)); - internalField.Append(new UnsignedField<8>(this, mix.delayDown)); - internalField.Append(new UnsignedField<8>(this, mix.speedUp)); - internalField.Append(new UnsignedField<8>(this, mix.speedDown)); - internalField.Append(new SourceField<8>(this, mix.srcRaw, board, version, FLAG_NOTELEMETRY)); - internalField.Append(new SignedField<16>(this, _offset)); - internalField.Append(new ZCharField<6>(this, mix.name)); - } - else if (IS_ARM(board)) { - internalField.Append(new UnsignedField<8>(this, _destCh)); - internalField.Append(new UnsignedField<16>(this, mix.flightModes)); - internalField.Append(new BoolField<1>(this, _curveMode)); - internalField.Append(new BoolField<1>(this, mix.noExpo)); - internalField.Append(new SignedField<3>(this, mix.carryTrim)); - internalField.Append(new UnsignedField<2>(this, (unsigned int &)mix.mltpx)); - if (version >= 214) - internalField.Append(new SpareBitsField<1>(this)); - else - internalField.Append(new UnsignedField<1>(this, _offsetMode)); - internalField.Append(new SignedField<16>(this, _weight)); - internalField.Append(new SwitchField<8>(this, mix.swtch, board, version)); - internalField.Append(new SignedField<8>(this, _curveParam)); - if (version >= 214) { - internalField.Append(new UnsignedField<4>(this, mix.mixWarn)); - internalField.Append(new SpareBitsField<4>(this)); - } - else { - internalField.Append(new UnsignedField<8>(this, mix.mixWarn)); - } - internalField.Append(new UnsignedField<8>(this, mix.delayUp)); - internalField.Append(new UnsignedField<8>(this, mix.delayDown)); - internalField.Append(new UnsignedField<8>(this, mix.speedUp)); - internalField.Append(new UnsignedField<8>(this, mix.speedDown)); - internalField.Append(new SourceField<8>(this, mix.srcRaw, board, version, FLAG_NOTELEMETRY)); - if (version >= 214) - internalField.Append(new SignedField<16>(this, _offset)); - else - internalField.Append(new SignedField<8>(this, _offset)); - if (HAS_LARGE_LCD(board)) { - internalField.Append(new ZCharField<8>(this, mix.name)); - internalField.Append(new SpareBitsField<16>(this)); - } - else { - internalField.Append(new ZCharField<6>(this, mix.name)); - } - } - else if (IS_DBLRAM(board, version) && IS_AFTER_RELEASE_23_MARCH_2013(board, version)) { - internalField.Append(new UnsignedField<4>(this, _destCh)); - internalField.Append(new BoolField<1>(this, _curveMode)); - internalField.Append(new BoolField<1>(this, mix.noExpo)); - internalField.Append(new UnsignedField<1>(this, _weightMode)); - internalField.Append(new UnsignedField<1>(this, _offsetMode)); - internalField.Append(new SourceField<8>(this, mix.srcRaw, board, version, FLAG_NOTELEMETRY)); - internalField.Append(new SignedField<8>(this, _weight)); - internalField.Append(new SwitchField<8>(this, mix.swtch, board, version)); - internalField.Append(new UnsignedField<8>(this, mix.flightModes)); - internalField.Append(new UnsignedField<2>(this, (unsigned int &)mix.mltpx)); - internalField.Append(new SignedField<3>(this, mix.carryTrim)); - internalField.Append(new UnsignedField<2>(this, mix.mixWarn)); - internalField.Append(new SpareBitsField<1>(this)); - internalField.Append(new UnsignedField<4>(this, mix.delayUp)); - internalField.Append(new UnsignedField<4>(this, mix.delayDown)); - internalField.Append(new UnsignedField<4>(this, mix.speedUp)); - internalField.Append(new UnsignedField<4>(this, mix.speedDown)); - internalField.Append(new SignedField<8>(this, _curveParam)); - internalField.Append(new SignedField<8>(this, _offset)); - } - else { - internalField.Append(new UnsignedField<4>(this, _destCh)); - internalField.Append(new BoolField<1>(this, _curveMode)); - internalField.Append(new BoolField<1>(this, mix.noExpo)); - internalField.Append(new UnsignedField<1>(this, _weightMode)); - internalField.Append(new UnsignedField<1>(this, _offsetMode)); - internalField.Append(new SignedField<8>(this, _weight)); - internalField.Append(new SwitchField<6>(this, mix.swtch, board, version)); - internalField.Append(new UnsignedField<2>(this, (unsigned int &)mix.mltpx)); - internalField.Append(new UnsignedField<5>(this, mix.flightModes)); - internalField.Append(new SignedField<3>(this, mix.carryTrim)); - internalField.Append(new SourceField<6>(this, mix.srcRaw, board, version, FLAG_NOTELEMETRY)); - internalField.Append(new UnsignedField<2>(this, mix.mixWarn)); - internalField.Append(new UnsignedField<4>(this, mix.delayUp)); - internalField.Append(new UnsignedField<4>(this, mix.delayDown)); - internalField.Append(new UnsignedField<4>(this, mix.speedUp)); - internalField.Append(new UnsignedField<4>(this, mix.speedDown)); - internalField.Append(new SignedField<8>(this, _curveParam)); - internalField.Append(new SignedField<8>(this, _offset)); - } } virtual void beforeExport() @@ -1193,32 +786,18 @@ class MixField: public TransformedField { _curveParam = 0; } - if (IS_ARM(board)) { - exportGvarParam(mix.weight, _weight, version); - if (version >= 214) - exportGvarParam(mix.sOffset, _offset, version); - else - splitGvarParam(mix.sOffset, _offset, _offsetMode, board, version); - } - else { - splitGvarParam(mix.weight, _weight, _weightMode, board, version); + exportGvarParam(mix.weight, _weight, version); + if (version >= 214) + exportGvarParam(mix.sOffset, _offset, version); + else splitGvarParam(mix.sOffset, _offset, _offsetMode, board, version); - } } virtual void afterImport() { - if (IS_TARANIS(board) && version < 216) { - if (mix.srcRaw.type == SOURCE_TYPE_STICK && mix.srcRaw.index < CPN_MAX_STICKS) { - if (!mix.noExpo) { - mix.srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, mix.srcRaw.index); - } - } - } - if (mix.srcRaw.type != SOURCE_TYPE_NONE) { mix.destCh = _destCh + 1; - if (!IS_ARM(board) || (!IS_STM32(board) && version < 218) || version < 216) { + if (!IS_STM32(board) && version < 218) { if (!_curveMode) mix.curve = CurveReference(CurveReference::CURVE_REF_DIFF, smallGvarExport(_curveParam)); else if (_curveParam > 6) @@ -1230,24 +809,9 @@ class MixField: public TransformedField { } } - if (IS_ARM(board)) { - importGvarParam(mix.weight, _weight, version); - if (version >= 214) - importGvarParam(mix.sOffset, _offset, version); - else - concatGvarParam(mix.sOffset, _offset, _offsetMode, board, version); - } - else { - concatGvarParam(mix.weight, _weight, _weightMode, board, version); - concatGvarParam(mix.sOffset, _offset, _offsetMode, board, version); - } + importGvarParam(mix.weight, _weight, version); + importGvarParam(mix.sOffset, _offset, version); - if (IS_TARANIS(board) && version < 216) { - if (mix.sOffset >= -500 && mix.sOffset <= 500 && mix.weight >= -500 && mix.weight <= 500) { - mix.sOffset = divRoundClosest(mix.sOffset * mix.weight, 100); - } - if (mix.carryTrim < 0) mix.carryTrim = 0; - } qCDebug(eepromImport) << QString("imported %1: ch %2, name '%3'").arg(internalField.getName()).arg(mix.destCh).arg(mix.name); } @@ -1275,7 +839,7 @@ class InputField: public TransformedField { board(board), version(version) { - if (IS_ARM(board) && version >= 218) { + if (version >= 218) { internalField.Append(new UnsignedField<2>(this, expo.mode, "Mode")); internalField.Append(new UnsignedField<14>(this, expo.scale, "Scale")); internalField.Append(new SourceField<10>(this, expo.srcRaw, board, version, 0)); @@ -1294,7 +858,7 @@ class InputField: public TransformedField { internalField.Append(new SignedField<8>(this, _offset, "Offset")); internalField.Append(new CurveReferenceField(this, expo.curve, board, version)); } - else if (IS_TARANIS(board) && version >= 217) { + else if (IS_TARANIS(board)) { internalField.Append(new SourceField<10>(this, expo.srcRaw, board, version, 0)); internalField.Append(new UnsignedField<14>(this, expo.scale, "Scale")); internalField.Append(new UnsignedField<8>(this, expo.chn, "Channel")); @@ -1307,7 +871,7 @@ class InputField: public TransformedField { internalField.Append(new SignedField<8>(this, _offset, "Offset")); internalField.Append(new CurveReferenceField(this, expo.curve, board, version)); } - else if (IS_ARM(board) && version >= 217) { + else { internalField.Append(new UnsignedField<2>(this, expo.mode, "Mode")); internalField.Append(new UnsignedField<3>(this, expo.chn, "Channel")); internalField.Append(new BoolField<2>(this, _curveMode)); @@ -1317,76 +881,17 @@ class InputField: public TransformedField { internalField.Append(new ZCharField<6>(this, expo.name)); internalField.Append(new SignedField<8>(this, _curveParam)); } - else if (IS_TARANIS(board) && version >= 216) { - internalField.Append(new SourceField<8>(this, expo.srcRaw, board, version, 0)); - internalField.Append(new UnsignedField<16>(this, expo.scale, "Scale")); - internalField.Append(new UnsignedField<8>(this, expo.chn, "Channel")); - internalField.Append(new SwitchField<8>(this, expo.swtch, board, version)); - internalField.Append(new UnsignedField<16>(this, expo.flightModes)); - internalField.Append(new SignedField<8>(this, _weight, "Weight")); - internalField.Append(new SignedField<6>(this, expo.carryTrim, "CarryTrim")); - internalField.Append(new UnsignedField<2>(this, expo.mode, "Mode")); - internalField.Append(new ZCharField<8>(this, expo.name)); - internalField.Append(new SignedField<8>(this, _offset, "Offset")); - internalField.Append(new CurveReferenceField(this, expo.curve, board, version)); - internalField.Append(new SpareBitsField<8>(this)); - } - else if (IS_ARM(board) && version >= 216) { - internalField.Append(new UnsignedField<2>(this, expo.mode, "Mode")); - internalField.Append(new UnsignedField<4>(this, expo.chn, "Channel")); - internalField.Append(new BoolField<2>(this, _curveMode)); - internalField.Append(new SwitchField<8>(this, expo.swtch, board, version)); - internalField.Append(new UnsignedField<16>(this, expo.flightModes, "Phases")); - internalField.Append(new SignedField<8>(this, _weight, "Weight")); - internalField.Append(new ZCharField<6>(this, expo.name)); - internalField.Append(new SignedField<8>(this, _curveParam)); - } - else if (IS_ARM(board)) { - internalField.Append(new UnsignedField<8>(this, expo.mode, "Mode")); - internalField.Append(new UnsignedField<8>(this, expo.chn, "Channel")); - internalField.Append(new SwitchField<8>(this, expo.swtch, board, version)); - internalField.Append(new UnsignedField<16>(this, expo.flightModes, "Phases")); - internalField.Append(new SignedField<8>(this, _weight, "Weight")); - internalField.Append(new BoolField<8>(this, _curveMode)); - if (HAS_LARGE_LCD(board)) { - internalField.Append(new ZCharField<8>(this, expo.name)); - internalField.Append(new SpareBitsField<16>(this)); - } - else { - internalField.Append(new ZCharField<6>(this, expo.name)); - } - internalField.Append(new SignedField<8>(this, _curveParam)); - } - else if (IS_DBLRAM(board, version) && IS_AFTER_RELEASE_23_MARCH_2013(board, version)) { - internalField.Append(new UnsignedField<2>(this, expo.mode)); - internalField.Append(new UnsignedField<2>(this, expo.chn)); - internalField.Append(new BoolField<1>(this, _curveMode)); - internalField.Append(new SpareBitsField<3>(this)); - internalField.Append(new UnsignedField<8>(this, expo.flightModes)); - internalField.Append(new SwitchField<8>(this, expo.swtch, board, version)); - internalField.Append(new SignedField<8>(this, _weight)); - internalField.Append(new SignedField<8>(this, _curveParam)); - } - else { - internalField.Append(new UnsignedField<2>(this, expo.mode)); - internalField.Append(new SwitchField<6>(this, expo.swtch, board, version)); - internalField.Append(new UnsignedField<2>(this, expo.chn)); - internalField.Append(new UnsignedField<5>(this, expo.flightModes)); - internalField.Append(new BoolField<1>(this, _curveMode)); - internalField.Append(new SignedField<8>(this, _weight)); - internalField.Append(new SignedField<8>(this, _curveParam)); - } } virtual void beforeExport() { _weight = smallGvarImport(expo.weight); - if ((IS_HORUS_OR_TARANIS(board) && version >= 216) || (IS_ARM(board) && version >= 218)) { + if (IS_HORUS_OR_TARANIS(board) || version >= 218) { _offset = smallGvarImport(expo.offset); } - if (!IS_ARM(board) || (!IS_TARANIS(board) && version < 218) || version < 216) { + if (!IS_TARANIS(board) && version < 218) { if (expo.curve.type==CurveReference::CURVE_REF_FUNC && expo.curve.value) { _curveMode = true; _curveParam = expo.curve.value; @@ -1404,17 +909,17 @@ class InputField: public TransformedField { virtual void afterImport() { - if ((IS_STM32(board) && version < 216 )|| (!IS_STM32(board) && expo.mode)) { + if (!IS_STM32(board) && expo.mode) { expo.srcRaw = RawSource(SOURCE_TYPE_STICK, expo.chn); } expo.weight = smallGvarExport(_weight); - if ((IS_STM32(board) && version >= 216) || (IS_ARM(board) && version >= 218)) { + if (IS_STM32(board) || version >= 218) { expo.offset = smallGvarExport(_offset); } - if (!IS_ARM(board) || (!IS_TARANIS(board) && version < 218) || version < 216) { + if (!IS_TARANIS(board) && version < 218) { if (!_curveMode) expo.curve = CurveReference(CurveReference::CURVE_REF_EXPO, smallGvarExport(_curveParam)); else if (_curveParam > 6) @@ -1471,7 +976,7 @@ class LimitField: public StructField { LimitField(DataField * parent, LimitData & limit, Board::Type board, unsigned int version): StructField(parent, "Limit") { - if (IS_ARM(board) && version >= 218) { + if (version >= 218) { Append(new ConversionField< SignedField<11> >(this, limit.min, exportLimitValue<1000, 1024>, importLimitValue<1000, 1024>)); Append(new ConversionField< SignedField<11> >(this, limit.max, exportLimitValue<-1000, 1024>, importLimitValue<-1000, 1024>)); Append(new SignedField<10>(this, limit.ppmCenter)); @@ -1485,7 +990,7 @@ class LimitField: public StructField { else Append(new ZCharField<4>(this, limit.name)); } - else if (IS_TARANIS(board) && version >= 217) { + else if (IS_TARANIS(board)) { Append(new ConversionField< SignedField<11> >(this, limit.min, exportLimitValue<1000, 1024>, importLimitValue<1000, 1024>)); Append(new ConversionField< SignedField<11> >(this, limit.max, exportLimitValue<-1000, 1024>, importLimitValue<-1000, 1024>)); Append(new SignedField<10>(this, limit.ppmCenter)); @@ -1497,26 +1002,15 @@ class LimitField: public StructField { Append(new ZCharField<6>(this, limit.name)); } else { - if (IS_TARANIS(board) && version >= 216) { - Append(new ConversionField< SignedField<16> >(this, limit.min, exportLimitValue<1000, 4096>, importLimitValue<1000, 4096>)); - Append(new ConversionField< SignedField<16> >(this, limit.max, exportLimitValue<-1000, 4096>, importLimitValue<-1000, 4096>)); - Append(new SignedField<8>(this, limit.ppmCenter)); - Append(new ConversionField< SignedField<14> >(this, limit.offset, exportLimitValue<0, 4096>, importLimitValue<0, 4096>)); - } - else { - Append(new ConversionField< SignedField<8> >(this, limit.min, +100, 10)); - Append(new ConversionField< SignedField<8> >(this, limit.max, -100, 10)); - Append(new SignedField<8>(this, limit.ppmCenter)); - Append(new SignedField<14>(this, limit.offset)); - } + Append(new ConversionField< SignedField<8> >(this, limit.min, +100, 10)); + Append(new ConversionField< SignedField<8> >(this, limit.max, -100, 10)); + Append(new SignedField<8>(this, limit.ppmCenter)); + Append(new SignedField<14>(this, limit.offset)); Append(new BoolField<1>(this, limit.symetrical)); Append(new BoolField<1>(this, limit.revert)); if (HAS_LARGE_LCD(board)) { Append(new ZCharField<6>(this, limit.name)); } - if (IS_TARANIS(board) && version >= 216) { - Append(new SignedField<8>(this, limit.curve.value)); - } } } }; @@ -1530,26 +1024,23 @@ class CurvesField: public TransformedField { board(board), version(version), maxCurves(MAX_CURVES(board, version)), - maxPoints(IS_ARM(board) ? 512 : 112-8) + maxPoints(512) { for (int i=0; i= 218) { + if (version >= 218) { internalField.Append(new UnsignedField<1>(this, (unsigned int &)curves[i].type)); internalField.Append(new BoolField<1>(this, curves[i].smooth)); internalField.Append(new ConversionField< SignedField<6> >(this, curves[i].count, -5)); internalField.Append(new ZCharField<3>(this, curves[i].name)); } - else if (IS_TARANIS(board) && version >= 216) { + else if (IS_TARANIS(board)) { internalField.Append(new UnsignedField<3>(this, (unsigned int &)curves[i].type)); internalField.Append(new BoolField<1>(this, curves[i].smooth)); internalField.Append(new SpareBitsField<4>(this)); internalField.Append(new ConversionField< SignedField<8> >(this, curves[i].count, -5)); } - else if (IS_ARM(board)) { - internalField.Append(new SignedField<16>(this, _curves[i])); - } else { - internalField.Append(new SignedField<8>(this, _curves[i])); + internalField.Append(new SignedField<16>(this, _curves[i])); } } @@ -1567,7 +1058,7 @@ class CurvesField: public TransformedField { for (int i=0; i= 216) { + if (IS_STM32(board)) { offset += (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count); if (offset > maxPoints) { setError(DataField::tr("OpenTX only accepts %1 points in all curves").arg(maxPoints)); @@ -1599,7 +1090,7 @@ class CurvesField: public TransformedField { for (int i=0; i= 216) - addConversion(LS_FN_VEQUAL, val++); - if (afterrelease21March2013) - addConversion(LS_FN_VALMOSTEQUAL, val++); + addConversion(LS_FN_VEQUAL, val++); + addConversion(LS_FN_VALMOSTEQUAL, val++); addConversion(LS_FN_VPOS, val++); addConversion(LS_FN_VNEG, val++); - if (IS_ARM(board) && version >= 216) val++; // later RANGE + val++; // later RANGE addConversion(LS_FN_APOS, val++); addConversion(LS_FN_ANEG, val++); addConversion(LS_FN_AND, val++); addConversion(LS_FN_OR, val++); addConversion(LS_FN_XOR, val++); - if (IS_ARM(board) && version >= 216) addConversion(LS_FN_EDGE, val++); + addConversion(LS_FN_EDGE, val++); addConversion(LS_FN_EQUAL, val++); - if (!afterrelease21March2013) - addConversion(LS_FN_NEQUAL, val++); addConversion(LS_FN_GREATER, val++); addConversion(LS_FN_LESS, val++); - if (!afterrelease21March2013) { - addConversion(LS_FN_EGREATER, val++); - addConversion(LS_FN_ELESS, val++); - } addConversion(LS_FN_DPOS, val++); addConversion(LS_FN_DAPOS, val++); addConversion(LS_FN_TIMER, val++); - if (version >= 216) - addConversion(LS_FN_STICKY, val++); + addConversion(LS_FN_STICKY, val++); } }; @@ -1700,13 +1181,6 @@ class AndSwitchesConversionTable: public ConversionTable { if (IS_STM32(board)) { for (int i=1; i<=MAX_SWITCHES_POSITION(board, version); i++) { int s = switchIndex(i, board, version); - if (IS_TARANIS(board) && version < 217) { - // SF positions 16 and 17 => 16 and 18 - // SH positions 21 and 22 => 22 and 24 - if (s == 17 || s == 23) { - continue; - } - } addConversion(RawSwitch(SWITCH_TYPE_SWITCH, -s), -val); addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++); } @@ -1739,24 +1213,7 @@ class AndSwitchesConversionTable: public ConversionTable { static ConversionTable * getInstance(Board::Type board, unsigned int version) { - if (IS_ARM(board) && version >= 216) - return new SwitchesConversionTable(board, version); - else - return new AndSwitchesConversionTable(board, version); - -#if 0 - static std::list internalCache; - - for (std::list::iterator it=internalCache.begin(); it!=internalCache.end(); it++) { - Cache element = *it; - if (element.board == board && element.version == version && element.flags == flags) - return element.table; - } - - Cache element(board, version, flags, new SwitchesConversionTable(board, version, flags)); - internalCache.push_back(element); - return element.table; -#endif + return new SwitchesConversionTable(board, version); } @@ -1770,7 +1227,7 @@ class AndSwitchesConversionTable: public ConversionTable { class LogicalSwitchField: public TransformedField { public: - LogicalSwitchField(DataField * parent, LogicalSwitchData & csw, Board::Type board, unsigned int version, unsigned int variant, ModelData * model=NULL): + LogicalSwitchField(DataField * parent, LogicalSwitchData & csw, Board::Type board, unsigned int version, unsigned int variant, ModelData * model=nullptr): TransformedField(parent, internalField), internalField(this, "LogicalSwitch"), csw(csw), @@ -1779,14 +1236,14 @@ class LogicalSwitchField: public TransformedField { variant(variant), model(model), functionsConversionTable(board, version), - sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, (version >= 214 || (!IS_ARM(board) && version >= 213)) ? 0 : FLAG_NOSWITCHES)), + sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, 0)), switchesConversionTable(SwitchesConversionTable::getInstance(board, version)), andswitchesConversionTable(AndSwitchesConversionTable::getInstance(board, version)), v1(0), v2(0), v3(0) { - if (IS_ARM(board) && version >= 218) { + if (version >= 218) { internalField.Append(new ConversionField< UnsignedField<8> >(this, csw.func, &functionsConversionTable, "Function")); internalField.Append(new SignedField<10>(this, v1)); internalField.Append(new SignedField<10>(this, v3)); @@ -1795,49 +1252,18 @@ class LogicalSwitchField: public TransformedField { internalField.Append(new SpareBitsField<2>(this)); internalField.Append(new SignedField<16>(this, v2)); } - else if (IS_ARM(board) && version >= 217) { + else { internalField.Append(new ConversionField< UnsignedField<6> >(this, csw.func, &functionsConversionTable, "Function")); internalField.Append(new SignedField<10>(this, v1)); internalField.Append(new SignedField<16>(this, v2)); internalField.Append(new SignedField<16>(this, v3)); } - else if (IS_ARM(board) && version >= 216) { - internalField.Append(new SignedField<8>(this, v1)); - internalField.Append(new SignedField<16>(this, v2)); - internalField.Append(new SignedField<16>(this, v3)); - internalField.Append(new ConversionField< UnsignedField<8> >(this, csw.func, &functionsConversionTable, "Function")); - } - else if (IS_ARM(board) && version >= 215) { - internalField.Append(new SignedField<16>(this, v1)); - internalField.Append(new SignedField<16>(this, v2)); - internalField.Append(new ConversionField< UnsignedField<8> >(this, csw.func, &functionsConversionTable, "Function")); - } - else if (IS_ARM(board)) { - internalField.Append(new SignedField<8>(this, v1)); - internalField.Append(new SignedField<8>(this, v2)); - internalField.Append(new ConversionField< UnsignedField<8> >(this, csw.func, &functionsConversionTable, "Function")); - } - else { - internalField.Append(new SignedField<8>(this, v1)); - internalField.Append(new SignedField<8>(this, v2)); - if (version >= 213) - internalField.Append(new ConversionField< UnsignedField<4> >(this, csw.func, &functionsConversionTable, "Function")); - else - internalField.Append(new ConversionField< UnsignedField<8> >(this, csw.func, &functionsConversionTable, "Function")); - } - if (IS_ARM(board)) { - int scale = (version >= 216 ? 0 : 5); - internalField.Append(new ConversionField< UnsignedField<8> >(this, csw.delay, 0, scale)); - internalField.Append(new ConversionField< UnsignedField<8> >(this, csw.duration, 0, scale)); - if (version >= 214 && version <= 217) { - internalField.Append(new ConversionField< SignedField<8> >(this, (int &)csw.andsw, andswitchesConversionTable, "AND switch")); - } - } - else { - if (version >= 213) { - internalField.Append(new ConversionField< UnsignedField<4> >(this, (unsigned int &)csw.andsw, andswitchesConversionTable, "AND switch")); - } + int scale = 0; + internalField.Append(new ConversionField< UnsignedField<8> >(this, csw.delay, 0, scale)); + internalField.Append(new ConversionField< UnsignedField<8> >(this, csw.duration, 0, scale)); + if (version == 217) { + internalField.Append(new ConversionField< SignedField<8> >(this, (int &)csw.andsw, andswitchesConversionTable, "AND switch")); } } @@ -1887,83 +1313,13 @@ class LogicalSwitchField: public TransformedField { switchesConversionTable->importValue(v2, csw.val2); } else if (csw.func >= LS_FN_EQUAL && csw.func <= LS_FN_ELESS) { - if (IS_ARM(board)) { - sourcesConversionTable->importValue((uint32_t)v1, csw.val1); - sourcesConversionTable->importValue((uint32_t)v2, csw.val2); - } - else { - sourcesConversionTable->importValue((uint8_t)v1, csw.val1); - sourcesConversionTable->importValue((uint8_t)v2, csw.val2); - } - if (IS_TARANIS(board) && version < 216) { - RawSource val1(csw.val1); - if (val1.type == SOURCE_TYPE_STICK && val1.index < CPN_MAX_STICKS) { - csw.val1 = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, val1.index).toValue(); - } - RawSource val2(csw.val2); - if (val2.type == SOURCE_TYPE_STICK && val2.index < CPN_MAX_STICKS) { - csw.val2 = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, val2.index).toValue(); - } - } + sourcesConversionTable->importValue((uint32_t)v1, csw.val1); + sourcesConversionTable->importValue((uint32_t)v2, csw.val2); } else if (csw.func != LS_FN_OFF) { - if (IS_ARM(board) && version >= 217) { - sourcesConversionTable->importValue((uint32_t)v1, csw.val1); - } - else { - sourcesConversionTable->importValue((uint8_t)v1, csw.val1); - } - if (IS_TARANIS(board) && version < 216) { - RawSource val1(csw.val1); - if (val1.type == SOURCE_TYPE_STICK && val1.index < CPN_MAX_STICKS) { - csw.val1 = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, val1.index).toValue(); - } - } + sourcesConversionTable->importValue((uint32_t)v1, csw.val1); csw.val2 = v2; RawSource val1(csw.val1); - if (IS_ARM(board) && version < 216 && val1.type == SOURCE_TYPE_TELEMETRY) { - switch (val1.index) { - case TELEMETRY_SOURCE_TIMER1: - case TELEMETRY_SOURCE_TIMER2: - case TELEMETRY_SOURCE_TIMER3: - csw.val2 = (csw.val2 + 128) * 3; - break; - case TELEMETRY_SOURCE_ALT: - case TELEMETRY_SOURCE_GPS_ALT: - case TELEMETRY_SOURCE_ALT_MIN: - case TELEMETRY_SOURCE_ALT_MAX: - csw.val2 = (csw.val2 + 128) * 8 - 500; - break; - case TELEMETRY_SOURCE_RPM: - case TELEMETRY_SOURCE_RPM_MAX: - csw.val2 = (csw.val2 + 128) * 50; - break; - case TELEMETRY_SOURCE_T1: - case TELEMETRY_SOURCE_T2: - case TELEMETRY_SOURCE_T1_MAX: - case TELEMETRY_SOURCE_T2_MAX: - csw.val2 = (csw.val2 + 128) + 30; - break; - case TELEMETRY_SOURCE_CELL: - case TELEMETRY_SOURCE_HDG: - csw.val2 = (csw.val2 + 128) * 2; - break; - case TELEMETRY_SOURCE_DIST: - case TELEMETRY_SOURCE_DIST_MAX: - csw.val2 = (csw.val2 + 128) * 8; - break; - case TELEMETRY_SOURCE_CURRENT: - case TELEMETRY_SOURCE_POWER: - csw.val2 = (csw.val2 + 128) * 5; - break; - case TELEMETRY_SOURCE_CONSUMPTION: - csw.val2 = (csw.val2 + 128) * 20; - break; - default: - csw.val2 += 128; - break; - } - } } qCDebug(eepromImport) << QString("imported %1: %2").arg(internalField.getName()).arg(csw.funcToString()); } @@ -1991,108 +1347,52 @@ class CustomFunctionsConversionTable: public ConversionTable { { int val=0; - if (version >= 216) { - for (int i=0; i= 216) { - addConversion(FuncTrainer, val); - addConversion(FuncTrainerRUD, val); - addConversion(FuncTrainerELE, val); - addConversion(FuncTrainerTHR, val); - addConversion(FuncTrainerAIL, val); - val++; - } - else { - addConversion(FuncTrainer, val++); - addConversion(FuncTrainerRUD, val++); - addConversion(FuncTrainerELE, val++); - addConversion(FuncTrainerTHR, val++); - addConversion(FuncTrainerAIL, val++); - } + addConversion(FuncTrainer, val); + addConversion(FuncTrainerRUD, val); + addConversion(FuncTrainerELE, val); + addConversion(FuncTrainerTHR, val); + addConversion(FuncTrainerAIL, val); + val++; addConversion(FuncInstantTrim, val++); - if (version >= 216) { - addConversion(FuncReset, val++); - if (IS_ARM(board)) { - addConversion(FuncSetTimer1, val); - addConversion(FuncSetTimer2, val); - addConversion(FuncSetTimer3, val); - val++; - } - for (int i=0; i= 213 && !IS_ARM(board)) - addConversion(FuncPlayBoth, val++); - addConversion(FuncPlayValue, val++); - if (IS_ARM(board)) { - addConversion(FuncReserve, val++); - if (IS_STM32(board)) - addConversion(FuncPlayScript, val++); - else - addConversion(FuncReserve, val++); - addConversion(FuncReserve, val++); - addConversion(FuncBackgroundMusic, val++); - addConversion(FuncBackgroundMusicPause, val++); - } - addConversion(FuncVario, val++); - addConversion(FuncPlayHaptic, val++); - if (IS_2560(board) || IS_ARM(board) ) - addConversion(FuncLogs, val++); - addConversion(FuncBacklight, val++); - if (IS_STM32(board)) - addConversion(FuncScreenshot, val++); - } - else { - addConversion(FuncPlaySound, val++); - if (!IS_HORUS_OR_TARANIS(board)) - addConversion(FuncPlayHaptic, val++); - addConversion(FuncReset, val++); - addConversion(FuncVario, val++); - addConversion(FuncPlayPrompt, val++); - if (version >= 213 && !IS_ARM(board)) - addConversion(FuncPlayBoth, val++); - addConversion(FuncPlayValue, val++); - if (IS_2560(board) || IS_ARM(board) ) - addConversion(FuncLogs, val++); - if (IS_ARM(board)) - addConversion(FuncVolume, val++); - addConversion(FuncBacklight, val++); - if (IS_ARM(board)) { - addConversion(FuncBackgroundMusic, val++); - addConversion(FuncBackgroundMusicPause, val++); - } - for (int i=0; i<5; i++) - addConversion(FuncAdjustGV1+i, val++); - } + addConversion(FuncReset, val++); + addConversion(FuncSetTimer1, val); + addConversion(FuncSetTimer2, val); + addConversion(FuncSetTimer3, val); + val++; + for (int i=0; i> 1; - } - else if (!afterrelease21March2013) { - sw = ((_sw & 0x30) >> 4) + ((_sw & 0x0E) << 1) + ((_sw & 0xC0) >> 1); - } - else { - sw = _sw; - } + sw = _sw; qCDebug(eepromImport) << QString("imported %1").arg(internalField.getName()); } @@ -2146,7 +1437,7 @@ class ArmCustomFunctionField: public TransformedField { version(version), variant(variant), functionsConversionTable(board, version), - sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, version >= 216 ? 0 : FLAG_NONONE)), + sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, 0)), _func(0), _active(0), _mode(0) @@ -2162,24 +1453,12 @@ class ArmCustomFunctionField: public TransformedField { internalField.Append(new ConversionField< UnsignedField<8> >(this, _func, &functionsConversionTable, "Function", DataField::tr("OpenTX on this board doesn't accept this function"))); } - if (IS_TARANIS(board) && version >= 216) + if (IS_TARANIS(board)) internalField.Append(new CharField<8>(this, _param, false)); - else if (IS_TARANIS(board)) - internalField.Append(new CharField<10>(this, _param, false)); else internalField.Append(new CharField<6>(this, _param, false)); - if (version >= 216) { - internalField.Append(new SignedField<8>(this, _active)); - } - else if (version >= 214) { - internalField.Append(new UnsignedField<2>(this, _mode)); - internalField.Append(new UnsignedField<6>(this, (unsigned int &)_active)); - } - else { - internalField.Append(new UnsignedField<8>(this, (unsigned int &)_active)); - internalField.Append(new SpareBitsField<8>(this)); - } + internalField.Append(new SignedField<8>(this, _active)); } static bool hasRepeatParam(const CustomFunctionData & fn) @@ -2193,90 +1472,52 @@ class ArmCustomFunctionField: public TransformedField { _func = fn.func; if (hasRepeatParam(fn)) - _active = (version >= 216 ? fn.repeatParam : (fn.repeatParam/5)); + _active = fn.repeatParam; else _active = (fn.enabled ? 1 : 0); if (fn.func >= FuncOverrideCH1 && fn.func <= FuncOverrideCH32) { - if (version >= 216) { - *((uint16_t *)_param) = fn.param; - *((uint8_t *)(_param+3)) = fn.func - FuncOverrideCH1; - } - else { - *((uint32_t *)_param) = fn.param; - } + *((uint16_t *)_param) = fn.param; + *((uint8_t *)(_param+3)) = fn.func - FuncOverrideCH1; } else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { - if (version >= 216) - *((uint8_t *)(_param+3)) = fn.func - FuncTrainer; + *((uint8_t *)(_param+3)) = fn.func - FuncTrainer; } else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer3) { - if (version >= 216) { - *((uint16_t *)_param) = fn.param; - *((uint8_t *)(_param+3)) = fn.func - FuncSetTimer1; - } + *((uint16_t *)_param) = fn.param; + *((uint8_t *)(_param+3)) = fn.func - FuncSetTimer1; } else if (fn.func >= FuncSetFailsafeInternalModule && fn.func <= FuncSetFailsafeExternalModule) { - if (version >= 216) { - *((uint16_t *)_param) = fn.func - FuncSetFailsafeInternalModule; - } + *((uint16_t *)_param) = fn.func - FuncSetFailsafeInternalModule; } else if (fn.func >= FuncRangeCheckInternalModule && fn.func <= FuncRangeCheckExternalModule) { - if (version >= 216) { - *((uint16_t *)_param) = fn.func - FuncRangeCheckInternalModule; - } + *((uint16_t *)_param) = fn.func - FuncRangeCheckInternalModule; } else if (fn.func >= FuncBindInternalModule && fn.func <= FuncBindExternalModule) { - if (version >= 216) { - *((uint16_t *)_param) = fn.func - FuncBindInternalModule; - } + *((uint16_t *)_param) = fn.func - FuncBindInternalModule; } else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic || fn.func == FuncPlayScript) { memcpy(_param, fn.paramarm, sizeof(_param)); } else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { - if (version >= 216) { - *((uint8_t *)(_param+2)) = fn.adjustMode; - *((uint8_t *)(_param+3)) = fn.func - FuncAdjustGV1; - unsigned int value; - if (fn.adjustMode == 1) - sourcesConversionTable->exportValue(fn.param, (int &)value); - else if (fn.adjustMode == 2) - value = RawSource(fn.param).index; - else - value = fn.param; - *((uint16_t *)_param) = value; - } - else if (version >= 214) { - unsigned int value; - _mode = fn.adjustMode; - if (fn.adjustMode == 1) - sourcesConversionTable->exportValue(fn.param, (int &)value); - else if (fn.adjustMode == 2) - value = RawSource(fn.param).index; - else - value = fn.param; - *((uint32_t *)_param) = value; - } - else { - unsigned int value; + *((uint8_t *)(_param+2)) = fn.adjustMode; + *((uint8_t *)(_param+3)) = fn.func - FuncAdjustGV1; + unsigned int value; + if (fn.adjustMode == 1) sourcesConversionTable->exportValue(fn.param, (int &)value); - *((uint32_t *)_param) = value; - } + else if (fn.adjustMode == 2) + value = RawSource(fn.param).index; + else + value = fn.param; + *((uint16_t *)_param) = value; } else if (fn.func == FuncPlayValue || fn.func == FuncVolume) { unsigned int value; sourcesConversionTable->exportValue(fn.param, (int &)value); - if (version >= 216) - *((uint16_t *)_param) = value; - else - *((uint32_t *)_param) = value; + *((uint16_t *)_param) = value; } else if (fn.func == FuncReset) { - if (version >= 217) - *((uint32_t *)_param) = fn.param; - else - *((uint32_t *)_param) = (fn.param < 2 ? fn.param : fn.param-1); + *((uint32_t *)_param) = fn.param; } else { *((uint32_t *)_param) = fn.param; @@ -2289,19 +1530,14 @@ class ArmCustomFunctionField: public TransformedField { fn.func = (AssignFunc)_func; if (hasRepeatParam(fn)) - fn.repeatParam = (version >= 216 ? _active : (_active*5)); + fn.repeatParam = _active; else fn.enabled = (_active & 0x01); unsigned int value=0, mode=0, index=0; - if (version >= 216) { - value = *((uint16_t *)_param); - mode = *((uint8_t *)(_param+2)); - index = *((uint8_t *)(_param+3)); - } - else { - value = *((uint32_t *)_param); - } + value = *((uint16_t *)_param); + mode = *((uint8_t *)(_param+2)); + index = *((uint8_t *)(_param+3)); if (fn.func >= FuncOverrideCH1 && fn.func <= FuncOverrideCH32) { fn.func = AssignFunc(fn.func + index); @@ -2322,40 +1558,20 @@ class ArmCustomFunctionField: public TransformedField { sourcesConversionTable->importValue(value, (int &)fn.param); } else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { - if (version >= 216) { - fn.func = AssignFunc(fn.func + index); - fn.adjustMode = mode; - if (fn.adjustMode == 1) - sourcesConversionTable->importValue(value, (int &)fn.param); - else if (fn.adjustMode == 2) - fn.param = RawSource(SOURCE_TYPE_GVAR, value).toValue(); - else - fn.param = (int16_t)value; - } - else if (version >= 214) { - fn.adjustMode = _mode; - if (fn.adjustMode == 1) - sourcesConversionTable->importValue(value, (int &)fn.param); - else if (fn.adjustMode == 2) - fn.param = RawSource(SOURCE_TYPE_GVAR, value).toValue(); - else - fn.param = (int8_t)value; - } - else { + fn.func = AssignFunc(fn.func + index); + fn.adjustMode = mode; + if (fn.adjustMode == 1) sourcesConversionTable->importValue(value, (int &)fn.param); - } + else if (fn.adjustMode == 2) + fn.param = RawSource(SOURCE_TYPE_GVAR, value).toValue(); + else + fn.param = (int16_t)value; } else if (fn.func == FuncPlayValue) { - if (version >= 213) - sourcesConversionTable->importValue(value, (int &)fn.param); - else - SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->importValue(value, (int &)fn.param); + sourcesConversionTable->importValue(value, (int &)fn.param); } else if (fn.func == FuncReset) { - if (version >= 217) - fn.param = value; - else - fn.param = (value < 2 ? value : value+1); + fn.param = value; } else { fn.param = value; @@ -2387,36 +1603,16 @@ class AvrCustomFunctionField: public TransformedField { version(version), variant(variant), functionsConversionTable(board, version), - sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, version >= 216 ? 0 : FLAG_NONONE)), + sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, 0)), _param(0), _mode(0), _union_param(0), _active(0) { - if (version >= 217 && IS_2560(board)) { - internalField.Append(new SwitchField<8>(this, fn.swtch, board, version)); - internalField.Append(new ConversionField< UnsignedField<8> >(this, (unsigned int &)fn.func, &functionsConversionTable, "Function", DataField::tr("OpenTX on this board doesn't accept this function"))); - internalField.Append(new UnsignedField<2>(this, fn.adjustMode)); - internalField.Append(new UnsignedField<4>(this, _union_param)); - internalField.Append(new UnsignedField<1>(this, _active)); - internalField.Append(new SpareBitsField<1>(this)); - } - else if (version >= 216) { - internalField.Append(new SwitchField<6>(this, fn.swtch, board, version)); - internalField.Append(new ConversionField< UnsignedField<4> >(this, (unsigned int &)fn.func, &functionsConversionTable, "Function", DataField::tr("OpenTX on this board doesn't accept this function"))); - internalField.Append(new UnsignedField<5>(this, _union_param)); - internalField.Append(new UnsignedField<1>(this, _active)); - } - else if (version >= 213) { - internalField.Append(new SwitchField<8>(this, fn.swtch, board, version)); - internalField.Append(new UnsignedField<3>(this, _union_param)); - internalField.Append(new ConversionField< UnsignedField<5> >(this, (unsigned int &)fn.func, &functionsConversionTable, "Function", DataField::tr("OpenTX on this board doesn't accept this function"))); - } - else { - internalField.Append(new SwitchField<8>(this, fn.swtch, board, version)); - internalField.Append(new ConversionField< UnsignedField<7> >(this, (unsigned int &)fn.func, &functionsConversionTable, "Function", DataField::tr("OpenTX on this board doesn't accept this function"))); - internalField.Append(new BoolField<1>(this, (bool &)fn.enabled)); - } + internalField.Append(new SwitchField<6>(this, fn.swtch, board, version)); + internalField.Append(new ConversionField< UnsignedField<4> >(this, (unsigned int &)fn.func, &functionsConversionTable, "Function", DataField::tr("OpenTX on this board doesn't accept this function"))); + internalField.Append(new UnsignedField<5>(this, _union_param)); + internalField.Append(new UnsignedField<1>(this, _active)); internalField.Append(new UnsignedField<8>(this, _param)); } @@ -2426,128 +1622,54 @@ class AvrCustomFunctionField: public TransformedField { _active = (fn.enabled ? 1 : 0); if (fn.func >= FuncOverrideCH1 && fn.func <= FuncOverrideCH32) { - if (version >= 216) - _union_param = fn.func - FuncOverrideCH1; - else if (version >= 213) - _active += ((fn.func % 4) << 1); + _union_param = fn.func - FuncOverrideCH1; } else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { - if (version >= 216) - _union_param = fn.func - FuncTrainer; + _union_param = fn.func - FuncTrainer; } else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { - if (version >= 217 && IS_2560(board)) { - _union_param = (fn.func - FuncAdjustGV1); - if (fn.adjustMode == 1) - sourcesConversionTable->exportValue(fn.param, (int &)_param); - else if (fn.adjustMode == 2) - _param = RawSource(fn.param).index; - } - else if (version >= 216) { - _union_param = fn.adjustMode; - _union_param += (fn.func - FuncAdjustGV1) << 2; - if (fn.adjustMode == 1) - sourcesConversionTable->exportValue(fn.param, (int &)_param); - else if (fn.adjustMode == 2) - _param = RawSource(fn.param).index; - } - else if (version >= 213) { - _active += (fn.adjustMode << 1); - if (fn.adjustMode == 1) - sourcesConversionTable->exportValue(fn.param, (int &)_param); - else if (fn.adjustMode == 2) - _param = RawSource(fn.param).index; - } - else { + _union_param = fn.adjustMode; + _union_param += (fn.func - FuncAdjustGV1) << 2; + if (fn.adjustMode == 1) sourcesConversionTable->exportValue(fn.param, (int &)_param); - } + else if (fn.adjustMode == 2) + _param = RawSource(fn.param).index; } else if (fn.func == FuncPlayValue) { - if (version >= 216) { - _union_param = fn.repeatParam / 10; - sourcesConversionTable->exportValue(fn.param, (int &)_param); - } - else if (version >= 213) { - _active = fn.repeatParam / 10; - sourcesConversionTable->exportValue(fn.param, (int &)_param); - } - else { - SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->exportValue(fn.param, (int &)_param); - } + _union_param = fn.repeatParam / 10; + sourcesConversionTable->exportValue(fn.param, (int &)_param); } else if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayBoth) { - if (version >= 216) { - _union_param = fn.repeatParam / 10; - } - else if (version >= 213) { - _active = fn.repeatParam / 10; - } + _union_param = fn.repeatParam / 10; } } virtual void afterImport() { fn.param = _param; - if (version >= 213) { - fn.enabled = (_active & 0x01); - } + fn.enabled = (_active & 0x01); if (fn.func >= FuncOverrideCH1 && fn.func <= FuncOverrideCH32) { - if (version >= 216) - fn.func = AssignFunc(fn.func + _union_param); - else if (version >= 213) - fn.func = AssignFunc(((fn.func >> 2) << 2) + ((_active >> 1) & 0x03)); + fn.func = AssignFunc(fn.func + _union_param); fn.param = (int8_t)fn.param; } else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { - if (version >= 216) - fn.func = AssignFunc(fn.func + _union_param); + fn.func = AssignFunc(fn.func + _union_param); } else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { - if (version >= 217 && IS_2560(board)) { - fn.func = AssignFunc(fn.func + _union_param); - if (fn.adjustMode == 1) - sourcesConversionTable->importValue(_param, (int &)fn.param); - else if (fn.adjustMode == 2) - fn.param = RawSource(SOURCE_TYPE_GVAR, _param).toValue(); - } - else if (version >= 216) { - fn.func = AssignFunc(fn.func + (_union_param >> 2)); - fn.adjustMode = (_union_param & 0x03); - if (fn.adjustMode == 1) - sourcesConversionTable->importValue(_param, (int &)fn.param); - else if (fn.adjustMode == 2) - fn.param = RawSource(SOURCE_TYPE_GVAR, _param).toValue(); - } - else if (version >= 213) { - fn.adjustMode = ((_active >> 1) & 0x03); - if (fn.adjustMode == 1) - sourcesConversionTable->importValue(_param, (int &)fn.param); - else if (fn.adjustMode == 2) - fn.param = RawSource(SOURCE_TYPE_GVAR, _param).toValue(); - } - else { + fn.func = AssignFunc(fn.func + (_union_param >> 2)); + fn.adjustMode = (_union_param & 0x03); + if (fn.adjustMode == 1) sourcesConversionTable->importValue(_param, (int &)fn.param); - } + else if (fn.adjustMode == 2) + fn.param = RawSource(SOURCE_TYPE_GVAR, _param).toValue(); } else if (fn.func == FuncPlayValue) { - if (version >= 216) { - fn.repeatParam = _union_param * 10; - sourcesConversionTable->importValue(_param, (int &)fn.param); - } - else if (version >= 213) { - fn.repeatParam = _active * 10; - sourcesConversionTable->importValue(_param, (int &)fn.param); - } - else { - SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->importValue(_param, (int &)fn.param); - } + fn.repeatParam = _union_param * 10; + sourcesConversionTable->importValue(_param, (int &)fn.param); } else if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayBoth) { - if (version >= 216) - fn.repeatParam = _union_param * 10; - else if (version >= 213) - fn.repeatParam = _active * 10; + fn.repeatParam = _union_param * 10; } qCDebug(eepromImport) << QString("imported %1").arg(internalField.getName()); } @@ -2579,67 +1701,48 @@ class FrskyScreenField: public DataField { script(this) { for (int i=0; i<4; i++) { - if (IS_ARM(board) && version >= 217) { - if (IS_TARANIS(board)) - bars.Append(new SourceField<16>(this, screen.body.bars[i].source, board, version, variant)); - else - bars.Append(new SourceField<8>(this, screen.body.bars[i].source, board, version, variant)); - bars.Append(new SignedField<16>(this, screen.body.bars[i].barMin)); - bars.Append(new SignedField<16>(this, screen.body.bars[i].barMax)); - } - else { - bars.Append(new TelemetrySourceField<8>(this, screen.body.bars[i].source, board, version)); - bars.Append(new UnsignedField<8>(this, (unsigned &)screen.body.bars[i].barMin)); - bars.Append(new UnsignedField<8>(this, (unsigned &)screen.body.bars[i].barMax)); - } + if (IS_TARANIS(board)) + bars.Append(new SourceField<16>(this, screen.body.bars[i].source, board, version, variant)); + else + bars.Append(new SourceField<8>(this, screen.body.bars[i].source, board, version, variant)); + bars.Append(new SignedField<16>(this, screen.body.bars[i].barMin)); + bars.Append(new SignedField<16>(this, screen.body.bars[i].barMax)); } int columns = (HAS_LARGE_LCD(board) ? 3 : 2); for (int i=0; i<4; i++) { for (int j=0; j= 217) + if (IS_TARANIS(board)) numbers.Append(new SourceField<16>(this, screen.body.lines[i].source[j], board, version, variant)); - else if (IS_ARM(board) && version >= 217) - numbers.Append(new SourceField<8>(this, screen.body.lines[i].source[j], board, version, variant)); else - numbers.Append(new TelemetrySourceField<8>(this, screen.body.lines[i].source[j], board, version)); + numbers.Append(new SourceField<8>(this, screen.body.lines[i].source[j], board, version, variant)); } } for (unsigned i=numbers.size(); i(this)); } - if (IS_TARANIS(board) && version >= 217) { + if (IS_TARANIS(board)) { script.Append(new CharField<8>(this, screen.body.script.filename, true, "Script name")); script.Append(new SpareBitsField<16*8>(this)); } - if (IS_ARM(board) && version >= 217) { - if (IS_TARANIS(board)) - none.Append(new SpareBitsField<24*8>(this)); - else - none.Append(new SpareBitsField<20*8>(this)); - } + if (IS_TARANIS(board)) + none.Append(new SpareBitsField<24*8>(this)); + else + none.Append(new SpareBitsField<20*8>(this)); } virtual void ExportBits(QBitArray & output) { - if (IS_ARM(board) && version >= 217) { - if (screen.type == TELEMETRY_SCREEN_SCRIPT) - script.ExportBits(output); - else if (screen.type == TELEMETRY_SCREEN_NUMBERS) - numbers.ExportBits(output); - else if (screen.type == TELEMETRY_SCREEN_BARS) - bars.ExportBits(output); - else - none.ExportBits(output); - } - else { - if (screen.type == TELEMETRY_SCREEN_NUMBERS) - numbers.ExportBits(output); - else - bars.ExportBits(output); - } + if (screen.type == TELEMETRY_SCREEN_SCRIPT) + script.ExportBits(output); + else if (screen.type == TELEMETRY_SCREEN_NUMBERS) + numbers.ExportBits(output); + else if (screen.type == TELEMETRY_SCREEN_BARS) + bars.ExportBits(output); + else + none.ExportBits(output); } virtual void ImportBits(const QBitArray & input) @@ -2647,43 +1750,27 @@ class FrskyScreenField: public DataField { qCDebug(eepromImport) << QString("importing %1: type: %2").arg(name).arg(screen.type); // NOTA: screen.type should have been imported first! - if (IS_ARM(board) && version >= 217) { - if (screen.type == TELEMETRY_SCREEN_SCRIPT) - script.ImportBits(input); - else if (screen.type == TELEMETRY_SCREEN_NUMBERS) - numbers.ImportBits(input); - else if (screen.type == TELEMETRY_SCREEN_BARS) - bars.ImportBits(input); - else - none.ImportBits(input); - } - else { - if (screen.type == TELEMETRY_SCREEN_NUMBERS) - numbers.ImportBits(input); - else - bars.ImportBits(input); - } + if (screen.type == TELEMETRY_SCREEN_SCRIPT) + script.ImportBits(input); + else if (screen.type == TELEMETRY_SCREEN_NUMBERS) + numbers.ImportBits(input); + else if (screen.type == TELEMETRY_SCREEN_BARS) + bars.ImportBits(input); + else + none.ImportBits(input); } virtual unsigned int size() { // NOTA: screen.type should have been imported first! - if (IS_ARM(board) && version >= 217) { - if (screen.type == TELEMETRY_SCREEN_SCRIPT) - return script.size(); - else if (screen.type == TELEMETRY_SCREEN_NUMBERS) - return numbers.size(); - else if (screen.type == TELEMETRY_SCREEN_BARS) - return bars.size(); - else - return none.size(); - } - else { - if (screen.type == TELEMETRY_SCREEN_NUMBERS) - return numbers.size(); - else - return bars.size(); - } + if (screen.type == TELEMETRY_SCREEN_SCRIPT) + return script.size(); + else if (screen.type == TELEMETRY_SCREEN_NUMBERS) + return numbers.size(); + else if (screen.type == TELEMETRY_SCREEN_BARS) + return bars.size(); + else + return none.size(); } protected: @@ -2739,10 +1826,8 @@ class TelemetryVoltsSourceConversionTable: public ConversionTable int val = 0; addConversion(TELEMETRY_VOLTS_SOURCE_A1, val++); addConversion(TELEMETRY_VOLTS_SOURCE_A2, val++); - if (IS_ARM(board) && version >= 216) { - addConversion(TELEMETRY_VOLTS_SOURCE_A3, val++); - addConversion(TELEMETRY_VOLTS_SOURCE_A4, val++); - } + addConversion(TELEMETRY_VOLTS_SOURCE_A3, val++); + addConversion(TELEMETRY_VOLTS_SOURCE_A4, val++); addConversion(TELEMETRY_VOLTS_SOURCE_FAS, val++); addConversion(TELEMETRY_VOLTS_SOURCE_CELLS, val++); } @@ -2754,9 +1839,7 @@ class ScreenTypesConversionTable: public ConversionTable ScreenTypesConversionTable(Board::Type board, unsigned int version) { int val = 0; - if (IS_ARM(board)) { - addConversion(TELEMETRY_SCREEN_NONE, val++); - } + addConversion(TELEMETRY_SCREEN_NONE, val++); addConversion(TELEMETRY_SCREEN_NUMBERS, val++); addConversion(TELEMETRY_SCREEN_BARS, val++); } @@ -2771,10 +1854,8 @@ class TelemetryCurrentSourceConversionTable: public ConversionTable addConversion(TELEMETRY_CURRENT_SOURCE_NONE, val++); addConversion(TELEMETRY_CURRENT_SOURCE_A1, val++); addConversion(TELEMETRY_CURRENT_SOURCE_A2, val++); - if (IS_ARM(board) && version >= 216) { - addConversion(TELEMETRY_CURRENT_SOURCE_A3, val++); - addConversion(TELEMETRY_CURRENT_SOURCE_A4, val++); - } + addConversion(TELEMETRY_CURRENT_SOURCE_A3, val++); + addConversion(TELEMETRY_CURRENT_SOURCE_A4, val++); addConversion(TELEMETRY_CURRENT_SOURCE_FAS, val++); } }; @@ -2791,116 +1872,29 @@ class FrskyField: public StructField { rssiConversionTable[0] = RSSIConversionTable(0); rssiConversionTable[1] = RSSIConversionTable(1); - if (IS_ARM(board)) { - if (!IS_HORUS(board)) { - if (version >= 217) { - Append(new UnsignedField<8>(this, frsky.voltsSource, "Volts Source")); - Append(new UnsignedField<8>(this, frsky.altitudeSource, "Altitude Source")); - } - else { - for (int i = 0; i < (version >= 216 ? 4 : 2); i++) { - Append(new UnsignedField<8>(this, frsky.channels[i].ratio, "Ratio")); - Append(new SignedField<12>(this, frsky.channels[i].offset, "Offset")); - Append(new UnsignedField<4>(this, frsky.channels[i].type, "Type")); - for (int j = 0; j < 2; j++) - Append(new UnsignedField<8>(this, frsky.channels[i].alarms[j].value, "Alarm value")); - for (int j = 0; j < 2; j++) - Append(new UnsignedField<2>(this, frsky.channels[i].alarms[j].level)); - for (int j = 0; j < 2; j++) - Append(new UnsignedField<1>(this, frsky.channels[i].alarms[j].greater)); - Append(new SpareBitsField<2>(this)); - Append(new UnsignedField<8>(this, frsky.channels[i].multiplier, 0, 5, "Multiplier")); - } - Append(new UnsignedField<8>(this, frsky.usrProto)); - if (version >= 216) { - Append(new ConversionField >(this, frsky.voltsSource, &telemetryVoltsSourceConversionTable, "Volts Source")); - Append(new SpareBitsField<1>(this)); - } - else { - Append(new ConversionField >(this, frsky.voltsSource, &telemetryVoltsSourceConversionTable, "Volts Source")); - } - Append(new ConversionField >(this, frsky.blades, -2)); - Append(new ConversionField >(this, frsky.currentSource, &telemetryCurrentSourceConversionTable, "Current Source")); - } + if (!IS_HORUS(board)) { + Append(new UnsignedField<8>(this, frsky.voltsSource, "Volts Source")); + Append(new UnsignedField<8>(this, frsky.altitudeSource, "Altitude Source")); - if (version >= 217) { - for (int i = 0; i < 4; i++) { - Append(new UnsignedField<2>(this, frsky.screens[i].type)); - } - for (int i = 0; i < 4; i++) { - Append(new FrskyScreenField(this, frsky.screens[i], board, version, variant)); - } - } - else { - Append(new UnsignedField<1>(this, frsky.screens[0].type)); - Append(new UnsignedField<1>(this, frsky.screens[1].type)); - Append(new UnsignedField<1>(this, frsky.screens[2].type)); - Append(new SpareBitsField<5>(this)); - for (int i = 0; i < 3; i++) { - Append(new FrskyScreenField(this, frsky.screens[i], board, version, variant)); - } - } + for (int i = 0; i < 4; i++) { + Append(new UnsignedField<2>(this, frsky.screens[i].type)); } - - if (version >= 217) { - Append(new UnsignedField<7>(this, frsky.varioSource, "Vario Source")); - Append(new BoolField<1>(this, frsky.varioCenterSilent)); - } - else { - Append(new ConversionField< UnsignedField<8> >(this, frsky.varioSource, &telemetryVarioSourceConversionTable, "Vario Source")); - } - Append(new SignedField<8>(this, frsky.varioCenterMax)); - Append(new SignedField<8>(this, frsky.varioCenterMin)); - Append(new SignedField<8>(this, frsky.varioMin)); - Append(new SignedField<8>(this, frsky.varioMax)); - Append(new BoolField<1>(this, rssiAlarms.disabled)); - Append(new SpareBitsField<1>(this)); - Append(new ConversionField >(this, rssiAlarms.warning, -45)); - Append(new SpareBitsField<2>(this)); - Append(new ConversionField >(this, rssiAlarms.critical, -42)); - - if (version == 216) { - Append(new BoolField<1>(this, frsky.mAhPersistent)); - Append(new UnsignedField<15>(this, frsky.storedMah)); - Append(new SignedField<8>(this, frsky.fasOffset)); - } - } - else { - for (int i=0; i<2; i++) { - Append(new UnsignedField<8>(this, frsky.channels[i].ratio, "Ratio")); - Append(new SignedField<12>(this, frsky.channels[i].offset, "Offset")); - Append(new UnsignedField<4>(this, frsky.channels[i].type, "Type")); - for (int j=0; j<2; j++) - Append(new UnsignedField<8>(this, frsky.channels[i].alarms[j].value, "Alarm value")); - for (int j=0; j<2; j++) - Append(new UnsignedField<2>(this, frsky.channels[i].alarms[j].level)); - for (int j=0; j<2; j++) - Append(new UnsignedField<1>(this, frsky.channels[i].alarms[j].greater)); - Append(new UnsignedField<2>(this, frsky.channels[i].multiplier, 0, 3, "Multiplier")); - } - Append(new UnsignedField<2>(this, frsky.usrProto, "USR Proto")); - Append(new ConversionField< UnsignedField<2> >(this, (unsigned int &)frsky.blades, -2)); - for (int i=0; i<2; i++) { - Append(new ConversionField< UnsignedField<1> >(this, frsky.screens[i].type, &screenTypesConversionTable, "Screen Type")); - } - Append(new ConversionField< UnsignedField<2> >(this, frsky.voltsSource, &telemetryVoltsSourceConversionTable, "Volts Source")); - Append(new SignedField<4>(this, frsky.varioMin, "Vario Min")); - Append(new SignedField<4>(this, frsky.varioMax)); - for (int i=0; i<2; i++) { - Append(new ConversionField< UnsignedField<2> >(this, rssiAlarms.level[i], &rssiConversionTable[i], "RSSI level")); - Append(new ConversionField< SignedField<6> >(this, i ==0 ? rssiAlarms.warning : rssiAlarms.critical, -45+i*3, 0, 0, 100, "RSSI value")); - } - for (int i=0; i<2; i++) { + for (int i = 0; i < 4; i++) { Append(new FrskyScreenField(this, frsky.screens[i], board, version, variant)); } - Append(new UnsignedField<3>(this, frsky.varioSource)); - Append(new SignedField<5>(this, frsky.varioCenterMin)); - Append(new ConversionField< UnsignedField<3> >(this, frsky.currentSource, &telemetryCurrentSourceConversionTable, "Current Source")); - Append(new SignedField<5>(this, frsky.varioCenterMax)); - if (version >= 216) { - Append(new SignedField<8>(this, frsky.fasOffset)); - } } + + Append(new UnsignedField<7>(this, frsky.varioSource, "Vario Source")); + Append(new BoolField<1>(this, frsky.varioCenterSilent)); + Append(new SignedField<8>(this, frsky.varioCenterMax)); + Append(new SignedField<8>(this, frsky.varioCenterMin)); + Append(new SignedField<8>(this, frsky.varioMin)); + Append(new SignedField<8>(this, frsky.varioMax)); + Append(new BoolField<1>(this, rssiAlarms.disabled)); + Append(new SpareBitsField<1>(this)); + Append(new ConversionField >(this, rssiAlarms.warning, -45)); + Append(new SpareBitsField<2>(this)); + Append(new ConversionField >(this, rssiAlarms.critical, -42)); } protected: @@ -2911,20 +1905,6 @@ class FrskyField: public StructField { TelemetryCurrentSourceConversionTable telemetryCurrentSourceConversionTable; }; -class MavlinkField: public StructField { - public: - MavlinkField(DataField * parent, MavlinkData & mavlink, Board::Type board, unsigned int version): - StructField(parent, "MavLink") - { - Append(new UnsignedField<4>(this, mavlink.rc_rssi_scale, "Rc_rssi_scale")); - Append(new UnsignedField<1>(this, mavlink.pc_rssi_en, "Pc_rssi_en")); - Append(new SpareBitsField<3>(this)); - Append(new SpareBitsField<8>(this)); - Append(new SpareBitsField<8>(this)); - Append(new SpareBitsField<8>(this)); - } -}; - /* * TODO */ @@ -3043,7 +2023,7 @@ int exportPpmDelay(int delay) { return (delay - 300) / 50; } int importPpmDelay(int delay) { return 300 + 50 * delay; } OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsigned int version, unsigned int variant): - TransformedField(NULL, internalField), + TransformedField(nullptr, internalField), internalField(this, "ModelData"), modelData(modelData), board(board), @@ -3062,21 +2042,15 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig else internalField.Append(new ZCharField<10>(this, modelData.name, "Model name")); - bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version); + internalField.Append(new UnsignedField<8>(this, modelData.moduleData[0].modelId)); + internalField.Append(new UnsignedField<8>(this, modelData.moduleData[1].modelId)); - if (afterrelease21March2013) { - internalField.Append(new UnsignedField<8>(this, modelData.moduleData[0].modelId)); - } - if (IS_ARM(board) && version >= 217) { - internalField.Append(new UnsignedField<8>(this, modelData.moduleData[1].modelId)); - } - - if (HAS_LARGE_LCD(board) && version >= 215) { + if (HAS_LARGE_LCD(board)) { internalField.Append(new CharField<10>(this, modelData.bitmap, true, "Model bitmap")); } for (int i=0; i= 218) { + if (version >= 218) { internalField.Append(new SwitchField<9>(this, modelData.timers[i].mode, board, version, true)); internalField.Append(new UnsignedField<23>(this, modelData.timers[i].val)); internalField.Append(new SignedField<24>(this, modelData.timers[i].pvalue)); @@ -3089,7 +2063,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig else internalField.Append(new ZCharField<3>(this, modelData.timers[i].name, "Timer name")); } - else if (IS_ARM(board) && version >= 217) { + else { internalField.Append(new SwitchField<8>(this, modelData.timers[i].mode, board, version, true)); internalField.Append(new UnsignedField<24>(this, modelData.timers[i].val)); internalField.Append(new SignedField<24>(this, modelData.timers[i].pvalue)); @@ -3102,82 +2076,20 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig else internalField.Append(new ZCharField<3>(this, modelData.timers[i].name, "Timer name")); } - else if ((IS_ARM(board) || IS_2560(board)) && version >= 216) { - internalField.Append(new SwitchField<8>(this, modelData.timers[i].mode, board, version, true)); - internalField.Append(new UnsignedField<16>(this, modelData.timers[i].val)); - internalField.Append(new UnsignedField<2>(this, modelData.timers[i].countdownBeep)); - internalField.Append(new BoolField<1>(this, modelData.timers[i].minuteBeep)); - internalField.Append(new UnsignedField<2>(this, modelData.timers[i].persistent)); - internalField.Append(new SpareBitsField<3>(this)); - internalField.Append(new SignedField<16>(this, modelData.timers[i].pvalue)); - } - else if (afterrelease21March2013) { - internalField.Append(new SwitchField<8>(this, modelData.timers[i].mode, board, version, true)); - internalField.Append(new UnsignedField<12>(this, modelData.timers[i].val)); - internalField.Append(new BoolField<1>(this, (bool &)modelData.timers[i].countdownBeep)); - internalField.Append(new BoolField<1>(this, modelData.timers[i].minuteBeep)); - if (HAS_PERSISTENT_TIMERS(board)) { - internalField.Append(new UnsignedField<1>(this, modelData.timers[i].persistent)); - internalField.Append(new SpareBitsField<1>(this)); - internalField.Append(new SignedField<16>(this, modelData.timers[i].pvalue)); - } - else { - internalField.Append(new SpareBitsField<2>(this)); - } - } - else { - internalField.Append(new SwitchField<8>(this, modelData.timers[i].mode, board, version, true)); - internalField.Append(new UnsignedField<16>(this, modelData.timers[i].val)); - if (HAS_PERSISTENT_TIMERS(board)) { - internalField.Append(new UnsignedField<1>(this, modelData.timers[i].persistent)); - internalField.Append(new SpareBitsField<15>(this)); - } - } } - if (IS_ARM(board)) - internalField.Append(new UnsignedField<3>(this, modelData.telemetryProtocol)); - else - internalField.Append(new ConversionField< UnsignedField<3> >(this, (unsigned int &)modelData.moduleData[0].protocol, &protocolsConversionTable, "Protocol", DataField::tr("OpenTX doesn't accept this telemetry protocol"))); - + internalField.Append(new UnsignedField<3>(this, modelData.telemetryProtocol)); internalField.Append(new BoolField<1>(this, modelData.thrTrim)); - - if (IS_ARM(board) && version >= 217) { - internalField.Append(new BoolField<1>(this, modelData.noGlobalFunctions)); - internalField.Append(new UnsignedField<2>(this, modelData.trimsDisplay)); - internalField.Append(new BoolField<1>(this, modelData.frsky.ignoreSensorIds)); - } - else if (IS_HORUS_OR_TARANIS(board) || (IS_ARM(board) && version >= 216)) { - internalField.Append(new SpareBitsField<4>(this)); - } - else { - internalField.Append(new ConversionField< SignedField<4> >(this, modelData.moduleData[0].channelsCount, &channelsConversionTable, "Channels number", DataField::tr("OpenTX doesn't allow this number of channels"))); - } - - if (version >= 216) - internalField.Append(new SignedField<3>(this, modelData.trimInc)); - else - internalField.Append(new ConversionField< SignedField<3> >(this, modelData.trimInc, +2)); - + internalField.Append(new BoolField<1>(this, modelData.noGlobalFunctions)); + internalField.Append(new UnsignedField<2>(this, modelData.trimsDisplay)); + internalField.Append(new BoolField<1>(this, modelData.frsky.ignoreSensorIds)); + internalField.Append(new SignedField<3>(this, modelData.trimInc)); internalField.Append(new BoolField<1>(this, modelData.disableThrottleWarning)); - - if (IS_HORUS_OR_TARANIS(board) || (IS_ARM(board) && version >= 216)) - internalField.Append(new BoolField<1>(this, modelData.displayChecklist)); - else - internalField.Append(new BoolField<1>(this, modelData.moduleData[0].ppm.pulsePol)); - + internalField.Append(new BoolField<1>(this, modelData.displayChecklist)); internalField.Append(new BoolField<1>(this, modelData.extendedLimits)); internalField.Append(new BoolField<1>(this, modelData.extendedTrims)); internalField.Append(new BoolField<1>(this, modelData.throttleReversed)); - - if (!IS_ARM(board) || version < 216) { - internalField.Append(new ConversionField< SignedField<8> >(this, modelData.moduleData[0].ppm.delay, exportPpmDelay, importPpmDelay)); - } - - if (IS_ARM(board) || IS_2560(board)) - internalField.Append(new UnsignedField<16>(this, modelData.beepANACenter)); - else - internalField.Append(new UnsignedField<8>(this, modelData.beepANACenter)); + internalField.Append(new UnsignedField<16>(this, modelData.beepANACenter)); for (int i=0; i(this, modelData.moduleData[0].ppm.frameLength)); - } - internalField.Append(new UnsignedField<8>(this, modelData.thrTraceSrc, "Throttle Source")); - if (!afterrelease21March2013) { - internalField.Append(new UnsignedField<8>(this, modelData.moduleData[0].modelId)); - } - if (IS_HORUS(board)) internalField.Append(new SwitchesWarningField<32>(this, modelData.switchWarningStates, board, version)); else if (IS_TARANIS_X9E(board)) @@ -3218,111 +2120,57 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig else internalField.Append(new SwitchesWarningField<8>(this, modelData.switchWarningStates, board, version)); - if (IS_TARANIS_X9E(board)) internalField.Append(new UnsignedField<32>(this, modelData.switchWarningEnable)); - else if (!IS_HORUS(board) && version >= 216) + else if (!IS_HORUS(board)) internalField.Append(new UnsignedField<8>(this, modelData.switchWarningEnable)); - if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) { - for (int i=0; i= 218) { - internalField.Append(new ZCharField<3>(this, modelData.gvarData[i].name, "GVar name")); - internalField.Append(new UnsignedField<12>(this, (unsigned &)modelData.gvarData[i].min)); - internalField.Append(new UnsignedField<12>(this, (unsigned &)modelData.gvarData[i].max)); - internalField.Append(new BoolField<1>(this, modelData.gvarData[i].popup)); - internalField.Append(new UnsignedField<1>(this, modelData.gvarData[i].prec)); - internalField.Append(new UnsignedField<2>(this, modelData.gvarData[i].unit)); - internalField.Append(new SpareBitsField<4>(this)); - } - else { - internalField.Append(new ZCharField<3>(this, modelData.gvarData[i].name, "GVar name")); - internalField.Append(new SpareBitsField<3*8>(this)); - if (version >= 216) { - internalField.Append(new BoolField<1>(this, modelData.gvarData[i].popup)); - internalField.Append(new SpareBitsField<7>(this)); - } - } - } - } - else if (variant & GVARS_VARIANT) { - for (int i=0; i(this, modelData.flightModeData[0].gvars[i])); - } - } - - if ((board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) || (variant & FRSKY_VARIANT)) { - internalField.Append(new FrskyField(this, modelData.frsky, modelData.rssiAlarms, board, version, variant)); - } - else if ((board == BOARD_STOCK || board == BOARD_M128) && (variant & MAVLINK_VARIANT)) { - internalField.Append(new MavlinkField(this, modelData.mavlink, board, version)); - } - - if (IS_TARANIS(board) && version < 215) { - internalField.Append(new CharField<10>(this, modelData.bitmap, true, "Model bitmap")); - } - - int modulesCount = 2; - - if (IS_STM32(board)) { - modulesCount = 3; - if (version >= 217) { - internalField.Append(new SpareBitsField<3>(this)); - internalField.Append(new UnsignedField<3>(this, modelData.trainerMode)); - internalField.Append(new UnsignedField<2>(this, modelData.potsWarningMode)); + for (int i=0; i= 218) { + internalField.Append(new ZCharField<3>(this, modelData.gvarData[i].name, "GVar name")); + internalField.Append(new UnsignedField<12>(this, (unsigned &)modelData.gvarData[i].min)); + internalField.Append(new UnsignedField<12>(this, (unsigned &)modelData.gvarData[i].max)); + internalField.Append(new BoolField<1>(this, modelData.gvarData[i].popup)); + internalField.Append(new UnsignedField<1>(this, modelData.gvarData[i].prec)); + internalField.Append(new UnsignedField<2>(this, modelData.gvarData[i].unit)); + internalField.Append(new SpareBitsField<4>(this)); } else { - internalField.Append(new ConversionField< SignedField<8> >(this, modelData.moduleData[1].protocol, &protocolsConversionTable, "Protocol", DataField::tr("OpenTX doesn't accept this radio protocol"))); - internalField.Append(new UnsignedField<8>(this, modelData.trainerMode)); - } - } - else if (IS_ARM(board)) { - if (version >= 217) { - modulesCount = 3; - internalField.Append(new SpareBitsField<6>(this)); - internalField.Append(new UnsignedField<2>(this, modelData.potsWarningMode)); - } - else if (version >= 216) { - modulesCount = 3; - internalField.Append(new ConversionField< SignedField<8> >(this, modelData.moduleData[0].protocol, &protocolsConversionTable, "Protocol", DataField::tr("OpenTX doesn't accept this radio protocol"))); + internalField.Append(new ZCharField<3>(this, modelData.gvarData[i].name, "GVar name")); + internalField.Append(new SpareBitsField<3*8>(this)); + internalField.Append(new BoolField<1>(this, modelData.gvarData[i].popup)); + internalField.Append(new SpareBitsField<7>(this)); } } - if (IS_ARM(board) && version >= 215) { - for (int module=0; module= 217) { - internalField.Append(new ConversionField >(this, modelData.moduleData[module].protocol, &protocolsConversionTable, "Protocol", DataField::tr("OpenTX doesn't accept this radio protocol"))); - internalField.Append(new SignedField<4>(this, subprotocols[module])); - } - else { - internalField.Append(new SignedField<8>(this, subprotocols[module])); - } - internalField.Append(new UnsignedField<8>(this, modelData.moduleData[module].channelsStart)); - internalField.Append(new ConversionField >(this, modelData.moduleData[module].channelsCount, -8)); - if (version >= 217) { - internalField.Append(new UnsignedField<4>(this, modelData.moduleData[module].failsafeMode)); - internalField.Append(new UnsignedField<3>(this, modelData.moduleData[module].subType)); - internalField.Append(new BoolField<1>(this, modelData.moduleData[module].invertedSerial)); - } - else { - internalField.Append(new ConversionField >(this, modelData.moduleData[module].failsafeMode, -1)); - } - for (int i=0; i<32; i++) { - internalField.Append(new SignedField<16>(this, modelData.moduleData[module].failsafeChannels[i])); - } - if (version >= 217) { - internalField.Append(new ConversionField< SignedField<6> >(this, modelData.moduleData[module].ppm.delay, exportPpmDelay, importPpmDelay)); - internalField.Append(new BoolField<1>(this, modelData.moduleData[module].ppm.pulsePol)); - internalField.Append(new BoolField<1>(this, modelData.moduleData[module].ppm.outputType)); - internalField.Append(new SignedField<8>(this, modelData.moduleData[module].ppm.frameLength)); - } - else { - internalField.Append(new ConversionField< SignedField<8> >(this, modelData.moduleData[module].ppm.delay, exportPpmDelay, importPpmDelay)); - internalField.Append(new SignedField<8>(this, modelData.moduleData[module].ppm.frameLength)); - internalField.Append(new BoolField<8>(this, modelData.moduleData[module].ppm.pulsePol)); - } + internalField.Append(new FrskyField(this, modelData.frsky, modelData.rssiAlarms, board, version, variant)); + + if (IS_STM32(board)) { + internalField.Append(new SpareBitsField<3>(this)); + internalField.Append(new UnsignedField<3>(this, modelData.trainerMode)); + internalField.Append(new UnsignedField<2>(this, modelData.potsWarningMode)); + } + else { + internalField.Append(new SpareBitsField<6>(this)); + internalField.Append(new UnsignedField<2>(this, modelData.potsWarningMode)); + } + + int modulesCount = 3; + for (int module=0; module >(this, modelData.moduleData[module].protocol, &protocolsConversionTable, "Protocol", DataField::tr("OpenTX doesn't accept this radio protocol"))); + internalField.Append(new SignedField<4>(this, subprotocols[module])); + internalField.Append(new UnsignedField<8>(this, modelData.moduleData[module].channelsStart)); + internalField.Append(new ConversionField >(this, modelData.moduleData[module].channelsCount, -8)); + internalField.Append(new UnsignedField<4>(this, modelData.moduleData[module].failsafeMode)); + internalField.Append(new UnsignedField<3>(this, modelData.moduleData[module].subType)); + internalField.Append(new BoolField<1>(this, modelData.moduleData[module].invertedSerial)); + for (int i=0; i<32; i++) { + internalField.Append(new SignedField<16>(this, modelData.moduleData[module].failsafeChannels[i])); } + internalField.Append(new ConversionField< SignedField<6> >(this, modelData.moduleData[module].ppm.delay, exportPpmDelay, importPpmDelay)); + internalField.Append(new BoolField<1>(this, modelData.moduleData[module].ppm.pulsePol)); + internalField.Append(new BoolField<1>(this, modelData.moduleData[module].ppm.outputType)); + internalField.Append(new SignedField<8>(this, modelData.moduleData[module].ppm.frameLength)); } if (IS_TARANIS(board) && version < 218) { @@ -3342,7 +2190,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig } } } - else if (version >= 217) { + else { for (int i=0; i<7; i++) { ScriptData & script = modelData.scriptData[i]; internalField.Append(new CharField<8>(this, script.filename, true, "Script filename")); @@ -3352,64 +2200,33 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig } } } - else if (version >= 216) { - for (int i=0; i<7; i++) { - ScriptData & script = modelData.scriptData[i]; - internalField.Append(new CharField<10>(this, script.filename, true, "Script filename")); - internalField.Append(new ZCharField<10>(this, script.name, "Script name")); - for (int j=0; j<10; j++) { - internalField.Append(new SignedField<8>(this, script.inputs[j])); - } - } - } } - if (IS_ARM(board) && version >= 216) { - for (int i=0; i<32; i++) { - if (HAS_LARGE_LCD(board)) - internalField.Append(new ZCharField<4>(this, modelData.inputNames[i], "Input name")); - else - internalField.Append(new ZCharField<3>(this, modelData.inputNames[i], "Input name")); - } + for (int i=0; i<32; i++) { + if (HAS_LARGE_LCD(board)) + internalField.Append(new ZCharField<4>(this, modelData.inputNames[i], "Input name")); + else + internalField.Append(new ZCharField<3>(this, modelData.inputNames[i], "Input name")); } - if (IS_ARM(board) && version >= 217) { - for (int i=0; i<8; i++) { - if (i < MAX_POTS(board, version)+MAX_SLIDERS(board)) - internalField.Append(new BoolField<1>(this, modelData.potsWarningEnabled[i])); - else - internalField.Append(new SpareBitsField<1>(this)); - } - } - else if (IS_ARM(board) && version >= 216) { - for (int i=0; i<6; i++) { - if (i < MAX_POTS(board, version)+MAX_SLIDERS(board)) - internalField.Append(new BoolField<1>(this, modelData.potsWarningEnabled[i])); - else - internalField.Append(new SpareBitsField<1>(this)); - } - internalField.Append(new UnsignedField<2>(this, modelData.potsWarningMode)); + for (int i=0; i<8; i++) { + if (i < MAX_POTS(board, version)+MAX_SLIDERS(board)) + internalField.Append(new BoolField<1>(this, modelData.potsWarningEnabled[i])); + else + internalField.Append(new SpareBitsField<1>(this)); } - if (IS_ARM(board) && version >= 216) { - for (int i=0; i < MAX_POTS(board, version)+MAX_SLIDERS(board); i++) { - internalField.Append(new SignedField<8>(this, modelData.potPosition[i])); - } + for (int i=0; i < MAX_POTS(board, version)+MAX_SLIDERS(board); i++) { + internalField.Append(new SignedField<8>(this, modelData.potPosition[i])); } - if (IS_ARM(board) && version == 216) { - internalField.Append(new SpareBitsField<16>(this)); - } - - if (IS_SKY9X(board) && version >= 217) { + if (IS_SKY9X(board)) { internalField.Append(new SpareBitsField<8>(this)); internalField.Append(new SpareBitsField<8>(this)); } - if (IS_ARM(board) && version >= 217) { - for (int i=0; imode == INPUT_MODE_BOTH && expo->chn == i && expo->flightModes == 0 && expo->swtch.type == SWITCH_TYPE_NONE) - break; - if (expo->mode == 0 || expo->chn > i) { - ExpoData * newExpo = modelData.insertInput(j); - newExpo->mode = INPUT_MODE_BOTH; - newExpo->srcRaw = RawSource(SOURCE_TYPE_STICK, i); - newExpo->chn = i; - newExpo->weight = 100; - break; - } - } - strncpy(modelData.inputNames[i], getCurrentFirmware()->getAnalogInputName(i).toLatin1().constData(), sizeof(modelData.inputNames[i])-1); - } - } - if (IS_HORUS(board)) { modelData.moduleData[0].protocol = PULSES_PXX_XJT_X16; } @@ -3529,10 +2327,6 @@ void OpenTxModelData::afterImport() } } - if (IS_TARANIS(board) && version < 217 && modelData.moduleData[1].protocol != PULSES_OFF) { - modelData.moduleData[1].modelId = modelData.moduleData[0].modelId; - } - if (IS_HORUS(board)) { uint32_t newSwitchWarningStates = 0; for (int i = 0; i < MAX_SWITCHES(board, version); i++) { @@ -3560,29 +2354,12 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type generalData.variant = variant; internalField.Append(new UnsignedField<8>(this, generalData.version)); - if (version >= 213 || (!IS_ARM(board) && version >= 212)) - internalField.Append(new UnsignedField<16>(this, generalData.variant)); + internalField.Append(new UnsignedField<16>(this, generalData.variant)); - if (version >= 216) { - for (int i=0; i(this, generalData.calibMid[i])); - internalField.Append(new SignedField<16>(this, generalData.calibSpanNeg[i])); - internalField.Append(new SignedField<16>(this, generalData.calibSpanPos[i])); - } - } - else { - for (int i=0; i(this, generalData.calibMid[i])); - } - for (int i=0; i(this, generalData.calibSpanNeg[i])); - } - for (int i=0; i(this, generalData.calibSpanPos[i])); - } + for (int i=0; i(this, generalData.calibMid[i])); + internalField.Append(new SignedField<16>(this, generalData.calibSpanNeg[i])); + internalField.Append(new SignedField<16>(this, generalData.calibSpanPos[i])); } internalField.Append(new UnsignedField<16>(this, chkSum)); @@ -3614,7 +2391,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type internalField.Append(new UnsignedField<2>(this, generalData.stickMode)); internalField.Append(new SignedField<5>(this, generalData.timezone)); - if (version >= 217 && IS_HORUS_OR_TARANIS(board)) { + if (IS_HORUS_OR_TARANIS(board)) { internalField.Append(new BoolField<1>(this, generalData.adjustRTC)); } else { @@ -3622,44 +2399,27 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type } internalField.Append(new UnsignedField<8>(this, generalData.inactivityTimer)); - if (IS_9X(board)) { - if (version >= 215) { - internalField.Append(new UnsignedField<3>(this, generalData.mavbaud)); - } - else { - internalField.Append(new SpareBitsField<1>(this)); - internalField.Append(new BoolField<1>(this, generalData.minuteBeep)); - internalField.Append(new BoolField<1>(this, generalData.preBeep)); - } - } - else { + internalField.Append(new SpareBitsField<3>(this)); + if (IS_HORUS(board)) internalField.Append(new SpareBitsField<3>(this)); - } - if (version >= 216 && IS_HORUS(board)) - internalField.Append(new SpareBitsField<3>(this)); - else if (version >= 216 && IS_TARANIS(board)) + else if (IS_TARANIS(board)) internalField.Append(new SignedField<3>(this, generalData.splashDuration)); - else if (version >= 213 || (!IS_ARM(board) && version >= 212)) - internalField.Append(new UnsignedField<3>(this, generalData.splashMode)); // TODO else - internalField.Append(new SpareBitsField<3>(this)); + internalField.Append(new UnsignedField<3>(this, generalData.splashMode)); // TODO internalField.Append(new SignedField<2>(this, (int &)generalData.hapticMode)); - if (IS_ARM(board)) - internalField.Append(new SignedField<8>(this, generalData.switchesDelay)); - else - internalField.Append(new SpareBitsField<8>(this)); // TODO blOffBright + blOnBright + internalField.Append(new SignedField<8>(this, generalData.switchesDelay)); internalField.Append(new UnsignedField<8>(this, generalData.backlightDelay)); internalField.Append(new UnsignedField<8>(this, generalData.templateSetup)); internalField.Append(new SignedField<8>(this, generalData.PPM_Multiplier)); internalField.Append(new SignedField<8>(this, generalData.hapticLength)); - if (version < 216 || (version < 218 && !IS_9X(board)) || (!IS_9X(board) && !IS_TARANIS(board) && !IS_HORUS(board))) { + if (version < 218 || (!IS_TARANIS(board) && !IS_HORUS(board))) { internalField.Append(new UnsignedField<8>(this, generalData.reNavigation)); } - if (version >= 216 && !IS_TARANIS(board) && !IS_HORUS(board)) { + if (!IS_TARANIS(board) && !IS_HORUS(board)) { internalField.Append(new UnsignedField<8>(this, generalData.stickReverse)); } @@ -3670,213 +2430,192 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type internalField.Append(new UnsignedField<8>(this, generalData.speakerPitch)); - if (IS_ARM(board)) - internalField.Append(new ConversionField< SignedField<8> >(this, generalData.speakerVolume, -12, 0, 0, 23, "Volume")); - else - internalField.Append(new ConversionField< SignedField<8> >(this, generalData.speakerVolume, -7, 0, 0, 7, "Volume")); + internalField.Append(new ConversionField< SignedField<8> >(this, generalData.speakerVolume, -12, 0, 0, 23, "Volume")); - if (version >= 214 || (!IS_ARM(board) && version >= 213)) { - internalField.Append(new SignedField<8>(this, generalData.vBatMin)); - internalField.Append(new SignedField<8>(this, generalData.vBatMax)); + internalField.Append(new SignedField<8>(this, generalData.vBatMin)); + internalField.Append(new SignedField<8>(this, generalData.vBatMax)); + + internalField.Append(new UnsignedField<8>(this, generalData.backlightBright)); + if (version < 218) internalField.Append(new SignedField<8>(this, generalData.txCurrentCalibration)); + + if (version < 218) internalField.Append(new SignedField<8>(this, generalData.temperatureWarn)); + if (version < 218) internalField.Append(new UnsignedField<8>(this, generalData.mAhWarn)); + if (version < 218) internalField.Append(new UnsignedField<16>(this, generalData.mAhUsed)); + internalField.Append(new UnsignedField<32>(this, generalData.globalTimer)); + if (version < 218) internalField.Append(new SignedField<8>(this, generalData.temperatureCalib)); + internalField.Append(new UnsignedField<4>(this, generalData.bluetoothBaudrate)); + internalField.Append(new UnsignedField<4>(this, generalData.bluetoothMode)); + if (version < 218) internalField.Append(new BoolField<8>(this, generalData.optrexDisplay)); + if (version < 218) internalField.Append(new UnsignedField<8>(this, generalData.sticksGain)); + + + if (version < 218) internalField.Append(new UnsignedField<8>(this, generalData.rotarySteps)); + internalField.Append(new UnsignedField<8>(this, generalData.countryCode)); + internalField.Append(new UnsignedField<1>(this, generalData.imperial)); + if (version >= 218) { + internalField.Append(new BoolField<1>(this, generalData.jitterFilter)); + internalField.Append(new BoolField<1>(this, generalData.disableRssiPoweroffAlarm)); + internalField.Append(new UnsignedField<2>(this, generalData.usbMode)); + internalField.Append(new UnsignedField<2>(this, generalData.jackMode)); + internalField.Append(new SpareBitsField<1>(this)); + } + else { + internalField.Append(new SpareBitsField<7>(this)); } - if (IS_ARM(board)) { - internalField.Append(new UnsignedField<8>(this, generalData.backlightBright)); - if (version < 218) internalField.Append(new SignedField<8>(this, generalData.txCurrentCalibration)); - if (version >= 213) { - if (version < 218) internalField.Append(new SignedField<8>(this, generalData.temperatureWarn)); - if (version < 218) internalField.Append(new UnsignedField<8>(this, generalData.mAhWarn)); - if (version < 218) internalField.Append(new UnsignedField<16>(this, generalData.mAhUsed)); - internalField.Append(new UnsignedField<32>(this, generalData.globalTimer)); - if (version < 218) internalField.Append(new SignedField<8>(this, generalData.temperatureCalib)); - internalField.Append(new UnsignedField<4>(this, generalData.bluetoothBaudrate)); - internalField.Append(new UnsignedField<4>(this, generalData.bluetoothMode)); - if (version < 218) internalField.Append(new BoolField<8>(this, generalData.optrexDisplay)); - if (version < 218) internalField.Append(new UnsignedField<8>(this, generalData.sticksGain)); - } - if (version >= 214) { - if (version < 218) internalField.Append(new UnsignedField<8>(this, generalData.rotarySteps)); - internalField.Append(new UnsignedField<8>(this, generalData.countryCode)); - internalField.Append(new UnsignedField<1>(this, generalData.imperial)); - if (version >= 218) { - internalField.Append(new BoolField<1>(this, generalData.jitterFilter)); - internalField.Append(new BoolField<1>(this, generalData.disableRssiPoweroffAlarm)); - internalField.Append(new UnsignedField<2>(this, generalData.usbMode)); - internalField.Append(new UnsignedField<2>(this, generalData.jackMode)); - internalField.Append(new SpareBitsField<1>(this)); - } - else { - internalField.Append(new SpareBitsField<7>(this)); - } - } - if (version >= 215) { - internalField.Append(new CharField<2>(this, generalData.ttsLanguage, true, "TTS language")); - if (version >= 218) { - internalField.Append(new SignedField<4>(this, generalData.beepVolume)); - internalField.Append(new SignedField<4>(this, generalData.wavVolume)); - internalField.Append(new SignedField<4>(this, generalData.varioVolume)); - internalField.Append(new SignedField<4>(this, generalData.backgroundVolume)); - } - else { - internalField.Append(new SignedField<8>(this, generalData.beepVolume)); - internalField.Append(new SignedField<8>(this, generalData.wavVolume)); - internalField.Append(new SignedField<8>(this, generalData.varioVolume)); - } - if (version >= 216) { - internalField.Append(new SignedField<8>(this, generalData.varioPitch)); - internalField.Append(new SignedField<8>(this, generalData.varioRange)); - internalField.Append(new SignedField<8>(this, generalData.varioRepeat)); - } - if (version < 218) internalField.Append(new SignedField<8>(this, generalData.backgroundVolume)); + internalField.Append(new CharField<2>(this, generalData.ttsLanguage, true, "TTS language")); + if (version >= 218) { + internalField.Append(new SignedField<4>(this, generalData.beepVolume)); + internalField.Append(new SignedField<4>(this, generalData.wavVolume)); + internalField.Append(new SignedField<4>(this, generalData.varioVolume)); + internalField.Append(new SignedField<4>(this, generalData.backgroundVolume)); + } + else { + internalField.Append(new SignedField<8>(this, generalData.beepVolume)); + internalField.Append(new SignedField<8>(this, generalData.wavVolume)); + internalField.Append(new SignedField<8>(this, generalData.varioVolume)); + } + internalField.Append(new SignedField<8>(this, generalData.varioPitch)); + internalField.Append(new SignedField<8>(this, generalData.varioRange)); + internalField.Append(new SignedField<8>(this, generalData.varioRepeat)); + if (version < 218) internalField.Append(new SignedField<8>(this, generalData.backgroundVolume)); + + if (version >= 218) { + for (int i=0; i= 218) { - for (int i=0; i(this, generalData.hw_uartMode)); + for (uint8_t i=0; i<4; i++) { + internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[i])); } } - - if (IS_STM32(board) && version >= 216) { - if (version >= 218) { - internalField.Append(new UnsignedField<4>(this, generalData.hw_uartMode)); - for (uint8_t i=0; i<4; i++) { - internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[i])); - } - } - else if (version >= 217) { - internalField.Append(new UnsignedField<6>(this, generalData.hw_uartMode)); - if (IS_TARANIS_X9E(board)) { - internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[2])); - internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[3])); - } - else { - internalField.Append(new SpareBitsField<2>(this)); - } + else { + internalField.Append(new UnsignedField<6>(this, generalData.hw_uartMode)); + if (IS_TARANIS_X9E(board)) { + internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[2])); + internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[3])); } else { - internalField.Append(new UnsignedField<8>(this, generalData.hw_uartMode)); - } - if (IS_HORUS(board)) { - for (int i=0; i<16; i++) { - if (i < MAX_SWITCHES(board, version)) - internalField.Append(new UnsignedField<2>(this, generalData.switchConfig[i])); - else - internalField.Append(new SpareBitsField<2>(this)); - } - } - for (int i=0; i<4; i++) { - if (i < MAX_POTS(board, version)) - internalField.Append(new UnsignedField<2>(this, generalData.potConfig[i])); - else - internalField.Append(new SpareBitsField<2>(this)); - } - if (!IS_HORUS(board)) { - internalField.Append(new UnsignedField<8>(this, generalData.backlightColor)); - } - } - else if (IS_SKY9X(board) && version >= 218) { - internalField.Append(new SignedField<8>(this, generalData.txCurrentCalibration)); - internalField.Append(new SignedField<8>(this, generalData.temperatureWarn)); - internalField.Append(new UnsignedField<8>(this, generalData.mAhWarn)); - internalField.Append(new UnsignedField<16>(this, generalData.mAhUsed)); - internalField.Append(new SignedField<8>(this, generalData.temperatureCalib)); - internalField.Append(new BoolField<8>(this, generalData.optrexDisplay)); - internalField.Append(new UnsignedField<8>(this, generalData.sticksGain)); - internalField.Append(new UnsignedField<8>(this, generalData.rotarySteps)); - } - - if (IS_TARANIS_X9E(board)) - internalField.Append(new SpareBitsField<64>(this)); // switchUnlockStates - else if (IS_TARANIS(board)) - internalField.Append(new SpareBitsField<16>(this)); // switchUnlockStates - - if (version == 217) { - for (int i=0; i(this)); } } if (IS_HORUS(board)) { - for (int i=0; i(this, generalData.switchName[i], "Switch name")); - } - for (int i=0; i(this, generalData.stickName[i], "Stick name")); - } - for (int i=0; i(this, generalData.potName[i], "Pot name")); - } - for (int i=0; i(this, generalData.sliderName[i], "Slider name")); - } - internalField.Append(new CharField<17>(this, generalData.currModelFilename, true, "Current model filename")); - } - else if (IS_TARANIS(board) && version >= 217) { - for (int i=0; i(this, generalData.switchConfig[i])); else internalField.Append(new SpareBitsField<2>(this)); } - for (int i=0; i(this, generalData.switchName[i], "Switch name")); - } - for (int i=0; i(this, generalData.stickName[i], "Stick name")); - } - for (int i=0; i(this, generalData.potName[i], "Pot name")); - } - for (int i=0; i(this, generalData.sliderName[i], "Slider name")); - } } - - if (IS_HORUS(board)) { - internalField.Append(new SpareBitsField<1>(this)); - internalField.Append(new UnsignedField<7>(this, generalData.backlightOffBright)); - internalField.Append(new ZCharField<10>(this, generalData.bluetoothName, "Bluetooth name")); + for (int i=0; i<4; i++) { + if (i < MAX_POTS(board, version)) + internalField.Append(new UnsignedField<2>(this, generalData.potConfig[i])); + else + internalField.Append(new SpareBitsField<2>(this)); } - else if (IS_TARANIS_X9E(board) && version >= 217) { - internalField.Append(new UnsignedField<8>(this, generalData.bluetoothMode)); - internalField.Append(new ZCharField<10>(this, generalData.bluetoothName, "Bluetooth name")); - } - - if (IS_HORUS(board)) { - internalField.Append(new CharField<8>(this, generalData.themeName, true, "Theme name")); - for (int i=0; i<5; i++) { - internalField.Append(new CharField<8>(this, (char *)generalData.themeOptionValue[i], true, "Theme blob")); - } + if (!IS_HORUS(board)) { + internalField.Append(new UnsignedField<8>(this, generalData.backlightColor)); } } + else if (IS_SKY9X(board) && version >= 218) { + internalField.Append(new SignedField<8>(this, generalData.txCurrentCalibration)); + internalField.Append(new SignedField<8>(this, generalData.temperatureWarn)); + internalField.Append(new UnsignedField<8>(this, generalData.mAhWarn)); + internalField.Append(new UnsignedField<16>(this, generalData.mAhUsed)); + internalField.Append(new SignedField<8>(this, generalData.temperatureCalib)); + internalField.Append(new BoolField<8>(this, generalData.optrexDisplay)); + internalField.Append(new UnsignedField<8>(this, generalData.sticksGain)); + internalField.Append(new UnsignedField<8>(this, generalData.rotarySteps)); + } + + if (IS_TARANIS_X9E(board)) + internalField.Append(new SpareBitsField<64>(this)); // switchUnlockStates + else if (IS_TARANIS(board)) + internalField.Append(new SpareBitsField<16>(this)); // switchUnlockStates + + if (version == 217) { + for (int i=0; i(this, generalData.switchName[i], "Switch name")); + } + for (int i=0; i(this, generalData.stickName[i], "Stick name")); + } + for (int i=0; i(this, generalData.potName[i], "Pot name")); + } + for (int i=0; i(this, generalData.sliderName[i], "Slider name")); + } + internalField.Append(new CharField<17>(this, generalData.currModelFilename, true, "Current model filename")); + } + else if (IS_TARANIS(board)) { + for (int i=0; i(this, generalData.switchConfig[i])); + else + internalField.Append(new SpareBitsField<2>(this)); + } + for (int i=0; i(this, generalData.switchName[i], "Switch name")); + } + for (int i=0; i(this, generalData.stickName[i], "Stick name")); + } + for (int i=0; i(this, generalData.potName[i], "Pot name")); + } + for (int i=0; i(this, generalData.sliderName[i], "Slider name")); + } + } + + if (IS_HORUS(board)) { + internalField.Append(new SpareBitsField<1>(this)); + internalField.Append(new UnsignedField<7>(this, generalData.backlightOffBright)); + internalField.Append(new ZCharField<10>(this, generalData.bluetoothName, "Bluetooth name")); + } + else if (IS_TARANIS_X9E(board)) { + internalField.Append(new UnsignedField<8>(this, generalData.bluetoothMode)); + internalField.Append(new ZCharField<10>(this, generalData.bluetoothName, "Bluetooth name")); + } + + if (IS_HORUS(board)) { + internalField.Append(new CharField<8>(this, generalData.themeName, true, "Theme name")); + for (int i=0; i<5; i++) { + internalField.Append(new CharField<8>(this, (char *)generalData.themeOptionValue[i], true, "Theme blob")); + } + } + } void OpenTxGeneralData::beforeExport() { uint16_t sum = 0; - if (version >= 216) { - int count = 0; - for (int i=0; i