diff --git a/.travis.yml b/.travis.yml index 0caa4d788..582215347 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,7 @@ env: # - FLAVOR=9XRPRO - FLAVOR=X9LITE - FLAVOR=X7 + - FLAVOR=T12 - FLAVOR=XLITE - FLAVOR=XLITES - FLAVOR=X9 diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 5f5758186..d8fa6efc0 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -333,7 +333,11 @@ file(GLOB simulator_plugins "${CMAKE_BINARY_DIR}/Release/*opentx-*simulator${CMA # the current flavour is not automatically added if build in the current cmake iteration, so always # add its library name to be sure -string(TOLOWER ${PCB} FLAVOUR) +if(PCB STREQUAL X7 AND PCBREV STREQUAL T12) + set(FLAVOUR t12) +else() + string(TOLOWER ${PCB} FLAVOUR) +endif() if(POLICY CMP0026) cmake_policy(SET CMP0026 OLD) # https://cmake.org/cmake/help/v3.0/policy/CMP0026.html endif() diff --git a/companion/src/companion.qrc b/companion/src/companion.qrc index 2458eb6b0..2b4b18f71 100644 --- a/companion/src/companion.qrc +++ b/companion/src/companion.qrc @@ -72,7 +72,7 @@ images/simulator/X10/left_rtn.png images/simulator/X10/left_sys.png images/simulator/X10/left_tele.png - images/simulator/X10/right_ent.png + images/simulator/X10/right_ent.png images/simulator/9X/9xdb.png images/simulator/9X/9xdl.png images/simulator/9X/9xdr.png @@ -157,15 +157,28 @@ images/simulator/XLITE/right_left.png images/simulator/XLITE/right_up.png images/simulator/XLITE/right_down.png + images/simulator/JumperT12/right_up.png + images/simulator/JumperT12/right_down.png + images/simulator/JumperT12/right_right.png + images/simulator/JumperT12/right_left.png + images/simulator/JumperT12/left_ent.png + images/simulator/JumperT12/left_exit.png + images/simulator/JumperT12/JumperT12.png + images/simulator/JumperT12/JumperT12-208.png + images/simulator/JumperT12/JumperT12-left.png + images/simulator/JumperT12/JumperT12-right.png + images/simulator/JumperT12/JumperT12-x.png + images/simulator/JumperT12/JumperT12-center.png + images/simulator/JumperT12/JumperT12-top.png images/wizard/ailerons.png images/wizard/airbrakes.png - images/wizard/elevons.png + images/wizard/elevons.png images/wizard/conclusion.png images/wizard/cyclic.png images/wizard/fblheli.png images/wizard/flaps.png images/wizard/flybar.png - images/wizard/gyro.png + images/wizard/gyro.png images/wizard/helictrl.png images/wizard/models.png images/wizard/multirotor.png @@ -1136,6 +1149,6 @@ themes/yerico/48/contributors.png themes/yerico/48/stop.png themes/yerico/48/write_eeprom.png - themes/yerico/48/sdsync.png + themes/yerico/48/sdsync.png diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 761d3add6..927087ecd 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -83,6 +83,8 @@ uint32_t Boards::getFourCC(Type board) case BOARD_STOCK: case BOARD_M128: return 0; + case BOARD_JUMPER_T12: + return 0x3D78746F; case BOARD_UNKNOWN: break; } @@ -112,6 +114,7 @@ const int Boards::getEEpromSize(Board::Type board) case BOARD_TARANIS_X9D: case BOARD_TARANIS_X9DP: case BOARD_TARANIS_X9E: + case BOARD_JUMPER_T12: return EESIZE_TARANIS; case BOARD_UNKNOWN: return EESIZE_MAX; @@ -221,6 +224,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 { const Board::SwitchInfo switches[] = { {SWITCH_3POS, "3POS"}, @@ -247,7 +262,7 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability) case Pots: if (IS_TARANIS_X9LITE(board)) return 1; - else if (IS_TARANIS_SMALL(board)) + else if (IS_TARANIS_SMALL(board) || IS_JUMPER_T12(board)) return 2; else if (IS_TARANIS_X9E(board)) return 4; @@ -302,6 +317,8 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability) return 4; else if (IS_HORUS_OR_TARANIS(board)) return 8; + else if (IS_JUMPER_T12(board)) + return 6; else return 7; diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index cbd6bb327..eb70dbb0c 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -47,7 +47,8 @@ namespace Board { BOARD_X10, BOARD_TARANIS_XLITE, BOARD_TARANIS_XLITES, - BOARD_TARANIS_X9LITE + BOARD_TARANIS_X9LITE, + BOARD_JUMPER_T12 }; constexpr int BOARD_TYPE_MAX = BOARD_TARANIS_X9LITE ; @@ -190,6 +191,7 @@ class Boards #define IS_2560(board) (board==Board::BOARD_GRUVIN9X || board==Board::BOARD_MEGA2560) #define IS_SKY9X(board) (board==Board::BOARD_SKY9X || board==Board::BOARD_9XRPRO || board==Board::BOARD_AR9X) #define IS_9XRPRO(board) (board==Board::BOARD_9XRPRO) +#define IS_JUMPER_T12(board) (board==Board::BOARD_JUMPER_T12) #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) diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index 93035f9f6..46e117c36 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -90,7 +90,7 @@ GeneralSettings::GeneralSettings() // Lipo 2S vBatWarn = 66; vBatMin = -23; // 6.7V - vBatMax = -37; // 8.3V + vBatMax = -37; // 8.3V } else if (IS_TARANIS(board)) { // NI-MH 7.2V, X9D, X9D+ and X7 @@ -249,6 +249,10 @@ void GeneralSettings::setDefaultControlTypes(Board::Type board) potConfig[0] = Board::POT_WITH_DETENT; potConfig[1] = Board::POT_WITH_DETENT; } + else if (IS_JUMPER_T12(board)) { + potConfig[0] = Board::POT_WITH_DETENT; + potConfig[1] = Board::POT_WITH_DETENT; + } else { potConfig[0] = Board::POT_WITHOUT_DETENT; potConfig[1] = Board::POT_WITHOUT_DETENT; @@ -317,6 +321,20 @@ void GeneralSettings::convert(RadioDataConversionState & cstate) } } + if (IS_JUMPER_T12(cstate.toType)) { + if (IS_TARANIS_X9(cstate.fromType) || IS_HORUS(cstate.fromType)) { + strncpy(switchName[4], switchName[5], sizeof(switchName[0])); + strncpy(switchName[5], switchName[7], sizeof(switchName[0])); + } + } + + else if (IS_JUMPER_T12(cstate.fromType)) { + if (IS_TARANIS_X9(cstate.toType) || IS_HORUS(cstate.toType)) { + strncpy(switchName[5], switchName[4], sizeof(switchName[0])); + strncpy(switchName[7], switchName[5], sizeof(switchName[0])); + } + } + // LS and RS sliders are after 2 aux sliders on X12 and X9E if ((IS_HORUS_X12S(cstate.toType) || IS_TARANIS_X9E(cstate.toType)) && !IS_HORUS_X12S(cstate.fromType) && !IS_TARANIS_X9E(cstate.fromType)) { strncpy(sliderName[0], sliderName[2], sizeof(sliderName[0])); diff --git a/companion/src/firmwares/opentx/opentxeeprom.h b/companion/src/firmwares/opentx/opentxeeprom.h index 19a075186..14639d330 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.h +++ b/companion/src/firmwares/opentx/opentxeeprom.h @@ -35,6 +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 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 d6d323130..8a8557a31 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -66,6 +66,8 @@ const char * OpenTxEepromInterface::getName() return "OpenTX for MEGA2560 board"; case BOARD_GRUVIN9X: return "OpenTX for Gruvin9x board / 9X"; + case BOARD_JUMPER_T12: + return "OpenTX for Jumper T12"; case BOARD_TARANIS_X9D: return "OpenTX for FrSky Taranis X9D"; case BOARD_TARANIS_X9DP: @@ -331,6 +333,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u else if (IS_TARANIS_XLITE(board)) { variant |= TARANIS_XLITE_VARIANT; } + else if (IS_JUMPER_T12(board)) { + variant |= JUMPER_T12_VARIANT; + } OpenTxGeneralData generator((GeneralSettings &)radioData.generalSettings, board, version, variant); // generator.dump(); @@ -543,7 +548,7 @@ int OpenTxFirmware::getCapability(::Capability capability) case SoundPitch: return 1; case Haptic: - return (IS_2560(board) || IS_SKY9X(board) || IS_TARANIS_PLUS(board) || IS_TARANIS_SMALL(board) || IS_TARANIS_X9E(board) || IS_HORUS(board) || id.contains("haptic")); + return (IS_2560(board) || IS_SKY9X(board) || IS_TARANIS_PLUS(board) || IS_TARANIS_SMALL(board) || IS_TARANIS_X9E(board) || IS_HORUS(board) || IS_JUMPER_T12(board) || id.contains("haptic")); case ModelTrainerEnable: if (IS_HORUS_OR_TARANIS(board)) return 1; @@ -552,7 +557,7 @@ int OpenTxFirmware::getCapability(::Capability capability) case MaxVolume: return (IS_ARM(board) ? 23 : 7); case MaxContrast: - if (IS_TARANIS_SMALL(board)) + if (IS_TARANIS_SMALL(board) || IS_JUMPER_T12(board)) return 30; else return 45; @@ -644,7 +649,7 @@ int OpenTxFirmware::getCapability(::Capability capability) case LcdWidth: if (IS_HORUS(board)) return 480; - else if (IS_TARANIS_SMALL(board)) + else if (IS_TARANIS_SMALL(board) || IS_JUMPER_T12(board)) return 128; else if (IS_TARANIS(board)) return 212; @@ -658,7 +663,7 @@ int OpenTxFirmware::getCapability(::Capability capability) case LcdDepth: if (IS_HORUS(board)) return 16; - else if (IS_TARANIS_SMALL(board)) + else if (IS_TARANIS_SMALL(board) || IS_JUMPER_T12(board)) return 1; else if (IS_TARANIS(board)) return 4; @@ -708,6 +713,8 @@ int OpenTxFirmware::getCapability(::Capability capability) return TARANIS_XLITES_VARIANT; else if (IS_TARANIS_XLITE(board)) return TARANIS_XLITE_VARIANT; + else if (IS_JUMPER_T12(board)) + return JUMPER_T12_VARIANT; else return 0; case MavlinkTelemetry: @@ -973,6 +980,11 @@ bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int vari variantError = true; } } + else if (IS_JUMPER_T12(board)) { + if (variant != JUMPER_T12_VARIANT) { + variantError = true; + } + } if (variantError) { qWarning() << " wrong variant (" << variant << ")"; @@ -1242,6 +1254,17 @@ void registerOpenTxFirmwares() firmware->addOption("pcbdev", Firmware::tr("Use ONLY with first DEV pcb version")); registerOpenTxFirmware(firmware); + /* Jumper T12 board */ + firmware = new OpenTxFirmware("opentx-t12", QCoreApplication::translate("Firmware", "Jumper T12"), BOARD_JUMPER_T12); + 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")); + firmware->addOption("luac", Firmware::tr("Enable Lua compiler")); + firmware->addOption("crossfire", Firmware::tr("Support for Crossfire TX Module")); + addOpenTxFontOptions(firmware); + registerOpenTxFirmware(firmware); + /* 9XR-Pro */ firmware = new OpenTxFirmware("opentx-9xrpro", Firmware::tr("Turnigy 9XR-PRO"), BOARD_9XRPRO); addOpenTxArm9xOptions(firmware, false); diff --git a/companion/src/firmwares/rawsource.cpp b/companion/src/firmwares/rawsource.cpp index a42312ca2..507518150 100644 --- a/companion/src/firmwares/rawsource.cpp +++ b/companion/src/firmwares/rawsource.cpp @@ -615,6 +615,19 @@ RawSource RawSource::convert(RadioDataConversionState & cstate) index = 5; // SH to SH } } + else if (IS_JUMPER_T12(cstate.toType) && (IS_TARANIS_X9(cstate.fromType) || IS_HORUS(cstate.fromType))) { + // No SE and SG on T12 board + if (index == 4 || index == 6) { + index = 3; // SG and SE to SD + evt = RadioDataConversionState::EVT_CVRT; + } + else if (index == 5) { + index = 4; // SF to SF + } + else if (index == 7) { + index = 5; // SH to SH + } + } // Compensate for SE and SG on X9/Horus board if converting from X7 else if ((IS_TARANIS_X9(cstate.toType) || IS_HORUS(cstate.toType)) && IS_TARANIS_X7(cstate.fromType)) { if (index == 4) { @@ -624,6 +637,22 @@ RawSource RawSource::convert(RadioDataConversionState & cstate) index = 7; // SH to SH } } + else if ((IS_TARANIS_X9(cstate.toType) || IS_HORUS(cstate.toType)) && IS_JUMPER_T12(cstate.fromType)) { + if (index == 4) { + index = 5; // SF to SF + } + else if (index == 5) { + index = 7; // SH to SH + } + } + else if ((IS_TARANIS_X9(cstate.toType) || IS_HORUS(cstate.toType)) && IS_JUMPER_T12(cstate.fromType)) { + if (index == 4) { + index = 5; // SF to SF + } + else if (index == 5) { + index = 7; // SH to SH + } + } } // SOURCE_TYPE_SWITCH // final validation (we do not pass model to isAvailable() because we don't know what has or hasn't been converted) diff --git a/companion/src/firmwares/rawswitch.cpp b/companion/src/firmwares/rawswitch.cpp index 55fb91c1c..6438d335e 100644 --- a/companion/src/firmwares/rawswitch.cpp +++ b/companion/src/firmwares/rawswitch.cpp @@ -208,6 +208,20 @@ RawSwitch RawSwitch::convert(RadioDataConversionState & cstate) delta = 6; // SH to SH } } + else if (IS_JUMPER_T12(cstate.toType) && (IS_TARANIS_X9(cstate.fromType) || IS_HORUS(cstate.fromType))) { + if (srcIdx == 4 || srcIdx == 5) { + delta = 3; // SE to SD & SF to SF + if (srcIdx == 4) + evt = RadioDataConversionState::EVT_CVRT; + } + else if (srcIdx == 6) { + delta = 9; // SG to SD + evt = RadioDataConversionState::EVT_CVRT; + } + else if (srcIdx == 7) { + delta = 6; // SH to SH + } + } // Compensate for SE and SG on X9/Horus board if converting from X7 else if ((IS_TARANIS_X9(cstate.toType) || IS_HORUS(cstate.toType)) && IS_TARANIS_X7(cstate.fromType)) { if (srcIdx == 4) { @@ -217,6 +231,14 @@ RawSwitch RawSwitch::convert(RadioDataConversionState & cstate) delta = -6; // SH to SH } } + else if ((IS_TARANIS_X9(cstate.toType) || IS_HORUS(cstate.toType)) && IS_JUMPER_T12(cstate.fromType)) { + if (srcIdx == 4) { + delta = -3; // SF to SF + } + else if (srcIdx == 5) { + delta = -6; // SH to SH + } + } if (index < 0) { delta = -delta; // invert for !switch diff --git a/companion/src/generaledit/hardware.cpp b/companion/src/generaledit/hardware.cpp index 1d131e1e0..bb482598e 100644 --- a/companion/src/generaledit/hardware.cpp +++ b/companion/src/generaledit/hardware.cpp @@ -41,6 +41,14 @@ void HardwarePanel::setupSwitchType(int index, QLabel * label, AutoLineEdit * na label->setText("SH"); } } + if (IS_JUMPER_T12(board)) { + if (index == 4) { + label->setText("SG"); + } + else if (index == 5) { + label->setText("SH"); + } + } } else { label->hide(); @@ -157,7 +165,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings ui->txCurrentCalibrationLabel->hide(); } - if (IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board)|| IS_TARANIS_X9E(board) || IS_HORUS(board)) { + if (IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board)|| IS_TARANIS_X9E(board) || IS_HORUS(board) || IS_JUMPER_T12(board)) { ui->bluetoothMode->addItem(tr("OFF"), 0); if (IS_TARANIS_X9E(board)) { ui->bluetoothMode->addItem(tr("Enabled"), 1); diff --git a/companion/src/images/simulator/JumperT12/JumperT12-208.png b/companion/src/images/simulator/JumperT12/JumperT12-208.png new file mode 100644 index 000000000..00cb7b759 Binary files /dev/null and b/companion/src/images/simulator/JumperT12/JumperT12-208.png differ diff --git a/companion/src/images/simulator/JumperT12/JumperT12-center.png b/companion/src/images/simulator/JumperT12/JumperT12-center.png new file mode 100644 index 000000000..4040c2bbe Binary files /dev/null and b/companion/src/images/simulator/JumperT12/JumperT12-center.png differ diff --git a/companion/src/images/simulator/JumperT12/JumperT12-left.png b/companion/src/images/simulator/JumperT12/JumperT12-left.png new file mode 100644 index 000000000..ba527bad8 Binary files /dev/null and b/companion/src/images/simulator/JumperT12/JumperT12-left.png differ diff --git a/companion/src/images/simulator/JumperT12/JumperT12-right.png b/companion/src/images/simulator/JumperT12/JumperT12-right.png new file mode 100644 index 000000000..80552deff Binary files /dev/null and b/companion/src/images/simulator/JumperT12/JumperT12-right.png differ diff --git a/companion/src/images/simulator/JumperT12/JumperT12-top.png b/companion/src/images/simulator/JumperT12/JumperT12-top.png new file mode 100644 index 000000000..d5585597e Binary files /dev/null and b/companion/src/images/simulator/JumperT12/JumperT12-top.png differ diff --git a/companion/src/images/simulator/JumperT12/JumperT12-x.png b/companion/src/images/simulator/JumperT12/JumperT12-x.png new file mode 100644 index 000000000..7230ecf56 Binary files /dev/null and b/companion/src/images/simulator/JumperT12/JumperT12-x.png differ diff --git a/companion/src/images/simulator/JumperT12/JumperT12.png b/companion/src/images/simulator/JumperT12/JumperT12.png new file mode 100644 index 000000000..71aa5d7a8 Binary files /dev/null and b/companion/src/images/simulator/JumperT12/JumperT12.png differ diff --git a/companion/src/images/simulator/JumperT12/left_ent.png b/companion/src/images/simulator/JumperT12/left_ent.png new file mode 100644 index 000000000..ba527bad8 Binary files /dev/null and b/companion/src/images/simulator/JumperT12/left_ent.png differ diff --git a/companion/src/images/simulator/JumperT12/left_exit.png b/companion/src/images/simulator/JumperT12/left_exit.png new file mode 100644 index 000000000..ba527bad8 Binary files /dev/null and b/companion/src/images/simulator/JumperT12/left_exit.png differ diff --git a/companion/src/images/simulator/JumperT12/left_page.png b/companion/src/images/simulator/JumperT12/left_page.png new file mode 100644 index 000000000..ba527bad8 Binary files /dev/null and b/companion/src/images/simulator/JumperT12/left_page.png differ diff --git a/companion/src/images/simulator/JumperT12/right_down.png b/companion/src/images/simulator/JumperT12/right_down.png new file mode 100644 index 000000000..80552deff Binary files /dev/null and b/companion/src/images/simulator/JumperT12/right_down.png differ diff --git a/companion/src/images/simulator/JumperT12/right_left.png b/companion/src/images/simulator/JumperT12/right_left.png new file mode 100644 index 000000000..80552deff Binary files /dev/null and b/companion/src/images/simulator/JumperT12/right_left.png differ diff --git a/companion/src/images/simulator/JumperT12/right_right.png b/companion/src/images/simulator/JumperT12/right_right.png new file mode 100644 index 000000000..80552deff Binary files /dev/null and b/companion/src/images/simulator/JumperT12/right_right.png differ diff --git a/companion/src/images/simulator/JumperT12/right_up.png b/companion/src/images/simulator/JumperT12/right_up.png new file mode 100644 index 000000000..80552deff Binary files /dev/null and b/companion/src/images/simulator/JumperT12/right_up.png differ diff --git a/companion/src/simulation/CMakeLists.txt b/companion/src/simulation/CMakeLists.txt index 030013c2f..50d2da532 100644 --- a/companion/src/simulation/CMakeLists.txt +++ b/companion/src/simulation/CMakeLists.txt @@ -11,6 +11,7 @@ set(simulation_SRCS simulateduiwidgetX9E.cpp simulateduiwidgetX10.cpp simulateduiwidgetX12.cpp + simulateduiwidgetJumperT12.cpp simulatorinterface.cpp simulatormainwindow.cpp simulatorstartupdialog.cpp @@ -32,6 +33,7 @@ set(simulation_UIS simulateduiwidgetX9E.ui simulateduiwidgetX10.ui simulateduiwidgetX12.ui + simulateduiwidgetJumperT12.ui simulatormainwindow.ui simulatorstartupdialog.ui simulatorwidget.ui diff --git a/companion/src/simulation/simulateduiwidget.h b/companion/src/simulation/simulateduiwidget.h index 5f17440aa..0b498924c 100644 --- a/companion/src/simulation/simulateduiwidget.h +++ b/companion/src/simulation/simulateduiwidget.h @@ -111,6 +111,7 @@ namespace Ui { class SimulatedUIWidgetX9E; class SimulatedUIWidgetX10; class SimulatedUIWidgetX12; + class SimulatedUIWidgetJumperT12; } class SimulatedUIWidget9X: public SimulatedUIWidget @@ -213,4 +214,16 @@ class SimulatedUIWidgetX12: public SimulatedUIWidget Ui::SimulatedUIWidgetX12 * ui; }; +class SimulatedUIWidgetJumperT12: public SimulatedUIWidget +{ + Q_OBJECT + + public: + explicit SimulatedUIWidgetJumperT12(SimulatorInterface * simulator, QWidget * parent = NULL); + virtual ~SimulatedUIWidgetJumperT12(); + + private: + Ui::SimulatedUIWidgetJumperT12 * ui; +}; + #endif // SIMULATEDUIWIDGET_H diff --git a/companion/src/simulation/simulateduiwidgetJumperT12.cpp b/companion/src/simulation/simulateduiwidgetJumperT12.cpp new file mode 100644 index 000000000..e69f433d3 --- /dev/null +++ b/companion/src/simulation/simulateduiwidgetJumperT12.cpp @@ -0,0 +1,61 @@ +#include "simulateduiwidget.h" +#include "ui_simulateduiwidgetJumperT12.h" + +// NOTE: RadioUiAction(NUMBER,...): NUMBER relates to enum EnumKeys in the specific board.h + +SimulatedUIWidgetJumperT12::SimulatedUIWidgetJumperT12(SimulatorInterface *simulator, QWidget * parent): + SimulatedUIWidget(simulator, parent), + ui(new Ui::SimulatedUIWidgetJumperT12) +{ + RadioUiAction * act; + QPolygon polygon; + + ui->setupUi(this); + + act = new RadioUiAction(3, QList() << Qt::Key_Up << Qt::Key_PageUp, SIMU_STR_HLP_KEYS_GO_UP, SIMU_STR_HLP_ACT_UP); + addRadioWidget(ui->rightbuttons->addArea(QRect(69, 11, 60, 25), "JumperT12/right_up.png", act)); + + act = new RadioUiAction(2, QList() << Qt::Key_Down << Qt::Key_PageDown, SIMU_STR_HLP_KEYS_GO_DN, SIMU_STR_HLP_ACT_DN); + addRadioWidget(ui->rightbuttons->addArea(QRect(61, 115, 60, 25), "JumperT12/right_down.png", act)); + + act = new RadioUiAction(4, QList() << Qt::Key_Right << Qt::Key_Plus, SIMU_STR_HLP_KEY_RGT % "|" % SIMU_STR_HLP_KEY_PLS, SIMU_STR_HLP_ACT_PLS); + addRadioWidget(ui->rightbuttons->addArea(QRect(109, 53, 30, 40), "JumperT12/right_right.png", act)); + + act = new RadioUiAction(5, QList() << Qt::Key_Left << Qt::Key_Minus, SIMU_STR_HLP_KEY_LFT % "|" % SIMU_STR_HLP_KEY_MIN, SIMU_STR_HLP_ACT_MIN); + addRadioWidget(ui->rightbuttons->addArea(QRect(49, 62, 30, 40), "JumperT12/right_left.png", act)); + + m_mouseMidClickAction = new RadioUiAction(1, QList() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_ACTIVATE, SIMU_STR_HLP_ACT_ENT); + addRadioWidget(ui->leftbuttons->addArea(QRect(21, 30, 60, 25), "JumperT12/left_ent.png", m_mouseMidClickAction)); + + act = new RadioUiAction(0, QList() << Qt::Key_Delete << Qt::Key_Escape << Qt::Key_Backspace, SIMU_STR_HLP_KEYS_EXIT, SIMU_STR_HLP_ACT_EXIT); + addRadioWidget(ui->leftbuttons->addArea(QRect(21, 80, 60, 60), "JumperT12/left_exit.png", act)); + + addRadioWidget(ui->leftbuttons->addArea(QRect(9, 154, 30, 30), "JumperT12/left_scrnshot.png", m_screenshotAction)); + + m_backlightColors << QColor(215, 243, 255); // X7 Blue + m_backlightColors << QColor(166,247,159); + m_backlightColors << QColor(247,159,166); + m_backlightColors << QColor(255,195,151); + m_backlightColors << QColor(247,242,159); + + setLcd(ui->lcd); + + QString css = "#radioUiWidget {" + "background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1," + "stop:0 rgba(255, 255, 255, 255)," + "stop:0.757062 rgba(241, 238, 238, 255)," + "stop:1 rgba(247, 245, 245, 255));" + "}"; + + QTimer * tim = new QTimer(this); + tim->setSingleShot(true); + connect(tim, &QTimer::timeout, [this, css]() { + emit customStyleRequest(css); + }); + tim->start(100); +} + +SimulatedUIWidgetJumperT12::~SimulatedUIWidgetJumperT12() +{ + delete ui; +} diff --git a/companion/src/simulation/simulateduiwidgetJumperT12.ui b/companion/src/simulation/simulateduiwidgetJumperT12.ui new file mode 100644 index 000000000..3f7e1479a --- /dev/null +++ b/companion/src/simulation/simulateduiwidgetJumperT12.ui @@ -0,0 +1,258 @@ + + + SimulatedUIWidgetJumperT12 + + + + 0 + 0 + 570 + 208 + + + + + 0 + 0 + + + + + 570 + 208 + + + + + 570 + 208 + + + + Jumper T12 Simulator + + + background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 255, 255, 255), stop:0.757062 rgba(241, 238, 238, 255), stop:1 rgba(247, 245, 245, 255)); + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 10 + + + + + 16777215 + 10 + + + + background-color: rgb(247, 245, 245); + + + + + + + + + + + 0 + 0 + + + + + 0 + 10 + + + + + 16777215 + 12 + + + + + 0 + 12 + + + + background-color: rgb(255, 255, 255); + + + + + + + + + + + 0 + 0 + + + + + 157 + 186 + + + + + 157 + 186 + + + + background:url(:/images/simulator/JumperT12/JumperT12-right.png) + + + + + + + + 0 + 0 + + + + + 157 + 186 + + + + + 157 + 186 + + + + background:url(:/images/simulator/JumperT12/JumperT12-left.png); + + + + + + + + 0 + 0 + + + + + 256 + 10 + + + + + 256 + 10 + + + + background:url(:/images/simulator/JumperT12/bottom.png) + + + + + + + + 0 + 0 + + + + + 256 + 48 + + + + + 256 + 48 + + + + background:url(:/images/simulator/JumperT12/JumperT12-top.png) + + + + + + + + 0 + 0 + + + + + 256 + 128 + + + + + 424 + 128 + + + + background-color: rgb(215, 243, 255); + + + + + + + + LcdWidget + QWidget +
lcdwidget.h
+ 1 +
+ + ButtonsWidget + QWidget +
buttonswidget.h
+ 1 +
+
+ + +
\ No newline at end of file diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp index 9a7475839..e945d7a65 100644 --- a/companion/src/simulation/simulatorwidget.cpp +++ b/companion/src/simulation/simulatorwidget.cpp @@ -91,6 +91,9 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato case Board::BOARD_X10: radioUiWidget = new SimulatedUIWidgetX10(simulator, this); break; + case Board::BOARD_JUMPER_T12: + radioUiWidget = new SimulatedUIWidgetJumperT12(simulator, this); + break; default: radioUiWidget = new SimulatedUIWidget9X(simulator, this); break; diff --git a/launchpad/common/rules b/launchpad/common/rules index 1c0ffb480..67b06466b 100755 --- a/launchpad/common/rules +++ b/launchpad/common/rules @@ -26,6 +26,7 @@ build: cd $(BUILDDIR); cmake $(COMMON_OPTIONS) $(STM32_OPTIONS) -DPCB=X9D+ ../ ; make libsimulator cd $(BUILDDIR); cmake $(COMMON_OPTIONS) $(STM32_OPTIONS) -DPCB=X9E ../ ; make libsimulator cd $(BUILDDIR); cmake $(COMMON_OPTIONS) $(STM32_OPTIONS) -DPCB=X12S ../ ; make libsimulator + cd $(BUILDDIR); cmake $(COMMON_OPTIONS) $(STM32_OPTIONS) -DPCB=JUMPERT12 ../ ; make libsimulator make -C $(BUILDDIR) companion22 simulator22 diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 047d75b4a..0802b96c2 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -180,24 +180,24 @@ enum BeeperMode { }; #if defined(PCBTARANIS) || defined(PCBHORUS) - enum ModuleIndex { - INTERNAL_MODULE, - EXTERNAL_MODULE, - SPORT_MODULE, - }; - enum TrainerMode { - TRAINER_MODE_MASTER_TRAINER_JACK, - TRAINER_MODE_SLAVE, +enum ModuleIndex { + INTERNAL_MODULE, + EXTERNAL_MODULE, + SPORT_MODULE, +}; +enum TrainerMode { + TRAINER_MODE_MASTER_TRAINER_JACK, + TRAINER_MODE_SLAVE, #if defined(PCBTARANIS) - TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE, - TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, + TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE, + TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, #endif - TRAINER_MODE_MASTER_BATTERY_COMPARTMENT, + TRAINER_MODE_MASTER_BATTERY_COMPARTMENT, #if defined(BLUETOOTH) - TRAINER_MODE_MASTER_BLUETOOTH, - TRAINER_MODE_SLAVE_BLUETOOTH, + TRAINER_MODE_MASTER_BLUETOOTH, + TRAINER_MODE_SLAVE_BLUETOOTH, #endif - }; +}; #elif defined(PCBSKY9X) enum ModuleIndex { EXTERNAL_MODULE, @@ -324,7 +324,7 @@ enum TelemetryUnit { #endif #if defined(PCBTARANIS) -#define MAX_TELEM_SCRIPT_INPUTS 8 + #define MAX_TELEM_SCRIPT_INPUTS 8 #endif enum TelemetryScreenType { @@ -657,9 +657,12 @@ enum MixSources { #if defined(PCBHORUS) || defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || defined(PCBX7) MIXSRC_SH, LUA_EXPORT("sh", "Switch H") #endif -#if defined(PCBX7) +#if defined(RADIO_X7) MIXSRC_SI, LUA_EXPORT("si", "Switch I") MIXSRC_SJ, LUA_EXPORT("sj", "Switch J") +#elif defined(RADIO_T12) // keep switches for eeprom compatibity, but hide them + MIXSRC_SI, + MIXSRC_SJ, #endif #if defined(PCBX9E) MIXSRC_SI, LUA_EXPORT("si", "Switch I") @@ -842,4 +845,4 @@ enum BluetoothModes { #define PXX2_LEN_RX_NAME 8 #define PXX2_MAX_RECEIVERS_PER_MODULE 3 -#endif // _DATACONSTANTS_H_ +#endif // _DATACONSTANTS_H_ \ No newline at end of file diff --git a/radio/src/gui/128x64/gui.h b/radio/src/gui/128x64/gui.h index c656c5e0e..b453ba607 100644 --- a/radio/src/gui/128x64/gui.h +++ b/radio/src/gui/128x64/gui.h @@ -27,7 +27,7 @@ #define MENUS_SCROLLBAR_WIDTH 0 -#if defined(PCBX7) || defined(PCBX9LITE) +#if defined(NAVIGATION_X7) #define HEADER_LINE 0 #define HEADER_LINE_COLUMNS #else @@ -156,7 +156,7 @@ void title(const char * s); #define MENU_TAB(...) const uint8_t mstate_tab[] = __VA_ARGS__ -#if defined(PCBX7) || defined(PCBX9LITE) +#if defined(NAVIGATION_X7) #define MENU_CHECK(tab, menu, lines_count) \ check(event, menu, tab, DIM(tab), mstate_tab, DIM(mstate_tab)-1, lines_count) #else @@ -169,7 +169,7 @@ void title(const char * s); MENU_CHECK(tab, menu, lines_count); \ TITLE(title) -#if defined(PCBX7) || defined(PCBX9LITE) +#if defined(NAVIGATION_X7) #define SIMPLE_MENU_NOTITLE(tab, menu, lines_count) \ check_simple(event, menu, tab, DIM(tab), lines_count); #define SUBMENU_NOTITLE(lines_count, ...) \ diff --git a/radio/src/gui/128x64/model_select.cpp b/radio/src/gui/128x64/model_select.cpp index 94a688c01..8d16b6b73 100644 --- a/radio/src/gui/128x64/model_select.cpp +++ b/radio/src/gui/128x64/model_select.cpp @@ -76,10 +76,9 @@ void menuModelSelect(event_t event) event = EVT_ENTRY_UP; } - event_t _event_ = (IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event) ? 0 : event); - - if ((s_copyMode && EVT_KEY_MASK(event) == KEY_EXIT) || event == EVT_KEY_BREAK(KEY_EXIT)) { - _event_ -= KEY_EXIT; + event_t _event_ = event; + if ((s_copyMode && EVT_KEY_MASK(event) == KEY_EXIT) || event == EVT_KEY_BREAK(KEY_EXIT) || IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event)) { + _event_ = 0; } int8_t oldSub = menuVerticalPosition; @@ -198,7 +197,7 @@ void menuModelSelect(event_t event) } break; -#if defined(PCBX7) || defined(PCBX9LITE) +#if defined(NAVIGATION_X7) case EVT_KEY_LONG(KEY_PAGE): chainMenu(menuTabModel[DIM(menuTabModel)-1]); killEvents(event); @@ -230,7 +229,7 @@ void menuModelSelect(event_t event) #endif #endif -#if defined(PCBX7) || defined(PCBX9LITE) +#if defined(NAVIGATION_X7) case EVT_ROTARY_LEFT: case EVT_ROTARY_RIGHT: #endif @@ -271,7 +270,7 @@ void menuModelSelect(event_t event) lcdDrawNumber(17*FW, 0, reusableBuffer.modelsel.eepromfree, RIGHT); #endif -#if defined(PCBX7) || defined(PCBX9LITE) +#if defined(NAVIGATION_X7) drawScreenIndex(MENU_MODEL_SELECT, DIM(menuTabModel), 0); #elif defined(ROTARY_ENCODER_NAVIGATION) drawScreenIndex(MENU_MODEL_SELECT, DIM(menuTabModel), (sub == g_eeGeneral.currModel) ? ((IS_ROTARY_ENCODER_NAVIGATION_ENABLE() && s_editMode < 0) ? INVERS|BLINK : INVERS) : 0); diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index c18de6db0..972317795 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -77,7 +77,7 @@ enum MenuModelSetupItems { ITEM_MODEL_SETUP_BEEP_CENTER, ITEM_MODEL_SETUP_USE_GLOBAL_FUNCTIONS, ITEM_MODEL_SETUP_REGISTRATION_ID, -#if defined(PCBTARANIS) +#if defined(HARDWARE_INTERNAL_MODULE) ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL, ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE, ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS, @@ -154,13 +154,14 @@ enum MenuModelSetupItems { #define IF_PXX2_MODULE(module, xxx) (isModulePXX2(module) ? (uint8_t)(xxx) : HIDDEN_ROW) #define IF_NOT_PXX2_MODULE(module, xxx) (isModulePXX2(module) ? HIDDEN_ROW : (uint8_t)(xxx)) -#if defined(PCBTARANIS) +#if defined(HARDWARE_INTERNAL_MODULE) #define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE) #define CURRENT_RECEIVER_EDITED(k) (k - (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_RECEIVER_1 : ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_1)) #elif defined(PCBSKY9X) #define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTRA_MODULE_LABEL ? EXTRA_MODULE : EXTERNAL_MODULE) #else #define CURRENT_MODULE_EDITED(k) (EXTERNAL_MODULE) + #define CURRENT_RECEIVER_EDITED(k) (k - ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_RECEIVER_1) #endif #if defined(PCBXLITE) @@ -511,6 +512,24 @@ void onBluetoothConnectMenu(const char * result) } #endif +#if defined(HARDWARE_INTERNAL_MODULE) + #define INTERNAL_MODULE_ROWS \ + LABEL(InternalModule), \ + INTERNAL_MODULE_MODE_ROWS, \ + INTERNAL_MODULE_CHANNELS_ROWS, \ + IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[INTERNAL_MODULE].rfProtocol) ? (uint8_t)2 : (uint8_t)1)), \ + IF_PXX2_MODULE(INTERNAL_MODULE, 0), \ + ANTENNA_ROW \ + IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), \ + IF_PXX2_MODULE(INTERNAL_MODULE, 1), \ + IF_PXX2_MODULE(INTERNAL_MODULE, 0), \ + IF_PXX2_MODULE(INTERNAL_MODULE, 0), \ + IF_PXX2_MODULE(INTERNAL_MODULE, 0), \ + IF_PXX2_MODULE(INTERNAL_MODULE, 0), +#else + #define INTERNAL_MODULE_ROWS +#endif + void menuModelSetup(event_t event) { #if defined(EXTERNAL_ANTENNA) @@ -549,18 +568,7 @@ void menuModelSetup(event_t event) uint8_t((isDefaultModelRegistrationID() || (warningText && popupFunc == runPopupRegister)) ? HIDDEN_ROW : READONLY_ROW), // Registration ID - LABEL(InternalModule), - INTERNAL_MODULE_MODE_ROWS, // module mode (PXX(2) / None) - INTERNAL_MODULE_CHANNELS_ROWS, // Channels min and count - IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[INTERNAL_MODULE].rfProtocol) ? (uint8_t)2 : (uint8_t)1)), - IF_PXX2_MODULE(INTERNAL_MODULE, 0), // RxNum - ANTENNA_ROW - IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), // Failsafe - IF_PXX2_MODULE(INTERNAL_MODULE, 1), // Range check and Register buttons - IF_PXX2_MODULE(INTERNAL_MODULE, 0), // Module options - IF_PXX2_MODULE(INTERNAL_MODULE, 0), // Receiver 1 - IF_PXX2_MODULE(INTERNAL_MODULE, 0), // Receiver 2 - IF_PXX2_MODULE(INTERNAL_MODULE, 0), // Receiver 3 + INTERNAL_MODULE_ROWS LABEL(ExternalModule), EXTERNAL_MODULE_MODE_ROWS, @@ -1250,7 +1258,7 @@ void menuModelSetup(event_t event) break; #endif -#if defined(PCBTARANIS) +#if defined(HARDWARE_INTERNAL_MODULE) case ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS: #endif #if defined(PCBSKY9X) @@ -1452,7 +1460,9 @@ void menuModelSetup(event_t event) case ITEM_MODEL_SETUP_EXTRA_MODULE_BIND: #endif #if defined(PCBTARANIS) +#if defined(HARDWARE_INTERNAL_MODULE) case ITEM_MODEL_SETUP_INTERNAL_MODULE_NPXX2_BIND: +#endif case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NPXX2_BIND: #endif { @@ -1620,7 +1630,7 @@ void menuModelSetup(event_t event) } #endif -#if defined(PCBTARANIS) +#if defined(HARDWARE_INTERNAL_MODULE) case ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE: #endif case ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE: { @@ -1862,7 +1872,7 @@ void menuModelSetup(event_t event) // some field just finished being edited if (old_editMode > 0 && s_editMode == 0) { switch(menuVerticalPosition) { -#if defined(PCBTARANIS) +#if defined(HARDWARE_INTERNAL_MODULE) case ITEM_MODEL_SETUP_INTERNAL_MODULE_NPXX2_BIND: case ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM: if (menuHorizontalPosition == 0) diff --git a/radio/src/gui/128x64/radio_diagkeys.cpp b/radio/src/gui/128x64/radio_diagkeys.cpp index ce17b91b1..813459aa5 100644 --- a/radio/src/gui/128x64/radio_diagkeys.cpp +++ b/radio/src/gui/128x64/radio_diagkeys.cpp @@ -38,65 +38,44 @@ void menuRadioDiagKeys(event_t event) { SIMPLE_SUBMENU(STR_MENU_RADIO_SWITCHES, 1); - lcdDrawText(14*FW, MENU_HEADER_HEIGHT+2*FH, STR_VTRIM); + lcdDrawText(14*FW, MENU_HEADER_HEIGHT + 1, STR_VTRIM); for (uint8_t i=0; i<9; i++) { coord_t y; if (i < NUM_TRIMS_KEYS) { - y = MENU_HEADER_HEIGHT + FH*3 + FH*(i/2); + y = MENU_HEADER_HEIGHT + 1 + FH + FH*(i/2); if (i&1) lcdDraw1bitBitmap(14*FW, y, sticks, i/2, 0); displayKeyState(i&1? 20*FW : 18*FW, y, TRM_BASE+i); } - if (i < TRM_BASE) { -#if defined(PCBX7) || defined(PCBX9LITE) - y = MENU_HEADER_HEIGHT + FH + FH*i; - if (i >= 2) { - // hide PLUS and MINUS virtual buttons - lcdDrawTextAtIndex(0, y, STR_VKEYS, (TRM_BASE-1-i), 0); - displayKeyState(5*FW+4, y, KEY_MENU+(TRM_BASE-1-i)); - } -#elif defined(PCBXLITE) - y = MENU_HEADER_HEIGHT + FH*i; - lcdDrawTextAtIndex(0, y, STR_VKEYS, (TRM_BASE-1-i), 0); - displayKeyState(5*FW+2, y, KEY_SHIFT+(TRM_BASE-1-i)); -#else - y = MENU_HEADER_HEIGHT + FH + FH*i; - lcdDrawTextAtIndex(0, y, STR_VKEYS, (TRM_BASE-1-i), 0); - displayKeyState(5*FW+2, y, KEY_MENU+(TRM_BASE-1-i)); -#endif + if (i <= KEY_MAX) { + y = MENU_HEADER_HEIGHT + 1 + FH*i; + lcdDrawTextAtIndex(0, y, STR_VKEYS, i, 0); + displayKeyState(5*FW+2, y, i); } -#if defined(PCBTARANIS) - if (i < NUM_SWITCHES) { - if (SWITCH_EXISTS(i)) { - getvalue_t val = getValue(MIXSRC_FIRST_SWITCH+i); - getvalue_t sw = ((val < 0) ? 3*i+1 : ((val == 0) ? 3*i+2 : 3*i+3)); - drawSwitch(8*FW+4, y, sw, 0); - } - } -#else +#if defined(PCBSKY9X) if (i != SW_ID0) { y = MENU_HEADER_HEIGHT +i*FH - 2*FH; drawSwitch(8*FW, y, i+1, 0); displaySwitchState(11*FW+2, y, i); } +#else + if (i < NUM_SWITCHES) { + if (SWITCH_EXISTS(i)) { + y = MENU_HEADER_HEIGHT + 1 + FH*i; + getvalue_t val = getValue(MIXSRC_FIRST_SWITCH+i); + getvalue_t sw = ((val < 0) ? 3*i+1 : ((val == 0) ? 3*i+2 : 3*i+3)); + drawSwitch(8*FW+4, y, sw, 0); + } + } #endif } #if defined(ROTARY_ENCODER_NAVIGATION) -#if defined(PCBX7) || defined(PCBX9LITE) - coord_t y = MENU_HEADER_HEIGHT + FH; - coord_t x = 6*FW+3; - lcdDrawTextAtIndex(0, MENU_HEADER_HEIGHT + FH , STR_VRENCODERS, 0, 0); - lcdDrawNumber(x, y, rotencValue, RIGHT); -#else - coord_t y = MENU_HEADER_HEIGHT; - coord_t x = 19*FW; - lcdDrawTextAtIndex(14*FW, y, STR_VRENCODERS, 0, 0); - lcdDrawNumber(x, y, rotencValue, LEFT); + coord_t y = MENU_HEADER_HEIGHT + 1 + FH*KEY_COUNT; + lcdDrawText(0, y, STR_ROTARY_ENCODER); + lcdDrawNumber(5*FW+FWNUM+2, y, rotencValue, RIGHT); #endif -#endif - } diff --git a/radio/src/gui/128x64/radio_hardware.cpp b/radio/src/gui/128x64/radio_hardware.cpp index 131d16901..8fa93badc 100644 --- a/radio/src/gui/128x64/radio_hardware.cpp +++ b/radio/src/gui/128x64/radio_hardware.cpp @@ -147,7 +147,11 @@ enum MenuRadioHardwareItems { #endif #if NUM_SWITCHES == 8 +#if defined(RADIO_T12) +#define SWITCHES_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|HIDDEN_ROW, NAVIGATION_LINE_BY_LINE|HIDDEN_ROW +#else #define SWITCHES_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1 +#endif #elif NUM_SWITCHES == 6 #define SWITCHES_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1 #elif NUM_SWITCHES == 5 diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index 3f890d678..57763a4a6 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -365,7 +365,7 @@ void menuRadioSetup(event_t event) SLIDER_5POS(y, g_eeGeneral.hapticStrength, STR_HAPTICSTRENGTH, event, attr); break; #endif - + #if defined(GYRO) case ITEM_SETUP_GYRO_LABEL: lcdDrawTextAlignedLeft(y, STR_GYRO_LABEL); @@ -395,7 +395,7 @@ void menuRadioSetup(event_t event) } break; #endif - + case ITEM_SETUP_CONTRAST: lcdDrawTextAlignedLeft(y, STR_CONTRAST); lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.contrast, attr|LEFT); diff --git a/radio/src/gui/128x64/radio_version.cpp b/radio/src/gui/128x64/radio_version.cpp index ee638ef34..21fe0a908 100644 --- a/radio/src/gui/128x64/radio_version.cpp +++ b/radio/src/gui/128x64/radio_version.cpp @@ -22,7 +22,7 @@ #include "opentx.h" // TODO duplicated code -#if defined(PCBX7) || defined(PCBX9E) || defined(PCBX9LITE) +#if defined(ROTARY_ENCODER_NAVIGATION) #define EVT_KEY_NEXT_LINE EVT_ROTARY_RIGHT #define EVT_KEY_PREVIOUS_LINE EVT_ROTARY_LEFT #else diff --git a/radio/src/gui/128x64/view_about.cpp b/radio/src/gui/128x64/view_about.cpp index dec2f7f94..aaec50b32 100644 --- a/radio/src/gui/128x64/view_about.cpp +++ b/radio/src/gui/128x64/view_about.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -42,7 +42,7 @@ enum AboutScreens { #define ABOUT_X 2 #define ABOUT_INDENT 4 -#if defined(PCBX7) +#if defined(NAVIGATION_X7) #define EVT_KEY_PREVIOUS_VIEW EVT_KEY_LONG(KEY_PAGE) #define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGE) #else diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index 000944fe8..a8edbde72 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -227,7 +227,7 @@ void displayVoltageOrAlarm() #define displayVoltageOrAlarm() displayBattVoltage() #endif -#if defined(PCBX7) || defined(PCBX9LITE) +#if defined(NAVIGATION_X7) #define EVT_KEY_CONTEXT_MENU EVT_KEY_LONG(KEY_ENTER) #define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGE) #define EVT_KEY_NEXT_PAGE EVT_ROTARY_RIGHT @@ -235,7 +235,7 @@ void displayVoltageOrAlarm() #define EVT_KEY_MODEL_MENU EVT_KEY_BREAK(KEY_MENU) #define EVT_KEY_GENERAL_MENU EVT_KEY_LONG(KEY_MENU) #define EVT_KEY_TELEMETRY EVT_KEY_LONG(KEY_PAGE) -#elif defined(PCBXLITE) +#elif defined(NAVIGATION_XLITE) #define EVT_KEY_CONTEXT_MENU EVT_KEY_LONG(KEY_ENTER) #define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_UP) #define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_DOWN) diff --git a/radio/src/gui/128x64/view_statistics.cpp b/radio/src/gui/128x64/view_statistics.cpp index 73c1c7370..04cd7b2a6 100644 --- a/radio/src/gui/128x64/view_statistics.cpp +++ b/radio/src/gui/128x64/view_statistics.cpp @@ -31,14 +31,14 @@ void menuStatisticsView(event_t event) switch (event) { case EVT_KEY_FIRST(KEY_UP): -#if defined(PCBX7) +#if defined(NAVIGATION_X7) case EVT_KEY_BREAK(KEY_PAGE): #endif chainMenu(menuStatisticsDebug); break; case EVT_KEY_FIRST(KEY_DOWN): -#if defined(PCBX7) +#if defined(NAVIGATION_X7) case EVT_KEY_LONG(KEY_PAGE): killEvents(event); chainMenu(menuStatisticsDebug2); @@ -136,14 +136,14 @@ void menuStatisticsDebug(event_t event) case EVT_KEY_FIRST(KEY_UP): -#if defined(PCBX7) +#if defined(NAVIGATION_X7) case EVT_KEY_BREAK(KEY_PAGE): chainMenu(menuStatisticsDebug2); return; #endif case EVT_KEY_FIRST(KEY_DOWN): -#if defined(PCBX7) +#if defined(NAVIGATION_X7) case EVT_KEY_LONG(KEY_PAGE): #endif killEvents(event); @@ -250,14 +250,14 @@ void menuStatisticsDebug2(event_t event) break; case EVT_KEY_FIRST(KEY_UP): -#if defined(PCBX7) +#if defined(NAVIGATION_X7) case EVT_KEY_BREAK(KEY_PAGE): #endif chainMenu(menuStatisticsView); return; case EVT_KEY_FIRST(KEY_DOWN): -#if defined(PCBX7) +#if defined(NAVIGATION_X7) case EVT_KEY_LONG(KEY_PAGE): #endif killEvents(event); diff --git a/radio/src/gui/128x64/view_telemetry.cpp b/radio/src/gui/128x64/view_telemetry.cpp index 4889efd5a..3f5c51067 100644 --- a/radio/src/gui/128x64/view_telemetry.cpp +++ b/radio/src/gui/128x64/view_telemetry.cpp @@ -216,7 +216,7 @@ enum NavigationDirection { #define decrTelemetryScreen() direction = up #define incrTelemetryScreen() direction = down -#if defined(PCBXLITE) +#if defined(NAVIGATION_XLITE) #define EVT_KEY_PREVIOUS_VIEW EVT_KEY_LONG(KEY_LEFT) #define EVT_KEY_NEXT_VIEW EVT_KEY_LONG(KEY_RIGHT) #elif defined(PCBX7) diff --git a/radio/src/gui/212x64/radio_diagkeys.cpp b/radio/src/gui/212x64/radio_diagkeys.cpp index 88beb9b25..c6e48b57e 100644 --- a/radio/src/gui/212x64/radio_diagkeys.cpp +++ b/radio/src/gui/212x64/radio_diagkeys.cpp @@ -30,21 +30,36 @@ void menuRadioDiagKeys(event_t event) { SIMPLE_SUBMENU(STR_MENU_RADIO_SWITCHES, 1); - lcdDrawText(14*FW, MENU_HEADER_HEIGHT+2*FH, STR_VTRIM); + lcdDrawText(14*FW, MENU_HEADER_HEIGHT + 1, STR_VTRIM); for (uint8_t i=0; i<9; i++) { coord_t y; - if (i<8) { - y = MENU_HEADER_HEIGHT + FH*3 + FH*(i/2); + if (i < NUM_TRIMS_KEYS) { + y = MENU_HEADER_HEIGHT + 1 + FH + FH*(i/2); if (i&1) lcdDraw1bitBitmap(14*FW, y, sticks, i/2, 0); displayKeyState(i&1? 20*FW : 18*FW, y, TRM_BASE+i); } - if (i<6) { - y = i*FH+MENU_HEADER_HEIGHT+FH; + if (i <= KEY_MAX) { + y = MENU_HEADER_HEIGHT + 1 + FH*i; lcdDrawTextAtIndex(0, y, STR_VKEYS, (5-i), 0); - displayKeyState(5*FW+2, y, KEY_MENU+(5-i)); + displayKeyState(5*FW+2, y, i); + } + + if (i < NUM_SWITCHES) { + if (SWITCH_EXISTS(i)) { + y = MENU_HEADER_HEIGHT + 1 + FH*i; + getvalue_t val = getValue(MIXSRC_FIRST_SWITCH+i); + getvalue_t sw = ((val < 0) ? 3*i+1 : ((val == 0) ? 3*i+2 : 3*i+3)); + drawSwitch(8*FW+4, y, sw, 0); + } } } + +#if defined(ROTARY_ENCODER_NAVIGATION) + coord_t y = MENU_HEADER_HEIGHT + 1 + FH*KEY_COUNT; + lcdDrawText(0, y, STR_ROTARY_ENCODER); + lcdDrawNumber(5*FW+FWNUM+2, y, rotencValue, RIGHT); +#endif } diff --git a/radio/src/gui/CMakeLists.txt b/radio/src/gui/CMakeLists.txt index c3714b044..4027337ea 100644 --- a/radio/src/gui/CMakeLists.txt +++ b/radio/src/gui/CMakeLists.txt @@ -33,6 +33,9 @@ set(SRC gui/navigation/common.cpp ) +string(TOUPPER ${NAVIGATION_TYPE} NAVIGATION_TYPE) +add_definitions(-DNAVIGATION_${NAVIGATION_TYPE}) + include_directories(gui gui/${GUI_DIR}) if(GUI_DIR STREQUAL 128x64 OR GUI_DIR STREQUAL 212x64) diff --git a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp index 19dac046f..f6a6346b0 100644 --- a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp +++ b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp @@ -269,7 +269,7 @@ void menuRadioSdManager(event_t _event) menuVerticalOffset = reusableBuffer.sdManager.offset; break; -#if defined(PCBX9) || defined(PCBX7) // TODO NO_MENU_KEY +#if defined(PCBX9) || defined(RADIO_X7) // TODO NO_MENU_KEY case EVT_KEY_LONG(KEY_MENU): if (SD_CARD_PRESENT() && !READ_ONLY() && s_editMode == 0) { killEvents(_event); diff --git a/radio/src/gui/common/stdlcd/view_text.cpp b/radio/src/gui/common/stdlcd/view_text.cpp index 0a88cae4a..53519fac9 100644 --- a/radio/src/gui/common/stdlcd/view_text.cpp +++ b/radio/src/gui/common/stdlcd/view_text.cpp @@ -94,7 +94,7 @@ void readTextFile(int & lines_count) } } -#if defined(PCBX7) || defined(PCBX9E) +#if defined(ROTARY_ENCODER_NAVIGATION) #define EVT_KEY_NEXT_LINE EVT_ROTARY_RIGHT #define EVT_KEY_PREVIOUS_LINE EVT_ROTARY_LEFT #else diff --git a/radio/src/gui/navigation/navigation_xlite.cpp b/radio/src/gui/navigation/navigation_xlite.cpp index 327c3d209..dabdbd437 100644 --- a/radio/src/gui/navigation/navigation_xlite.cpp +++ b/radio/src/gui/navigation/navigation_xlite.cpp @@ -29,6 +29,15 @@ horzpos_t menuHorizontalPosition; int8_t checkIncDec_Ret; +#if defined(RADIO_T12) +#define DBLKEYS_PRESSED_RGT_LFT(in) ((in & (KEYS_GPIO_PIN_RIGHT + KEYS_GPIO_PIN_LEFT)) == (KEYS_GPIO_PIN_RIGHT + KEYS_GPIO_PIN_LEFT)) +// set to 0 +#define DBLKEYS_PRESSED_UP_DWN(in) ((in & (KEYS_GPIO_PIN_UP + KEYS_GPIO_PIN_DOWN)) == (KEYS_GPIO_PIN_UP + KEYS_GPIO_PIN_DOWN)) +// set to max +#define DBLKEYS_PRESSED_RGT_UP(in) ((in & (KEYS_GPIO_PIN_RIGHT + KEYS_GPIO_PIN_UP)) == (KEYS_GPIO_PIN_RIGHT + KEYS_GPIO_PIN_UP)) +// set to min +#define DBLKEYS_PRESSED_LFT_DWN(in) ((in & (KEYS_GPIO_PIN_LEFT + KEYS_GPIO_PIN_DOWN)) == (KEYS_GPIO_PIN_LEFT + KEYS_GPIO_PIN_DOWN)) +#else // invert the value #define DBLKEYS_PRESSED_RGT_LFT(in) ((in & ((1<= SCRIPT_GFUNC_FIRST) && g_model.noGlobalFunctions) return false; - + CustomFunctionData & fn = (ref < SCRIPT_GFUNC_FIRST ? g_model.customFn[index] : g_eeGeneral.customFn[index]); if (fn.func == FUNC_PLAY_SCRIPT && ZEXIST(fn.play.name)) { @@ -883,7 +883,7 @@ void luaDoOneRunStandalone(event_t evt) standaloneScript.state = SCRIPT_NOFILE; luaState = INTERPRETER_RELOAD_PERMANENT_SCRIPTS; } -#if !defined(PCBHORUS) && !defined(PCBXLITE) +#if defined(KEYS_GPIO_REG_MENU) // TODO find another key and add a #define else if (evt == EVT_KEY_LONG(KEY_MENU)) { killEvents(evt); diff --git a/radio/src/lua/lua_api.h b/radio/src/lua/lua_api.h index 62887b829..e47d58d5a 100644 --- a/radio/src/lua/lua_api.h +++ b/radio/src/lua/lua_api.h @@ -155,11 +155,9 @@ extern uint16_t maxLuaInterval; extern uint16_t maxLuaDuration; extern uint8_t instructionsPercent; -#if defined(PCBXLITE) - #define IS_MASKABLE(key) ((key) != KEY_EXIT && (key) != KEY_ENTER) -#elif defined(PCBTARANIS) +#if defined(KEYS_GPIO_REG_PAGE) #define IS_MASKABLE(key) ((key) != KEY_EXIT && (key) != KEY_ENTER && ((luaState & INTERPRETER_RUNNING_STANDALONE_SCRIPT) || (key) != KEY_PAGE)) -#elif defined(PCBHORUS) +#else #define IS_MASKABLE(key) ((key) != KEY_EXIT && (key) != KEY_ENTER) #endif struct LuaField { diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 5486ad1b7..063de86ea 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -253,8 +253,10 @@ void generalDefault() g_eeGeneral.switchConfig = (SWITCH_TOGGLE << 10) + (SWITCH_TOGGLE << 8) + (SWITCH_2POS << 6) + (SWITCH_2POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0); #elif defined(PCBXLITE) g_eeGeneral.switchConfig = (SWITCH_2POS << 6) + (SWITCH_2POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0); -#elif defined(PCBX7) +#elif defined(RADIO_X7) g_eeGeneral.switchConfig = 0x000006ff; // 4x3POS, 1x2POS, 1xTOGGLE +#elif defined(RADIO_T12) + g_eeGeneral.switchConfig = (SWITCH_2POS << 10) + (SWITCH_2POS << 8) + (SWITCH_3POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0); #elif defined(PCBX9LITE) g_eeGeneral.switchConfig = (SWITCH_TOGGLE << 8) + (SWITCH_2POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0); #elif defined(PCBTARANIS) || defined(PCBHORUS) @@ -470,11 +472,14 @@ void modelDefault(uint8_t id) } #endif -#if defined(PCBTARANIS) || defined(PCBHORUS) +#if defined(HARDWARE_INTERNAL_MODULE) g_model.moduleData[INTERNAL_MODULE].type = IS_PXX2_INTERNAL_ENABLED() ? MODULE_TYPE_ACCESS_ISRM : MODULE_TYPE_PXX_XJT; g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); #elif defined(PCBSKY9X) g_model.moduleData[EXTERNAL_MODULE].type = MODULE_TYPE_PPM; +#elif defined(RADIO_T12) + g_model.moduleData[EXTERNAL_MODULE].type = MODULE_TYPE_NONE; + g_model.moduleData[EXTERNAL_MODULE].type = MODULE_TYPE_MULTIMODULE; #endif #if defined(PCBXLITE) diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index 2ac0e6e77..fb2734d46 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -131,7 +131,8 @@ const char * getBasename(const char * path); #define OTX_FOURCC 0x3B78746F // otx for Taranis X-Lite S #elif defined(PCBXLITE) #define OTX_FOURCC 0x3978746F // otx for Taranis X-Lite -#elif defined(PCBX7) + #define O9X_FOURCC 0x3978396F // o9x for Taranis X-Lite +#elif defined(RADIO_X7) #define OTX_FOURCC 0x3678746F // otx for Taranis X7 #elif defined(PCBX9LITE) #define OTX_FOURCC 0x3C78746F // otx for Taranis X9-Lite @@ -139,6 +140,10 @@ const char * getBasename(const char * path); #define OTX_FOURCC 0x3378746F // otx for Taranis X9D #elif defined(PCBSKY9X) #define OTX_FOURCC 0x3278746F // otx for sky9x + #define O9X_FOURCC 0x3278396F // o9x for sky9x +#elif defined(RADIO_T12) + #define OTX_FOURCC 0x3D78746F // otx for Jumper T12 + #define O9X_FOURCC 0x3D78396F // o9x for Jumper T12 #endif bool isFileAvailable(const char * filename, bool exclDir = false); diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index 133cbbeba..8bbf98260 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -250,8 +250,10 @@ void Open9xSim::updateKeysAndSwitches(bool start) KEY_Down, KEY_DOWN, KEY_Right, KEY_RIGHT, KEY_Left, KEY_LEFT, -#elif defined(PCBXLITE) +#elif defined(PCBXLITE) || defined(RADIO_T12) + #if defined(KEYS_GPIO_REG_SHIFT) KEY_Shift_L, KEY_SHIFT, + #endif KEY_Return, KEY_ENTER, KEY_BackSpace, KEY_EXIT, KEY_Right, KEY_RIGHT, diff --git a/radio/src/strhelpers.cpp b/radio/src/strhelpers.cpp index 527a437a6..a4a787883 100644 --- a/radio/src/strhelpers.cpp +++ b/radio/src/strhelpers.cpp @@ -272,7 +272,11 @@ char * getSwitchString(char * dest, swsrc_t idx) if (swinfo.quot >= 5) *s++ = 'H' + swinfo.quot - 5; else if (swinfo.quot == 4) +#if defined(RADIO_T12) + *s++ = 'G'; +#else *s++ = 'F'; +#endif else *s++ = 'A'+swinfo.quot; #else diff --git a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt index 39a16d29f..87bbe0ccb 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt @@ -85,7 +85,7 @@ set(BOOTLOADER_SRC bin_files.cpp ) -if(PCB STREQUAL X12S OR PCB STREQUAL X10 OR PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL X9LITE) +if(PCB STREQUAL X12S OR PCB STREQUAL X10 OR PCB STREQUAL X9E OR (PCB STREQUAL X7 AND NOT (PCBREV STREQUAL T12)) OR PCB STREQUAL X9LITE) set(BOOTLOADER_SRC ${BOOTLOADER_SRC} ../../../../../targets/common/arm/stm32/rotary_encoder_driver.cpp diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index 763ed0080..5161192e3 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -1,7 +1,7 @@ option(DISK_CACHE "Enable SD card disk cache" YES) option(UNEXPECTED_SHUTDOWN "Enable the Unexpected Shutdown screen" YES) option(PXX1 "PXX1 protocol support" ON) -option(PXX2 "PXX2 protocol support" ON) +option(PXX2 "PXX2 protocol support" OFF) set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") set(CPU_TYPE STM32F4) diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 8eba192a9..5d3fc51c0 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -208,6 +208,13 @@ void simuSetKey(uint8_t key, bool state) KEY_CASE(KEY_LEFT, KEYS_GPIO_REG_LEFT, KEYS_GPIO_PIN_LEFT) KEY_CASE(KEY_UP, KEYS_GPIO_REG_UP, KEYS_GPIO_PIN_UP) KEY_CASE(KEY_DOWN, KEYS_GPIO_REG_DOWN, KEYS_GPIO_PIN_DOWN) +#elif defined(RADIO_T12) + KEY_CASE(KEY_EXIT, KEYS_GPIO_REG_EXIT, KEYS_GPIO_PIN_EXIT) + KEY_CASE(KEY_ENTER, KEYS_GPIO_REG_ENTER, KEYS_GPIO_PIN_ENTER) + KEY_CASE(KEY_RIGHT, KEYS_GPIO_REG_RIGHT, KEYS_GPIO_PIN_RIGHT) + KEY_CASE(KEY_LEFT, KEYS_GPIO_REG_LEFT, KEYS_GPIO_PIN_LEFT) + KEY_CASE(KEY_UP, KEYS_GPIO_REG_UP, KEYS_GPIO_PIN_UP) + KEY_CASE(KEY_DOWN, KEYS_GPIO_REG_DOWN, KEYS_GPIO_PIN_DOWN) #elif defined(PCBTARANIS) KEY_CASE(KEY_MENU, KEYS_GPIO_REG_MENU, KEYS_GPIO_PIN_MENU) KEY_CASE(KEY_EXIT, KEYS_GPIO_REG_EXIT, KEYS_GPIO_PIN_EXIT) diff --git a/radio/src/targets/sky9x/board.h b/radio/src/targets/sky9x/board.h index 8d3773a1b..9350ff54f 100644 --- a/radio/src/targets/sky9x/board.h +++ b/radio/src/targets/sky9x/board.h @@ -63,6 +63,9 @@ enum EnumKeys KEY_RIGHT, KEY_LEFT, + KEY_COUNT, + KEY_MAX = KEY_COUNT - 1, + TRM_BASE, TRM_LH_DWN = TRM_BASE, TRM_LH_UP, diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 03fff3ef9..a3bbbf735 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -4,7 +4,7 @@ option(INTERNAL_MODULE_PPM "Support for PPM internal module hack" OFF) option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module replacement" OFF) option(USEHORUSBT "X9E BT module replaced by Horus BT module" OFF) option(PXX1 "PXX1 protocol support" ON) -option(PXX2 "PXX2 protocol support" ON) +option(PXX2 "PXX2 protocol support" OFF) if(PCB STREQUAL X9E) set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") @@ -74,13 +74,22 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F205xE) # for size report set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) set(HAPTIC YES) - set(LUA_EXPORT lua_export_x7) - set(FLAVOUR x7) + if(PCBREV STREQUAL T12) + set(LUA_EXPORT lua_export_t12) + set(FLAVOUR t12) + set(NAVIGATION_TYPE xlite) + set(MULTIMODULE ON) + add_definitions(-DRADIO_T12) + else() + set(LUA_EXPORT lua_export_x7) + set(FLAVOUR x7) + set(NAVIGATION_TYPE x7) + add_definitions(-DRADIO_X7) + endif() add_definitions(-DPCBX7 -DSOFTWARE_VOLUME) add_definitions(-DEEPROM_VARIANT=0x4000) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(GUI_DIR 128x64) - set(NAVIGATION_TYPE x7) set(BITMAPS_TARGET 9x_bitmaps) set(FONTS_TARGET 9x_fonts_1bit) set(LCD_DRIVER lcd_driver_spi.cpp) @@ -98,7 +107,7 @@ elseif(PCB STREQUAL X9LITE) add_definitions(-DBOARD_NAME="x9lite") add_definitions(-DPCBX9LITE -DPCBX9 -DSOFTWARE_VOLUME) add_definitions(-DEEPROM_VARIANT=0x0800) - add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) + set(PXX2 ON) set(GUI_DIR 128x64) set(NAVIGATION_TYPE x7) set(BITMAPS_TARGET 9x_bitmaps) @@ -144,6 +153,7 @@ elseif(PCB STREQUAL XLITES) set(LCD_DRIVER lcd_driver_spi.cpp) set(GVAR_SCREEN model_gvars.cpp) set(STATUS_LEDS YES) + set(PXX2 ON) endif() if(PCB STREQUAL XLITES) @@ -185,7 +195,7 @@ if(NOT PCB STREQUAL XLITE) ) endif() -if(PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL X9LITE) +if(PCB STREQUAL X9E OR (PCB STREQUAL X7 AND NOT (PCBREV STREQUAL T12)) OR PCB STREQUAL X9LITE) set(TARGET_SRC ${TARGET_SRC} ../common/arm/stm32/rotary_encoder_driver.cpp diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index b91b64378..989a71233 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -94,6 +94,13 @@ extern "C" { } #endif +#if defined(PCBX9E) || defined(RADIO_X7) || defined(PCBX9LITE) +// Rotary Encoder driver +#define ROTARY_ENCODER_NAVIGATION +void rotaryEncoderInit(void); +void rotaryEncoderCheck(void); +#endif + #define FLASHSIZE 0x80000 #define BOOTLOADER_SIZE 0x8000 #define FIRMWARE_ADDRESS 0x08000000 @@ -184,7 +191,11 @@ uint32_t isBootloaderStart(const uint8_t * buffer); #define EXTERNAL_MODULE_OFF() EXTERNAL_MODULE_PWR_OFF() #endif +#if defined(RADIO_T12) +#define IS_INTERNAL_MODULE_ON() false +#else #define IS_INTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN) == Bit_SET) +#endif void init_ppm(uint8_t module); void disable_ppm(uint8_t module); @@ -263,24 +274,45 @@ int sbusGetByte(uint8_t * byte); // Keys driver enum EnumKeys { -#if defined(PCBXLITE) +#if defined(KEYS_GPIO_REG_SHIFT) KEY_SHIFT, -#else +#endif + +#if defined(KEYS_GPIO_REG_MENU) KEY_MENU, #endif + KEY_EXIT, KEY_ENTER, -#if defined(PCBXLITE) + +#if defined(KEYS_GPIO_REG_DOWN) KEY_DOWN, KEY_UP, +#endif + +#if defined(KEYS_GPIO_REG_RIGHT) KEY_RIGHT, KEY_LEFT, -#else +#endif + +#if defined(KEYS_GPIO_REG_PAGE) KEY_PAGE, +#endif + +#if defined(KEYS_GPIO_REG_PLUS) KEY_PLUS, KEY_MINUS, #endif + KEY_COUNT, + KEY_MAX = KEY_COUNT - 1, + +#if defined(ROTARY_ENCODER_NAVIGATION) + KEY_PLUS, + KEY_MINUS, +#endif + + TRM_BASE, TRM_LH_DWN = TRM_BASE, TRM_LH_UP, @@ -300,7 +332,7 @@ enum EnumKeys #define KEY_DOWN KEY_PLUS #define KEY_RIGHT KEY_PLUS #define KEY_LEFT KEY_MINUS -#elif defined(PCBXLITE) +#elif defined(NAVIGATION_XLITE) #define KEY_PLUS KEY_RIGHT #define KEY_MINUS KEY_LEFT #else @@ -435,13 +467,6 @@ uint32_t readTrims(void); #define TRIMS_PRESSED() (readTrims()) #define KEYS_PRESSED() (readKeys()) -#if defined(PCBX9E) || defined(PCBX7) || defined(PCBX9LITE) -// Rotary Encoder driver -#define ROTARY_ENCODER_NAVIGATION -void rotaryEncoderInit(void); -void rotaryEncoderCheck(void); -#endif - // WDT driver #define WDTO_500MS 500 #if defined(WATCHDOG_DISABLED) || defined(SIMU) diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 2b8dddd0a..8b5ae6377 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -46,7 +46,20 @@ #define KEYS_GPIO_PIN_LEFT GPIO_Pin_12 // PE.12 #define KEYS_GPIO_REG_RIGHT GPIOE->IDR #define KEYS_GPIO_PIN_RIGHT GPIO_Pin_13 // PE.13 -#elif defined(PCBX7) +#elif defined(RADIO_T12) + #define KEYS_GPIO_REG_EXIT GPIOD->IDR + #define KEYS_GPIO_PIN_EXIT GPIO_Pin_2 // PD.02 + #define KEYS_GPIO_REG_ENTER GPIOE->IDR + #define KEYS_GPIO_PIN_ENTER GPIO_Pin_10 // PE.10 + #define KEYS_GPIO_REG_UP GPIOE->IDR + #define KEYS_GPIO_PIN_UP GPIO_Pin_9 // PE.09 + #define KEYS_GPIO_REG_DOWN GPIOE->IDR + #define KEYS_GPIO_PIN_DOWN GPIO_Pin_11 // PE.11 + #define KEYS_GPIO_REG_LEFT GPIOD->IDR + #define KEYS_GPIO_PIN_LEFT GPIO_Pin_7 // PD.07 + #define KEYS_GPIO_REG_RIGHT GPIOD->IDR + #define KEYS_GPIO_PIN_RIGHT GPIO_Pin_3 // PD.03 +#elif defined(RADIO_X7) #define KEYS_GPIO_REG_PAGE GPIOD->IDR #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03 #define KEYS_GPIO_REG_MENU GPIOD->IDR @@ -92,7 +105,7 @@ #define ROTARY_ENCODER_EXTI_PortSource EXTI_PortSourceGPIOD #define ROTARY_ENCODER_EXTI_PinSource1 EXTI_PinSource12 #define ROTARY_ENCODER_EXTI_PinSource2 EXTI_PinSource13 -#elif defined(PCBX7) +#elif defined(RADIO_X7) #define ROTARY_ENCODER_GPIO GPIOE #define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_9 // PE.09 #define ROTARY_ENCODER_GPIO_PIN_B GPIO_Pin_11 // PE.11 @@ -121,7 +134,7 @@ #endif // This is for SIMU: reuse rotary encoder pins to map UP and DOWN keyboard keys -#if defined(SIMU) && (defined(PCBX9E) || defined(PCBX7) || defined(PCBX9LITE)) +#if defined(SIMU) && defined(ROTARY_ENCODER_NAVIGATION) #define KEYS_GPIO_REG_PLUS ROTARY_ENCODER_GPIO->IDR #define KEYS_GPIO_PIN_PLUS ROTARY_ENCODER_GPIO_PIN_A #define KEYS_GPIO_REG_MINUS ROTARY_ENCODER_GPIO->IDR @@ -353,8 +366,11 @@ #define SWITCHES_GPIO_PIN_G_H GPIO_Pin_3 // PF.03 #define SWITCHES_GPIO_REG_G_L GPIOF->IDR #define SWITCHES_GPIO_PIN_G_L GPIO_Pin_4 // PF.04 -#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) +#elif defined(RADIO_X7) || defined(PCBXLITE) || defined(PCBX9LITE) // no SWG +#elif defined(RADIO_T12) + #define SWITCHES_GPIO_REG_G GPIOE->IDR + #define SWITCHES_GPIO_PIN_G GPIO_Pin_14 // PE.14 #else #define SWITCHES_GPIO_REG_G_H GPIOE->IDR #define SWITCHES_GPIO_PIN_G_H GPIO_Pin_9 // PE.09 @@ -457,7 +473,13 @@ #define KEYS_GPIOB_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5) #define KEYS_GPIOC_PINS (GPIO_Pin_4 | GPIO_Pin_5) #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14) -#elif defined(PCBX7) +#elif defined(RADIO_T12) + #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE) + #define KEYS_GPIOA_PINS SWITCHES_GPIO_PIN_B_H + #define KEYS_GPIOC_PINS (TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_RVD | TRIMS_GPIO_PIN_RVU) + #define KEYS_GPIOD_PINS (TRIMS_GPIO_PIN_LHL | KEYS_GPIO_PIN_EXIT | KEYS_GPIO_PIN_LEFT | KEYS_GPIO_PIN_RIGHT | SWITCHES_GPIO_PIN_C_L | SWITCHES_GPIO_PIN_H) + #define KEYS_GPIOE_PINS (KEYS_GPIO_PIN_UP | KEYS_GPIO_PIN_DOWN | KEYS_GPIO_PIN_ENTER | TRIMS_GPIO_PIN_RHR | TRIMS_GPIO_PIN_RHL | TRIMS_GPIO_PIN_LVD | TRIMS_GPIO_PIN_LVU | SWITCHES_GPIO_PIN_C_H | SWITCHES_GPIO_PIN_D_L | SWITCHES_GPIO_PIN_D_H | SWITCHES_GPIO_PIN_B_L | SWITCHES_GPIO_PIN_A_L | SWITCHES_GPIO_PIN_A_H | SWITCHES_GPIO_PIN_G) +#elif defined(RADIO_X7) #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE) #define KEYS_GPIOA_PINS SWITCHES_GPIO_PIN_B_H #define KEYS_GPIOC_PINS (TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_RVD | TRIMS_GPIO_PIN_RVU | SWITCHES_GPIO_PIN_I | SWITCHES_GPIO_PIN_J) @@ -701,7 +723,9 @@ #endif // Internal Module -#define HARDWARE_INTERNAL_MODULE +#if !defined(RADIO_T12) + #define HARDWARE_INTERNAL_MODULE +#endif #if !(defined(PCBXLITES) && !defined(PCBX9LITE)) #define INTERNAL_MODULE_PXX1 #endif @@ -739,7 +763,7 @@ // #define INTMODULE_TIMER_IRQn TIM3_IRQn // #define INTMODULE_TIMER_IRQHandler TIM3_IRQHandler // #define INTMODULE_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#elif defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7) +#elif defined(PCBX9E) || defined(PCBX9DP) || defined(RADIO_X7) #define INTMODULE_PULSES #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) #define INTMODULE_RCC_APB1Periph 0 @@ -759,6 +783,27 @@ #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream5_IRQHandler #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF5 #define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) +#elif defined(RADIO_T12) + //left here is somebody will mod the radio for internal module + #define INTMODULE_PULSES + #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) + #define INTMODULE_RCC_APB1Periph 0 + #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM1 + #define INTMODULE_PWR_GPIO GPIOC + #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_6 // JUMPER INT PC.06 //X7 INT is PC.06 + #define INTMODULE_TX_GPIO GPIOA + #define INTMODULE_TX_GPIO_PIN GPIO_Pin_7 // JUMPER INT PA.07 //X7 INT is PA.10 + #define INTMODULE_TX_GPIO_PinSource GPIO_PinSource10 + #define INTMODULE_TIMER TIM1 + #define INTMODULE_TIMER_CC_IRQn TIM1_CC_IRQn + #define INTMODULE_TIMER_CC_IRQHandler TIM1_CC_IRQHandler + #define INTMODULE_TX_GPIO_AF GPIO_AF_TIM1 + #define INTMODULE_DMA_CHANNEL DMA_Channel_6 + #define INTMODULE_DMA_STREAM DMA2_Stream5 + #define INTMODULE_DMA_STREAM_IRQn DMA2_Stream5_IRQn + #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream5_IRQHandler + #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF5 + #define INTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) #else #define INTMODULE_PULSES #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) @@ -823,6 +868,30 @@ #define EXTMODULE_USART_DMA_CHANNEL DMA_Channel_5 #define EXTMODULE_USART_DMA_STREAM DMA2_Stream6 #define EXTMODULE_USART_DMA_STREAM_IRQn DMA2_Stream6_IRQn +#elif defined(RADIO_T12) + //Jumper T12v2 external module configured + #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) + #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8 + #define EXTMODULE_PWR_GPIO GPIOD + #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // JUMPER EXT PD.08 // X7 EXT is PD.08 + #define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) + #define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) + #define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET) + #define EXTMODULE_TX_GPIO GPIOA + #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_7 // JUMPER EXT PA.07 // X7 EXT is PA.07 + #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource7 + #define EXTMODULE_TIMER TIM8 + #define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH1N + #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn + #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler + #define EXTMODULE_TIMER_DMA_CHANNEL DMA_Channel_7 + #define EXTMODULE_TIMER_DMA_STREAM DMA2_Stream1 + #define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream1_IRQn + #define EXTMODULE_TIMER_DMA_STREAM_IRQHandler DMA2_Stream1_IRQHandler + #define EXTMODULE_TIMER_DMA_FLAG_TC DMA_IT_TCIF1 + #define EXTMODULE_TIMER_OUTPUT_ENABLE TIM_CCER_CC1NE + #define EXTMODULE_TIMER_OUTPUT_POLARITY TIM_CCER_CC1NP + #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) #else #define EXTMODULE_PULSES #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) @@ -947,11 +1016,11 @@ #define TELEMETRY_DIR_GPIO GPIOD #define TELEMETRY_DIR_GPIO_PIN GPIO_Pin_4 // PD.04 #if defined(PCBXLITE) || defined(PCBX9LITE) -#define TELEMETRY_DIR_OUTPUT() TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN -#define TELEMETRY_DIR_INPUT() TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN + #define TELEMETRY_DIR_OUTPUT() TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN + #define TELEMETRY_DIR_INPUT() TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN #else -#define TELEMETRY_DIR_OUTPUT() TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN -#define TELEMETRY_DIR_INPUT() TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN + #define TELEMETRY_DIR_OUTPUT() TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN + #define TELEMETRY_DIR_INPUT() TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN #endif #define TELEMETRY_GPIO GPIOD #define TELEMETRY_TX_GPIO_PIN GPIO_Pin_5 // PD.05 @@ -1399,4 +1468,4 @@ #define TIMER_2MHz_RCC_APB1Periph RCC_APB1Periph_TIM7 #define TIMER_2MHz_TIMER TIM7 -#endif // _HAL_H_ +#endif // _HAL_H_ \ No newline at end of file diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp index 576d767c3..d04a6e1e0 100644 --- a/radio/src/targets/taranis/lcd_driver_spi.cpp +++ b/radio/src/targets/taranis/lcd_driver_spi.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -20,7 +20,11 @@ #include "opentx.h" -#define LCD_CONTRAST_OFFSET 160 +#if defined(RADIO_T12) + #define LCD_CONTRAST_OFFSET -10 +#else + #define LCD_CONTRAST_OFFSET 160 +#endif #define RESET_WAIT_DELAY_MS 300 // Wait time after LCD reset before first command #define WAIT_FOR_DMA_END() do { } while (lcd_busy) @@ -61,9 +65,9 @@ void lcdHardwareInit() LCD_SPI->CR2 = 0; LCD_SPI->CR1 |= SPI_CR1_MSTR; // Make sure in case SSM/SSI needed to be set first LCD_SPI->CR1 |= SPI_CR1_SPE; - + LCD_NCS_HIGH(); - + GPIO_InitStructure.GPIO_Pin = LCD_NCS_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; @@ -81,7 +85,7 @@ void lcdHardwareInit() GPIO_InitStructure.GPIO_Pin = LCD_CLK_GPIO_PIN | LCD_MOSI_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(LCD_SPI_GPIO, &GPIO_InitStructure); - + GPIO_PinAFConfig(LCD_SPI_GPIO, LCD_MOSI_GPIO_PinSource, LCD_GPIO_AF); GPIO_PinAFConfig(LCD_SPI_GPIO, LCD_CLK_GPIO_PinSource, LCD_GPIO_AF); @@ -103,6 +107,20 @@ void lcdHardwareInit() #if LCD_W == 128 void lcdStart() { +#if defined(RADIO_T12) + // Jumper has the screen inverted. + lcdWriteCommand(0xe2); // (14) Soft reset + lcdWriteCommand(0xa0); // Set seg + lcdWriteCommand(0xc8); // Set com + lcdWriteCommand(0xf8); // Set booster + lcdWriteCommand(0x00); // 5x + lcdWriteCommand(0xa3); // Set bias=1/6 + lcdWriteCommand(0x22); // Set internal rb/ra=5.0 + lcdWriteCommand(0x2f); // All built-in power circuits on + lcdWriteCommand(0x24); // Set contrast + lcdWriteCommand(0x36); // Set Vop + lcdWriteCommand(0xa6); // Set display mode +#else lcdWriteCommand(0xe2); // (14) Soft reset lcdWriteCommand(0xa1); // Set seg lcdWriteCommand(0xc0); // Set com @@ -114,6 +132,7 @@ void lcdStart() lcdWriteCommand(0x81); // Set contrast lcdWriteCommand(0x36); // Set Vop lcdWriteCommand(0xa6); // Set display mode +#endif } #else void lcdStart() @@ -155,7 +174,7 @@ void lcdWriteAddress(uint8_t x, uint8_t y) { lcdWriteCommand(x & 0x0F); // Set Column Address LSB CA[3:0] lcdWriteCommand((x>>4) | 0x10); // Set Column Address MSB CA[7:4] - + lcdWriteCommand((y&0x0F) | 0x60); // Set Row Address LSB RA [3:0] lcdWriteCommand(((y>>4) & 0x0F) | 0x70); // Set Row Address MSB RA [7:4] } @@ -181,8 +200,10 @@ void lcdRefresh(bool wait) for (uint8_t y=0; y < 8; y++, p+=LCD_W) { lcdWriteCommand(0x10); // Column addr 0 lcdWriteCommand(0xB0 | y); // Page addr y +#if !defined(RADIO_T12) lcdWriteCommand(0x04); - +#endif + LCD_NCS_LOW(); LCD_A0_HIGH(); @@ -192,7 +213,7 @@ void lcdRefresh(bool wait) LCD_DMA_Stream->M0AR = (uint32_t)p; LCD_DMA_Stream->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA & TC interrupts LCD_SPI->CR2 |= SPI_CR2_TXDMAEN; - + WAIT_FOR_DMA_END(); LCD_NCS_HIGH(); @@ -204,7 +225,7 @@ void lcdRefresh(bool wait) lcd_busy = true; lcdWriteAddress(0, 0); - + LCD_NCS_LOW(); LCD_A0_HIGH(); @@ -300,7 +321,7 @@ void lcdInitFinish() The longer initialization time seems to only be needed for regular Taranis, the Taranis Plus (9XE) has been tested to work without any problems at -18 deg Celsius. Therefore the delay for T+ is lower. - + If radio is reset by watchdog or boot-loader the wait is skipped, but the LCD is initialized in any case. @@ -316,7 +337,7 @@ void lcdInitFinish() delay_ms(RESET_WAIT_DELAY_MS); #endif } - + lcdStart(); lcdWriteCommand(0xAF); // dc2=1, IC into exit SLEEP MODE, dc3=1 gray=ON, dc4=1 Green Enhanc mode disabled delay_ms(20); // needed for internal DC-DC converter startup @@ -331,7 +352,7 @@ void lcdSetRefVolt(uint8_t val) #if LCD_W != 128 WAIT_FOR_DMA_END(); #endif - + lcdWriteCommand(0x81); // Set Vop lcdWriteCommand(val+LCD_CONTRAST_OFFSET); // 0-255 } diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 632f0a8bb..57996e222 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -416,6 +416,7 @@ const char STR_GLOBAL_VAR[] = TR_GLOBAL_VAR; const char STR_OWN[] = TR_OWN; const char STR_DATE[] = TR_DATE; const char STR_CHANNELS_MONITOR[] = TR_CHANNELS_MONITOR; +const char STR_ROTARY_ENCODER[] = TR_ROTARY_ENCODER; const char STR_MIXERS_MONITOR[] = TR_MIXERS_MONITOR; const char STR_PATH_TOO_LONG[] = TR_PATH_TOO_LONG; const char STR_VIEW_TEXT[] = TR_VIEW_TEXT; diff --git a/radio/src/translations.h b/radio/src/translations.h index 62ae35b04..4b42d33d1 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -597,6 +597,7 @@ extern const char STR_GVARS[]; extern const char STR_GLOBAL_VAR[]; extern const char STR_OWN[]; extern const char STR_DATE[]; +extern const char STR_ROTARY_ENCODER[]; extern const char STR_CHANNELS_MONITOR[]; extern const char STR_MIXERS_MONITOR[]; extern const char STR_PATH_TOO_LONG[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index f926036a8..d990c6873 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -359,6 +359,9 @@ #if defined(PCBHORUS) #define LEN_VKEYS "\006" #define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Nahoru""Dolů\0 ""Vpravo""Vlevo" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" #elif defined(PCBTARANIS) #define LEN_VKEYS "\005" #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Mínus" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index b75bd5f07..ce85c99af 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -377,14 +377,17 @@ #define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0" #if defined(PCBHORUS) -#define LEN_VKEYS "\006" -#define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Up\0 ""Down\0 ""Right\0""Left" + #define LEN_VKEYS "\006" + #define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Up\0 ""Down\0 ""Right\0""Left" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" #elif defined(PCBTARANIS) -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" #else -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" #endif #define LEN_VRENCODERS "\003" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 35cc79e9e..a4711e3de 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -365,6 +365,9 @@ #elif defined(PCBXLITE) #define LEN_VKEYS "\005" #define TR_VKEYS "Shift""Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" #elif defined(PCBTARANIS) #define LEN_VKEYS "\005" #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" @@ -884,7 +887,7 @@ #define TR_OWN "Own" #define TR_DATE "Date" #define TR_MONTHS { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" } -#define TR_ROTARY_ENCODER "R.Encs" +#define TR_ROTARY_ENCODER "R.E." #define TR_CHANNELS_MONITOR "CHANNELS MONITOR" #define TR_MIXERS_MONITOR "MIXERS MONITOR" #define TR_PATH_TOO_LONG "Path too long" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index f066b56b6..aea800a1f 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -374,8 +374,22 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#define LEN_VKEYS "\005" -#define TR_VKEYS TR("Menu\0""Salir""Abajo""Arrib""Dcha.""Izqd.", "Menu\0""Salir""Enter""Pgna.""Mas\0 ""Menos") +#if defined(PCBHORUS) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Up\0 ""Down\0""Right""Left\0" +#elif defined(PCBXLITE) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Shift""Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" +#elif defined(PCBTARANIS) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" +#else + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" +#endif #define LEN_VRENCODERS "\003" #define TR_VRENCODERS "REa""REb" @@ -893,7 +907,7 @@ #define TR_OWN "Propio" #define TR_DATE "Fecha" #define TR_MONTHS { "Jan", "Fev", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" } -#define TR_ROTARY_ENCODER "R.Encs" +#define TR_ROTARY_ENCODER "R.E." #define TR_CHANNELS_MONITOR "MONITOR CANALES" #define TR_MIXERS_MONITOR "MIXERS MONITOR" #define TR_PATH_TOO_LONG "Path too long" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index c00319310..5f51ca905 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -374,8 +374,22 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#define LEN_VKEYS "\005" -#define TR_VKEYS TR("Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0", "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus") +#if defined(PCBHORUS) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Up\0 ""Down\0""Right""Left\0" +#elif defined(PCBXLITE) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Shift""Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" +#elif defined(PCBTARANIS) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" +#else + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" +#endif #define LEN_VRENCODERS "\003" #define TR_VRENCODERS "REa""REb" @@ -886,7 +900,7 @@ #define TR_OWN "Own" #define TR_DATE "Date" #define TR_MONTHS { "Jan", "Fev", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" } -#define TR_ROTARY_ENCODER "R.Encs" +#define TR_ROTARY_ENCODER "R.E." #define TR_CHANNELS_MONITOR "CHANNELS MONITOR" #define TR_MIXERS_MONITOR "MIXERS MONITOR" #define TR_PATH_TOO_LONG "Path too long" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 4cd56f5c5..93da75f89 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -382,6 +382,9 @@ #elif defined(PCBXLITE) #define LEN_VKEYS "\005" #define TR_VKEYS "Shift""Exit\0""Enter""Bas\0 ""Haut\0""Droit""Gauch" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" #elif defined(PCBTARANIS) #define LEN_VKEYS "\005" #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Moins" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 22a8009fe..db7d7989d 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -376,8 +376,22 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#define LEN_VKEYS "\005" -#define TR_VKEYS TR("Menù\0""EXIT\0""DN\0 ""UP\0 ""SX\0 ""DX\0 ", "Menu\0""Esci\0""Enter""Pag.\0""Più\0 ""Meno") +#if defined(PCBHORUS) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Up\0 ""Down\0""Right""Left\0" +#elif defined(PCBXLITE) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Shift""Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" +#elif defined(PCBTARANIS) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" +#else + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" +#endif #define LEN_VRENCODERS "\003" #define TR_VRENCODERS "REa""REb" @@ -887,7 +901,7 @@ #define TR_OWN "Fase" #define TR_DATE "Data" #define TR_MONTHS { "Jan", "Fev", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" } -#define TR_ROTARY_ENCODER "R.Encs" +#define TR_ROTARY_ENCODER "R.E." #define TR_CHANNELS_MONITOR "MONITOR CANALI" #define TR_MIXERS_MONITOR "MONITOR MIXER" #define TR_PATH_TOO_LONG "Path troppo lungo" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index d84f64843..eee09834c 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -362,14 +362,17 @@ #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" #if defined(PCBHORUS) -#define LEN_VKEYS "\006" -#define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Up\0 ""Down\0 ""Right\0""Left" + #define LEN_VKEYS "\006" + #define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Up\0 ""Down\0 ""Right\0""Left" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" #elif defined(PCBTARANIS) -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" #else -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" #endif #define LEN_VRENCODERS "\003" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 6816cc440..623266069 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -377,8 +377,22 @@ #define LEN_VSWASHTYPE "\004" #define TR_VSWASHTYPE "---\0""120\0""120X""140\0""90\0" -#define LEN_VKEYS "\005" -#define TR_VKEYS TR("Menu\0""Exit\0""Dół \0""Góra\0""Prawo""Lewo\0", "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus") +#if defined(PCBHORUS) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Up\0 ""Down\0""Right""Left\0" +#elif defined(PCBXLITE) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Shift""Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" +#elif defined(PCBTARANIS) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" +#else + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Down\0""Up\0 ""Right""Left\0" +#endif #define LEN_VRENCODERS "\003" #define TR_VRENCODERS "REa""REb" @@ -887,7 +901,7 @@ #define TR_OWN "Własność" #define TR_DATE "Data" #define TR_MONTHS { "Jan", "Fev", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" } -#define TR_ROTARY_ENCODER "R.Encs" +#define TR_ROTARY_ENCODER "R.E." #define TR_CHANNELS_MONITOR "MONITOR KANAŁÓW" #define TR_MIXERS_MONITOR "MONITOR MIKSER" #define TR_PATH_TOO_LONG "Ścieżka za długa" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 37f3b8113..29a843e6f 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -891,7 +891,7 @@ #define TR_OWN "Propr." #define TR_DATE "Data" #define TR_MONTHS { "Jan", "Fev", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" } -#define TR_ROTARY_ENCODER "R.Encs" +#define TR_ROTARY_ENCODER "R.E." #define TR_CHANNELS_MONITOR "CHANNELS MONITOR" #define TR_MIXERS_MONITOR "MIXERS MONITOR" #define TR_PATH_TOO_LONG "Path too long" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index a07e6c760..c34d7c13e 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -375,14 +375,17 @@ #define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0 " #if defined(PCBHORUS) -#define LEN_VKEYS "\006" -#define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Upp\0 ""Ned\0 ""Höger\0""Vänst" + #define LEN_VKEYS "\006" + #define TR_VKEYS "Menu\0 ""Exit\0 ""Enter\0""Upp\0 ""Ned\0 ""Höger\0""Vänst" +#elif defined(RADIO_T12) + #define LEN_VKEYS "\005" + #define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0" #elif defined(PCBTARANIS) -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus" #else -#define LEN_VKEYS "\005" -#define TR_VKEYS "Menu\0""Exit\0""Ned\0 ""Upp\0 ""Höger""Vänst" + #define LEN_VKEYS "\005" + #define TR_VKEYS "Menu\0""Exit\0""Ned\0 ""Upp\0 ""Höger""Vänst" #endif #define LEN_VRENCODERS "\003" diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index f76b953fe..4d8e42929 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -44,9 +44,12 @@ #elif defined(PCBXLITE) #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0" -#elif defined(PCBX7) +#elif defined(RADIO_X7) #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SF\0""\312SH\0""\312SI\0""\312SJ\0" +#elif defined(RADIO_T12) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0" #elif defined(PCBX9LITE) #define TR_POTS_VSRCRAW "\310S1\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0" diff --git a/radio/util/build-firmware.py b/radio/util/build-firmware.py index 0cec51604..6c319b8cb 100755 --- a/radio/util/build-firmware.py +++ b/radio/util/build-firmware.py @@ -121,6 +121,14 @@ elif options[optcount] == "x12s": maxsize = 2 * 1024 * 1024 board = BOARD_HORUS board_family = BOARD_FAMILY_ARM +elif options[optcount] == "t12": + command_options["PCB"] = "X7" + command_options["PCBREV"] = "T12" + command_options["MULTI_SPORT"] = "ON" + firmware_options = options_taranis_x9dp + maxsize = 65536 * 8 + board = BOARD_TARANIS + board_family = BOARD_FAMILY_ARM else: exit(INVALID_BOARD) diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index 38b5f98ef..9e5375353 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -177,6 +177,15 @@ if [[ " X12S HORUS ALL " =~ " ${FLAVOR} " ]] ; then make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} fi +if [[ " T12 ALL " =~ " ${FLAVOR} " ]] ; then + # OpenTX on T12 + rm -rf * + cmake ${COMMON_OPTIONS} -DPCB=X7 -DPCBREV=T12 -DHELI=YES -DGVARS=YES ${SRCDIR} + make -j${CORES} ${FIRMARE_TARGET} + make -j${CORES} libsimulator + make -j${CORES} gtests ; ./gtests ${TEST_OPTIONS} +fi + if [[ " DEFAULT ALL " =~ " ${FLAVOR} " ]] ; then # Companion rm -rf *