diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 927087ecd..2feff463d 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -148,6 +148,7 @@ const int Boards::getFlashSize(Type board) case BOARD_TARANIS_X9D: case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9E: + case BOARD_JUMPER_T12: return FSIZE_TARANIS; case BOARD_X12S: case BOARD_X10: @@ -200,6 +201,18 @@ const SwitchInfo Boards::getSwitchInfo(Board::Type board, int index) if (index < DIM(switches)) return switches[index]; } + else if (IS_JUMPER_T12(board)) { + const Board::SwitchInfo switches[] = { + {SWITCH_3POS, "SA"}, + {SWITCH_3POS, "SB"}, + {SWITCH_3POS, "SC"}, + {SWITCH_3POS, "SD"}, + {SWITCH_2POS, "SG"}, + {SWITCH_2POS, "SH"} + }; + if (index < DIM(switches)) + return switches[index]; + } else if (IS_HORUS_OR_TARANIS(board)) { const Board::SwitchInfo switches[] = { {SWITCH_3POS, "SA"}, @@ -224,18 +237,6 @@ const SwitchInfo Boards::getSwitchInfo(Board::Type board, int index) if (index < DIM(switches)) return switches[index]; } - else if (IS_JUMPER_T12(board)) { - const Board::SwitchInfo switches[] = { - {SWITCH_3POS, "SA"}, - {SWITCH_3POS, "SB"}, - {SWITCH_3POS, "SC"}, - {SWITCH_3POS, "SD"}, - {SWITCH_2POS, "SG"}, - {SWITCH_2POS, "SH"} - }; - if (index < DIM(switches)) - return switches[index]; - } else { const Board::SwitchInfo switches[] = { {SWITCH_3POS, "3POS"}, @@ -311,14 +312,14 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability) return 5; else if (IS_TARANIS_X7(board)) return 8; + else if (IS_JUMPER_T12(board)) + return 6; else if (IS_TARANIS_XLITES(board)) return 6; else if (IS_TARANIS_XLITE(board)) return 4; else if (IS_HORUS_OR_TARANIS(board)) return 8; - else if (IS_JUMPER_T12(board)) - return 6; else return 7; @@ -472,7 +473,9 @@ const QString Boards::getBoardName(Board::Type board) return "MEGA2560"; case BOARD_TARANIS_X7: return "Taranis X7/X7S"; - case BOARD_TARANIS_XLITE: + case BOARD_JUMPER_T12: + return "Jumper T12"; + case BOARD_TARANIS_XLITE: return "Taranis X-Lite"; case BOARD_TARANIS_XLITES: return "Taranis X-Lite S/PRO"; diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 7b0299eb2..e9fe9ae54 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -51,7 +51,7 @@ namespace Board { BOARD_JUMPER_T12 }; - constexpr int BOARD_TYPE_MAX = BOARD_TARANIS_X9LITE ; + constexpr int BOARD_TYPE_MAX = BOARD_JUMPER_T12 ; enum PotType { @@ -200,8 +200,8 @@ class Boards #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_X9LITE(board) || IS_TARANIS_XLITE(board)) -#define IS_TARANIS_SMALL(board) (IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board) || IS_TARANIS_X9LITE(board)) +#define IS_TARANIS(board) (IS_TARANIS_X9(board) || IS_TARANIS_X7(board) || IS_TARANIS_X9LITE(board) || IS_TARANIS_XLITE(board) || IS_JUMPER_T12(board)) +#define IS_TARANIS_SMALL(board) (IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board) || IS_TARANIS_X9LITE(board) || IS_JUMPER_T12(board)) #define IS_HORUS_X12S(board) (board==Board::BOARD_X12S) #define IS_HORUS_X10(board) (board==Board::BOARD_X10) #define IS_HORUS(board) (IS_HORUS_X12S(board) || IS_HORUS_X10(board)) diff --git a/companion/src/firmwares/eeprominterface.h b/companion/src/firmwares/eeprominterface.h index d6ed9cf16..e8da6274d 100644 --- a/companion/src/firmwares/eeprominterface.h +++ b/companion/src/firmwares/eeprominterface.h @@ -107,6 +107,7 @@ enum Capability { HasFailsafe, HasSoundMixer, NumModules, + NumFirstUsableModule, HasModuleR9MFlex, HasModuleR9MMini, PPMCenter, diff --git a/companion/src/firmwares/opentx/opentxeeprom.h b/companion/src/firmwares/opentx/opentxeeprom.h index 19c1f7318..b421420ba 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.h +++ b/companion/src/firmwares/opentx/opentxeeprom.h @@ -35,7 +35,7 @@ #define TARANIS_XLITE_VARIANT 0x2000 #define TARANIS_XLITES_VARIANT 0x1000 #define TARANIS_X9LITE_VARIANT 0x0800 -#define JUMPER_T12_VARIANT TARANIS_X7_VARIANT +#define JUMPER_T12_VARIANT 0x4001 #define SIMU_STOCK_VARIANTS (GVARS_VARIANT|FRSKY_VARIANT) #define SIMU_M128_VARIANTS (M128_VARIANT|SIMU_STOCK_VARIANTS) diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 7e7c38593..9cab7fde4 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -624,6 +624,8 @@ int OpenTxFirmware::getCapability(::Capability capability) return (IS_ARM(board) ? 32 : 0); case NumModules: return (IS_ARM(board) ? 2 : 1); + case NumFirstUsableModule: + return (IS_JUMPER_T12(board) ? 1 : 0); case HasModuleR9MFlex: return id.contains("flexr9m"); case HasModuleR9MMini: @@ -789,7 +791,10 @@ int OpenTxFirmware::isAvailable(PulsesProtocol proto, int port) case PULSES_SBUS: return 1; case PULSES_MULTIMODULE: - return id.contains("multimodule") ? 1 : 0; + if(IS_JUMPER_T12(board)) + return 1; + else + return id.contains("multimodule") ? 1 : 0; case PULSES_CROSSFIRE: return id.contains("crossfire") ? 1 : 0; case PULSES_ACCESS_R9M_LITE: @@ -975,13 +980,13 @@ bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int vari variantError = true; } } - else if (IS_TARANIS(board)) { - if (variant != 0) { + else if (IS_JUMPER_T12(board)) { + if (variant != JUMPER_T12_VARIANT) { variantError = true; } } - else if (IS_JUMPER_T12(board)) { - if (variant != JUMPER_T12_VARIANT) { + else if (IS_TARANIS(board)) { + if (variant != 0) { variantError = true; } } diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index fead754c7..a30949446 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -1051,7 +1051,7 @@ SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & ge ui->trimsDisplay->hide(); } - for (int i=0; igetCapability(NumModules); i++) { + for (int i=firmware->getCapability(NumFirstUsableModule); igetCapability(NumModules); i++) { modules[i] = new ModulePanel(this, model, model.moduleData[i], generalSettings, firmware, i); ui->modulesLayout->addWidget(modules[i]); connect(modules[i], &ModulePanel::modified, this, &SetupPanel::modified); diff --git a/radio/src/storage/conversions/conversions_218_219.cpp b/radio/src/storage/conversions/conversions_218_219.cpp index d2703bcb7..a832861bf 100644 --- a/radio/src/storage/conversions/conversions_218_219.cpp +++ b/radio/src/storage/conversions/conversions_218_219.cpp @@ -269,6 +269,7 @@ void convertModelData_218_to_219(ModelData &model) void convertRadioData_218_to_219(RadioData & settings) { settings.version = 219; + settings.variant = EEPROM_VARIANT; #if defined(PCBHORUS) RadioData_v218 settings_v218 = (RadioData_v218 &)settings; diff --git a/radio/src/storage/eeprom_rlc.cpp b/radio/src/storage/eeprom_rlc.cpp index 4bed375d9..2534a544a 100644 --- a/radio/src/storage/eeprom_rlc.cpp +++ b/radio/src/storage/eeprom_rlc.cpp @@ -776,7 +776,19 @@ bool eeLoadGeneral() } #endif -#if defined(PCBTARANIS) +#if defined(RADIO_T12) + if (g_eeGeneral.variant != (EEPROM_VARIANT & 0xFFFE)) { + TRACE("EEPROM variant %d instead of %d", g_eeGeneral.variant, EEPROM_VARIANT); + return false; + } + else if (g_eeGeneral.variant != EEPROM_VARIANT && g_eeGeneral.version == 218) { + TRACE("V218 T12/X7 detected, allowing use", g_eeGeneral.variant, EEPROM_VARIANT); // Production firmware use v218 X7 variant + } + else { + TRACE("EEPROM variant %d instead of %d", g_eeGeneral.variant, EEPROM_VARIANT); + return false; + } +#elif defined(PCBTARANIS) if (g_eeGeneral.variant != EEPROM_VARIANT) { TRACE("EEPROM variant %d instead of %d", g_eeGeneral.variant, EEPROM_VARIANT); return false; diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 7a39fa69d..e1a52a079 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -80,14 +80,15 @@ elseif(PCB STREQUAL X7) set(NAVIGATION_TYPE 9x) set(MULTIMODULE ON) add_definitions(-DRADIO_T12) + add_definitions(-DEEPROM_VARIANT=0x4001) else() set(LUA_EXPORT lua_export_x7) set(FLAVOUR x7) set(NAVIGATION_TYPE x7) add_definitions(-DRADIO_X7) + add_definitions(-DEEPROM_VARIANT=0x4000) endif() add_definitions(-DPCBX7 -DSOFTWARE_VOLUME) - add_definitions(-DEEPROM_VARIANT=0x4000) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(GUI_DIR 128x64) set(BITMAPS_TARGET 9x_bitmaps)