diff --git a/companion/src/constants.h b/companion/src/constants.h index b1f85fba28..15d4aeb5ae 100644 --- a/companion/src/constants.h +++ b/companion/src/constants.h @@ -9,8 +9,9 @@ enum BoardEnum { BOARD_SKY9X, BOARD_9XRPRO, BOARD_AR9X, - BOARD_TARANIS, - BOARD_TARANIS_PLUS, + BOARD_X7D, + BOARD_TARANIS_X9D, + BOARD_TARANIS_X9DP, BOARD_TARANIS_X9E, BOARD_FLAMENCO, BOARD_HORUS @@ -38,4 +39,9 @@ enum BoardEnum { #define C9X_NUM_SWITCHES 32 #define C9X_NUM_KEYS 32 +const char * const ARROW_LEFT = "\xE2\x86\x90"; +const char * const ARROW_UP = "\xE2\x86\x91"; +const char * const ARROW_RIGHT = "\xE2\x86\x92"; +const char * const ARROW_DOWN = "\xE2\x86\x93"; + #endif diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index ca59e655ea..cee3ab0e3f 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "eeprominterface.h" #include "firmwares/er9x/er9xinterface.h" #include "firmwares/th9x/th9xinterface.h" @@ -16,13 +17,6 @@ std::list EEPROMWarnings; -const char * switches9X[] = { "3POS", "THR", "RUD", "ELE", "AIL", "GEA", "TRN" }; -const char * switchesX9D[] = { "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SP", "SQ", "SR" }; -const char leftArrow[] = {(char)0xE2, (char)0x86, (char)0x90, 0}; -const char rightArrow[] = {(char)0xE2, (char)0x86, (char)0x92, 0}; -const char upArrow[] = {(char)0xE2, (char)0x86, (char)0x91, 0}; -const char downArrow[] = {(char)0xE2, (char)0x86, (char)0x93, 0}; - const uint8_t chout_ar[] = { // First number is 0..23 -> template setup, Second is relevant channel out 1,2,3,4 , 1,2,4,3 , 1,3,2,4 , 1,3,4,2 , 1,4,2,3 , 1,4,3,2, 2,1,3,4 , 2,1,4,3 , 2,3,1,4 , 2,3,4,1 , 2,4,1,3 , 2,4,3,1, @@ -500,7 +494,7 @@ QString RawSource::toString(const ModelData * model) const case SOURCE_TYPE_MAX: return QObject::tr("MAX"); case SOURCE_TYPE_SWITCH: - return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(switchesX9D, index) : CHECK_IN_ARRAY(switches9X, index)); + return GetCurrentFirmware()->getSwitch(index).name; case SOURCE_TYPE_CUSTOM_SWITCH: return QObject::tr("L%1").arg(index+1); case SOURCE_TYPE_CYC: @@ -542,19 +536,6 @@ bool RawSource::isSlider() const index < NUM_STICKS+GetCurrentFirmware()->getCapability(Pots)+GetCurrentFirmware()->getCapability(Sliders)); } - -QString SwitchUp(const char sw) -{ - const char result[] = {'S', sw, upArrow[0], upArrow[1], upArrow[2], 0}; - return QString::fromUtf8(result); -} - -QString SwitchDn(const char sw) -{ - const char result[] = {'S', sw, downArrow[0], downArrow[1], downArrow[2], 0}; - return QString::fromUtf8(result); -} - QString RawSwitch::toString() const { static const QString switches9X[] = { @@ -563,27 +544,6 @@ QString RawSwitch::toString() const QString("AIL"), QString("GEA"), QString("TRN") }; - static const QString switchesX9D[] = { - SwitchUp('A'), QString::fromUtf8("SA-"), SwitchDn('A'), - SwitchUp('B'), QString::fromUtf8("SB-"), SwitchDn('B'), - SwitchUp('C'), QString::fromUtf8("SC-"), SwitchDn('C'), - SwitchUp('D'), QString::fromUtf8("SD-"), SwitchDn('D'), - SwitchUp('E'), QString::fromUtf8("SE-"), SwitchDn('E'), - SwitchUp('F'), QString::fromUtf8("SF-"), SwitchDn('F'), - SwitchUp('G'), QString::fromUtf8("SG-"), SwitchDn('G'), - SwitchUp('H'), QString::fromUtf8("SH-"), SwitchDn('H'), - SwitchUp('I'), QString::fromUtf8("SI-"), SwitchDn('I'), - SwitchUp('J'), QString::fromUtf8("SJ-"), SwitchDn('J'), - SwitchUp('K'), QString::fromUtf8("SK-"), SwitchDn('K'), - SwitchUp('L'), QString::fromUtf8("SL-"), SwitchDn('L'), - SwitchUp('M'), QString::fromUtf8("SM-"), SwitchDn('M'), - SwitchUp('N'), QString::fromUtf8("SN-"), SwitchDn('N'), - SwitchUp('O'), QString::fromUtf8("SO-"), SwitchDn('O'), - SwitchUp('P'), QString::fromUtf8("SP-"), SwitchDn('P'), - SwitchUp('Q'), QString::fromUtf8("SQ-"), SwitchDn('Q'), - SwitchUp('R'), QString::fromUtf8("SR-"), SwitchDn('R'), - }; - static const QString flightModes[] = { QObject::tr("FM0"), QObject::tr("FM1"), QObject::tr("FM2"), QObject::tr("FM3"), QObject::tr("FM4"), QObject::tr("FM5"), QObject::tr("FM6"), QObject::tr("FM7"), QObject::tr("FM8") }; @@ -616,10 +576,15 @@ QString RawSwitch::toString() const else { switch(type) { case SWITCH_TYPE_SWITCH: - if (IS_TARANIS(GetEepromInterface()->getBoard())) - return CHECK_IN_ARRAY(switchesX9D, index-1); - else - return CHECK_IN_ARRAY(switches9X, index-1); + if (IS_TARANIS(GetEepromInterface()->getBoard())) { + div_t qr = div(index-1, 3); + Firmware::Switch sw = GetCurrentFirmware()->getSwitch(qr.quot); + const char * positions[] = { ARROW_UP, "-", ARROW_DOWN }; + return QString(sw.name) + QString(positions[qr.rem]); + } + else { + return CHECK_IN_ARRAY(switches9X, index - 1); + } case SWITCH_TYPE_VIRTUAL: return QObject::tr("L%1").arg(index); case SWITCH_TYPE_MULTIPOS_POT: @@ -1008,17 +973,17 @@ bool GeneralSettings::switchPositionAllowedTaranis(int index) const if (index == 0) return true; SwitchInfo info = switchInfoFromSwitchPositionTaranis(abs(index)); - if (index < 0 && switchConfig[info.index] != SWITCH_3POS) + if (index < 0 && switchConfig[info.index] != Firmware::SWITCH_3POS) return false; else if (info.position == 1) - return switchConfig[info.index] == SWITCH_3POS; + return switchConfig[info.index] == Firmware::SWITCH_3POS; else - return switchConfig[info.index] != SWITCH_NONE; + return switchConfig[info.index] != Firmware::SWITCH_NONE; } bool GeneralSettings::switchSourceAllowedTaranis(int index) const { - return switchConfig[index] != SWITCH_NONE; + return switchConfig[index] != Firmware::SWITCH_NONE; } bool GeneralSettings::isPotAvailable(int index) const @@ -1045,21 +1010,17 @@ GeneralSettings::GeneralSettings() calibSpanNeg[i] = 0x180; calibSpanPos[i] = 0x180; } - + + for (int i=0; igetCapability(Switches); i++) { + switchConfig[i] = GetCurrentFirmware()->getSwitch(i).type; + } + BoardEnum board = GetEepromInterface()->getBoard(); if (IS_TARANIS(board)) { potConfig[0] = POT_WITH_DETENT; potConfig[1] = POT_WITH_DETENT; sliderConfig[0] = SLIDER_WITH_DETENT; sliderConfig[1] = SLIDER_WITH_DETENT; - switchConfig[0] = SWITCH_3POS; - switchConfig[1] = SWITCH_3POS; - switchConfig[2] = SWITCH_3POS; - switchConfig[3] = SWITCH_3POS; - switchConfig[4] = SWITCH_3POS; - switchConfig[5] = SWITCH_2POS; - switchConfig[6] = SWITCH_3POS; - switchConfig[7] = SWITCH_TOGGLE; } else { for (int i=0; i<3; i++) { @@ -1604,8 +1565,8 @@ void registerEEpromInterfaces() eepromInterfaces.push_back(new OpenTxEepromInterface(BOARD_GRUVIN9X)); eepromInterfaces.push_back(new OpenTxEepromInterface(BOARD_SKY9X)); eepromInterfaces.push_back(new OpenTxEepromInterface(BOARD_9XRPRO)); - eepromInterfaces.push_back(new OpenTxEepromInterface(BOARD_TARANIS)); - eepromInterfaces.push_back(new OpenTxEepromInterface(BOARD_TARANIS_PLUS)); + eepromInterfaces.push_back(new OpenTxEepromInterface(BOARD_TARANIS_X9D)); + eepromInterfaces.push_back(new OpenTxEepromInterface(BOARD_TARANIS_X9DP)); eepromInterfaces.push_back(new OpenTxEepromInterface(BOARD_TARANIS_X9E)); eepromInterfaces.push_back(new Gruvin9xInterface(BOARD_STOCK)); eepromInterfaces.push_back(new Gruvin9xInterface(BOARD_GRUVIN9X)); @@ -1754,8 +1715,8 @@ const int Firmware::getFlashSize() case BOARD_9XRPRO: case BOARD_AR9X: return FSIZE_9XRPRO; - case BOARD_TARANIS: - case BOARD_TARANIS_PLUS: + case BOARD_TARANIS_X9D: + case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9E: case BOARD_FLAMENCO: return FSIZE_TARANIS; diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 8b89282503..d05d12f45f 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -51,13 +51,14 @@ #define IS_2560(board) (board==BOARD_GRUVIN9X || board==BOARD_MEGA2560) #define IS_SKY9X(board) (board==BOARD_SKY9X || board==BOARD_9XRPRO || board==BOARD_AR9X) #define IS_9XRPRO(board) (board==BOARD_9XRPRO) -#define IS_TARANIS(board) (board==BOARD_TARANIS || board==BOARD_TARANIS_PLUS || board==BOARD_TARANIS_X9E) -#define IS_TARANIS_PLUS(board) (board==BOARD_TARANIS_PLUS || board==BOARD_TARANIS_X9E) +#define IS_TARANIS(board) (board==BOARD_TARANIS_X9D || board==BOARD_TARANIS_X9DP || board==BOARD_TARANIS_X9E || board==BOARD_X7D) +#define IS_TARANIS_PLUS(board) (board==BOARD_TARANIS_X9DP || board==BOARD_TARANIS_X9E) #define IS_TARANIS_X9E(board) (board==BOARD_TARANIS_X9E) #define IS_HORUS(board) (board==BOARD_HORUS) #define IS_FLAMENCO(board) (board==BOARD_FLAMENCO) #define IS_STM32(board) (IS_TARANIS(board) || IS_HORUS(board) || IS_FLAMENCO(board)) #define IS_ARM(board) (IS_STM32(board) || IS_SKY9X(board)) +#define HAS_LARGE_LCD(board) (IS_TARANIS(board) && board != BOARD_X7D) const uint8_t modn12x3[4][4]= { {1, 2, 3, 4}, @@ -65,14 +66,6 @@ const uint8_t modn12x3[4][4]= { {4, 2, 3, 1}, {4, 3, 2, 1} }; -#define STK_RUD 1 -#define STK_ELE 2 -#define STK_THR 3 -#define STK_AIL 4 -#define STK_P1 5 -#define STK_P2 6 -#define STK_P3 7 - enum Switches { SWITCH_NONE, @@ -149,18 +142,6 @@ enum FailsafeModes { #define TRIM_T6_UP 11 #define TRIM_NONE 12 -// Beep center bits -#define BC_BIT_RUD (0x01) -#define BC_BIT_ELE (0x02) -#define BC_BIT_THR (0x04) -#define BC_BIT_AIL (0x08) -#define BC_BIT_P1 (0x10) -#define BC_BIT_P2 (0x20) -#define BC_BIT_P3 (0x40) -#define BC_BIT_P4 (0x80) -#define BC_BIT_REA (0x80) -#define BC_BIT_REB (0x100) - #define CHAR_FOR_NAMES " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-." #define CHAR_FOR_NAMES_REGEX "[ A-Za-z0-9_.-,]*" @@ -172,13 +153,6 @@ enum HeliSwashTypes { HELI_SWASH_TYPE_90 }; -extern const char * switches9X[]; -extern const char * switchesX9D[]; -extern const char leftArrow[]; -extern const char rightArrow[]; -extern const char upArrow[]; -extern const char downArrow[]; - class ModelData; class GeneralSettings; @@ -1187,13 +1161,6 @@ class GeneralSettings { SLIDER_WITH_DETENT }; - enum SwitchConfig { - SWITCH_NONE, - SWITCH_TOGGLE, - SWITCH_2POS, - SWITCH_3POS, - }; - GeneralSettings(); int getDefaultStick(unsigned int channel) const; @@ -1315,6 +1282,7 @@ class RadioData { }; enum Capability { + ModelName, FlightModes, FlightModesName, FlightModesHaveFades, @@ -1597,7 +1565,7 @@ struct Option { }; class Firmware { - + public: Firmware(const QString & id, const QString & name, const BoardEnum board, EEPROMInterface * eepromInterface): id(id), @@ -1678,7 +1646,21 @@ class Firmware { return eepromInterface; } - virtual int getCapability(const Capability) = 0; + virtual int getCapability(Capability) = 0; + + enum SwitchType { + SWITCH_NONE, + SWITCH_TOGGLE, + SWITCH_2POS, + SWITCH_3POS + }; + + struct Switch { + SwitchType type; + const char * name; + }; + + virtual Switch getSwitch(unsigned int index) = 0; virtual QTime getMaxTimerStart() = 0; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 4c2345f54e..bebd4048f1 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -10,12 +10,11 @@ #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 HAS_LARGE_LCD(board) IS_TARANIS(board) #define MAX_VIEWS(board) (HAS_LARGE_LCD(board) ? 2 : 256) -#define MAX_POTS(board, version) (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 4 : (version >= 216 ? 3 : 2)) : 3) -#define MAX_SLIDERS(board) (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 4 : 2) : 0) -#define MAX_SWITCHES(board, version) (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 18 : 8) : 7) -#define MAX_SWITCHES_POSITION(board, version) (IS_TARANIS_X9E(board) ? 18*3 : (IS_TARANIS(board) ? 8*3 : 9)) +#define MAX_POTS(board, version) (board == BOARD_X7D ? 2 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 4 : (version >= 216 ? 3 : 2)) : 3)) +#define MAX_SLIDERS(board) (board == BOARD_X7D ? 0 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 4 : 2) : 0)) +#define MAX_SWITCHES(board, version) (board == BOARD_X7D ? 6 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 18 : 8) : 7)) +#define MAX_SWITCHES_POSITION(board, version) (board == BOARD_X7D ? 6*3 : (IS_TARANIS_X9E(board) ? 18*3 : (IS_TARANIS(board) ? 8*3 : 9))) #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) @@ -24,7 +23,7 @@ #define MAX_EXPOS(board, version) (IS_ARM(board) ? ((IS_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) ? ((IS_TARANIS(board) && version >= 216) ? 32 : 16) : 8) +#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_TELEMETRY_SENSORS(board, version) (32) #define NUM_PPM_INPUTS(board, version) ((IS_ARM(board) && version >= 216) ? 16 : 8) @@ -794,6 +793,12 @@ class FlightModeField: public TransformedField { for (int i=0; i(trimExt[i])); } + else if (IS_ARM(board) && version >= 218) { + for (int i=0; i(phase.trim[i])); + internalField.Append(new UnsignedField<5>(trimMode[i])); + } + } else if (IS_TARANIS(board) && version >= 216) { for (int i=0; i(phase.trim[i])); @@ -932,7 +937,7 @@ class MixField: public TransformedField { version(version), model(model) { - if (IS_TARANIS(board) && version >= 218) { + if (IS_ARM(board) && version >= 218) { internalField.Append(new SignedField<11>(_weight)); internalField.Append(new UnsignedField<5>(_destCh)); internalField.Append(new SourceField<10>(mix.srcRaw, board, version, FLAG_NOTELEMETRY)); @@ -948,7 +953,10 @@ class MixField: public TransformedField { internalField.Append(new UnsignedField<8>(mix.delayDown)); internalField.Append(new UnsignedField<8>(mix.speedUp)); internalField.Append(new UnsignedField<8>(mix.speedDown)); - internalField.Append(new ZCharField<8>(mix.name)); + if (HAS_LARGE_LCD(board)) + internalField.Append(new ZCharField<8>(mix.name)); + else + internalField.Append(new ZCharField<6>(mix.name)); } else if (IS_TARANIS(board) && version >= 217) { internalField.Append(new UnsignedField<8>(_destCh)); @@ -1218,7 +1226,7 @@ class InputField: public TransformedField { board(board), version(version) { - if (IS_TARANIS(board) && version >= 218) { + if (IS_ARM(board) && version >= 218) { internalField.Append(new UnsignedField<2>(expo.mode, "Mode")); internalField.Append(new UnsignedField<14>(expo.scale, "Scale")); internalField.Append(new SourceField<10>(expo.srcRaw, board, version, 0)); @@ -1228,7 +1236,10 @@ class InputField: public TransformedField { internalField.Append(new UnsignedField<9>(expo.flightModes)); internalField.Append(new SignedField<8>(_weight, "Weight")); internalField.Append(new SpareBitsField<1>()); - internalField.Append(new ZCharField<8>(expo.name)); + if (HAS_LARGE_LCD(board)) + internalField.Append(new ZCharField<8>(expo.name)); + else + internalField.Append(new ZCharField<6>(expo.name)); internalField.Append(new SignedField<8>(_offset, "Offset")); internalField.Append(new CurveReferenceField(expo.curve, board, version)); } @@ -1416,7 +1427,27 @@ class LimitField: public StructField { LimitField(LimitData & limit, BoardEnum board, unsigned int version): StructField("Limit") { - if (IS_TARANIS(board) && version >= 217) { + if (IS_ARM(board) && version >= 218) { + if (HAS_LARGE_LCD(board)) { + Append(new ConversionField< SignedField<11> >(limit.min, exportLimitValue<1000, 1024>, importLimitValue<1000, 1024>)); + Append(new ConversionField< SignedField<11> >(limit.max, exportLimitValue<-1000, 1024>, importLimitValue<-1000, 1024>)); + } + else { + Append(new ConversionField< SignedField<11> >(limit.min, +100, 10)); + Append(new ConversionField< SignedField<11> >(limit.max, -100, 10)); + } + Append(new SignedField<10>(limit.ppmCenter)); + Append(new ConversionField< SignedField<11> >(limit.offset, exportLimitValue<0, 1024>, importLimitValue<0, 1024>)); + Append(new BoolField<1>(limit.symetrical)); + Append(new BoolField<1>(limit.revert)); + Append(new SpareBitsField<3>()); + Append(new SignedField<8>(limit.curve.value)); + if (HAS_LARGE_LCD(board)) + Append(new ZCharField<6>(limit.name)); + else + Append(new ZCharField<4>(limit.name)); + } + else if (IS_TARANIS(board) && version >= 217) { Append(new ConversionField< SignedField<11> >(limit.min, exportLimitValue<1000, 1024>, importLimitValue<1000, 1024>)); Append(new ConversionField< SignedField<11> >(limit.max, exportLimitValue<-1000, 1024>, importLimitValue<-1000, 1024>)); Append(new SignedField<10>(limit.ppmCenter)); @@ -1425,9 +1456,7 @@ class LimitField: public StructField { Append(new BoolField<1>(limit.revert)); Append(new SpareBitsField<3>()); Append(new SignedField<8>(limit.curve.value)); - if (HAS_LARGE_LCD(board)) { - Append(new ZCharField<6>(limit.name)); - } + Append(new ZCharField<6>(limit.name)); } else { if (IS_TARANIS(board) && version >= 216) { @@ -1466,7 +1495,7 @@ class CurvesField: public TransformedField { maxPoints(IS_ARM(board) ? 512 : 112-8) { for (int i=0; i= 218) { + if (IS_ARM(board) && version >= 218) { internalField.Append(new UnsignedField<1>((unsigned int &)curves[i].type)); internalField.Append(new BoolField<1>(curves[i].smooth)); internalField.Append(new ConversionField< SignedField<6> >(curves[i].count, -5)); @@ -2523,7 +2552,7 @@ class FrskyScreenField: public DataField { } } - int columns = (IS_TARANIS(board) ? 3 : 2); + int columns = (HAS_LARGE_LCD(board) ? 3 : 2); for (int i=0; i<4; i++) { for (int j=0; j= 217) @@ -2968,7 +2997,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne internalField.Append(new UnsignedField<8>(modelData.moduleData[1].modelId)); } - if (IS_TARANIS(board) && version >= 215) { + if (HAS_LARGE_LCD(board) && version >= 215) { internalField.Append(new CharField<10>(modelData.bitmap)); } @@ -2981,7 +3010,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep)); internalField.Append(new UnsignedField<2>(modelData.timers[i].persistent)); internalField.Append(new SpareBitsField<3>()); - if (IS_TARANIS(board)) + if (HAS_LARGE_LCD(board)) internalField.Append(new ZCharField<8>(modelData.timers[i].name)); else internalField.Append(new ZCharField<3>(modelData.timers[i].name)); @@ -3119,20 +3148,30 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne else if (version >= 216) internalField.Append(new UnsignedField<8>(modelData.switchWarningEnable)); - if ((board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) && (variant & GVARS_VARIANT)) { - for (int i=0; i(modelData.flightModeData[0].gvars[i])); - } - } - if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) { for (int i=0; i(modelData.gvars_names[i])); - if (version >= 216) { + if (version >= 218) { + internalField.Append(new ZCharField<3>(modelData.gvars_names[i])); + internalField.Append(new SpareBitsField<12>()); // TODO min + internalField.Append(new SpareBitsField<12>()); // TODO max internalField.Append(new BoolField<1>(modelData.gvars_popups[i])); - internalField.Append(new SpareBitsField<7>()); + internalField.Append(new SpareBitsField<1>()); + internalField.Append(new SpareBitsField<2>()); + internalField.Append(new SpareBitsField<4>()); } + else { + internalField.Append(new ZCharField<6>(modelData.gvars_names[i])); + if (version >= 216) { + internalField.Append(new BoolField<1>(modelData.gvars_popups[i])); + internalField.Append(new SpareBitsField<7>()); + } + } + } + } + else if (variant & GVARS_VARIANT) { + for (int i=0; i(modelData.flightModeData[0].gvars[i])); } } @@ -3214,7 +3253,17 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne } if (IS_TARANIS(board)) { - if (version >= 217) { + if (version >= 218) { + for (int i=0; i<7; i++) { + ScriptData & script = modelData.scriptData[i]; + internalField.Append(new CharField<6>(script.filename)); + internalField.Append(new ZCharField<6>(script.name)); + for (int j=0; j<6; j++) { + internalField.Append(new SignedField<16>(script.inputs[j])); + } + } + } + else if (version >= 217) { for (int i=0; i<7; i++) { ScriptData & script = modelData.scriptData[i]; internalField.Append(new CharField<8>(script.filename)); @@ -3238,7 +3287,10 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne if (IS_TARANIS(board) && version >= 216) { for (int i=0; i<32; i++) { - internalField.Append(new ZCharField<4>(modelData.inputNames[i])); + if (HAS_LARGE_LCD(board)) + internalField.Append(new ZCharField<4>(modelData.inputNames[i])); + else + internalField.Append(new ZCharField<3>(modelData.inputNames[i])); } } @@ -3375,6 +3427,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo if (version >= 216) { for (int i=0; i(generalData.calibMid[i])); internalField.Append(new SignedField<16>(generalData.calibSpanNeg[i])); internalField.Append(new SignedField<16>(generalData.calibSpanPos[i])); diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 6e36d55fa6..93b0c7911f 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -63,12 +63,14 @@ const char * OpenTxEepromInterface::getName() return "OpenTX for MEGA2560 board"; case BOARD_GRUVIN9X: return "OpenTX for Gruvin9x board / 9X"; - case BOARD_TARANIS: - return "OpenTX for FrSky Taranis"; - case BOARD_TARANIS_PLUS: - return "OpenTX for FrSky Taranis Plus"; + case BOARD_TARANIS_X9D: + return "OpenTX for FrSky Taranis X9D"; + case BOARD_TARANIS_X9DP: + return "OpenTX for FrSky Taranis X9D+"; case BOARD_TARANIS_X9E: return "OpenTX for FrSky Taranis X9E"; + case BOARD_X7D: + return "OpenTX for FrSky X7D"; case BOARD_SKY9X: return "OpenTX for Sky9x board / 9X"; case BOARD_9XRPRO: @@ -99,8 +101,9 @@ const int OpenTxEepromInterface::getEEpromSize() case BOARD_9XRPRO: case BOARD_AR9X: return EESIZE_9XRPRO; - case BOARD_TARANIS: - case BOARD_TARANIS_PLUS: + case BOARD_X7D: + case BOARD_TARANIS_X9D: + case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9E: case BOARD_FLAMENCO: case BOARD_HORUS: @@ -320,7 +323,7 @@ unsigned long OpenTxEepromInterface::loadxml(RadioData &radioData, QDomDocument return errors.to_ulong(); } -unsigned long OpenTxEepromInterface::load(RadioData &radioData, const uint8_t *eeprom, int size) +unsigned long OpenTxEepromInterface::load(RadioData & radioData, const uint8_t * eeprom, int size) { std::cout << "trying " << getName() << " import..."; @@ -403,8 +406,9 @@ int OpenTxEepromInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t if (!version) { switch(board) { - case BOARD_TARANIS: - case BOARD_TARANIS_PLUS: + case BOARD_X7D: + case BOARD_TARANIS_X9D: + case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9E: case BOARD_SKY9X: case BOARD_AR9X: @@ -527,7 +531,7 @@ Firmware * OpenTxFirmware::getFirmwareVariant(const QString & id) } } -int OpenTxFirmware::getCapability(const Capability capability) +int OpenTxFirmware::getCapability(Capability capability) { switch (capability) { case Imperial: @@ -536,15 +540,9 @@ int OpenTxFirmware::getCapability(const Capability capability) else return id.contains("imperial") ? 1 : 0; case ModelImage: - if (IS_TARANIS(board)) - return 1; - else - return 0; + return (board==BOARD_TARANIS_X9D || board==BOARD_TARANIS_X9DP || board==BOARD_TARANIS_X9E); case HasBeeper: - if (IS_ARM(board)) - return 0; - else - return 1; + return (!IS_ARM(board)); case HasPxxCountry: return 1; case HasGeneralUnits: @@ -553,10 +551,7 @@ int OpenTxFirmware::getCapability(const Capability capability) else return 0; case HasNegAndSwitches: - if (IS_ARM(board)) - return 1; - else - return 0; + return IS_ARM(board); case PPMExtCtrl: return 1; case PPMFrameLength: @@ -582,6 +577,8 @@ int OpenTxFirmware::getCapability(const Capability capability) return IS_ARM(board) ? 9 : 5; else return 0; + case ModelName: + return (HAS_LARGE_LCD(board) ? 12 : 10); case FlightModesName: return (IS_TARANIS(board) ? 10 : 6); case GvarsName: @@ -599,21 +596,25 @@ int OpenTxFirmware::getCapability(const Capability capability) case Timers: return (IS_ARM(board) ? 3 : 2); case TimersName: - return (IS_TARANIS(board) ? 8 : (IS_ARM(board) ? 3 : 0)); + return (HAS_LARGE_LCD(board) ? 8 : (IS_ARM(board) ? 3 : 0)); case PermTimers: if (IS_2560(board) || IS_ARM(board)) return 1; else return 0; case Pots: - if (IS_TARANIS_X9E(board)) + if (board == BOARD_X7D) + return 2; + else if (IS_TARANIS_X9E(board)) return 4; else if (IS_TARANIS(board)) return 3; //Taranis has only 2 pots but still has a placeholder in settings for 3 pots else return 3; case Sliders: - if (IS_TARANIS_X9E(board)) + if (board == BOARD_X7D) + return 0; + else if (IS_TARANIS_X9E(board)) return 4; else if (IS_TARANIS(board)) return 2; @@ -622,6 +623,8 @@ int OpenTxFirmware::getCapability(const Capability capability) case Switches: if (IS_TARANIS_X9E(board)) return 18; + else if (board == BOARD_X7D) + return 6; else if (IS_TARANIS(board)) return 8; else @@ -691,7 +694,7 @@ int OpenTxFirmware::getCapability(const Capability capability) case Simulation: return 1; case NumCurves: - return (IS_TARANIS(board) ? 32 : (IS_ARM(board) ? 16 : 8)); + return (HAS_LARGE_LCD(board) ? 32 : (IS_ARM(board) ? 16 : 8)); case HasMixerNames: return (IS_ARM(board) ? (IS_TARANIS(board) ? 8 : 6) : false); case HasExpoNames: @@ -699,7 +702,7 @@ int OpenTxFirmware::getCapability(const Capability capability) case HasNoExpo: return (IS_TARANIS(board) ? false : true); case ChannelsName: - return (IS_TARANIS(board) ? 6 : 0); + return (IS_ARM(board) ? (HAS_LARGE_LCD(board) ? 6 : 4) : 0); case HasCvNames: return (IS_TARANIS(board) ? 1 : 0); case Telemetry: @@ -712,7 +715,7 @@ int OpenTxFirmware::getCapability(const Capability capability) case TelemetryCustomScreens: return IS_ARM(board) ? 4 : 2; case TelemetryCustomScreensFieldsPerLine: - return IS_TARANIS(board) ? 3 : 2; + return HAS_LARGE_LCD(board) ? 3 : 2; case NoTelemetryProtocol: return IS_TARANIS(board) ? 1 : 0; case TelemetryUnits: @@ -813,6 +816,50 @@ int OpenTxFirmware::getCapability(const Capability capability) } } +Firmware::Switch OpenTxFirmware::getSwitch(unsigned int index) +{ + if (board == BOARD_X7D) { + const Switch switches[] = { { SWITCH_3POS, "SA" }, + { SWITCH_3POS, "SB" }, + { SWITCH_3POS, "SC" }, + { SWITCH_3POS, "SD" }, + { SWITCH_2POS, "SF" }, + { SWITCH_TOGGLE, "SH" } }; + return switches[index]; + } + else if (IS_TARANIS(board) || board == BOARD_HORUS) { + const Switch switches[] = { { SWITCH_3POS, "SA" }, + { SWITCH_3POS, "SB" }, + { SWITCH_3POS, "SC" }, + { SWITCH_3POS, "SD" }, + { SWITCH_3POS, "SE" }, + { SWITCH_2POS, "SF" }, + { SWITCH_3POS, "SG" }, + { SWITCH_TOGGLE, "SH" }, + { SWITCH_3POS, "SI" }, + { SWITCH_3POS, "SJ" }, + { SWITCH_3POS, "SK" }, + { SWITCH_3POS, "SL" }, + { SWITCH_3POS, "SM" }, + { SWITCH_3POS, "SN" }, + { SWITCH_3POS, "SO" }, + { SWITCH_3POS, "SP" }, + { SWITCH_3POS, "SQ" }, + { SWITCH_3POS, "SR" } }; + return switches[index]; + } + else { + const Switch switches[] = {{SWITCH_3POS, "3POS"}, + {SWITCH_2POS, "THR"}, + {SWITCH_2POS, "RUD"}, + {SWITCH_2POS, "ELE"}, + {SWITCH_2POS, "AIL"}, + {SWITCH_2POS, "GEA"}, + {SWITCH_TOGGLE, "SH"}}; + return switches[index]; + } +} + QTime OpenTxFirmware::getMaxTimerStart() { if (IS_TARANIS(board) || IS_HORUS(board)) @@ -1036,7 +1083,7 @@ unsigned long OpenTxEepromInterface::loadBackup(RadioData &radioData, uint8_t *e BoardEnum backupBoard = (BoardEnum)-1; switch (eeprom[3]) { case 0x33: - backupBoard = BOARD_TARANIS; + backupBoard = BOARD_TARANIS_X9D; break; case 0x32: backupBoard = BOARD_SKY9X; @@ -1176,27 +1223,33 @@ void registerOpenTxFirmwares() Option nav_options[] = { { "rotenc", QObject::tr("Rotary Encoder use in menus navigation") }, { "potscroll", QObject::tr("Pots use in menus navigation") }, { NULL } }; Option dsm2_options[] = { { "DSM2", QObject::tr("Support for DSM2 modules"), 0 }, { "DSM2PPM", QObject::tr("Support for DSM2 modules using ppm instead of true serial"), 0 }, { NULL } }; - /* Taranis Plus board */ - firmware = new OpenTxFirmware("opentx-x9d+", QObject::tr("FrSky Taranis Plus"), BOARD_TARANIS_PLUS); + /* FrSky Taranis X9D+ board */ + firmware = new OpenTxFirmware("opentx-x9d+", QObject::tr("FrSky Taranis X9D+"), BOARD_TARANIS_X9DP); addOpenTxTaranisOptions(firmware); addOpenTxCommonOptions(firmware); firmwares.push_back(firmware); - /* Taranis board */ - firmware = new OpenTxFirmware("opentx-x9d", QObject::tr("FrSky Taranis"), BOARD_TARANIS); + /* FrSky Taranis X9D board */ + firmware = new OpenTxFirmware("opentx-x9d", QObject::tr("FrSky Taranis X9D"), BOARD_TARANIS_X9D); firmware->addOption("haptic", QObject::tr("Haptic module installed")); addOpenTxTaranisOptions(firmware); addOpenTxCommonOptions(firmware); firmwares.push_back(firmware); - /* Taranis X9E board */ + /* FrSky Taranis X9E board */ firmware = new OpenTxFirmware("opentx-x9e", QObject::tr("FrSky Taranis X9E"), BOARD_TARANIS_X9E); firmware->addOption("shutdownconfirm", QObject::tr("Confirmation before radio shutdown")); addOpenTxTaranisOptions(firmware); addOpenTxCommonOptions(firmware); firmwares.push_back(firmware); - /* Horus board */ + /* FrSky X7D board */ + firmware = new OpenTxFirmware("opentx-x7d", QObject::tr("FrSky X7D"), BOARD_X7D); + addOpenTxTaranisOptions(firmware); + addOpenTxCommonOptions(firmware); + firmwares.push_back(firmware); + + /* FrSky Horus board */ firmware = new OpenTxFirmware("opentx-horus", QObject::tr("FrSky Horus"), BOARD_HORUS); firmware->addOption("noheli", QObject::tr("Disable HELI menu and cyclic mix support")); firmware->addOption("nogvars", QObject::tr("Disable Global variables")); diff --git a/companion/src/firmwares/opentx/opentxinterface.h b/companion/src/firmwares/opentx/opentxinterface.h index 32a28e7227..e4ed72b424 100644 --- a/companion/src/firmwares/opentx/opentxinterface.h +++ b/companion/src/firmwares/opentx/opentxinterface.h @@ -117,7 +117,9 @@ class OpenTxFirmware: public Firmware { virtual QString getFirmwareUrl(); - virtual int getCapability(const Capability); + virtual int getCapability(Capability); + + virtual Switch getSwitch(unsigned int index); virtual QTime getMaxTimerStart(); diff --git a/companion/src/generaledit/hardware.cpp b/companion/src/generaledit/hardware.cpp index 8ddb32a519..33cb0ebfbb 100644 --- a/companion/src/generaledit/hardware.cpp +++ b/companion/src/generaledit/hardware.cpp @@ -8,7 +8,7 @@ void HardwarePanel::setupSwitchConfig(int index, QLabel *label, AutoLineEdit *na if (IS_TARANIS(firmware->getBoard())) { if (IS_TARANIS_X9E(firmware->getBoard())) { enabled = true; - type->addItem(tr("None"), GeneralSettings::SWITCH_NONE); + type->addItem(tr("None"), Firmware::SWITCH_NONE); } else if (index < 8) { enabled = true; @@ -16,9 +16,9 @@ void HardwarePanel::setupSwitchConfig(int index, QLabel *label, AutoLineEdit *na } if (enabled) { - type->addItem(tr("2 Positions Toggle"), GeneralSettings::SWITCH_TOGGLE); - type->addItem(tr("2 Positions"), GeneralSettings::SWITCH_2POS); - if (threePos) type->addItem(tr("3 Positions"), GeneralSettings::SWITCH_3POS); + type->addItem(tr("2 Positions Toggle"), Firmware::SWITCH_TOGGLE); + type->addItem(tr("2 Positions"), Firmware::SWITCH_2POS); + if (threePos) type->addItem(tr("3 Positions"), Firmware::SWITCH_3POS); name->setField(generalSettings.switchName[index], 3, this); type->setField(generalSettings.switchConfig[index], this); } diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index 280f3e807f..1d54a32195 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -804,7 +804,7 @@ void startSimulation(QWidget * parent, RadioData & radioData, int modelIdx) else if (board == BOARD_FLAMENCO) { sd = new SimulatorDialogFlamenco(parent, si, flags); } - else if (IS_TARANIS(board)) { + else if (board == BOARD_TARANIS_X9D || board == BOARD_TARANIS_X9DP || board == BOARD_TARANIS_X9E) { for (int i=0; igetCapability(Pots); i++) { if (radioData.generalSettings.isPotAvailable(i)) { flags |= (SIMULATOR_FLAGS_S1 << i); diff --git a/companion/src/mdichild.cpp b/companion/src/mdichild.cpp index ee1dc8e104..76dd3fe625 100644 --- a/companion/src/mdichild.cpp +++ b/companion/src/mdichild.cpp @@ -178,7 +178,7 @@ void MdiChild::modelEdit() else { QApplication::setOverrideCursor(Qt::WaitCursor); checkAndInitModel( row ); - ModelData &model = radioData.models[row - 1]; + ModelData & model = radioData.models[row - 1]; gStopwatch.restart(); gStopwatch.report("ModelEdit creation"); ModelEdit *t = new ModelEdit(this, radioData, (row - 1), GetCurrentFirmware()/*firmware*/); @@ -213,7 +213,7 @@ void MdiChild::openEditWindow() generalEdit(); } else{ - ModelData &model = radioData.models[row - 1]; + ModelData & model = radioData.models[row - 1]; if (model.isEmpty() && g.useWizard()) { wizardEdit(); } diff --git a/companion/src/modeledit/channels.cpp b/companion/src/modeledit/channels.cpp index ff4bc9c731..347371437f 100644 --- a/companion/src/modeledit/channels.cpp +++ b/companion/src/modeledit/channels.cpp @@ -25,7 +25,7 @@ LimitsGroup::LimitsGroup(Firmware * firmware, TableLayout * tableLayout, int row spinbox->setSuffix("%"); } - if (IS_TARANIS(board) || deflt == 0 /*it's the offset*/) { + if (HAS_LARGE_LCD(board) || deflt == 0 /*it's the offset*/) { spinbox->setDecimals(1); } else { diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index a0c5f7a6b7..a7f1d8007d 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -181,8 +181,7 @@ ModulePanel::ModulePanel(QWidget *parent, ModelData & model, ModuleData & module } } - for (int i=0; i<=MM_RF_PROTO_LAST; i++) - { + for (int i=0; i<=MM_RF_PROTO_LAST; i++) { ui->multiProtocol->addItem(ModelPrinter::printMultiRfProtocol(i, false), (QVariant) i); } @@ -531,7 +530,7 @@ void ModulePanel::updateFailsafe(int channel) /******************************************************************************/ -SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware): +SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware): ModelPanel(parent, model, generalSettings, firmware), ui(new Ui::Setup) { @@ -545,7 +544,7 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen QRegExp rx(CHAR_FOR_NAMES_REGEX); ui->name->setValidator(new QRegExpValidator(rx, this)); - ui->name->setMaxLength(IS_TARANIS(board) ? 12 : 10); + ui->name->setMaxLength(firmware->getCapability(ModelName)); if (firmware->getCapability(ModelImage)) { QStringList items; @@ -594,7 +593,7 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen ui->imagePreview->hide(); } - QWidget *prevFocus = ui->image; + QWidget * prevFocus = ui->image; for (int i=0; igetCapability(Timers)) { timers[i] = new TimerPanel(this, model, model.timers[i], generalSettings, firmware, prevFocus); @@ -655,15 +654,12 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen // Startup switches warnings for (int i=0; igetCapability(Switches); i++) { + Firmware::Switch sw = firmware->getSwitch(i); if (IS_TARANIS(firmware->getBoard())) { - if (generalSettings.switchConfig[i] == GeneralSettings::SWITCH_NONE || generalSettings.switchConfig[i] == GeneralSettings::SWITCH_TOGGLE) { - continue; - } + sw.type = Firmware::SwitchType(generalSettings.switchConfig[i]); } - else { - if (i==firmware->getCapability(Switches)-1) { - continue; - } + if (sw.type == Firmware::SWITCH_NONE || sw.type == Firmware::SWITCH_TOGGLE) { + continue; } QLabel * label = new QLabel(this); QSlider * slider = new QSlider(this); @@ -678,14 +674,8 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen slider->setSingleStep(1); slider->setPageStep(1); slider->setTickInterval(1); - if (IS_TARANIS(board)) { - label->setText(switchesX9D[i]); - slider->setMaximum(generalSettings.switchConfig[i] == GeneralSettings::SWITCH_3POS ? 2 : 1); - } - else { - label->setText(switches9X[i]); - slider->setMaximum(i==0 ? 2 : 1); - } + label->setText(sw.name); + slider->setMaximum(sw.type == Firmware::SWITCH_3POS ? 2 : 1); cb->setProperty("index", i); ui->switchesStartupLayout->addWidget(label, 0, i+1); ui->switchesStartupLayout->setAlignment(label, Qt::AlignCenter); @@ -701,8 +691,7 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen QWidget::setTabOrder(slider, cb); prevFocus = cb; } - ui->switchesStartupLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, firmware->getCapability(Switches)); - + // Pot warnings prevFocus = ui->potWarningMode; if (IS_TARANIS(board)) { @@ -931,7 +920,7 @@ void SetupPanel::updateStartupSwitches() bool enabled = !(model->switchWarningEnable & (1 << index)); if (IS_TARANIS(GetEepromInterface()->getBoard())) { value = (switchStates >> 2*index) & 0x03; - if (generalSettings.switchConfig[index] != GeneralSettings::SWITCH_3POS && value == 2) + if (generalSettings.switchConfig[index] != Firmware::SWITCH_3POS && value == 2) value = 1; } else { @@ -969,7 +958,7 @@ void SetupPanel::startupSwitchEdited(int value) model->switchWarningStates &= ~mask; - if (IS_TARANIS(GetEepromInterface()->getBoard()) && generalSettings.switchConfig[index] != GeneralSettings::SWITCH_3POS) { + if (IS_TARANIS(GetEepromInterface()->getBoard()) && generalSettings.switchConfig[index] != Firmware::SWITCH_3POS) { if (value == 1) value = 2; } diff --git a/companion/src/simulation/simulatordialog9x.cpp b/companion/src/simulation/simulatordialog9x.cpp index a2a87455ee..62cbe2abb1 100644 --- a/companion/src/simulation/simulatordialog9x.cpp +++ b/companion/src/simulation/simulatordialog9x.cpp @@ -55,14 +55,14 @@ SimulatorDialog9X::SimulatorDialog9X(QWidget * parent, SimulatorInterface *simul if (g.simuSW()) restoreSwitches(); - ui->trimHR_L->setText(QString::fromUtf8(leftArrow)); - ui->trimHR_R->setText(QString::fromUtf8(rightArrow)); - ui->trimVR_U->setText(QString::fromUtf8(upArrow)); - ui->trimVR_D->setText(QString::fromUtf8(downArrow)); - ui->trimHL_L->setText(QString::fromUtf8(leftArrow)); - ui->trimHL_R->setText(QString::fromUtf8(rightArrow)); - ui->trimVL_U->setText(QString::fromUtf8(upArrow)); - ui->trimVL_D->setText(QString::fromUtf8(downArrow)); + ui->trimHR_L->setText(QString::fromUtf8(ARROW_LEFT)); + ui->trimHR_R->setText(QString::fromUtf8(ARROW_RIGHT)); + ui->trimVR_U->setText(QString::fromUtf8(ARROW_UP)); + ui->trimVR_D->setText(QString::fromUtf8(ARROW_DOWN)); + ui->trimHL_L->setText(QString::fromUtf8(ARROW_LEFT)); + ui->trimHL_R->setText(QString::fromUtf8(ARROW_RIGHT)); + ui->trimVL_U->setText(QString::fromUtf8(ARROW_UP)); + ui->trimVL_D->setText(QString::fromUtf8(ARROW_DOWN)); for (int i=0; isetProperty("index", i); connect(pots[i], SIGNAL(valueChanged(int)), this, SLOT(dialChanged(int))); diff --git a/companion/src/simulation/simulatordialogflamenco.cpp b/companion/src/simulation/simulatordialogflamenco.cpp index c3ecac913a..c6ad6ed132 100644 --- a/companion/src/simulation/simulatordialogflamenco.cpp +++ b/companion/src/simulation/simulatordialogflamenco.cpp @@ -25,14 +25,14 @@ SimulatorDialogFlamenco::SimulatorDialogFlamenco(QWidget * parent, SimulatorInte if (g.simuSW()) restoreSwitches(); - ui->trimHR_L->setText(QString::fromUtf8(leftArrow)); - ui->trimHR_R->setText(QString::fromUtf8(rightArrow)); - ui->trimVR_U->setText(QString::fromUtf8(upArrow)); - ui->trimVR_D->setText(QString::fromUtf8(downArrow)); - ui->trimHL_L->setText(QString::fromUtf8(leftArrow)); - ui->trimHL_R->setText(QString::fromUtf8(rightArrow)); - ui->trimVL_U->setText(QString::fromUtf8(upArrow)); - ui->trimVL_D->setText(QString::fromUtf8(downArrow)); + ui->trimHR_L->setText(QString::fromUtf8(ARROW_LEFT)); + ui->trimHR_R->setText(QString::fromUtf8(ARROW_RIGHT)); + ui->trimVR_U->setText(QString::fromUtf8(ARROW_UP)); + ui->trimVR_D->setText(QString::fromUtf8(ARROW_DOWN)); + ui->trimHL_L->setText(QString::fromUtf8(ARROW_LEFT)); + ui->trimHL_R->setText(QString::fromUtf8(ARROW_RIGHT)); + ui->trimVL_U->setText(QString::fromUtf8(ARROW_UP)); + ui->trimVL_D->setText(QString::fromUtf8(ARROW_DOWN)); connect(ui->leftbuttons, SIGNAL(buttonPressed(int)), this, SLOT(onButtonPressed(int))); connect(ui->rightbuttons, SIGNAL(buttonPressed(int)), this, SLOT(onButtonPressed(int))); diff --git a/companion/src/simulation/simulatordialoghorus.cpp b/companion/src/simulation/simulatordialoghorus.cpp index 0345a3c42f..ecfd48c1de 100644 --- a/companion/src/simulation/simulatordialoghorus.cpp +++ b/companion/src/simulation/simulatordialoghorus.cpp @@ -43,14 +43,14 @@ SimulatorDialogHorus::SimulatorDialogHorus(QWidget * parent, SimulatorInterface if (g.simuSW()) restoreSwitches(); - ui->trimHR_L->setText(QString::fromUtf8(leftArrow)); - ui->trimHR_R->setText(QString::fromUtf8(rightArrow)); - ui->trimVR_U->setText(QString::fromUtf8(upArrow)); - ui->trimVR_D->setText(QString::fromUtf8(downArrow)); - ui->trimHL_L->setText(QString::fromUtf8(leftArrow)); - ui->trimHL_R->setText(QString::fromUtf8(rightArrow)); - ui->trimVL_U->setText(QString::fromUtf8(upArrow)); - ui->trimVL_D->setText(QString::fromUtf8(downArrow)); + ui->trimHR_L->setText(QString::fromUtf8(ARROW_LEFT)); + ui->trimHR_R->setText(QString::fromUtf8(ARROW_RIGHT)); + ui->trimVR_U->setText(QString::fromUtf8(ARROW_UP)); + ui->trimVR_D->setText(QString::fromUtf8(ARROW_DOWN)); + ui->trimHL_L->setText(QString::fromUtf8(ARROW_LEFT)); + ui->trimHL_R->setText(QString::fromUtf8(ARROW_RIGHT)); + ui->trimVL_U->setText(QString::fromUtf8(ARROW_UP)); + ui->trimVL_D->setText(QString::fromUtf8(ARROW_DOWN)); connect(ui->leftbuttons, SIGNAL(buttonPressed(int)), this, SLOT(onButtonPressed(int))); connect(ui->rightbuttons, SIGNAL(buttonPressed(int)), this, SLOT(onButtonPressed(int))); diff --git a/companion/src/simulation/simulatordialogtaranis.cpp b/companion/src/simulation/simulatordialogtaranis.cpp index 6c1afcb81a..f5e2d5298e 100644 --- a/companion/src/simulation/simulatordialogtaranis.cpp +++ b/companion/src/simulation/simulatordialogtaranis.cpp @@ -50,14 +50,14 @@ SimulatorDialogTaranis::SimulatorDialogTaranis(QWidget * parent, SimulatorInterf } } - ui->trimHR_L->setText(QString::fromUtf8(leftArrow)); - ui->trimHR_R->setText(QString::fromUtf8(rightArrow)); - ui->trimVR_U->setText(QString::fromUtf8(upArrow)); - ui->trimVR_D->setText(QString::fromUtf8(downArrow)); - ui->trimHL_L->setText(QString::fromUtf8(leftArrow)); - ui->trimHL_R->setText(QString::fromUtf8(rightArrow)); - ui->trimVL_U->setText(QString::fromUtf8(upArrow)); - ui->trimVL_D->setText(QString::fromUtf8(downArrow)); + ui->trimHR_L->setText(QString::fromUtf8(ARROW_LEFT)); + ui->trimHR_R->setText(QString::fromUtf8(ARROW_RIGHT)); + ui->trimVR_U->setText(QString::fromUtf8(ARROW_UP)); + ui->trimVR_D->setText(QString::fromUtf8(ARROW_DOWN)); + ui->trimHL_L->setText(QString::fromUtf8(ARROW_LEFT)); + ui->trimHL_R->setText(QString::fromUtf8(ARROW_RIGHT)); + ui->trimVL_U->setText(QString::fromUtf8(ARROW_UP)); + ui->trimVL_D->setText(QString::fromUtf8(ARROW_DOWN)); connect(ui->leftbuttons, SIGNAL(buttonPressed(int)), this, SLOT(onButtonPressed(int))); connect(ui->rightbuttons, SIGNAL(buttonPressed(int)), this, SLOT(onButtonPressed(int))); diff --git a/companion/src/simulation/simulatorinterface.cpp b/companion/src/simulation/simulatorinterface.cpp index 5a93650fc5..00260774c1 100644 --- a/companion/src/simulation/simulatorinterface.cpp +++ b/companion/src/simulation/simulatorinterface.cpp @@ -24,7 +24,7 @@ void registerSimulator(const QString &filename) typedef SimulatorFactory * (*RegisterSimulator)(); RegisterSimulator registerSimulator = (RegisterSimulator)lib.resolve("registerSimu"); if (registerSimulator) { - SimulatorFactory *factory = registerSimulator(); + SimulatorFactory * factory = registerSimulator(); registerSimulatorFactory(factory); } else { diff --git a/companion/src/simulator.cpp b/companion/src/simulator.cpp index 913fc42922..2694ddae96 100644 --- a/companion/src/simulator.cpp +++ b/companion/src/simulator.cpp @@ -157,7 +157,7 @@ int main(int argc, char *argv[]) options.add("help", "show this help text"); options.alias("help", "h"); options.parse(QCoreApplication::arguments()); - if(options.count("help") || options.showUnrecognizedWarning()) { + if (options.count("help") || options.showUnrecognizedWarning()) { QString msg; QTextStream stream(&msg); stream << "Usage: simulator [OPTION]... [EEPROM.BIN FILE] " << endl << endl; @@ -216,7 +216,7 @@ int main(int argc, char *argv[]) qDebug() << "eepromFileName" << eepromFileName; // TODO display used eeprom filename somewhere - SimulatorFactory *factory = getSimulatorFactory(firmwareId); + SimulatorFactory * factory = getSimulatorFactory(firmwareId); if (!factory) { showMessage(QObject::tr("ERROR: Simulator %1 not found").arg(firmwareId), QMessageBox::Critical); return 2; @@ -225,7 +225,7 @@ int main(int argc, char *argv[]) dialog = new SimulatorDialogHorus(NULL, factory->create()); else if (factory->type() == BOARD_FLAMENCO) dialog = new SimulatorDialogFlamenco(NULL, factory->create()); - else if (factory->type() == BOARD_TARANIS) + else if (factory->type() == BOARD_TARANIS_X9D || factory->type() == BOARD_TARANIS_X9DP || factory->type() == BOARD_TARANIS_X9E) dialog = new SimulatorDialogTaranis(NULL, factory->create(), SIMULATOR_FLAGS_S1|SIMULATOR_FLAGS_S2); else dialog = new SimulatorDialog9X(NULL, factory->create()); diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 8a041be67c..a200afc282 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -164,7 +164,7 @@ enum CurveType { #define LEN_TIMER_NAME 3 #define LEN_FLIGHT_MODE_NAME 6 #define LEN_EXPOMIX_NAME 6 - #define LEN_CHANNEL_NAME 6 + #define LEN_CHANNEL_NAME 4 #define LEN_INPUT_NAME 3 #define LEN_CURVE_NAME 3 #define LEN_FUNCTION_NAME 6 @@ -527,15 +527,13 @@ enum PotsWarnMode { // even we do not spend space in EEPROM for 10 GVARS, we reserve the space inside the range of values, like offset, weight, etc. #if defined(PCBSTD) && defined(GVARS) - #define MAX_GVARS 5 + #define MAX_GVARS 5 #elif defined(PCBSTD) - #define MAX_GVARS 0 + #define MAX_GVARS 0 +#elif defined(CPUARM) + #define MAX_GVARS 9 #else - #if defined(CPUARM) - #define MAX_GVARS 9 - #else - #define MAX_GVARS 5 - #endif + #define MAX_GVARS 5 #endif enum SwitchSources { @@ -836,21 +834,25 @@ enum MixSources { MIXSRC_SB, LUA_EXPORT("sb", "Switch B") MIXSRC_SC, LUA_EXPORT("sc", "Switch C") MIXSRC_SD, LUA_EXPORT("sd", "Switch D") +#if !defined(PCBX7D) MIXSRC_SE, LUA_EXPORT("se", "Switch E") +#endif MIXSRC_SF, LUA_EXPORT("sf", "Switch F") +#if !defined(PCBX7D) MIXSRC_SG, LUA_EXPORT("sg", "Switch G") +#endif MIXSRC_SH, LUA_EXPORT("sh", "Switch H") #if defined(PCBX9E) - MIXSRC_SI, LUA_EXPORT("si", "Switch I (X9E only)") - MIXSRC_SJ, LUA_EXPORT("sj", "Switch J (X9E only)") - MIXSRC_SK, LUA_EXPORT("sk", "Switch K (X9E only)") - MIXSRC_SL, LUA_EXPORT("sl", "Switch L (X9E only)") - MIXSRC_SM, LUA_EXPORT("sm", "Switch M (X9E only)") - MIXSRC_SN, LUA_EXPORT("sn", "Switch N (X9E only)") - MIXSRC_SO, LUA_EXPORT("so", "Switch O (X9E only)") - MIXSRC_SP, LUA_EXPORT("sp", "Switch P (X9E only)") - MIXSRC_SQ, LUA_EXPORT("sq", "Switch Q (X9E only)") - MIXSRC_SR, LUA_EXPORT("sr", "Switch R (X9E only)") + MIXSRC_SI, LUA_EXPORT("si", "Switch I") + MIXSRC_SJ, LUA_EXPORT("sj", "Switch J") + MIXSRC_SK, LUA_EXPORT("sk", "Switch K") + MIXSRC_SL, LUA_EXPORT("sl", "Switch L") + MIXSRC_SM, LUA_EXPORT("sm", "Switch M") + MIXSRC_SN, LUA_EXPORT("sn", "Switch N") + MIXSRC_SO, LUA_EXPORT("so", "Switch O") + MIXSRC_SP, LUA_EXPORT("sp", "Switch P") + MIXSRC_SQ, LUA_EXPORT("sq", "Switch Q") + MIXSRC_SR, LUA_EXPORT("sr", "Switch R") MIXSRC_LAST_SWITCH = MIXSRC_SR, #else MIXSRC_LAST_SWITCH = MIXSRC_SH, @@ -867,10 +869,6 @@ enum MixSources { #endif MIXSRC_FIRST_LOGICAL_SWITCH, MIXSRC_SW1 = MIXSRC_FIRST_LOGICAL_SWITCH, LUA_EXPORT_MULTIPLE("ls", "Logical switch L%d", MAX_LOGICAL_SWITCHES) - MIXSRC_SW9 = MIXSRC_SW1 + 8, - MIXSRC_SWA, - MIXSRC_SWB, - MIXSRC_SWC, MIXSRC_LAST_LOGICAL_SWITCH = MIXSRC_FIRST_LOGICAL_SWITCH+MAX_LOGICAL_SWITCHES-1, MIXSRC_FIRST_TRAINER, LUA_EXPORT_MULTIPLE("trn", "Trainer input %d", MAX_TRAINER_CHANNELS) diff --git a/radio/src/gui/128x64/radio_trainer.cpp b/radio/src/gui/128x64/radio_trainer.cpp index 70f91f738d..6a3ccb200d 100644 --- a/radio/src/gui/128x64/radio_trainer.cpp +++ b/radio/src/gui/128x64/radio_trainer.cpp @@ -38,9 +38,9 @@ void menuRadioTrainer(event_t event) y = MENU_HEADER_HEIGHT + 1 + FH; - for (uint8_t i=HEADER_LINE; i=POT_FIRST && (x)<=POT2) // POT3 is only defined in software