1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-15 12:25:11 +03:00

feat: Jumper T12Max support (#5273)

This commit is contained in:
3djc 2024-07-13 07:24:46 +02:00 committed by GitHub
parent 2407212fc5
commit 195f03929a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
36 changed files with 419 additions and 30 deletions

View file

@ -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

View file

@ -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

View file

@ -261,6 +261,14 @@
<file>images/simulator/Fatfish/F16/right.png</file>
<file>images/simulator/Fatfish/F16/top.png</file>
<file>images/simulator/Fatfish/F16/bottom.png</file>
<file>images/simulator/JumperT12max/bottom.png</file>
<file>images/simulator/JumperT12max/left.png</file>
<file>images/simulator/JumperT12max/right.png</file>
<file>images/simulator/JumperT12max/right-ent.png</file>
<file>images/simulator/JumperT12max/top.png</file>
<file>images/simulator/JumperT12max/exit.png</file>
<file>images/simulator/JumperT12max/menu.png</file>
<file>images/simulator/JumperT12max/page.png</file>
<file>images/simulator/JumperT14/bottom.png</file>
<file>images/simulator/JumperT14/left.png</file>
<file>images/simulator/JumperT14/right.png</file>

View file

@ -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:

View file

@ -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 ||

View file

@ -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);

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -35,6 +35,7 @@ set(${PROJECT_NAME}_SRCS
simulateduiwidgetEL18.cpp
simulateduiwidgetFatfishF16.cpp
simulateduiwidgetJumperT12.cpp
simulateduiwidgetJumperT12max.cpp
simulateduiwidgetJumperT14.cpp
simulateduiwidgetJumperT15.cpp
simulateduiwidgetJumperT16.cpp

View file

@ -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

View file

@ -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<int>() << 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<int>() << 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<int>() << 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<int>() << 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;
}

View file

@ -0,0 +1,211 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SimulatedUIWidgetJumperT12max</class>
<widget class="QWidget" name="SimulatedUIWidgetJumperT12max">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>714</width>
<height>308</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>714</width>
<height>308</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>714</width>
<height>308</height>
</size>
</property>
<property name="windowTitle">
<string notr="true">Jumper T12 MAX Simulator</string>
</property>
<property name="styleSheet">
<string notr="true">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));</string>
</property>
<widget class="ButtonsWidget" name="leftbuttons" native="true">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>229</width>
<height>308</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>229</width>
<height>308</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>229</width>
<height>308</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperT12max/left.png);</string>
</property>
</widget>
<widget class="LcdWidget" name="lcd" native="true">
<property name="geometry">
<rect>
<x>229</x>
<y>90</y>
<width>256</width>
<height>128</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>256</width>
<height>128</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>256</width>
<height>128</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(215, 243, 255);</string>
</property>
</widget>
<widget class="ButtonsWidget" name="rightbuttons" native="true">
<property name="geometry">
<rect>
<x>485</x>
<y>0</y>
<width>229</width>
<height>308</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>229</width>
<height>308</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>229</width>
<height>308</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperT12max/right.png)</string>
</property>
</widget>
<widget class="QWidget" name="top" native="true">
<property name="geometry">
<rect>
<x>229</x>
<y>0</y>
<width>256</width>
<height>90</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>256</width>
<height>90</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>256</width>
<height>90</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperT12max/top.png)</string>
</property>
</widget>
<widget class="QWidget" name="bottom" native="true">
<property name="geometry">
<rect>
<x>229</x>
<y>218</y>
<width>256</width>
<height>90</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>256</width>
<height>90</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>256</width>
<height>90</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperT12max/bottom.png)</string>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>LcdWidget</class>
<extends>QWidget</extends>
<header>lcdwidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>ButtonsWidget</class>
<extends>QWidget</extends>
<header>buttonswidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../companion.qrc"/>
</resources>
<connections/>
</ui>

View file

@ -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;

View file

@ -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-"],

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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 */

View file

@ -379,7 +379,7 @@ LEGACY_NAMES = [
}
},
{
"targets": {"t14"},
"targets": {"t14", "t12max"},
"inputs": {
"LH": {
"yaml": "Rud"

View file

@ -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"}

View file

@ -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]},

View file

@ -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"
;;

View file

@ -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"
;;

View file

@ -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"
;;

View file

@ -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"
;;

View file

@ -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"
;;

View file

@ -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"
;;