From 9cbb3cb2a8376f09b5f6506920c91f899563ae6e Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Fri, 12 Aug 2022 20:58:32 +1000 Subject: [PATCH] feat(cpn): Initial TX12MK2 support --- companion/src/firmwares/boards.cpp | 21 +++++++++++++ companion/src/firmwares/boards.h | 7 +++++ companion/src/firmwares/opentx/opentxeeprom.h | 1 + .../src/firmwares/opentx/opentxinterface.cpp | 30 ++++++++++++++++--- companion/src/simulation/simulatorwidget.cpp | 1 + 5 files changed, 56 insertions(+), 4 deletions(-) diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 07eb074ee..66dda6166 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -95,6 +95,8 @@ uint32_t Boards::getFourCC(Type board) return 0x3878746F; case BOARD_RADIOMASTER_TX12: return 0x4178746F; + case BOARD_RADIOMASTER_TX12_MK2: + return 0x4878746F; case BOARD_RADIOMASTER_ZORRO: return 0x4778746F; case BOARD_RADIOMASTER_T8: @@ -129,6 +131,7 @@ int Boards::getEEpromSize(Board::Type board) case BOARD_JUMPER_TLITE: case BOARD_JUMPER_TPRO: case BOARD_RADIOMASTER_TX12: + case BOARD_RADIOMASTER_TX12_MK2: case BOARD_RADIOMASTER_T8: case BOARD_RADIOMASTER_ZORRO: return EESIZE_TARANIS; @@ -170,6 +173,7 @@ int Boards::getFlashSize(Type board) case BOARD_JUMPER_TLITE: case BOARD_JUMPER_TPRO: case BOARD_RADIOMASTER_TX12: + case BOARD_RADIOMASTER_TX12_MK2: case BOARD_RADIOMASTER_ZORRO: case BOARD_RADIOMASTER_T8: return FSIZE_TARANIS; @@ -256,6 +260,18 @@ SwitchInfo Boards::getSwitchInfo(Board::Type board, int index) if (index < DIM(switches)) return switches[index]; } + else if (IS_RADIOMASTER_TX12_MK2(board)) { + const Board::SwitchInfo switches[] = { + {SWITCH_TOGGLE, "SA"}, + {SWITCH_3POS, "SB"}, + {SWITCH_3POS, "SC"}, + {SWITCH_TOGGLE, "SD"}, + {SWITCH_3POS, "SE"}, + {SWITCH_3POS, "SF"} + }; + if (index < DIM(switches)) + return switches[index]; + } else if (IS_RADIOMASTER_ZORRO(board)) { const Board::SwitchInfo switches[] = { {SWITCH_TOGGLE, "SA"}, @@ -440,6 +456,8 @@ int Boards::getCapability(Board::Type board, Board::Capability capability) return 4; else if (board == BOARD_FLYSKY_NV14) return 8; + else if (board == BOARD_RADIOMASTER_TX12_MK2) + return 6; else if (IS_FAMILY_T12(board)) return 8; else if (IS_TARANIS_XLITE(board)) @@ -665,6 +683,8 @@ QString Boards::getBoardName(Board::Type board) return "Radiomaster TX16S"; case BOARD_RADIOMASTER_TX12: return "Radiomaster TX12"; + case BOARD_RADIOMASTER_TX12_MK2: + return "Radiomaster TX12 Mark II"; case BOARD_RADIOMASTER_ZORRO: return "Radiomaster Zorro"; case BOARD_RADIOMASTER_T8: @@ -885,6 +905,7 @@ int Boards::getDefaultInternalModules(Board::Type board) case BOARD_RADIOMASTER_ZORRO: case BOARD_BETAFPV_LR3PRO: + case BOARD_RADIOMASTER_TX12_MK2: return (int)MODULE_TYPE_CROSSFIRE; case BOARD_FLYSKY_NV14: diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 03b9ad5c9..9d8d4efe0 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -60,6 +60,7 @@ namespace Board { BOARD_RADIOMASTER_TX16S, BOARD_JUMPER_T18, BOARD_RADIOMASTER_TX12, + BOARD_RADIOMASTER_TX12_MK2, BOARD_RADIOMASTER_T8, BOARD_JUMPER_TLITE, BOARD_FLYSKY_NV14, @@ -283,6 +284,11 @@ inline bool IS_RADIOMASTER_TX12(Board::Type board) return board == Board::BOARD_RADIOMASTER_TX12; } +inline bool IS_RADIOMASTER_TX12_MK2(Board::Type board) +{ + return board == Board::BOARD_RADIOMASTER_TX12_MK2; +} + inline bool IS_RADIOMASTER_ZORRO(Board::Type board) { return board == Board::BOARD_RADIOMASTER_ZORRO; @@ -303,6 +309,7 @@ inline bool IS_FAMILY_T12(Board::Type board) { return board == Board::BOARD_JUMPER_T12 || board == Board::BOARD_RADIOMASTER_TX12 || + board == Board::BOARD_RADIOMASTER_TX12_MK2 || board == Board::BOARD_RADIOMASTER_ZORRO || board == Board::BOARD_RADIOMASTER_T8 || board == Board::BOARD_JUMPER_TLITE || diff --git a/companion/src/firmwares/opentx/opentxeeprom.h b/companion/src/firmwares/opentx/opentxeeprom.h index affc01f60..a30ca5f3a 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.h +++ b/companion/src/firmwares/opentx/opentxeeprom.h @@ -42,6 +42,7 @@ #define RADIOMASTER_T8_VARIANT 0x4004 #define RADIOMASTER_ZORRO_VARIANT 0x4006 #define JUMPER_TPRO_VARIANT 0x4005 +#define RADIOMASTER_TX12_MK2_VARIANT 0x4008 class OpenTxGeneralData: public TransformedField { public: diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 27997993b..94d8b7205 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -72,6 +72,8 @@ const char * OpenTxEepromInterface::getName() return "EdgeTX for Radiomaster TX16S"; case BOARD_RADIOMASTER_TX12: return "EdgeTX for Radiomaster TX12"; + case BOARD_RADIOMASTER_TX12_MK2: + return "EdgeTX for Radiomaster TX12 Mark II"; case BOARD_RADIOMASTER_ZORRO: return "EdgeTX for Radiomaster Zorro"; case BOARD_RADIOMASTER_T8: @@ -360,6 +362,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u else if (IS_RADIOMASTER_TX12(board)) { variant |= RADIOMASTER_TX12_VARIANT; } + else if (IS_RADIOMASTER_TX12_MK2(board)) { + variant |= RADIOMASTER_TX12_MK2_VARIANT; + } else if (IS_RADIOMASTER_ZORRO(board)) { variant |= RADIOMASTER_ZORRO_VARIANT; } @@ -753,12 +758,12 @@ int OpenTxFirmware::getCapability(::Capability capability) case HasAuxSerialMode: return (IS_FAMILY_HORUS_OR_T16(board) && !IS_FLYSKY_NV14(board)) || (IS_TARANIS_X9(board) && !IS_TARANIS_X9DP_2019(board)) || - IS_RADIOMASTER_ZORRO(board); + IS_RADIOMASTER_ZORRO(board) || IS_RADIOMASTER_TX12_MK2(board); case HasAux2SerialMode: return IS_FAMILY_T16(board); case HasVCPSerialMode: return IS_FAMILY_HORUS_OR_T16(board) || IS_RADIOMASTER_ZORRO(board) || - IS_JUMPER_TPRO(board); + IS_JUMPER_TPRO(board) || IS_RADIOMASTER_TX12_MK2(board); case HasBluetooth: return (IS_FAMILY_HORUS_OR_T16(board) || IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board)|| IS_TARANIS_X9E(board) || IS_TARANIS_X9DP_2019(board) || IS_FLYSKY_NV14(board)) ? true : false; case HasAntennaChoice: @@ -777,8 +782,8 @@ int OpenTxFirmware::getCapability(::Capability capability) return (IS_TARANIS_X9E(board) || IS_TARANIS_X9DP_2019(board) || IS_TARANIS_X7(board) || IS_JUMPER_TPRO(board) || IS_TARANIS_X9LITE(board) || IS_RADIOMASTER_TX12(board) || - IS_RADIOMASTER_ZORRO(board) || IS_RADIOMASTER_TX16S(board) || - IS_JUMPER_T18(board)); + IS_RADIOMASTER_TX12_MK2(board) || IS_RADIOMASTER_ZORRO(board) || + IS_RADIOMASTER_TX16S(board) || IS_JUMPER_T18(board)); case HasSoftwareSerialPower: return IS_RADIOMASTER_TX16S(board); default: @@ -827,6 +832,8 @@ bool OpenTxFirmware::isAvailable(PulsesProtocol proto, int port) return IS_ACCESS_RADIO(board, id); case PULSES_MULTIMODULE: return id.contains("internalmulti") || IS_RADIOMASTER_TX16S(board) || IS_JUMPER_T18(board) || IS_RADIOMASTER_TX12(board) || IS_JUMPER_TLITE(board) || IS_BETAFPV_LR3PRO(board); + case PULSES_CROSSFIRE: + IS_RADIOMASTER_TX12_MK2(board); case PULSES_AFHDS3: return IS_FLYSKY_NV14(board); default: @@ -1076,6 +1083,11 @@ bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int vari variantError = true; } } + else if (IS_RADIOMASTER_TX12_MK2(board)) { + if (variant != RADIOMASTER_TX12_MK2_VARIANT) { + variantError = true; + } + } else if (IS_RADIOMASTER_ZORRO(board)) { if (variant != RADIOMASTER_ZORRO_VARIANT) { variantError = true; @@ -1449,6 +1461,16 @@ void registerOpenTxFirmwares() registerOpenTxFirmware(firmware); addOpenTxRfOptions(firmware, FLEX); + /* Radiomaster TX12 board */ + firmware = new OpenTxFirmware(FIRMWAREID("tx12mk2"), QCoreApplication::translate("Firmware", "Radiomaster TX12 Mark II"), BOARD_RADIOMASTER_TX12_MK2); + addOpenTxCommonOptions(firmware); + firmware->addOption("noheli", Firmware::tr("Disable HELI menu and cyclic mix support")); + firmware->addOption("nogvars", Firmware::tr("Disable Global variables")); + firmware->addOption("lua", Firmware::tr("Enable Lua custom scripts screen")); + addOpenTxFontOptions(firmware); + registerOpenTxFirmware(firmware); + addOpenTxRfOptions(firmware, FLEX); + /* Radiomaster Zorro board */ firmware = new OpenTxFirmware(FIRMWAREID("zorro"), QCoreApplication::translate("Firmware", "Radiomaster Zorro"), Board::BOARD_RADIOMASTER_ZORRO); addOpenTxCommonOptions(firmware); diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp index 295cb857a..b61713ff5 100644 --- a/companion/src/simulation/simulatorwidget.cpp +++ b/companion/src/simulation/simulatorwidget.cpp @@ -104,6 +104,7 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato radioUiWidget = new SimulatedUIWidgetJumperT18(simulator, this); break; case Board::BOARD_RADIOMASTER_TX12: + case Board::BOARD_RADIOMASTER_TX12_MK2: radioUiWidget = new SimulatedUIWidgetTX12(simulator, this); break; case Board::BOARD_RADIOMASTER_ZORRO: