diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index b24060010e..35ff91170d 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -49,6 +49,7 @@ jobs: - pl18 - pl18ev - t12 + - t12max - t15 - t16 - t18 @@ -97,7 +98,7 @@ jobs: target: - nv14;el18 - pl18;pl18ev - - t12 + - t12;t12max - t15;t16;t18 - t8;zorro;pocket;mt12;commando8 - tlite;tpro;tprov2;lr3pro diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 1707e2a56a..68fa7cc8ca 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -18,7 +18,7 @@ jobs: target: - nv14;el18 - pl18;pl18ev - - t12 + - t12;t12max - t15;t16;t18 - t8;zorro;pocket;mt12;commando8 - tlite;tpro;tprov2;lr3pro diff --git a/companion/src/companion.qrc b/companion/src/companion.qrc index 4f292828b2..17c6a48cf6 100644 --- a/companion/src/companion.qrc +++ b/companion/src/companion.qrc @@ -261,6 +261,14 @@ images/simulator/Fatfish/F16/right.png images/simulator/Fatfish/F16/top.png images/simulator/Fatfish/F16/bottom.png + images/simulator/JumperT12max/bottom.png + images/simulator/JumperT12max/left.png + images/simulator/JumperT12max/right.png + images/simulator/JumperT12max/right-ent.png + images/simulator/JumperT12max/top.png + images/simulator/JumperT12max/exit.png + images/simulator/JumperT12max/menu.png + images/simulator/JumperT12max/page.png images/simulator/JumperT14/bottom.png images/simulator/JumperT14/left.png images/simulator/JumperT14/right.png diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 35149d6df9..95e270c0b1 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -183,6 +183,7 @@ int Boards::getEEpromSize(Board::Type board) case BOARD_BETAFPV_LR3PRO: case BOARD_IFLIGHT_COMMANDO8: case BOARD_JUMPER_T12: + case BOARD_JUMPER_T12MAX: case BOARD_JUMPER_T14: case BOARD_JUMPER_T20: case BOARD_JUMPER_T20V2: @@ -237,6 +238,7 @@ int Boards::getFlashSize(Type board) case BOARD_BETAFPV_LR3PRO: case BOARD_IFLIGHT_COMMANDO8: case BOARD_JUMPER_T12: + case BOARD_JUMPER_T12MAX: case BOARD_JUMPER_T14: case BOARD_JUMPER_T20: case BOARD_JUMPER_T20V2: @@ -534,6 +536,8 @@ QString Boards::getBoardName(Board::Type board) return "Jumper T-Pro"; case BOARD_JUMPER_TPROV2: return "Jumper T-Pro V2"; + case BOARD_JUMPER_T12MAX: + return "Jumper T12 MAX"; case BOARD_JUMPER_T14: return "Jumper T14"; case BOARD_JUMPER_T15: @@ -678,6 +682,7 @@ int Boards::getDefaultInternalModules(Board::Type board) case BOARD_RADIOMASTER_POCKET: case BOARD_RADIOMASTER_TX12_MK2: case BOARD_IFLIGHT_COMMANDO8: + case BOARD_JUMPER_T12MAX: case BOARD_JUMPER_T14: case BOARD_JUMPER_T15: case BOARD_JUMPER_T20: diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index 521e0a89d3..e6d1a4169e 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -61,6 +61,7 @@ namespace Board { BOARD_TARANIS_X9LITE, BOARD_TARANIS_X9LITES, BOARD_JUMPER_T12, + BOARD_JUMPER_T12MAX, BOARD_JUMPER_T14, BOARD_JUMPER_T15, BOARD_JUMPER_T16, @@ -446,6 +447,11 @@ inline bool IS_JUMPER_T16(Board::Type board) return board == Board::BOARD_JUMPER_T16; } +inline bool IS_JUMPER_T12MAX(Board::Type board) +{ + return board == Board::BOARD_JUMPER_T12MAX; +} + inline bool IS_JUMPER_T14(Board::Type board) { return board == Board::BOARD_JUMPER_T14; @@ -509,6 +515,7 @@ inline bool IS_FAMILY_T16(Board::Type board) inline bool IS_FAMILY_T12(Board::Type board) { return board == Board::BOARD_JUMPER_T12 || + board == Board::BOARD_JUMPER_T12MAX || board == Board::BOARD_JUMPER_T14 || board == Board::BOARD_JUMPER_T20 || board == Board::BOARD_JUMPER_T20V2 || diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 3809c52069..e1c626ba40 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -68,6 +68,8 @@ const char * OpenTxEepromInterface::getName() return "EdgeTX for Jumper T-Pro"; case BOARD_JUMPER_TPROV2: return "EdgeTX for Jumper T-Pro V2"; + case BOARD_JUMPER_T12MAX: + return "EdgeTX for Jumper T12 MAX"; case BOARD_JUMPER_T14: return "EdgeTX for Jumper T14"; case BOARD_JUMPER_T15: @@ -1448,6 +1450,13 @@ void registerOpenTxFirmwares() registerOpenTxFirmware(firmware); addOpenTxRfOptions(firmware, FLEX); + /* Jumper T12 MAX board */ + firmware = new OpenTxFirmware(FIRMWAREID("t12max"), Firmware::tr("Jumper T12 MAX"), BOARD_JUMPER_T12MAX); + addOpenTxFrskyOptions(firmware); + firmware->addOption("internalelrs", Firmware::tr("Select if internal ELRS module is installed")); + addOpenTxRfOptions(firmware, NONE); + registerOpenTxFirmware(firmware); + /* Jumper T14 board */ firmware = new OpenTxFirmware(FIRMWAREID("t14"), Firmware::tr("Jumper T14"), BOARD_JUMPER_T14); addOpenTxFrskyOptions(firmware); diff --git a/companion/src/images/simulator/JumperT12max/bottom.png b/companion/src/images/simulator/JumperT12max/bottom.png new file mode 100644 index 0000000000..57a329bedd Binary files /dev/null and b/companion/src/images/simulator/JumperT12max/bottom.png differ diff --git a/companion/src/images/simulator/JumperT12max/exit.png b/companion/src/images/simulator/JumperT12max/exit.png new file mode 100644 index 0000000000..4e00002950 Binary files /dev/null and b/companion/src/images/simulator/JumperT12max/exit.png differ diff --git a/companion/src/images/simulator/JumperT12max/left.png b/companion/src/images/simulator/JumperT12max/left.png new file mode 100644 index 0000000000..ddfabd3928 Binary files /dev/null and b/companion/src/images/simulator/JumperT12max/left.png differ diff --git a/companion/src/images/simulator/JumperT12max/menu.png b/companion/src/images/simulator/JumperT12max/menu.png new file mode 100644 index 0000000000..975f8a64ed Binary files /dev/null and b/companion/src/images/simulator/JumperT12max/menu.png differ diff --git a/companion/src/images/simulator/JumperT12max/page.png b/companion/src/images/simulator/JumperT12max/page.png new file mode 100644 index 0000000000..2418246cca Binary files /dev/null and b/companion/src/images/simulator/JumperT12max/page.png differ diff --git a/companion/src/images/simulator/JumperT12max/right-ent.png b/companion/src/images/simulator/JumperT12max/right-ent.png new file mode 100644 index 0000000000..f342273e01 Binary files /dev/null and b/companion/src/images/simulator/JumperT12max/right-ent.png differ diff --git a/companion/src/images/simulator/JumperT12max/right.png b/companion/src/images/simulator/JumperT12max/right.png new file mode 100644 index 0000000000..25fd425e56 Binary files /dev/null and b/companion/src/images/simulator/JumperT12max/right.png differ diff --git a/companion/src/images/simulator/JumperT12max/top.png b/companion/src/images/simulator/JumperT12max/top.png new file mode 100644 index 0000000000..04e8490be4 Binary files /dev/null and b/companion/src/images/simulator/JumperT12max/top.png differ diff --git a/companion/src/simulation/CMakeLists.txt b/companion/src/simulation/CMakeLists.txt index 5a829e6525..3b7ddaacbb 100644 --- a/companion/src/simulation/CMakeLists.txt +++ b/companion/src/simulation/CMakeLists.txt @@ -35,6 +35,7 @@ set(${PROJECT_NAME}_SRCS simulateduiwidgetEL18.cpp simulateduiwidgetFatfishF16.cpp simulateduiwidgetJumperT12.cpp + simulateduiwidgetJumperT12max.cpp simulateduiwidgetJumperT14.cpp simulateduiwidgetJumperT15.cpp simulateduiwidgetJumperT16.cpp diff --git a/companion/src/simulation/simulateduiwidget.h b/companion/src/simulation/simulateduiwidget.h index 706a5f043f..fe35db331b 100644 --- a/companion/src/simulation/simulateduiwidget.h +++ b/companion/src/simulation/simulateduiwidget.h @@ -144,6 +144,7 @@ namespace Ui { class SimulatedUIWidgetJumperT12; class SimulatedUIWidgetJumperTLITE; class SimulatedUIWidgetJumperTPRO; + class SimulatedUIWidgetJumperT12max; class SimulatedUIWidgetJumperT14; class SimulatedUIWidgetJumperT15; class SimulatedUIWidgetJumperT16; @@ -357,6 +358,18 @@ class SimulatedUIWidgetJumperT16: public SimulatedUIWidget Ui::SimulatedUIWidgetJumperT16 * ui; }; +class SimulatedUIWidgetJumperT12max: public SimulatedUIWidget +{ + Q_OBJECT + +public: + explicit SimulatedUIWidgetJumperT12max(SimulatorInterface * simulator, QWidget * parent = nullptr); + virtual ~SimulatedUIWidgetJumperT12max(); + +private: + Ui::SimulatedUIWidgetJumperT12max * ui; +}; + class SimulatedUIWidgetJumperT14: public SimulatedUIWidget { Q_OBJECT diff --git a/companion/src/simulation/simulateduiwidgetJumperT12max.cpp b/companion/src/simulation/simulateduiwidgetJumperT12max.cpp new file mode 100644 index 0000000000..6587358281 --- /dev/null +++ b/companion/src/simulation/simulateduiwidgetJumperT12max.cpp @@ -0,0 +1,54 @@ +#include "simulateduiwidget.h" +#include "ui_simulateduiwidgetJumperT12max.h" + +// NOTE: RadioUiAction(NUMBER,...): NUMBER relates to enum EnumKeys in the specific board.h + +SimulatedUIWidgetJumperT12max::SimulatedUIWidgetJumperT12max(SimulatorInterface *simulator, QWidget * parent): + SimulatedUIWidget(simulator, parent), + ui(new Ui::SimulatedUIWidgetJumperT12max) +{ + RadioUiAction * act; + + ui->setupUi(this); + + act = new RadioUiAction(0, QList() << Qt::Key_PageUp << Qt::Key_Up, SIMU_STR_HLP_KEYS_GO_UP, SIMU_STR_HLP_ACT_MENU_ICN); + addRadioWidget(ui->leftbuttons->addArea(QRect(17, 45, 90, 30), "JumperT12max/menu.png", act)); + + act = new RadioUiAction(3, QList() << Qt::Key_PageDown << Qt::Key_Down, SIMU_STR_HLP_KEYS_GO_DN, SIMU_STR_HLP_ACT_PAGE); + addRadioWidget(ui->leftbuttons->addArea(QRect(17, 107, 90, 30), "JumperT12max/page.png", act)); + + act = new RadioUiAction(1, 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(17, 180, 90, 30), "JumperT12max/exit.png", act)); + + m_mouseMidClickAction = new RadioUiAction(2, QList() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_ACTIVATE, SIMU_STR_HLP_ACT_ROT_DN); + addRadioWidget(ui->rightbuttons->addArea(QRect(130, 65, 70, 130), "JumperT12max/right-ent.png", m_mouseMidClickAction)); + + //addRadioWidget(ui->leftbuttons->addArea(QRect(10, 65, 70, 50), "JumperT12max/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); +} + +SimulatedUIWidgetJumperT12max::~SimulatedUIWidgetJumperT12max() +{ + delete ui; +} diff --git a/companion/src/simulation/simulateduiwidgetJumperT12max.ui b/companion/src/simulation/simulateduiwidgetJumperT12max.ui new file mode 100644 index 0000000000..0e48057118 --- /dev/null +++ b/companion/src/simulation/simulateduiwidgetJumperT12max.ui @@ -0,0 +1,211 @@ + + + SimulatedUIWidgetJumperT12max + + + + 0 + 0 + 714 + 308 + + + + + 0 + 0 + + + + + 714 + 308 + + + + + 714 + 308 + + + + Jumper T12 MAX 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 + 229 + 308 + + + + + 0 + 0 + + + + + 229 + 308 + + + + + 229 + 308 + + + + background:url(:/images/simulator/JumperT12max/left.png); + + + + + + 229 + 90 + 256 + 128 + + + + + 0 + 0 + + + + + 256 + 128 + + + + + 256 + 128 + + + + background-color: rgb(215, 243, 255); + + + + + + 485 + 0 + 229 + 308 + + + + + 0 + 0 + + + + + 229 + 308 + + + + + 229 + 308 + + + + background:url(:/images/simulator/JumperT12max/right.png) + + + + + + 229 + 0 + 256 + 90 + + + + + 0 + 0 + + + + + 256 + 90 + + + + + 256 + 90 + + + + background:url(:/images/simulator/JumperT12max/top.png) + + + + + + 229 + 218 + 256 + 90 + + + + + 0 + 0 + + + + + 256 + 90 + + + + + 256 + 90 + + + + background:url(:/images/simulator/JumperT12max/bottom.png) + + + + + + LcdWidget + QWidget +
lcdwidget.h
+ 1 +
+ + ButtonsWidget + QWidget +
buttonswidget.h
+ 1 +
+
+ + + + +
diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp index c5b8f1b58b..a356296491 100644 --- a/companion/src/simulation/simulatorwidget.cpp +++ b/companion/src/simulation/simulatorwidget.cpp @@ -105,6 +105,9 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato case Board::BOARD_JUMPER_TPROV2: radioUiWidget = new SimulatedUIWidgetJumperTPRO(simulator, this); break; + case Board::BOARD_JUMPER_T12MAX: + radioUiWidget = new SimulatedUIWidgetJumperT12max(simulator, this); + break; case Board::BOARD_JUMPER_T14: radioUiWidget = new SimulatedUIWidgetJumperT14(simulator, this); break; diff --git a/fw.json b/fw.json index dcb5a8c8a2..b87910ea72 100644 --- a/fw.json +++ b/fw.json @@ -22,6 +22,7 @@ ["FrSky X-Lite S", "xlites-"], ["iFlight Commando 8", "commando8-"], ["Jumper T12", "t12-"], + ["Jumper T12 MAX", "t12max-"], ["Jumper T14", "t14-"], ["Jumper T15", "t15-"], ["Jumper T16", "t16-"], diff --git a/radio/src/hal/rotary_encoder.h b/radio/src/hal/rotary_encoder.h index 370d3cb40c..1b8f5bec84 100644 --- a/radio/src/hal/rotary_encoder.h +++ b/radio/src/hal/rotary_encoder.h @@ -27,7 +27,7 @@ #define ROTENC_MIDSPEED 5 #define ROTENC_HIGHSPEED 50 -#if defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_T15) +#if defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_T15) #define ROTARY_ENCODER_GRANULARITY 4 #else #define ROTARY_ENCODER_GRANULARITY 2 diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 5d6345a064..0fb1933202 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -156,6 +156,17 @@ elseif(PCB STREQUAL X7) add_definitions(-DRADIO_T14) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") + elseif (PCBREV STREQUAL T12MAX) + set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module") + set(INTERNAL_MODULE_SERIAL YES) + set(MODULE_SIZE_SML YES) + set(FLAVOUR t12max) + set(NAVIGATION_TYPE x7) + set(ROTARY_ENCODER YES) + set(CPU_TYPE_FULL STM32F407xG) + add_definitions(-DRADIO_T12MAX) + add_definitions(-DMANUFACTURER_JUMPER) + set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif(PCBREV STREQUAL T20) set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module") set(INTERNAL_MODULE_SERIAL YES) diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 652e8c89d0..c83734f235 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -338,13 +338,15 @@ void ledBlue(); #if defined(RADIO_MT12) #define LCD_BRIGHTNESS_DEFAULT 50 +#elif defined(RADIO_T12MAX) +#define LCD_BRIGHTNESS_DEFAULT 30 #endif #if defined(OLED_SCREEN) #define LCD_CONTRAST_DEFAULT 254 // full brightness #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) #define LCD_CONTRAST_DEFAULT 20 -#elif defined(RADIO_TPRO) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TPRO) || defined(RADIO_COMMANDO8) +#elif defined(RADIO_TPRO) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TPRO) || defined(RADIO_COMMANDO8) || defined(RADIO_T12MAX) #define LCD_CONTRAST_DEFAULT 25 #else #define LCD_CONTRAST_DEFAULT 15 diff --git a/radio/src/targets/taranis/bootloader/boot_menu.cpp b/radio/src/targets/taranis/bootloader/boot_menu.cpp index e2a7d0a7ce..f6c1b8896a 100644 --- a/radio/src/targets/taranis/bootloader/boot_menu.cpp +++ b/radio/src/targets/taranis/bootloader/boot_menu.cpp @@ -39,7 +39,11 @@ void bootloaderInitScreen() lcdSetContrast(true); backlightInit(); +#if defined(LCD_BRIGHTNESS_DEFAULT) + backlightEnable(LCD_BRIGHTNESS_DEFAULT); +#else backlightFullOn(); +#endif } static void bootloaderDrawMsg(unsigned int x, const char *str, uint8_t line, bool inverted) diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index cdbe2a6f15..b788e8af80 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -161,7 +161,7 @@ #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_12 // PD.12 #define KEYS_GPIO_REG_ENTER GPIOE #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_7 // PE.7 -#elif defined(RADIO_T14) +#elif defined(RADIO_T14) || defined(RADIO_T12MAX) #define KEYS_GPIO_REG_PAGEDN GPIOD #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 #define KEYS_GPIO_REG_MENU GPIOD @@ -282,7 +282,7 @@ #define USE_EXTI15_10_IRQ #define EXTI15_10_IRQ_Priority 5 #endif -#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_T14) +#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_T14) || defined(RADIO_T12MAX) #define ROTARY_ENCODER_NAVIGATION #define ROTARY_ENCODER_GPIO GPIOE #define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_9 // PE.9 @@ -419,7 +419,7 @@ #define TRIMS_GPIO_PIN_T5R LL_GPIO_PIN_15 // PE.15 #define TRIMS_GPIO_REG_T5L GPIOE #define TRIMS_GPIO_PIN_T5L LL_GPIO_PIN_14 // PE.14 -#elif defined(RADIO_T14) +#elif defined(RADIO_T14) || defined(RADIO_T12MAX) #define TRIMS_GPIO_REG_LHL GPIOE #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PE.03 #define TRIMS_GPIO_REG_LHR GPIOE @@ -544,7 +544,7 @@ #define HARDWARE_SWITCH_A #define SWITCHES_GPIO_REG_A GPIOC #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_13 // PC.13 -#elif defined(RADIO_T14) +#elif defined(RADIO_T14) || defined(RADIO_T12MAX) #define STORAGE_SWITCH_A #define HARDWARE_SWITCH_A #define SWITCHES_GPIO_REG_A GPIOC @@ -643,7 +643,7 @@ #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_15 // PE.15 #define SWITCHES_GPIO_REG_B_H GPIOE #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_7 // PE.07 -#elif defined(RADIO_T14) +#elif defined(RADIO_T14) || defined(RADIO_T12MAX) #define STORAGE_SWITCH_B #define HARDWARE_SWITCH_B #define SWITCHES_GPIO_REG_B GPIOE @@ -697,7 +697,7 @@ #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_0 // PE.00 #define SWITCHES_GPIO_REG_C_H GPIOD #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_11 // PD.11 -#elif defined(RADIO_T14) +#elif defined(RADIO_T14) || defined(RADIO_T12MAX) #define STORAGE_SWITCH_C #define HARDWARE_SWITCH_C #define SWITCHES_GPIO_REG_C_H GPIOE @@ -811,7 +811,7 @@ #define HARDWARE_SWITCH_D #define SWITCHES_GPIO_REG_D GPIOD #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_14 // PD.14 -#elif defined(RADIO_T14) +#elif defined(RADIO_T14) || defined(RADIO_T12MAX) #define STORAGE_SWITCH_D #define HARDWARE_SWITCH_D #define SWITCHES_GPIO_REG_D_L GPIOA @@ -912,7 +912,7 @@ #define HARDWARE_SWITCH_E #define SWITCHES_GPIO_REG_E GPIOG #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_10 // PG.10 -#elif defined(RADIO_T14) +#elif defined(RADIO_T14) || defined(RADIO_T12MAX) #define STORAGE_SWITCH_E #define HARDWARE_SWITCH_E #define SWITCHES_GPIO_REG_E GPIOE @@ -984,7 +984,7 @@ #define HARDWARE_SWITCH_F #define SWITCHES_GPIO_REG_F GPIOG #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_9 // PG.09 -#elif defined(RADIO_T14) +#elif defined(RADIO_T14) || defined(RADIO_T12MAX) #define STORAGE_SWITCH_F #define HARDWARE_SWITCH_F #define SWITCHES_GPIO_REG_F GPIOC @@ -1050,7 +1050,7 @@ #define HARDWARE_SWITCH_G #define SWITCHES_GPIO_REG_G GPIOD #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_15 // PD.15 -#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_T14) +#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_T14) || defined(RADIO_T12MAX) // no SWG #else #define STORAGE_SWITCH_G @@ -1077,7 +1077,7 @@ #define STORAGE_SWITCH_H // no SWH #elif defined(RADIO_TX12) || defined(RADIO_MT12) -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_T14) +#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_T14) || defined(RADIO_T12MAX) #define STORAGE_SWITCH_H #elif defined(RADIO_TPROV2) #define STORAGE_SWITCH_H @@ -1148,7 +1148,7 @@ #define STORAGE_SWITCH_I // no SWJ #define STORAGE_SWITCH_J -#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_T14) +#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_T14) || defined(RADIO_T12MAX) // No I/J #elif defined(RADIO_TPROV2) // SW1 @@ -1536,6 +1536,27 @@ #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC12_IN9 #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 330 +#elif defined(RADIO_T12MAX) + #define HARDWARE_POT1 + #define HARDWARE_POT2 + #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 + #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 + #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_3 // PA.03 + #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_2 // PA.02 + #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC1_IN1 + #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC1_IN0 + #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC1_IN3 + #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC1_IN2 + #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 + #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 + #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 + #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) + #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) + #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT + #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 + #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC12_IN9 + #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 + #define ADC_VREF_PREC2 300 #elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) #define HARDWARE_POT1 #define HARDWARE_POT2 @@ -1714,6 +1735,8 @@ #define ADC_DIRECTION {1,-1,1,-1, 1,1, 1, 1} #elif defined(RADIO_T14) #define ADC_DIRECTION {1, -1, 1, -1, 1, 1, 1} +#elif defined(RADIO_T12MAX) + #define ADC_DIRECTION {-1, 1, -1, 1, 1, 1, 1} #elif defined(RADIO_FAMILY_T20) #define ADC_DIRECTION {1,-1,1,-1, -1,1,-1,-1,-1,-1} #elif defined(RADIO_MT12) @@ -1790,7 +1813,7 @@ #define LED_GREEN_GPIO GPIO_PIN(GPIOE, 2) // PE.02 #define LED_RED_GPIO GPIO_PIN(GPIOE, 13) // PE.13 #define LED_BLUE_GPIO GPIO_PIN(GPIOA, 7) // PA.07 -#elif defined(RADIO_T14) +#elif defined(RADIO_T14) || defined(RADIO_T12MAX) #define STATUS_LEDS #define GPIO_LED_GPIO_ON gpio_set #define GPIO_LED_GPIO_OFF gpio_clear @@ -1938,12 +1961,12 @@ #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler #define INTMODULE_DMA_CHANNEL LL_DMA_CHANNEL_4 -#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T20V2) || defined(RADIO_T14) +#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T20V2) || defined(RADIO_T14) || defined(RADIO_T12MAX) #if defined(RADIO_T20V2) #define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOE, 4) // PE.04 #define INTMODULE_PWR_GPIO GPIO_PIN(GPIOC, 6) // PC.06 #else -#if defined(RADIO_T14) +#if defined(RADIO_T14) || defined(RADIO_T12MAX) #define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOE, 14) // PE.14 #else #define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOB, 1) // PB.01 @@ -2031,8 +2054,8 @@ #endif // External Module -#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_X9DP2019) || defined(PCBX7ACCESS) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T14) - #if defined(RADIO_X9DP2019) || defined(RADIO_X7ACCESS) || defined(RADIO_ZORRO)|| defined(RADIO_POCKET) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12)|| defined(RADIO_T14) +#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_X9DP2019) || defined(PCBX7ACCESS) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T14) || defined(RADIO_T12MAX) + #if defined(RADIO_X9DP2019) || defined(RADIO_X7ACCESS) || defined(RADIO_ZORRO)|| defined(RADIO_POCKET) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12)|| defined(RADIO_T14) || defined(RADIO_T12MAX) #define EXTMODULE_PWR_GPIO GPIO_PIN(GPIOD, 8) // PD.08 #elif defined(PCBX9LITE) #define EXTMODULE_PWR_GPIO GPIO_PIN(GPIOA, 8) // PA.08 @@ -2286,7 +2309,7 @@ #if defined(PCBX9LITE) || defined(PCBXLITE) || defined(RADIO_X9DP2019) || \ defined(PCBX7ACCESS) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || \ defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) ||\ - defined(RADIO_T14) + defined(RADIO_T14) || defined(RADIO_T12MAX) #define TRAINER_MODULE_CPPM_TIMER TIM3 #define TRAINER_MODULE_CPPM_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) #define TRAINER_MODULE_CPPM_GPIO EXTMODULE_RX_GPIO @@ -2376,7 +2399,7 @@ #endif // LCD driver -#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_FAMILY_T20) || defined(RADIO_MT12) +#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_FAMILY_T20) || defined(RADIO_MT12) || defined(RADIO_T12MAX) #define LCD_VERTICAL_INVERT #endif #if defined(RADIO_LR3PRO) || defined(RADIO_TPROV2) || defined(RADIO_FAMILY_T20) || defined(RADIO_T14) @@ -2504,7 +2527,7 @@ #endif // SD - SPI2 -#if defined(RADIO_FAMILY_T20) || defined(RADIO_T14) +#if defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_T12MAX) // Using chip, so no detect #else #define SD_PRESENT_GPIO GPIOD @@ -2565,7 +2588,7 @@ #endif // Haptic -#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2)|| defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T20V2) || defined(RADIO_T14) +#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2)|| defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T20V2) || defined(RADIO_T14) || defined(RADIO_T12MAX) #define HAPTIC_PWM #define HAPTIC_GPIO GPIO_PIN(GPIOB, 3) // PB.03 #define HAPTIC_GPIO_AF GPIO_AF1 diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp index 9f723599f3..06295e82af 100644 --- a/radio/src/targets/taranis/lcd_driver_spi.cpp +++ b/radio/src/targets/taranis/lcd_driver_spi.cpp @@ -36,7 +36,7 @@ #if defined(OLED_SCREEN) #define LCD_CONTRAST_OFFSET 0 -#elif defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_MT12) +#elif defined(RADIO_FAMILY_JUMPER_T12) || defined(MANUFACTURER_RADIOMASTER) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_T12MAX) #define LCD_CONTRAST_OFFSET -10 #else #define LCD_CONTRAST_OFFSET 160 diff --git a/radio/src/targets/taranis/usb_descriptor.h b/radio/src/targets/taranis/usb_descriptor.h index 60deaabf9b..d55e07910e 100644 --- a/radio/src/targets/taranis/usb_descriptor.h +++ b/radio/src/targets/taranis/usb_descriptor.h @@ -62,6 +62,10 @@ #define USB_NAME "Jumper TPro V2" #define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */ #define USB_PRODUCT 'T', '-', 'P', 'r', 'o', ' ', 'V', '2' /* 8 Bytes */ +#elif defined(RADIO_T12MAX) +#define USB_NAME "Jumper T12 MAX" + #define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */ + #define USB_PRODUCT 'T', '1', '2', ' ', 'M', 'A', 'X', ' ' /* 8 Bytes */ #elif defined(RADIO_T14) #define USB_NAME "Jumper T14" #define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */ diff --git a/radio/util/hw_defs/legacy_names.py b/radio/util/hw_defs/legacy_names.py index 1d52e7ff9c..32712cf4f7 100644 --- a/radio/util/hw_defs/legacy_names.py +++ b/radio/util/hw_defs/legacy_names.py @@ -379,7 +379,7 @@ LEGACY_NAMES = [ } }, { - "targets": {"t14"}, + "targets": {"t14", "t12max"}, "inputs": { "LH": { "yaml": "Rud" diff --git a/radio/util/hw_defs/pot_config.py b/radio/util/hw_defs/pot_config.py index 901183e0b9..f25bfb5b52 100644 --- a/radio/util/hw_defs/pot_config.py +++ b/radio/util/hw_defs/pot_config.py @@ -66,6 +66,10 @@ POT_CONFIG = { "P1": {"default": "POT"}, "P2": {"default": "POT"} }, + "t12max": { + "P1": {"default": "POT_CENTER"}, + "P2": {"default": "POT_CENTER"} + }, "t14": { "P1": {"default": "POT_CENTER"}, "P2": {"default": "POT_CENTER"} diff --git a/radio/util/hw_defs/switch_config.py b/radio/util/hw_defs/switch_config.py index 8a3ab965f6..f5635bcf7e 100644 --- a/radio/util/hw_defs/switch_config.py +++ b/radio/util/hw_defs/switch_config.py @@ -95,6 +95,16 @@ SWITCH_CONFIG = { "SD": {"default": "3POS", "display": [1, 1]}, "SH": {"default": "2POS", "display": [1, 2]} }, + "t12max": { + # left side + "SA": {"default": "2POS", "display": [0, 0]}, + "SC": {"default": "3POS", "display": [0, 1]}, + "SE": {"default": "2POS", "display": [0, 2]}, + # right side + "SB": {"default": "2POS", "display": [1, 0]}, + "SD": {"default": "3POS", "display": [1, 1]}, + "SF": {"default": "2POS", "display": [1, 2]} + }, "t14": { # left side "SA": {"default": "2POS", "display": [0, 0]}, diff --git a/tools/build-companion.sh b/tools/build-companion.sh index cb8520973e..b0088f778a 100755 --- a/tools/build-companion.sh +++ b/tools/build-companion.sh @@ -65,7 +65,7 @@ cd build declare -a simulator_plugins=(x9lite x9lites x7 x7access - t8 t12 tx12 tx12mk2 + t8 t12 t12max tx12 tx12mk2 zorro commando8 boxer pocket tlite tpro tprov2 lr3pro t14 x9d x9dp x9dp2019 x9e @@ -131,6 +131,9 @@ do t20) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20" ;; + t12max) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T12MAX" + ;; t14) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T14" ;; diff --git a/tools/build-gh.sh b/tools/build-gh.sh index 15cd0d9c20..7905e3e3e7 100755 --- a/tools/build-gh.sh +++ b/tools/build-gh.sh @@ -143,6 +143,9 @@ do t20) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20" ;; + t12max) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T12MAX" + ;; t14) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T14" ;; diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index 6335703c59..6af91a6d52 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -109,6 +109,9 @@ do t20) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20" ;; + t12max) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T12MAX" + ;; t14) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T14" ;; diff --git a/tools/generate-hw-defs.sh b/tools/generate-hw-defs.sh index 98aec4a60b..66decd16d7 100755 --- a/tools/generate-hw-defs.sh +++ b/tools/generate-hw-defs.sh @@ -6,7 +6,7 @@ set -e : "${SRCDIR:=$(dirname "$(pwd)/$0")/..}" -: ${FLAVOR:="nv14;t12;t15;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;t20;t20v2;t14;lr3pro;mt12;tx12;tx12mk2;boxer;tx16s;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites"} +: ${FLAVOR:="nv14;t12;t12max;t15;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;t20;t20v2;t14;lr3pro;mt12;tx12;tx12mk2;boxer;tx16s;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites"} : ${COMMON_OPTIONS:="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_RULE_MESSAGES=OFF -Wno-dev -DCMAKE_MESSAGE_LOG_LEVEL=WARNING"} # wipe build directory clean @@ -72,6 +72,9 @@ do t20) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20" ;; + t12max) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T12MAX" + ;; t14) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T14" ;; diff --git a/tools/generate-yaml.sh b/tools/generate-yaml.sh index 2f9857c5f3..0bb695cba6 100755 --- a/tools/generate-yaml.sh +++ b/tools/generate-yaml.sh @@ -77,6 +77,9 @@ do t20v2) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T20V2" ;; + t12max) + BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T12MAX" + ;; t14) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=T14" ;; diff --git a/tools/msys2_fetch_and_build_all.sh b/tools/msys2_fetch_and_build_all.sh index 6c26d90254..44aee3fc16 100644 --- a/tools/msys2_fetch_and_build_all.sh +++ b/tools/msys2_fetch_and_build_all.sh @@ -9,7 +9,7 @@ # ----------------------------------------------------------------------------- export BRANCH_NAME="main" # main|2.9|... -export RADIO_TYPE="tx16s" # tx16s|x10|x10express|x12s|x9d|x9dp|x9lite|x9lites|x7|x7access|t12|tx12|tx12mk2|mt12|boxer|t8|zorro|pocket|tlite|tpro|t20|t20v2|t14|lr3pro|xlite|xlites|x9dp2019|x9e|x9e-hall|t15|t16|t18|nv14|commando8 +export RADIO_TYPE="tx16s" # tx16s|x10|x10express|x12s|x9d|x9dp|x9lite|x9lites|x7|x7access|t12|t12max|tx12|tx12mk2|mt12|boxer|t8|zorro|pocket|tlite|tpro|t20|t20v2|t14|lr3pro|xlite|xlites|x9dp2019|x9e|x9e-hall|t15|t16|t18|nv14|commando8 export BUILD_OPTIONS="-DDEFAULT_MODE=2 -DGVARS=YES" @@ -63,6 +63,9 @@ case $RADIO_TYPE in t20v2) BUILD_OPTIONS+=" -DPCB=X7 -DPCBREV=T20V2" ;; + t12max) + BUILD_OPTIONS+=" -DPCB=X7 -DPCBREV=T12MAX" + ;; t14) BUILD_OPTIONS+=" -DPCB=X7 -DPCBREV=T14" ;;