diff --git a/.travis.yml b/.travis.yml
index 332a2a874..6ddb599b5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -44,7 +44,7 @@ before_install:
- sudo ln -s /opt/gcc-arm-none-eabi/bin/arm-none-eabi-size /usr/bin/arm-none-eabi-size
- sudo apt-get install --yes --force-yes -qq qt${QT_BASE}base qt${QT_BASE}multimedia qt${QT_BASE}svg qt${QT_BASE}tools; source /opt/qt${QT_BASE}/bin/qt${QT_BASE}-env.sh
- sudo ln -sf /usr/bin/python3 /usr/bin/python
- - python3 -m pip install --upgrade pip
+ - python3 -m pip install pip==20.3.3
- sudo apt-get install python3-setuptools
- python3 -m pip install pillow clang
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 74e6ccca0..8d23900bc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,7 +6,7 @@ set(VERSION_REVISION "12")
set(VERSION_SUFFIX $ENV{OPENTX_VERSION_SUFFIX})
set(VERSION_FAMILY ${VERSION_MAJOR}.${VERSION_MINOR})
set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}${VERSION_SUFFIX})
-set(SDCARD_REVISION "0035")
+set(SDCARD_REVISION "0036")
set(SDCARD_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}V${SDCARD_REVISION})
cmake_minimum_required(VERSION 2.8)
diff --git a/CREDITS.txt b/CREDITS.txt
index 1666c5fce..5e7672e1f 100644
--- a/CREDITS.txt
+++ b/CREDITS.txt
@@ -2105,3 +2105,15 @@ David Belletete
Karl-Heinz Behn
Lena Hjort
Jan Langhorst
+Alberto Scotti
+John Rock
+Adam Kouse
+Ricardo Martins
+Noel Irwin
+Christoph Rausch
+Anthony Hrabusicky
+Sergio Tondini
+Aldo Visentin
+Greg Wilson
+Mark Sutton
+Lukas Kana
diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt
index 3150a86ca..3853466d9 100644
--- a/companion/src/CMakeLists.txt
+++ b/companion/src/CMakeLists.txt
@@ -343,6 +343,8 @@ if(PCB STREQUAL X7 AND PCBREV STREQUAL ACCESS)
set(FLAVOUR x7access)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T12)
set(FLAVOUR t12)
+elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TLITE)
+ set(FLAVOUR tlite)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TX12)
set(FLAVOUR tx12)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL T8)
diff --git a/companion/src/companion.qrc b/companion/src/companion.qrc
index ca17c812c..c76418135 100644
--- a/companion/src/companion.qrc
+++ b/companion/src/companion.qrc
@@ -179,6 +179,16 @@
images/simulator/JumperT12/JumperT12-x.png
images/simulator/JumperT12/JumperT12-center.png
images/simulator/JumperT12/JumperT12-top.png
+ images/simulator/JumperTLITE/bottom.png
+ images/simulator/JumperTLITE/bottom_right.png
+ images/simulator/JumperTLITE/bottom_left.png
+ images/simulator/JumperTLITE/left.png
+ images/simulator/JumperTLITE/left_top.png
+ images/simulator/JumperTLITE/left_bottom.png
+ images/simulator/JumperTLITE/right.png
+ images/simulator/JumperTLITE/right_top.png
+ images/simulator/JumperTLITE/right_bottom.png
+ images/simulator/JumperTLITE/top.png
images/simulator/TX12/left.png
images/simulator/TX12/left-pageup.png
images/simulator/TX12/left-pagedn.png
diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp
index d6c010814..cfeabc918 100644
--- a/companion/src/firmwares/boards.cpp
+++ b/companion/src/firmwares/boards.cpp
@@ -79,6 +79,8 @@ uint32_t Boards::getFourCC(Type board)
return 0x3278746F;
case BOARD_JUMPER_T12:
return 0x3D78746F;
+ case BOARD_JUMPER_TLITE:
+ return 0x4278746F;
case BOARD_JUMPER_T16:
return 0x3F78746F;
case BOARD_JUMPER_T18:
@@ -115,6 +117,7 @@ int Boards::getEEpromSize(Board::Type board)
case BOARD_TARANIS_X9DP_2019:
case BOARD_TARANIS_X9E:
case BOARD_JUMPER_T12:
+ case BOARD_JUMPER_TLITE:
case BOARD_RADIOMASTER_TX12:
case BOARD_RADIOMASTER_T8:
return EESIZE_TARANIS;
@@ -151,6 +154,7 @@ int Boards::getFlashSize(Type board)
case BOARD_TARANIS_X9DP_2019:
case BOARD_TARANIS_X9E:
case BOARD_JUMPER_T12:
+ case BOARD_JUMPER_TLITE:
case BOARD_RADIOMASTER_TX12:
case BOARD_RADIOMASTER_T8:
return FSIZE_TARANIS;
@@ -185,7 +189,7 @@ SwitchInfo Boards::getSwitchInfo(Board::Type board, int index)
if (index < DIM(switches))
return switches[index];
}
- else if (IS_TARANIS_XLITE(board)) {
+ else if (IS_TARANIS_XLITE(board) || IS_JUMPER_TLITE(board)) {
const Board::SwitchInfo switches[] = {
{SWITCH_3POS, "SA"},
{SWITCH_3POS, "SB"},
@@ -324,6 +328,8 @@ int Boards::getCapability(Board::Type board, Board::Capability capability)
case Pots:
if (IS_TARANIS_X9LITE(board))
return 1;
+ else if (IS_JUMPER_TLITE(board))
+ return 0;
else if (IS_TARANIS_SMALL(board))
return 2;
else if (IS_TARANIS_X9E(board))
@@ -381,6 +387,8 @@ int Boards::getCapability(Board::Type board, Board::Capability capability)
return 7;
else if (board == BOARD_TARANIS_X7)
return 8;
+ else if (board == BOARD_JUMPER_TLITE)
+ return 4;
else if (IS_FAMILY_T12(board))
return 8;
else if (IS_TARANIS_XLITE(board))
@@ -397,9 +405,11 @@ int Boards::getCapability(Board::Type board, Board::Capability capability)
case FactoryInstalledSwitches:
if (IS_TARANIS_X9E(board))
return 8;
- if (IS_FAMILY_T12(board))
+ else if (IS_JUMPER_TLITE(board))
+ return 4;
+ else if (IS_FAMILY_T12(board))
return 6;
- if (IS_HORUS_X12S(board))
+ else if (IS_HORUS_X12S(board))
return 8;
else
return getCapability(board, Switches);
@@ -544,8 +554,6 @@ QString Boards::getBoardName(Board::Type board)
return "Taranis X7/X7S";
case BOARD_TARANIS_X7_ACCESS:
return "Taranis X7/X7S Access";
- case BOARD_JUMPER_T12:
- return "Jumper T12";
case BOARD_TARANIS_XLITE:
return "Taranis X-Lite";
case BOARD_TARANIS_XLITES:
@@ -574,6 +582,10 @@ QString Boards::getBoardName(Board::Type board)
return "Horus X10/X10S";
case BOARD_X10_EXPRESS:
return "Horus X10/X10S Express";
+ case BOARD_JUMPER_T12:
+ return "Jumper T12";
+ case BOARD_JUMPER_TLITE:
+ return "Jumper T-Lite";
case BOARD_JUMPER_T16:
return "Jumper T16";
case BOARD_JUMPER_T18:
diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h
index fe00e77dd..e55aeae37 100644
--- a/companion/src/firmwares/boards.h
+++ b/companion/src/firmwares/boards.h
@@ -54,10 +54,11 @@ namespace Board {
BOARD_JUMPER_T18,
BOARD_RADIOMASTER_TX12,
BOARD_RADIOMASTER_T8,
+ BOARD_JUMPER_TLITE,
+ BOARD_TYPE_COUNT,
+ BOARD_TYPE_MAX = BOARD_TYPE_COUNT - 1
};
- constexpr int BOARD_TYPE_MAX = BOARD_RADIOMASTER_T8;
-
enum PotType
{
POT_NONE,
@@ -205,6 +206,11 @@ inline bool IS_JUMPER_T12(Board::Type board)
return board == Board::BOARD_JUMPER_T12;
}
+inline bool IS_JUMPER_TLITE(Board::Type board)
+{
+ return board == Board::BOARD_JUMPER_TLITE;
+}
+
inline bool IS_JUMPER_T16(Board::Type board)
{
return board == Board::BOARD_JUMPER_T16;
@@ -237,7 +243,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_RADIOMASTER_TX12 || board == Board::BOARD_RADIOMASTER_T8;
+ return board == Board::BOARD_JUMPER_T12 || board == Board::BOARD_RADIOMASTER_TX12 || board == Board::BOARD_RADIOMASTER_T8 || board == Board::BOARD_JUMPER_TLITE;
}
inline bool IS_TARANIS_XLITE(Board::Type board)
diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp
index 005900c93..f9df851b2 100644
--- a/companion/src/firmwares/generalsettings.cpp
+++ b/companion/src/firmwares/generalsettings.cpp
@@ -94,6 +94,12 @@ GeneralSettings::GeneralSettings()
vBatMin = -23; // 6.7V
vBatMax = -37; // 8.3V
}
+ else if (IS_JUMPER_TLITE(board)) {
+ // 1S Li-Ion
+ vBatWarn = 32;
+ vBatMin = -60; //3V
+ vBatMax = -78; //4.2V
+ }
else if (IS_TARANIS(board)) {
// NI-MH 7.2V, X9D, X9D+ and X7
vBatWarn = 65;
@@ -239,6 +245,10 @@ void GeneralSettings::setDefaultControlTypes(Board::Type board)
switchConfig[i] = Boards::getSwitchInfo(board, i).config;
}
+ // TLite does not have pots or sliders
+ if (IS_JUMPER_TLITE(board))
+ return;
+
// TODO: move to Boards, like with switches
if (IS_FAMILY_HORUS_OR_T16(board)) {
potConfig[0] = Board::POT_WITH_DETENT;
diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp
index 264a3ad6a..111e3c391 100644
--- a/companion/src/firmwares/opentx/opentxeeprom.cpp
+++ b/companion/src/firmwares/opentx/opentxeeprom.cpp
@@ -76,6 +76,8 @@ inline int MAX_POTS(Board::Type board, int version)
{
if (version <= 218 && IS_FAMILY_HORUS_OR_T16(board))
return 3;
+ if (IS_FAMILY_T12(board))
+ return 2;
return Boards::getCapability(board, Board::Pots);
}
@@ -85,6 +87,8 @@ inline int MAX_POTS_STORAGE(Board::Type board, int version)
return 3;
if (version >= 219 && IS_FAMILY_HORUS_OR_T16(board))
return 5;
+ if (IS_FAMILY_T12(board))
+ return 2;
return Boards::getCapability(board, Board::Pots);
}
@@ -92,6 +96,8 @@ inline int MAX_POTS_SOURCES(Board::Type board, int version)
{
if (version <= 218 && IS_FAMILY_HORUS_OR_T16(board))
return 5;
+ if (IS_FAMILY_T12(board))
+ return 2;
return Boards::getCapability(board, Board::Pots);
}
diff --git a/companion/src/firmwares/opentx/opentxeeprom.h b/companion/src/firmwares/opentx/opentxeeprom.h
index fdb5247a5..c3395693d 100644
--- a/companion/src/firmwares/opentx/opentxeeprom.h
+++ b/companion/src/firmwares/opentx/opentxeeprom.h
@@ -37,6 +37,7 @@
#define TARANIS_X9LITES_VARIANT 0x0801
#define JUMPER_T12_VARIANT 0x4001
#define RADIOMASTER_TX12_VARIANT 0x4002
+#define JUMPER_TLITE_VARIANT 0x4003
#define RADIOMASTER_T8_VARIANT 0x4004
class OpenTxGeneralData: public TransformedField {
diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp
index f0d50338e..a9b3f69e9 100644
--- a/companion/src/firmwares/opentx/opentxinterface.cpp
+++ b/companion/src/firmwares/opentx/opentxinterface.cpp
@@ -60,6 +60,8 @@ const char * OpenTxEepromInterface::getName()
switch (board) {
case BOARD_JUMPER_T12:
return "OpenTX for Jumper T12";
+ case BOARD_JUMPER_TLITE:
+ return "OpenTX for Jumper T-Lite";
case BOARD_JUMPER_T16:
return "OpenTX for Jumper T16";
case BOARD_JUMPER_T18:
@@ -338,6 +340,9 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u
else if (IS_JUMPER_T12(board)) {
variant |= JUMPER_T12_VARIANT;
}
+ else if (IS_JUMPER_TLITE(board)) {
+ variant |= JUMPER_TLITE_VARIANT;
+ }
else if (IS_RADIOMASTER_TX12(board)) {
variant |= RADIOMASTER_TX12_VARIANT;
}
@@ -688,6 +693,8 @@ int OpenTxFirmware::getCapability(::Capability capability)
return TARANIS_XLITE_VARIANT;
else if (IS_JUMPER_T12(board))
return JUMPER_T12_VARIANT;
+ else if (IS_JUMPER_TLITE(board))
+ return JUMPER_TLITE_VARIANT;
else if (IS_RADIOMASTER_TX12(board))
return RADIOMASTER_TX12_VARIANT;
else if (IS_RADIOMASTER_T8(board))
@@ -753,7 +760,7 @@ bool OpenTxFirmware::isAvailable(PulsesProtocol proto, int port)
case PULSES_ACCST_ISRM_D16:
return IS_ACCESS_RADIO(board, id);
case PULSES_MULTIMODULE:
- return id.contains("internalmulti") || IS_RADIOMASTER_TX16S(board) || IS_JUMPER_T18(board);
+ return id.contains("internalmulti") || IS_RADIOMASTER_TX16S(board) || IS_JUMPER_T18(board) || IS_RADIOMASTER_TX12(board) || IS_JUMPER_TLITE(board);
default:
return false;
}
@@ -785,7 +792,7 @@ bool OpenTxFirmware::isAvailable(PulsesProtocol proto, int port)
case PULSES_XJT_LITE_X16:
case PULSES_XJT_LITE_D8:
case PULSES_XJT_LITE_LR12:
- return (IS_TARANIS_XLITE(board) || IS_TARANIS_X9LITE(board));
+ return (IS_TARANIS_XLITE(board) || IS_TARANIS_X9LITE(board) || IS_JUMPER_TLITE(board));
default:
return false;
}
@@ -956,6 +963,11 @@ bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int vari
variantError = true;
}
}
+ else if (IS_JUMPER_TLITE(board)) {
+ if (variant != JUMPER_TLITE_VARIANT) {
+ variantError = true;
+ }
+ }
else if (IS_RADIOMASTER_TX12(board)) {
if (variant != RADIOMASTER_TX12_VARIANT) {
variantError = true;
@@ -1287,6 +1299,16 @@ void registerOpenTxFirmwares()
registerOpenTxFirmware(firmware);
addOpenTxRfOptions(firmware, FLEX);
+ /* Jumper T-Lite board */
+ firmware = new OpenTxFirmware("opentx-tlite", QCoreApplication::translate("Firmware", "Jumper T-Lite"), BOARD_JUMPER_TLITE);
+ addOpenTxCommonOptions(firmware);
+ firmware->addOption("noheli", Firmware::tr("Disable HELI menu and cyclic mix support"));
+ firmware->addOption("nogvars", Firmware::tr("Disable Global variables"));
+ firmware->addOption("lua", Firmware::tr("Enable Lua custom scripts screen"));
+ addOpenTxFontOptions(firmware);
+ registerOpenTxFirmware(firmware);
+ addOpenTxRfOptions(firmware, FLEX + AFHDS3);
+
/* Jumper T16 board */
firmware = new OpenTxFirmware("opentx-t16", Firmware::tr("Jumper T16 / T16+ / T16 Pro"), BOARD_JUMPER_T16);
addOpenTxFrskyOptions(firmware);
diff --git a/companion/src/images/simulator/JumperTLITE/bottom.png b/companion/src/images/simulator/JumperTLITE/bottom.png
new file mode 100644
index 000000000..d7e3f42fc
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/bottom.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/bottom_left.png b/companion/src/images/simulator/JumperTLITE/bottom_left.png
new file mode 100644
index 000000000..e6332207c
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/bottom_left.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/bottom_right.png b/companion/src/images/simulator/JumperTLITE/bottom_right.png
new file mode 100644
index 000000000..ee5912547
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/bottom_right.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/center_LCD.png b/companion/src/images/simulator/JumperTLITE/center_LCD.png
new file mode 100644
index 000000000..f3249de16
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/center_LCD.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/left.png b/companion/src/images/simulator/JumperTLITE/left.png
new file mode 100644
index 000000000..eb54a3967
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/left.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/left_bottom.png b/companion/src/images/simulator/JumperTLITE/left_bottom.png
new file mode 100644
index 000000000..60e4d30a7
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/left_bottom.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/left_top.png b/companion/src/images/simulator/JumperTLITE/left_top.png
new file mode 100644
index 000000000..5ded766e0
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/left_top.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/right.png b/companion/src/images/simulator/JumperTLITE/right.png
new file mode 100644
index 000000000..6c455081f
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/right.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/right_bottom.png b/companion/src/images/simulator/JumperTLITE/right_bottom.png
new file mode 100644
index 000000000..55c1e5f5f
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/right_bottom.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/right_top.png b/companion/src/images/simulator/JumperTLITE/right_top.png
new file mode 100644
index 000000000..6e83d354e
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/right_top.png differ
diff --git a/companion/src/images/simulator/JumperTLITE/top.png b/companion/src/images/simulator/JumperTLITE/top.png
new file mode 100644
index 000000000..d90d836d8
Binary files /dev/null and b/companion/src/images/simulator/JumperTLITE/top.png differ
diff --git a/companion/src/simulation/CMakeLists.txt b/companion/src/simulation/CMakeLists.txt
index c2707a5ca..d3c39d4fe 100644
--- a/companion/src/simulation/CMakeLists.txt
+++ b/companion/src/simulation/CMakeLists.txt
@@ -13,6 +13,7 @@ set(simulation_SRCS
simulateduiwidgetX10.cpp
simulateduiwidgetX12.cpp
simulateduiwidgetJumperT12.cpp
+ simulateduiwidgetJumperTLITE.cpp
simulateduiwidgetJumperT16.cpp
simulateduiwidgetJumperT18.cpp
simulateduiwidgetTX12.cpp
@@ -41,6 +42,7 @@ set(simulation_UIS
simulateduiwidgetX10.ui
simulateduiwidgetX12.ui
simulateduiwidgetJumperT12.ui
+ simulateduiwidgetJumperTLITE.ui
simulateduiwidgetJumperT16.ui
simulateduiwidgetJumperT18.ui
simulateduiwidgetTX12.ui
diff --git a/companion/src/simulation/simulateduiwidget.h b/companion/src/simulation/simulateduiwidget.h
index af965684f..f9d92ecd7 100644
--- a/companion/src/simulation/simulateduiwidget.h
+++ b/companion/src/simulation/simulateduiwidget.h
@@ -112,6 +112,7 @@ namespace Ui {
class SimulatedUIWidgetX10;
class SimulatedUIWidgetX12;
class SimulatedUIWidgetJumperT12;
+ class SimulatedUIWidgetJumperTLITE;
class SimulatedUIWidgetJumperT16;
class SimulatedUIWidgetJumperT18;
class SimulatedUIWidgetTX16S;
@@ -243,6 +244,18 @@ class SimulatedUIWidgetJumperT12: public SimulatedUIWidget
Ui::SimulatedUIWidgetJumperT12 * ui;
};
+class SimulatedUIWidgetJumperTLITE: public SimulatedUIWidget
+{
+ Q_OBJECT
+
+ public:
+ explicit SimulatedUIWidgetJumperTLITE(SimulatorInterface * simulator, QWidget * parent = NULL);
+ virtual ~SimulatedUIWidgetJumperTLITE();
+
+ private:
+ Ui::SimulatedUIWidgetJumperTLITE * ui;
+};
+
class SimulatedUIWidgetJumperT16: public SimulatedUIWidget
{
Q_OBJECT
diff --git a/companion/src/simulation/simulateduiwidgetJumperTLITE.cpp b/companion/src/simulation/simulateduiwidgetJumperTLITE.cpp
new file mode 100644
index 000000000..2d5540837
--- /dev/null
+++ b/companion/src/simulation/simulateduiwidgetJumperTLITE.cpp
@@ -0,0 +1,60 @@
+#include "simulateduiwidget.h"
+#include "ui_simulateduiwidgetJumperTLITE.h"
+
+// NOTE: RadioUiAction(NUMBER,...): NUMBER relates to enum EnumKeys in the specific board.h
+
+SimulatedUIWidgetJumperTLITE::SimulatedUIWidgetJumperTLITE(SimulatorInterface *simulator, QWidget * parent):
+ SimulatedUIWidget(simulator, parent),
+ ui(new Ui::SimulatedUIWidgetJumperTLITE)
+{
+ RadioUiAction * act;
+
+ 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(40, 15, 70, 50), "JumperTLITE/right_top.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(47, 65, 70, 50), "JumperTLITE/right_bottom.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->bottombuttons->addArea(QRect(150, 73, 80, 30), "JumperTLITE/bottom_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->bottombuttons->addArea(QRect(24, 73, 80, 30), "JumperTLITE/bottom_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(5, 15, 70, 50), "JumperTLITE/left_top.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(10, 65, 70, 50), "JumperTLITE/left_bottom.png", act));
+
+ //addRadioWidget(ui->leftbuttons->addArea(QRect(10, 65, 70, 50), "JumperTLITE/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);
+}
+
+SimulatedUIWidgetJumperTLITE::~SimulatedUIWidgetJumperTLITE()
+{
+ delete ui;
+}
diff --git a/companion/src/simulation/simulateduiwidgetJumperTLITE.ui b/companion/src/simulation/simulateduiwidgetJumperTLITE.ui
new file mode 100644
index 000000000..407b3954d
--- /dev/null
+++ b/companion/src/simulation/simulateduiwidgetJumperTLITE.ui
@@ -0,0 +1,258 @@
+
+
+ SimulatedUIWidgetJumperTLITE
+
+
+
+ 0
+ 0
+ 501
+ 310
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 501
+ 310
+
+
+
+
+ 501
+ 310
+
+
+
+ Jumper T-Lite 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
+
+
+
+
+ 122
+ 287
+
+
+
+
+ 122
+ 287
+
+
+
+ background:url(:/images/simulator/JumperTLITE/left.png);
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 800
+ 155
+
+
+
+
+ 800
+ 155
+
+
+
+ background-color: rgb(215, 243, 255);
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 122
+ 287
+
+
+
+
+ 122
+ 287
+
+
+
+ background:url(:/images/simulator/JumperTLITE/right.png)
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 258
+ 26
+
+
+
+
+ 258
+ 26
+
+
+
+ background:url(:/images/simulator/JumperTLITE/top.png)
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 258
+ 106
+
+
+
+
+ 258
+ 106
+
+
+
+ background:url(:/images/simulator/JumperTLITE/bottom.png)
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 10
+
+
+
+
+ 16777215
+ 12
+
+
+
+
+ 0
+ 12
+
+
+
+ background-color: rgb(255, 255, 255);
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 10
+
+
+
+
+ 16777215
+ 10
+
+
+
+ background-color: rgb(247, 245, 245);
+
+
+
+
+
+
+
+
+
+
+ LcdWidget
+ QWidget
+
+ 1
+
+
+ ButtonsWidget
+ QWidget
+
+ 1
+
+
+
+
+
diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp
index 0b2b6b853..b4160a579 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_JUMPER_T12:
radioUiWidget = new SimulatedUIWidgetJumperT12(simulator, this);
break;
+ case Board::BOARD_JUMPER_TLITE:
+ radioUiWidget = new SimulatedUIWidgetJumperTLITE(simulator, this);
+ break;
case Board::BOARD_JUMPER_T16:
radioUiWidget = new SimulatedUIWidgetJumperT16(simulator, this);
break;
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/icon.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/icon.png
new file mode 100755
index 000000000..b6b737047
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/icon.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/arm.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/arm.png
new file mode 100755
index 000000000..33dcd7d91
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/arm.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/background.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/background.png
new file mode 100755
index 000000000..e21f7bc81
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/background.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/beeper.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/beeper.png
new file mode 100755
index 000000000..57c37f2fe
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/beeper.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/mark_bg.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/mark_bg.png
new file mode 100755
index 000000000..fbe6b0ee2
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/mark_bg.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/mode.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/mode.png
new file mode 100755
index 000000000..37a183020
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/mode.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/pagedn.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/pagedn.png
new file mode 100755
index 000000000..0733ccfa1
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/pagedn.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/pageup.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/pageup.png
new file mode 100755
index 000000000..0dbaa5202
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/pageup.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/pitch.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/pitch.png
new file mode 100755
index 000000000..e691fded2
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/pitch.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/roll.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/roll.png
new file mode 100755
index 000000000..9110a0d52
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/roll.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/throttle.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/throttle.png
new file mode 100755
index 000000000..b4f796b0a
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/throttle.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/yaw.png b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/yaw.png
new file mode 100755
index 000000000..3fc055bb3
Binary files /dev/null and b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/img/yaw.png differ
diff --git a/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/wizard.lua b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/wizard.lua
new file mode 100755
index 000000000..baf8461b5
--- /dev/null
+++ b/radio/sdcard/horus/SCRIPTS/WIZARD/multirotor/wizard.lua
@@ -0,0 +1,411 @@
+---- #########################################################################
+---- # #
+---- # Copyright (C) OpenTX #
+-----# #
+-----# Credits: graphics by Radiomaster #
+-----# #
+---- # License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html #
+---- # #
+---- # This program is free software; you can redistribute it and/or modify #
+---- # it under the terms of the GNU General Public License version 2 as #
+---- # published by the Free Software Foundation. #
+---- # #
+---- # This program is distributed in the hope that it will be useful #
+---- # but WITHOUT ANY WARRANTY; without even the implied warranty of #
+---- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+---- # GNU General Public License for more details. #
+---- # #
+---- #########################################################################
+
+local VALUE = 0
+local COMBO = 1
+
+local edit = false
+local page = 1
+local current = 1
+local pages = {}
+local fields = {}
+local switches = {"SA", "SB", "SC", "SD", "SE", "SF", "SG"}
+
+-- load common Bitmaps
+local ImgMarkBg = Bitmap.open("img/mark_bg.png")
+local BackgroundImg = Bitmap.open("img/background.png")
+local ImgPageUp = Bitmap.open("img/pageup.png")
+local ImgPageDn = Bitmap.open("img/pagedn.png")
+
+
+-- Change display attribute to current field
+local function addField(step)
+ local field = fields[current]
+ local min, max
+ if field[3] == VALUE then
+ min = field[6]
+ max = field[7]
+ elseif field[3] == COMBO then
+ min = 0
+ max = #(field[6]) - 1
+ end
+ if (step < 0 and field[5] > min) or (step > 0 and field[5] < max) then
+ field[5] = field[5] + step
+ end
+end
+
+-- Select the next or previous page
+local function selectPage(step)
+ page = 1 + ((page + step - 1 + #pages) % #pages)
+ edit = false
+ current = 1
+end
+
+-- Select the next or previous editable field
+local function selectField(step)
+ repeat
+ current = 1 + ((current + step - 1 + #fields) % #fields)
+ until fields[current][4]==1
+end
+
+-- Redraw the current page
+local function redrawFieldsPage(event)
+
+ for index = 1, 10, 1 do
+ local field = fields[index]
+ if field == nil then
+ break
+ end
+
+ local attr = current == (index) and ((edit == true and BLINK or 0) + INVERS) or 0
+ attr = attr + TEXT_COLOR
+
+ if field[4] == 1 then
+ if field[3] == VALUE then
+ lcd.drawNumber(field[1], field[2], field[5], LEFT + attr)
+ elseif field[3] == COMBO then
+ if field[5] >= 0 and field[5] < #(field[6]) then
+ lcd.drawText(field[1],field[2], field[6][1+field[5]], attr)
+ end
+ end
+ end
+ end
+end
+
+local function updateField(field)
+ local value = field[5]
+end
+
+-- Main
+local function runFieldsPage(event)
+ if event == EVT_VIRTUAL_EXIT then -- exit script
+ return 2
+ elseif event == EVT_VIRTUAL_ENTER then -- toggle editing/selecting current field
+ if fields[current][5] ~= nil then
+ edit = not edit
+ if edit == false then
+ updateField(fields[current])
+ end
+ end
+ elseif edit then
+ if event == EVT_VIRTUAL_INC or event == EVT_VIRTUAL_INC_REPT then
+ addField(1)
+ elseif event == EVT_VIRTUAL_DEC or event == EVT_VIRTUAL_DEC_REPT then
+ addField(-1)
+ end
+ else
+ if event == EVT_VIRTUAL_NEXT then
+ selectField(1)
+ elseif event == EVT_VIRTUAL_PREV then
+ selectField(-1)
+ end
+ end
+ redrawFieldsPage(event)
+ return 0
+end
+
+-- set visibility flags starting with SECOND field of fields
+local function setFieldsVisible(...)
+ local arg={...}
+ local cnt = 2
+ for i,v in ipairs(arg) do
+ fields[cnt][4] = v
+ cnt = cnt + 1
+ end
+end
+
+-- draws one letter mark
+local function drawMark(x, y, name)
+ lcd.drawBitmap(ImgMarkBg, x, y)
+ lcd.drawText(x+8, y+3, name, TEXT_COLOR)
+end
+
+
+local ThrottleFields = {
+ {50, 50, COMBO, 1, 2, { "CH1", "CH2", "CH3", "CH4", "CH5", "CH6", "CH7", "CH8" } },
+}
+
+local ThrottleBackground
+
+local function runThrottleConfig(event)
+ lcd.clear()
+ if ThrottleBackground == nil then
+ ThrottleBackground = Bitmap.open("img/throttle.png")
+ end
+ lcd.drawBitmap(ThrottleBackground, 0, 0)
+ lcd.drawBitmap(ImgPageDn, 455, 95)
+ fields = ThrottleFields
+ lcd.drawText(40, 20, "Assign Throttle channel", TEXT_COLOR)
+ lcd.drawFilledRectangle(40, 45, 100, 30, TEXT_BGCOLOR)
+ fields[1][4]=1
+ local result = runFieldsPage(event)
+ return result
+end
+
+local RollFields = {
+ {50, 50, COMBO, 1, 0, { "CH1", "CH2", "CH3", "CH4", "CH5", "CH6", "CH7", "CH8" } },
+}
+
+local RollBackground
+
+local function runRollConfig(event)
+ lcd.clear()
+ if RollBackground == nil then
+ RollBackground = Bitmap.open("img/roll.png")
+ end
+ lcd.drawBitmap(RollBackground, 0, 0)
+ lcd.drawBitmap(ImgPageUp, 0, 95)
+ lcd.drawBitmap(ImgPageDn, 455, 95)
+ fields = RollFields
+ lcd.drawText(40, 20, "Assign Roll channel", TEXT_COLOR)
+ lcd.drawFilledRectangle(40, 45, 100, 30, TEXT_BGCOLOR)
+ fields[1][4]=1
+ local result = runFieldsPage(event)
+ return result
+end
+
+local PitchFields = {
+ {50, 50, COMBO, 1, 1, { "CH1", "CH2", "CH3", "CH4", "CH5", "CH6", "CH7", "CH8" } },
+}
+
+local PitchBackground
+
+local function runPitchConfig(event)
+ lcd.clear()
+ if PitchBackground == nil then
+ PitchBackground = Bitmap.open("img/pitch.png")
+ end
+ lcd.drawBitmap(PitchBackground, 0, 0)
+ lcd.drawBitmap(ImgPageUp, 0, 95)
+ lcd.drawBitmap(ImgPageDn, 455, 95)
+ fields = PitchFields
+ lcd.drawText(40, 20, "Assign Pitch channel", TEXT_COLOR)
+ lcd.drawFilledRectangle(40, 45, 100, 30, TEXT_BGCOLOR)
+ fields[1][4]=1
+ local result = runFieldsPage(event)
+ return result
+end
+
+local YawFields = {
+ {50, 50, COMBO, 1, 3, { "CH1", "CH2", "CH3", "CH4", "CH5", "CH6", "CH7", "CH8" } },
+}
+
+local YawBackground
+
+local function runYawConfig(event)
+ lcd.clear()
+ if YawBackground == nil then
+ YawBackground = Bitmap.open("img/yaw.png")
+ end
+ lcd.drawBitmap(YawBackground, 0, 0)
+ lcd.drawBitmap(ImgPageUp, 0, 95)
+ lcd.drawBitmap(ImgPageDn, 455, 95)
+ fields = YawFields
+ lcd.drawText(40, 20, "Assign Yaw channel", TEXT_COLOR)
+ lcd.drawFilledRectangle(40, 45, 100, 30, TEXT_BGCOLOR)
+ fields[1][4]=1
+ local result = runFieldsPage(event)
+ return result
+end
+
+local ArmFields = {
+ {50, 50, COMBO, 1, 5, { "SA", "SB", "SC", "SD", "SE", "SF"} },
+}
+
+local ArmBackground
+
+local function runArmConfig(event)
+ lcd.clear()
+ if ArmBackground == nil then
+ ArmBackground = Bitmap.open("img/arm.png")
+ end
+ lcd.drawBitmap(ArmBackground, 0, 0)
+ lcd.drawBitmap(ImgPageUp, 0, 95)
+ lcd.drawBitmap(ImgPageDn, 455, 95)
+ fields = ArmFields
+ lcd.drawText(40, 20, "Assign Arm switch", TEXT_COLOR)
+ lcd.drawFilledRectangle(40, 45, 100, 30, TEXT_BGCOLOR)
+ fields[1][4]=1
+ local result = runFieldsPage(event)
+ return result
+end
+
+local BeeperFields = {
+ {50, 50, COMBO, 1, 3, { "SA", "SB", "SC", "SD", "SE", "SF"} },
+}
+
+local BeeperBackground
+
+local function runBeeperConfig(event)
+ lcd.clear()
+ if BeeperBackground == nil then
+ BeeperBackground = Bitmap.open("img/beeper.png")
+ end
+ lcd.drawBitmap(BeeperBackground, 0, 0)
+ lcd.drawBitmap(ImgPageUp, 0, 95)
+ lcd.drawBitmap(ImgPageDn, 455, 95)
+ fields = BeeperFields
+ lcd.drawText(40, 20, "Assign Beeper switch", TEXT_COLOR)
+ lcd.drawFilledRectangle(40, 45, 100, 30, TEXT_BGCOLOR)
+ fields[1][4]=1
+ local result = runFieldsPage(event)
+ return result
+end
+
+local ModeFields = {
+ {50, 50, COMBO, 1, 0, { "SA", "SB", "SC", "SD", "SE", "SF"} },
+}
+
+local ModeBackground
+
+local function runModeConfig(event)
+ lcd.clear()
+ if ModeBackground == nil then
+ ModeBackground = Bitmap.open("img/mode.png")
+ end
+ lcd.drawBitmap(ModeBackground, 0, 0)
+ lcd.drawBitmap(ImgPageUp, 0, 95)
+ lcd.drawBitmap(ImgPageDn, 455, 95)
+ fields = ModeFields
+ lcd.drawText(40, 20, "Assign Mode switch", TEXT_COLOR)
+ lcd.drawFilledRectangle(40, 45, 100, 30, TEXT_BGCOLOR)
+ fields[1][4]=1
+ local result = runFieldsPage(event)
+ return result
+end
+
+local lineIndex
+local function drawNextChanelLine(text, text2)
+ lcd.drawText(40, lineIndex, text, TEXT_COLOR)
+ lcd.drawText(242, lineIndex, ": CH" .. text2 + 1, TEXT_COLOR)
+ lineIndex = lineIndex + 20
+end
+
+local function drawNextSwitchLine(text, text2)
+ lcd.drawText(40, lineIndex, text, TEXT_COLOR)
+ lcd.drawText(242, lineIndex, ": " ..switches[text2 + 1], TEXT_COLOR)
+ lineIndex = lineIndex + 20
+end
+
+
+local ConfigSummaryFields = {
+ {110, 250, COMBO, 1, 0, { "No, I need to change something", "Yes, all is well, create the model !"} },
+}
+
+local ImgSummary
+
+local function runConfigSummary(event)
+ lcd.clear()
+ if ImgSummary == nil then
+ ImgSummary = Bitmap.open("img/summary.png")
+ end
+ fields = ConfigSummaryFields
+ lcd.drawBitmap(BackgroundImg, 0, 0)
+ lcd.drawBitmap(ImgPageUp, 0, 95)
+ lcd.drawBitmap(ImgSummary, 300, 60)
+ lineIndex = 40
+ -- throttle
+ drawNextChanelLine("Throttle channel", ThrottleFields[1][5])
+ -- roll
+ drawNextChanelLine("Roll channel",RollFields[1][5])
+ -- pitch
+ drawNextChanelLine("Pitch channel",PitchFields[1][5])
+ -- yaw
+ drawNextChanelLine("Yaw channel",YawFields[1][5])
+ -- arm
+ drawNextSwitchLine("Arm switch",ArmFields[1][5])
+ -- beeper
+ drawNextSwitchLine("Beeper switch",BeeperFields[1][5])
+ -- mode
+ drawNextSwitchLine("Mode switch",ModeFields[1][5])
+
+ local result = runFieldsPage(event)
+ if(fields[1][5] == 1 and edit == false) then
+ selectPage(1)
+ end
+ return result
+end
+
+local function addMix(channel, input, name, weight, index)
+ local mix = { source=input, name=name }
+ if weight ~= nil then
+ mix.weight = weight
+ end
+ if index == nil then
+ index = 0
+ end
+ model.insertMix(channel, index, mix)
+end
+
+local function createModel(event)
+ lcd.clear()
+ lcd.drawBitmap(BackgroundImg, 0, 0)
+ lcd.drawBitmap(ImgSummary, 300, 60)
+ model.defaultInputs()
+ model.deleteMixes()
+ -- throttle
+ addMix(ThrottleFields[1][5], MIXSRC_FIRST_INPUT+defaultChannel(2), "Thr")
+ -- roll
+ addMix(RollFields[1][5], MIXSRC_FIRST_INPUT+defaultChannel(0), "Roll")
+ -- pitch
+ addMix(PitchFields[1][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "Pitch")
+ -- yaw
+ addMix(YawFields[1][5], MIXSRC_FIRST_INPUT+defaultChannel(3), "Yaw")
+ addMix(4, MIXSRC_SA + ArmFields[1][5], "Arm")
+ addMix(5, MIXSRC_SA + BeeperFields[1][5], "Beeper")
+ addMix(6, MIXSRC_SA + ModeFields[1][5], "Mode")
+
+ lcd.drawText(70, 90, "Model successfully created !", TEXT_COLOR)
+ lcd.drawText(100, 130, "Press RTN to exit", TEXT_COLOR)
+ return 2
+end
+
+-- Init
+local function init()
+ current, edit = 1, false
+ pages = {
+ runThrottleConfig,
+ runRollConfig,
+ runPitchConfig,
+ runYawConfig,
+ runArmConfig,
+ runBeeperConfig,
+ runModeConfig,
+ runConfigSummary,
+ createModel,
+ }
+end
+
+-- Main
+local function run(event)
+ if event == nil then
+ error("Cannot be run as a model script!")
+ return 2
+ elseif event == EVT_VIRTUAL_NEXT_PAGE and page < #pages-1 then
+ selectPage(1)
+ elseif event == EVT_VIRTUAL_PREV_PAGE and page > 1 then
+ killEvents(event);
+ selectPage(-1)
+ end
+
+ local result = pages[page](event)
+ return result
+end
+
+return { init=init, run=run }
diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h
index 005fbec56..dae853d12 100644
--- a/radio/src/dataconstants.h
+++ b/radio/src/dataconstants.h
@@ -674,7 +674,7 @@ enum MixSources {
MIXSRC_GYRO2, LUA_EXPORT("gyry", "Gyro Y")
#endif
- MIXSRC_MAX,
+ MIXSRC_MAX, LUA_EXPORT("max", "MAX")
MIXSRC_FIRST_HELI,
MIXSRC_CYC1 = MIXSRC_FIRST_HELI, LUA_EXPORT("cyc1", "Cyclic 1")
diff --git a/radio/src/fonts/480x272/font_dblsize.png b/radio/src/fonts/480x272/font_dblsize.png
index b8d7d4717..1be293a2d 100644
Binary files a/radio/src/fonts/480x272/font_dblsize.png and b/radio/src/fonts/480x272/font_dblsize.png differ
diff --git a/radio/src/fonts/480x272/font_xxlsize.png b/radio/src/fonts/480x272/font_xxlsize.png
index cd38d5e6d..24a303309 100644
Binary files a/radio/src/fonts/480x272/font_xxlsize.png and b/radio/src/fonts/480x272/font_xxlsize.png differ
diff --git a/radio/src/gui/480x272/model_select.cpp b/radio/src/gui/480x272/model_select.cpp
index cd0122ed4..33c9453fe 100644
--- a/radio/src/gui/480x272/model_select.cpp
+++ b/radio/src/gui/480x272/model_select.cpp
@@ -191,7 +191,6 @@ bool menuModelWizard(event_t event)
uint16_t x = WIZARD_LEFT_SPACING + (wizidx - first) * (WIZARD_SPACING + WIZARD_ICON_X);
strcpy(&wizpath[sizeof(WIZARD_PATH)], fno.fname);
strcpy(&wizpath[sizeof(WIZARD_PATH) + strlen(fno.fname)], "/icon.png");
- lcdDrawText(x + 10, WIZARD_TEXT_Y, fno.fname);
BitmapBuffer * background = BitmapBuffer::load(wizpath);
lcd->drawBitmap(x, WIZARD_ICON_Y, background);
if(wizidx == wizardSelected ) {
diff --git a/radio/src/gui/480x272/radio_calibration.cpp b/radio/src/gui/480x272/radio_calibration.cpp
index a81355b89..ab5576f44 100644
--- a/radio/src/gui/480x272/radio_calibration.cpp
+++ b/radio/src/gui/480x272/radio_calibration.cpp
@@ -57,6 +57,13 @@ void drawPots()
// The 2 main front sliders
drawVerticalSlider(125, 120, 120, calibratedAnalogs[CALIBRATED_SLIDER_FRONT_LEFT], -RESX, RESX, 40, OPTION_SLIDER_TICKS | OPTION_SLIDER_BIG_TICKS | OPTION_SLIDER_SQUARE_BUTTON);
drawVerticalSlider(LCD_W-125-12, 120, 120, calibratedAnalogs[CALIBRATED_SLIDER_FRONT_RIGHT], -RESX, RESX, 40, OPTION_SLIDER_TICKS | OPTION_SLIDER_BIG_TICKS | OPTION_SLIDER_SQUARE_BUTTON);
+#else
+ if (IS_POT_AVAILABLE(EXT1)) {
+ drawVerticalSlider(125, 120, 120, calibratedAnalogs[CALIBRATED_POT_EXT1], -RESX, RESX, 40, OPTION_SLIDER_TICKS | OPTION_SLIDER_BIG_TICKS | OPTION_SLIDER_SQUARE_BUTTON);
+ }
+ if (IS_POT_AVAILABLE(EXT2)) {
+ drawVerticalSlider(LCD_W-125-12, 120, 120, calibratedAnalogs[CALIBRATED_POT_EXT2], -RESX, RESX, 40, OPTION_SLIDER_TICKS | OPTION_SLIDER_BIG_TICKS | OPTION_SLIDER_SQUARE_BUTTON);
+ }
#endif
}
diff --git a/radio/src/gui/common/stdlcd/model_receiver_options.cpp b/radio/src/gui/common/stdlcd/model_receiver_options.cpp
index fe5affb15..8516f61cf 100644
--- a/radio/src/gui/common/stdlcd/model_receiver_options.cpp
+++ b/radio/src/gui/common/stdlcd/model_receiver_options.cpp
@@ -141,11 +141,11 @@ void menuModelReceiverOptions(event_t event)
lcdInvertLine(0);
if (reusableBuffer.hardwareAndSettings.receiverSettings.state == PXX2_SETTINGS_OK) {
- for (uint8_t k=0; k 0
ITEM_RADIO_HARDWARE_LABEL_POTS,
ITEM_RADIO_HARDWARE_POT1,
+#endif
#if defined(HARDWARE_POT2)
ITEM_RADIO_HARDWARE_POT2,
#endif
@@ -196,21 +198,21 @@ enum {
};
#if (NUM_POTS + NUM_SLIDERS) == 0
- #define POTS_ROWS HIDDEN_ROW
+ #define POTS_ROWS
#elif (NUM_POTS + NUM_SLIDERS) == 1
- #define POTS_ROWS NAVIGATION_LINE_BY_LINE|1
+ #define POTS_ROWS LABEL(Pots), NAVIGATION_LINE_BY_LINE|1,
#elif (NUM_POTS + NUM_SLIDERS) == 2
- #define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1
+ #define POTS_ROWS LABEL(Pots), NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1,
#elif (NUM_POTS + NUM_SLIDERS) == 3
- #define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1
+ #define POTS_ROWS LABEL(Pots), NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1,
#elif defined(PCBX9D) // TODO defined(STORAGE_POT3) && !defined(STORAGE_POT3)
- #define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, HIDDEN_ROW, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1
+ #define POTS_ROWS LABEL(Pots), NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, HIDDEN_ROW, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1,
#elif (NUM_POTS + NUM_SLIDERS) == 4
- #define POTS_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1
+ #define POTS_ROWS LABEL(Pots), NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1,
#elif (NUM_POTS + NUM_SLIDERS) == 5
- #define POTS_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
+ #define POTS_ROWS LABEL(Pots), 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_POTS + NUM_SLIDERS) == 8
- #define POTS_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
+ #define POTS_ROWS LABEL(Pots), 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
#if defined(PCBX9E)
@@ -324,14 +326,13 @@ void menuRadioHardware(event_t event)
MENU(STR_HARDWARE, menuTabGeneral, MENU_RADIO_HARDWARE, HEADER_LINE + ITEM_RADIO_HARDWARE_MAX, {
HEADER_LINE_COLUMNS
0 /* calibration button */,
- 0 /* stick 1 */,
- 0 /* stick 2 */,
- 0 /* stick 3 */,
- 0 /* stick 4 */,
- LABEL(Pots),
- POTS_ROWS,
+ 0 /* stick 1 */,
+ 0 /* stick 2 */,
+ 0 /* stick 3 */,
+ 0 /* stick 4 */,
+ POTS_ROWS
LABEL(Switches),
- SWITCHES_ROWS,
+ SWITCHES_ROWS,
0 /* battery calib */,
RTC_ROW
TX_CAPACITY_MEASUREMENT_ROWS
@@ -393,6 +394,7 @@ void menuRadioHardware(event_t event)
editStickHardwareSettings(HW_SETTINGS_COLUMN1, y, k - ITEM_RADIO_HARDWARE_STICK1, event, attr);
break;
+#if (NUM_POTS + NUM_SLIDERS) > 0
case ITEM_RADIO_HARDWARE_LABEL_POTS:
lcdDrawTextAlignedLeft(y, STR_POTS);
break;
@@ -444,6 +446,7 @@ void menuRadioHardware(event_t event)
g_eeGeneral.slidersConfig |= (potType << idx);
break;
}
+#endif
#endif
case ITEM_RADIO_HARDWARE_LABEL_SWITCHES:
diff --git a/radio/src/gui/navigation/navigation_9x.cpp b/radio/src/gui/navigation/navigation_9x.cpp
index bbc958c63..5e09cfdd1 100644
--- a/radio/src/gui/navigation/navigation_9x.cpp
+++ b/radio/src/gui/navigation/navigation_9x.cpp
@@ -82,7 +82,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
}
#endif
- if (event==EVT_KEY_FIRST(KEY_RIGHT) || event==EVT_KEY_REPT(KEY_RIGHT) || (s_editMode>0 && (IS_ROTARY_RIGHT(event) || event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP)))) {
+ if ((s_editMode>0 && (IS_ROTARY_RIGHT(event) || event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP)))) {
do {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval += min(10, i_max-val);
@@ -98,7 +98,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
AUDIO_KEY_ERROR();
}
}
- else if (event==EVT_KEY_FIRST(KEY_LEFT) || event==EVT_KEY_REPT(KEY_LEFT) || (s_editMode>0 && (IS_ROTARY_LEFT(event) || event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN)))) {
+ else if ((s_editMode>0 && (IS_ROTARY_LEFT(event) || event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN)))) {
do {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval -= min(10, val-i_min);
@@ -136,7 +136,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
#if defined(AUTOSWITCH)
else {
uint8_t swtch = abs(getMovedSwitch());
- if (swtch) {
+ if (swtch && !IS_SWITCH_MULTIPOS(swtch)) {
newval = switchToMix(swtch);
}
}
diff --git a/radio/src/gui/navigation/navigation_horus.cpp b/radio/src/gui/navigation/navigation_horus.cpp
index d62d07810..9679ab6e7 100644
--- a/radio/src/gui/navigation/navigation_horus.cpp
+++ b/radio/src/gui/navigation/navigation_horus.cpp
@@ -137,7 +137,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
#if defined(AUTOSWITCH)
else {
unsigned int swtch = abs(getMovedSwitch());
- if (swtch) {
+ if (swtch && !IS_SWITCH_MULTIPOS(swtch)) {
newval = switchToMix(swtch);
}
}
diff --git a/radio/src/gui/navigation/navigation_x7.cpp b/radio/src/gui/navigation/navigation_x7.cpp
index 7e4255dac..ecf00a02b 100644
--- a/radio/src/gui/navigation/navigation_x7.cpp
+++ b/radio/src/gui/navigation/navigation_x7.cpp
@@ -106,7 +106,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
#if defined(AUTOSWITCH)
else {
unsigned int swtch = abs(getMovedSwitch());
- if (swtch) {
+ if (swtch && !IS_SWITCH_MULTIPOS(swtch)) {
newval = switchToMix(swtch);
}
}
diff --git a/radio/src/gui/navigation/navigation_x9d.cpp b/radio/src/gui/navigation/navigation_x9d.cpp
index a5d6fc332..2b3587cba 100644
--- a/radio/src/gui/navigation/navigation_x9d.cpp
+++ b/radio/src/gui/navigation/navigation_x9d.cpp
@@ -173,7 +173,7 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
#if defined(AUTOSWITCH)
else {
unsigned int swtch = abs(getMovedSwitch());
- if (swtch) {
+ if (swtch && !IS_SWITCH_MULTIPOS(swtch)) {
newval = switchToMix(swtch);
}
}
diff --git a/radio/src/gui/navigation/navigation_xlite.cpp b/radio/src/gui/navigation/navigation_xlite.cpp
index 9cbafda8b..61d795e77 100644
--- a/radio/src/gui/navigation/navigation_xlite.cpp
+++ b/radio/src/gui/navigation/navigation_xlite.cpp
@@ -29,15 +29,6 @@ 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< 512) {
+ if (abs(anas[i] - inputsStates[i]) > MULTIPOS_STEP_SIZE) {
if (!isInputRecursive(i)) {
result = MIXSRC_FIRST_INPUT+i;
break;
@@ -577,7 +579,7 @@ int8_t getMovedSource(GET_MOVED_SOURCE_PARAMS)
static int16_t sourcesStates[NUM_STICKS+NUM_POTS+NUM_SLIDERS+NUM_MOUSE_ANALOGS];
if (result == 0) {
for (uint8_t i=0; i 512) {
+ if (abs(calibratedAnalogs[i] - sourcesStates[i]) > MULTIPOS_STEP_SIZE) {
result = MIXSRC_Rud+i;
break;
}
diff --git a/radio/src/opentx.h b/radio/src/opentx.h
index d0f6fccaf..3d3cc3ae7 100644
--- a/radio/src/opentx.h
+++ b/radio/src/opentx.h
@@ -282,6 +282,12 @@ void memswap(void * a, void * b, uint8_t size);
#define IS_MULTIPOS_CALIBRATED(cal) (false)
#endif
+#if NUM_XPOTS > 0
+ #define IS_SWITCH_MULTIPOS(x) (SWSRC_FIRST_MULTIPOS_SWITCH <= (x) && (x) <= SWSRC_LAST_MULTIPOS_SWITCH)
+#else
+ #define IS_SWITCH_MULTIPOS(x) (false)
+#endif
+
#if defined(PWR_BUTTON_PRESS)
#define pwrOffPressed() pwrPressed()
#else
diff --git a/radio/src/pulses/pulses.cpp b/radio/src/pulses/pulses.cpp
index f6bb81176..746842950 100755
--- a/radio/src/pulses/pulses.cpp
+++ b/radio/src/pulses/pulses.cpp
@@ -507,7 +507,7 @@ bool setupPulsesInternalModule(uint8_t protocol)
#else
mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD);
#endif
- }
+ }
return result;
}
#endif
diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h
index b6888f1f8..48e7e05e0 100644
--- a/radio/src/sdcard.h
+++ b/radio/src/sdcard.h
@@ -143,6 +143,8 @@ const char * getBasename(const char * path);
#define OTX_FOURCC 0x3978746F // otx for Taranis X-Lite
#elif defined(RADIO_T12)
#define OTX_FOURCC 0x3D78746F // otx for Jumper T12
+#elif defined(RADIO_TLITE)
+ #define OTX_FOURCC 0x4278746F // otx for Jumper TLite
#elif defined(RADIO_TX12)
#define OTX_FOURCC 0x4178746F // otx for Radiomaster TX12
#elif defined(RADIO_T8)
diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp
index 2e9c6a89e..afbd95e96 100644
--- a/radio/src/simu.cpp
+++ b/radio/src/simu.cpp
@@ -255,7 +255,7 @@ void OpenTxSim::updateKeysAndSwitches(bool start)
KEY_Down, KEY_DOWN,
KEY_Right, KEY_RIGHT,
KEY_Left, KEY_LEFT,
-#elif defined(PCBXLITE) || defined(RADIO_T12)
+#elif defined(PCBXLITE) || defined(RADIO_FAMILY_JUMPER_T12)
#if defined(KEYS_GPIO_REG_SHIFT)
KEY_Shift_L, KEY_SHIFT,
#endif
diff --git a/radio/src/switches.cpp b/radio/src/switches.cpp
index 727b05096..9a7fbb2f8 100644
--- a/radio/src/switches.cpp
+++ b/radio/src/switches.cpp
@@ -520,14 +520,28 @@ swsrc_t getMovedSwitch()
swsrc_t result = 0;
#if defined(PCBTARANIS) || defined(PCBHORUS)
- for (int i=0; i> (i*2);
- uint8_t next = (1024+getValue(MIXSRC_SA+i)) / 1024;
+ swarnstate_t mask = ((swarnstate_t) 0x03 << (i * 2));
+ uint8_t prev = (switches_states & mask) >> (i * 2);
+ uint8_t next = (1024 + getValue(MIXSRC_SA + i)) / 1024;
if (prev != next) {
- switches_states = (switches_states & (~mask)) | ((swarnstate_t)next << (i*2));
- result = 1+(3*i)+next;
+ switches_states = (switches_states & (~mask)) | ((swarnstate_t) next << (i * 2));
+ result = 1 + (3 * i) + next;
+ }
+ }
+ }
+ // Multipos
+ for (int i = 0; i < NUM_XPOTS; i++) {
+ if (IS_POT_MULTIPOS(POT1 + i)) {
+ StepsCalibData * calib = (StepsCalibData *) &g_eeGeneral.calib[POT1 + i];
+ if (IS_MULTIPOS_CALIBRATED(calib)) {
+ uint8_t prev = potsPos[i] & 0x0F;
+ uint8_t next = anaIn(POT1 + i) / (2 * RESX / calib->count);
+ if (prev != next) {
+ result = SWSRC_LAST_SWITCH + i * XPOTS_MULTIPOS_COUNT + next + 1;
+ }
}
}
}
diff --git a/radio/src/targets/common/arm/stm32/adc_driver.cpp b/radio/src/targets/common/arm/stm32/adc_driver.cpp
index c6dddda75..6a1214207 100644
--- a/radio/src/targets/common/arm/stm32/adc_driver.cpp
+++ b/radio/src/targets/common/arm/stm32/adc_driver.cpp
@@ -125,7 +125,7 @@ void adcInit()
ADC_MAIN->SQR2 = (ADC_CHANNEL_BATT << 0) + (ADC_Channel_Vbat << 5);
ADC_MAIN->SQR3 = (ADC_CHANNEL_STICK_LH << 0) + (ADC_CHANNEL_STICK_LV << 5) + (ADC_CHANNEL_STICK_RV << 10) + (ADC_CHANNEL_STICK_RH << 15) + (ADC_CHANNEL_POT1 << 20) + (ADC_CHANNEL_POT2 << 25);
}
-#elif defined(RADIO_T8)
+#elif defined(RADIO_T8) || defined(RADIO_TLITE)
ADC_MAIN->SQR2 = (ADC_CHANNEL_BATT << 0) + (ADC_Channel_Vbat << 5);
ADC_MAIN->SQR3 = (ADC_CHANNEL_STICK_LH << 0) + (ADC_CHANNEL_STICK_LV << 5) + (ADC_CHANNEL_STICK_RV << 10) + (ADC_CHANNEL_STICK_RH << 15);
#elif defined(PCBX7)
@@ -139,8 +139,8 @@ void adcInit()
ADC_MAIN->SQR3 = (ADC_CHANNEL_STICK_LH << 0) + (ADC_CHANNEL_STICK_LV << 5) + (ADC_CHANNEL_STICK_RV << 10) + (ADC_CHANNEL_STICK_RH << 15) + (ADC_CHANNEL_POT1 << 20) + (ADC_CHANNEL_POT2 << 25);
#endif
- ADC_MAIN->SMPR1 = (ADC_SAMPTIME << 0) + (ADC_SAMPTIME << 3) + (ADC_SAMPTIME << 6) + (ADC_SAMPTIME << 9) + (ADC_SAMPTIME << 12) + (ADC_SAMPTIME << 15) + (ADC_SAMPTIME << 18) + (ADC_SAMPTIME << 21) + (ADC_SAMPTIME << 24);
- ADC_MAIN->SMPR2 = (ADC_SAMPTIME << 0) + (ADC_SAMPTIME << 3) + (ADC_SAMPTIME << 6) + (ADC_SAMPTIME << 9) + (ADC_SAMPTIME << 12) + (ADC_SAMPTIME << 15) + (ADC_SAMPTIME << 18) + (ADC_SAMPTIME << 21) + (ADC_SAMPTIME << 24) + (ADC_SAMPTIME << 27);
+ ADC_MAIN->SMPR1 = ADC_MAIN_SMPR1;
+ ADC_MAIN->SMPR2 = ADC_MAIN_SMPR2;
ADC->CCR = ADC_CCR_VBATE; // Enable vbat sensor
diff --git a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp
index b2c528dc0..965ae0daf 100644
--- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp
+++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp
@@ -30,7 +30,7 @@ uint8_t auxSerialMode = UART_MODE_COUNT; // Prevent debug output before port is
Fifo auxSerialTxFifo;
AuxSerialRxFifo auxSerialRxFifo __DMA (AUX_SERIAL_DMA_Stream_RX);
-void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t lenght = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1)
+void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length, uint16_t parity, uint16_t stop)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
@@ -53,7 +53,7 @@ void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t lenght = USART_Wor
#endif
USART_InitStructure.USART_BaudRate = baudrate;
- USART_InitStructure.USART_WordLength = lenght;
+ USART_InitStructure.USART_WordLength = length;
USART_InitStructure.USART_StopBits = stop;
USART_InitStructure.USART_Parity = parity;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
@@ -133,7 +133,7 @@ void auxSerialInit(unsigned int mode, unsigned int protocol)
break;
case UART_MODE_LUA:
- auxSerialSetup(DEBUG_BAUDRATE, false);
+ auxSerialSetup(LUA_DEFAULT_BAUDRATE, false);
AUX_SERIAL_POWER_ON();
}
}
@@ -217,16 +217,16 @@ extern "C" void AUX_SERIAL_USART_IRQHandler(void)
}
status = AUX_SERIAL_USART->SR;
}
-#endif
}
-#endif
+#endif // SIMU
+#endif // AUX_SERIAL
#if defined(AUX2_SERIAL)
uint8_t aux2SerialMode = UART_MODE_COUNT; // Prevent debug output before port is setup
Fifo aux2SerialTxFifo;
AuxSerialRxFifo aux2SerialRxFifo __DMA (AUX2_SERIAL_DMA_Stream_RX);
-void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t lenght = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1)
+void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t length, uint16_t parity, uint16_t stop)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
@@ -249,7 +249,7 @@ void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t lenght = USART_Wo
#endif
USART_InitStructure.USART_BaudRate = baudrate;
- USART_InitStructure.USART_WordLength = lenght;
+ USART_InitStructure.USART_WordLength = length;
USART_InitStructure.USART_StopBits = stop;
USART_InitStructure.USART_Parity = parity;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
@@ -329,7 +329,7 @@ void aux2SerialInit(unsigned int mode, unsigned int protocol)
break;
case UART_MODE_LUA:
- aux2SerialSetup(DEBUG_BAUDRATE, false);
+ aux2SerialSetup(LUA_DEFAULT_BAUDRATE, false);
AUX2_SERIAL_POWER_ON();
}
}
@@ -400,7 +400,6 @@ extern "C" void AUX2_SERIAL_USART_IRQHandler(void)
}
}
#endif
-#if defined(AUX2_SERIAL)
// Receive
uint32_t status = AUX2_SERIAL_USART->SR;
while (status & (USART_FLAG_RXNE | USART_FLAG_ERRORS)) {
@@ -416,7 +415,5 @@ extern "C" void AUX2_SERIAL_USART_IRQHandler(void)
status = AUX2_SERIAL_USART->SR;
}
}
-#endif
-
-#endif
-#endif // AUX_SERIAL
\ No newline at end of file
+#endif // SIMU
+#endif // AUX2_SERIAL
\ No newline at end of file
diff --git a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt
index 1a69afdff..3f57a743a 100644
--- a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt
+++ b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt
@@ -89,7 +89,7 @@ set(BOOTLOADER_SRC
bin_files.cpp
)
-if(PCB STREQUAL X12S OR PCB STREQUAL X10 OR PCB STREQUAL X9E OR (PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) OR (PCB STREQUAL X7 AND NOT (PCBREV STREQUAL T12 OR PCBREV STREQUAL T8)) OR PCB STREQUAL X9LITE OR PCB STREQUAL X9LITES)
+if(ROTARY_ENCODER)
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 460a24701..617709d90 100644
--- a/radio/src/targets/horus/CMakeLists.txt
+++ b/radio/src/targets/horus/CMakeLists.txt
@@ -20,6 +20,7 @@ set(LINKER_SCRIPT targets/horus/stm32f4_flash.ld)
set(RTC_BACKUP_RAM YES)
set(PPM_LIMITS_SYMETRICAL YES)
set(USB_SERIAL ON CACHE BOOL "Enable USB serial (CDC)")
+set(ROTARY_ENCODER YES)
# for size report script
set(CPU_TYPE_FULL STM32F429xI)
diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h
index 6831fdd8a..e7453063e 100644
--- a/radio/src/targets/horus/board.h
+++ b/radio/src/targets/horus/board.h
@@ -634,11 +634,16 @@ void sportUpdatePowerInit();
// Aux serial port driver
#if defined(RADIO_TX16S)
#define DEBUG_BAUDRATE 400000
+ #define LUA_DEFAULT_BAUDRATE 115200
#else
#define DEBUG_BAUDRATE 115200
+ #define LUA_DEFAULT_BAUDRATE 115200
#endif
#if defined(AUX_SERIAL_GPIO)
extern uint8_t auxSerialMode;
+#if defined __cplusplus
+void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1);
+#endif
void auxSerialInit(unsigned int mode, unsigned int protocol);
void auxSerialPutc(char c);
#define auxSerialTelemetryInit(protocol) auxSerialInit(UART_MODE_TELEMETRY, protocol)
@@ -658,6 +663,9 @@ void auxSerialPowerOff();
// Aux2 serial port driver
#if defined(AUX2_SERIAL)
extern uint8_t aux2SerialMode;
+#if defined __cplusplus
+void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t length = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1);
+#endif
void aux2SerialInit(unsigned int mode, unsigned int protocol);
void aux2SerialPutc(char c);
#define aux2SerialTelemetryInit(protocol) aux2SerialInit(UART_MODE_TELEMETRY, protocol)
diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h
index 35a135cf4..74eeb5e2b 100644
--- a/radio/src/targets/horus/hal.h
+++ b/radio/src/targets/horus/hal.h
@@ -329,6 +329,9 @@
#endif
#endif
+#define ADC_MAIN_SMPR1 (ADC_SAMPTIME << 0) + (ADC_SAMPTIME << 3) + (ADC_SAMPTIME << 6) + (ADC_SAMPTIME << 9) + (ADC_SAMPTIME << 12) + (ADC_SAMPTIME << 15) + (ADC_SAMPTIME << 18) + (ADC_SAMPTIME << 21) + (ADC_SAMPTIME << 24);
+#define ADC_MAIN_SMPR2 (ADC_SAMPTIME << 0) + (ADC_SAMPTIME << 3) + (ADC_SAMPTIME << 6) + (ADC_SAMPTIME << 9) + (ADC_SAMPTIME << 12) + (ADC_SAMPTIME << 15) + (ADC_SAMPTIME << 18) + (ADC_SAMPTIME << 21) + (ADC_SAMPTIME << 24) + (ADC_SAMPTIME << 27);
+
// Power
#if defined(RADIO_T18)
#define PWR_RCC_AHB1Periph RCC_AHB1Periph_GPIOJ | RCC_AHB1Periph_GPIOB
diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp
index 8376d786c..8402cf4fd 100644
--- a/radio/src/targets/simu/simpgmspace.cpp
+++ b/radio/src/targets/simu/simpgmspace.cpp
@@ -811,9 +811,20 @@ void rtcSetTime(const struct gtm * t)
{
}
+#if defined(USB_SERIAL)
+void usbSerialPutc(uint8_t c)
+{
+}
+#endif
+
#if defined(AUX_SERIAL)
AuxSerialRxFifo auxSerialRxFifo(nullptr);
uint8_t auxSerialMode;
+
+void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length, uint16_t parity, uint16_t stop)
+{
+}
+
void auxSerialInit(unsigned int mode, unsigned int protocol)
{
}
@@ -834,6 +845,11 @@ void auxSerialStop()
#if defined(AUX2_SERIAL)
AuxSerialRxFifo aux2SerialRxFifo(nullptr);
uint8_t aux2SerialMode;
+
+void aux2SerialSetup(unsigned int baudrate, bool dma, uint16_t length, uint16_t parity, uint16_t stop)
+{
+}
+
void aux2SerialInit(unsigned int mode, unsigned int protocol)
{
}
diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt
index a33500216..d3525362a 100644
--- a/radio/src/targets/taranis/CMakeLists.txt
+++ b/radio/src/targets/taranis/CMakeLists.txt
@@ -131,8 +131,21 @@ elseif(PCB STREQUAL X7)
set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
set(LUA_EXPORT lua_export_t12)
add_definitions(-DRADIO_T12)
+ add_definitions(-DRADIO_FAMILY_JUMPER_T12)
add_definitions(-DEEPROM_VARIANT=0x4001)
add_definitions(-DMANUFACTURER_JUMPER)
+ elseif(PCBREV STREQUAL TLITE)
+ option(INTERNAL_MODULE_MULTI "Support for MULTI internal module" ON)
+ set(FLAVOUR tlite)
+ set(NAVIGATION_TYPE 9x)
+ set(CPU_TYPE STM32F2)
+ set(CPU_TYPE_FULL STM32F205xE) # for size report
+ set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld)
+ set(LUA_EXPORT lua_export_tlite)
+ add_definitions(-DRADIO_TLITE)
+ add_definitions(-DRADIO_FAMILY_JUMPER_T12)
+ add_definitions(-DEEPROM_VARIANT=0x4003)
+ add_definitions(-DMANUFACTURER_JUMPER)
elseif(PCBREV STREQUAL TX12)
option(INTERNAL_MODULE_MULTI "Support for MULTI internal module" ON)
set(FLAVOUR tx12)
diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h
index 505ecfdec..8e583be73 100644
--- a/radio/src/targets/taranis/board.h
+++ b/radio/src/targets/taranis/board.h
@@ -117,7 +117,7 @@ uint32_t isBootloaderStart(const uint8_t * buffer);
#define INTERNAL_MODULE_OFF() GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN)
#endif
-#if !defined(PCBX9LITE) || defined(PCBX9LITES)
+#if (defined(INTERNAL_MODULE_PXX1) || defined(INTERNAL_MODULE_PXX2)) && (!defined(PCBX9LITE) || defined(PCBX9LITES))
#define HARDWARE_INTERNAL_RAS
#endif
@@ -436,7 +436,12 @@ enum EnumSwitchesPositions
#define STORAGE_NUM_SWITCHES 6
#define DEFAULT_SWITCH_CONFIG (SWITCH_2POS << 6) + (SWITCH_2POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0);
#define DEFAULT_POTS_CONFIG (POT_WITHOUT_DETENT << 2) + (POT_WITHOUT_DETENT << 0)
-#elif defined(RADIO_T12)
+#elif defined(RADIO_TLITE)
+ #define NUM_SWITCHES 4
+ #define STORAGE_NUM_SWITCHES 8
+ #define DEFAULT_SWITCH_CONFIG (SWITCH_2POS << 6) + (SWITCH_2POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0);
+ #define DEFAULT_POTS_CONFIG (0)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define NUM_SWITCHES 8
#define STORAGE_NUM_SWITCHES NUM_SWITCHES
#define DEFAULT_SWITCH_CONFIG (SWITCH_2POS << 10) + (SWITCH_2POS << 8) + (SWITCH_3POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0)
@@ -553,7 +558,7 @@ enum Analogs {
#define NUM_SLIDERS 0
#define STORAGE_NUM_POTS 1
#define STORAGE_NUM_SLIDERS 0
-#elif defined(RADIO_T8)
+#elif defined(RADIO_T8) || defined(RADIO_TLITE)
#define NUM_POTS 0
#define NUM_SLIDERS 0
#define STORAGE_NUM_POTS 2
@@ -658,10 +663,10 @@ extern uint16_t adcValues[NUM_ANALOGS];
#define BATTERY_WARN 66 // 6.6V
#define BATTERY_MIN 67 // 6.7V
#define BATTERY_MAX 83 // 8.3V
-#elif defined(RADIO_T8)
- // 1S Li-ion / Lipo
- #define BATTERY_WARN 33 // 3.3V
- #define BATTERY_MIN 32 // 3.2V
+#elif defined(RADIO_T8) || defined(RADIO_TLITE)
+ // 1S Li-ion / Lipo, LDO for 3.3V
+ #define BATTERY_WARN 35 // 3.5V
+ #define BATTERY_MIN 34 // 3.4V
#define BATTERY_MAX 42 // 4.2V
#else
// NI-MH 7.2V
@@ -733,6 +738,10 @@ uint8_t isBacklightEnabled();
#define USB_NAME "Radiomaster T8"
#define USB_MANUFACTURER 'R', 'M', '_', 'T', 'X', ' ', ' ', ' ' /* 8 bytes */
#define USB_PRODUCT 'R', 'M', ' ', 'T', '8', ' ', ' ', ' ' /* 8 Bytes */
+#elif defined(RADIO_TLITE)
+ #define USB_NAME "Jumper TLite"
+ #define USB_MANUFACTURER 'J', 'U', 'M', 'P', 'E', 'R', ' ', ' ' /* 8 bytes */
+ #define USB_PRODUCT 'T', '-', 'L', 'I', 'T', 'E', ' ', ' ' /* 8 Bytes */
#else
#define USB_NAME "FrSky Taranis"
#define USB_MANUFACTURER 'F', 'r', 'S', 'k', 'y', ' ', ' ', ' ' /* 8 bytes */
@@ -850,8 +859,12 @@ void hapticOff();
// Aux serial port driver
#if defined(AUX_SERIAL_GPIO)
#define DEBUG_BAUDRATE 115200
+#define LUA_DEFAULT_BAUDRATE 115200
#define AUX_SERIAL
extern uint8_t auxSerialMode;
+#if defined __cplusplus
+void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1);
+#endif
void auxSerialInit(unsigned int mode, unsigned int protocol);
void auxSerialPutc(char c);
#define auxSerialTelemetryInit(protocol) auxSerialInit(UART_MODE_TELEMETRY, protocol)
@@ -914,8 +927,8 @@ void ledBlue();
#define IS_LCD_RESET_NEEDED() true
#define LCD_CONTRAST_MIN 10
#define LCD_CONTRAST_MAX 30
-#if defined(RADIO_TX12) || defined(RADIO_T8)
- #define LCD_CONTRAST_DEFAULT 21
+#if defined(RADIO_TX12) || defined(RADIO_FAMILY_JUMPER_T12)
+ #define LCD_CONTRAST_DEFAULT 25
#else
#define LCD_CONTRAST_DEFAULT 15
#endif
diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h
index 541559b81..5c00b3052 100644
--- a/radio/src/targets/taranis/hal.h
+++ b/radio/src/targets/taranis/hal.h
@@ -46,7 +46,7 @@
#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(RADIO_T12)
+#elif defined(RADIO_FAMILY_JUMPER_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
@@ -393,6 +393,13 @@
#define SWITCHES_GPIO_PIN_B_L GPIO_Pin_7 // PE.07
#define SWITCHES_GPIO_REG_B_H GPIOE->IDR
#define SWITCHES_GPIO_PIN_B_H GPIO_Pin_13 // PE.13
+#elif defined(RADIO_TLITE)
+ #define STORAGE_SWITCH_B
+ #define HARDWARE_SWITCH_B
+ #define SWITCHES_GPIO_REG_B_L GPIOE->IDR
+ #define SWITCHES_GPIO_PIN_B_L GPIO_Pin_1 // PE.01
+ #define SWITCHES_GPIO_REG_B_H GPIOE->IDR
+ #define SWITCHES_GPIO_PIN_B_H GPIO_Pin_2 // PE.02
#elif defined(PCBX7)
#define STORAGE_SWITCH_B
#define HARDWARE_SWITCH_B
@@ -444,6 +451,11 @@
#define SWITCHES_GPIO_PIN_C_L GPIO_Pin_2 // PE.02
#define SWITCHES_GPIO_REG_C_H GPIOE->IDR
#define SWITCHES_GPIO_PIN_C_H GPIO_Pin_1 // PE.01
+#elif defined(RADIO_TLITE)
+ #define STORAGE_SWITCH_C
+ #define HARDWARE_SWITCH_C
+ #define SWITCHES_GPIO_REG_C GPIOE->IDR
+ #define SWITCHES_GPIO_PIN_C GPIO_Pin_14 // PE.14
#elif defined(PCBX7)
#define STORAGE_SWITCH_C
#define HARDWARE_SWITCH_C
@@ -496,6 +508,11 @@
#define HARDWARE_SWITCH_D
#define SWITCHES_GPIO_REG_D GPIOE->IDR
#define SWITCHES_GPIO_PIN_D GPIO_Pin_8 // PE.08
+#elif defined(RADIO_TLITE)
+ #define STORAGE_SWITCH_D
+ #define HARDWARE_SWITCH_D
+ #define SWITCHES_GPIO_REG_D GPIOD->IDR
+ #define SWITCHES_GPIO_PIN_D GPIO_Pin_14 // PD.14
#elif defined(PCBX7)
#define STORAGE_SWITCH_D
#define HARDWARE_SWITCH_D
@@ -582,9 +599,9 @@
#define SWITCHES_GPIO_PIN_F_L GPIO_Pin_1 // PE.01
#define SWITCHES_GPIO_REG_F_H GPIOE->IDR
#define SWITCHES_GPIO_PIN_F_H GPIO_Pin_2 // PE.02
-#elif defined(RADIO_T8)
- #define STORAGE_SWITCH_F
+#elif defined(RADIO_T8) || defined(RADIO_TLITE)
// no SWF
+ #define STORAGE_SWITCH_F
#elif defined(PCBX7)
#define STORAGE_SWITCH_F
#define HARDWARE_SWITCH_F
@@ -636,6 +653,9 @@
#define STORAGE_SWITCH_H
// no SWH
#elif defined(RADIO_TX12)
+#elif defined(RADIO_TLITE)
+ // no SWH
+ #define STORAGE_SWITCH_H
#elif defined(PCBX7)
#define STORAGE_SWITCH_H
#define HARDWARE_SWITCH_H
@@ -677,6 +697,11 @@
#define HARDWARE_SWITCH_J
#define SWITCHES_GPIO_REG_J GPIOD->IDR
#define SWITCHES_GPIO_PIN_J GPIO_Pin_14 // PD.14
+#elif defined(RADIO_TLITE)
+ // no SWI
+ #define STORAGE_SWITCH_I
+ // no SWJ
+ #define STORAGE_SWITCH_J
#elif defined(PCBX7)
#define STORAGE_SWITCH_I
#define HARDWARE_SWITCH_I
@@ -786,7 +811,7 @@
#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(RADIO_T12)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE)
#define KEYS_GPIOA_PINS GPIO_Pin_5
#define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3)
@@ -849,6 +874,13 @@
#define ADC_SET_DMA_FLAGS() ADC_DMA->HIFCR = (DMA_HIFCR_CTCIF4 | DMA_HIFCR_CHTIF4 | DMA_HIFCR_CTEIF4 | DMA_HIFCR_CDMEIF4 | DMA_HIFCR_CFEIF4)
#define ADC_TRANSFER_COMPLETE() (ADC_DMA->HISR & DMA_HISR_TCIF4)
#define ADC_SAMPTIME 2 // sample time = 28 cycles
+#if defined(RADIO_TLITE)
+ #define ADC_MAIN_SMPR1 (ADC_SAMPTIME << 0) + (ADC_SAMPTIME << 3) + (ADC_SAMPTIME << 6) + (ADC_SAMPTIME << 9) + (ADC_SAMPTIME << 12) + (ADC_SAMPTIME << 15) + (ADC_SAMPTIME << 18) + (ADC_SAMPTIME << 21) + ((ADC_SAMPTIME + 1) << 24); // TLite needs +1 for proper RTC Bat measurement.
+ #define ADC_MAIN_SMPR2 (ADC_SAMPTIME << 0) + (ADC_SAMPTIME << 3) + (ADC_SAMPTIME << 6) + (ADC_SAMPTIME << 9) + (ADC_SAMPTIME << 12) + (ADC_SAMPTIME << 15) + (ADC_SAMPTIME << 18) + (ADC_SAMPTIME << 21) + (ADC_SAMPTIME << 24) + (ADC_SAMPTIME << 27);
+#else
+ #define ADC_MAIN_SMPR1 (ADC_SAMPTIME << 0) + (ADC_SAMPTIME << 3) + (ADC_SAMPTIME << 6) + (ADC_SAMPTIME << 9) + (ADC_SAMPTIME << 12) + (ADC_SAMPTIME << 15) + (ADC_SAMPTIME << 18) + (ADC_SAMPTIME << 21) + (ADC_SAMPTIME << 24);
+ #define ADC_MAIN_SMPR2 (ADC_SAMPTIME << 0) + (ADC_SAMPTIME << 3) + (ADC_SAMPTIME << 6) + (ADC_SAMPTIME << 9) + (ADC_SAMPTIME << 12) + (ADC_SAMPTIME << 15) + (ADC_SAMPTIME << 18) + (ADC_SAMPTIME << 21) + (ADC_SAMPTIME << 24) + (ADC_SAMPTIME << 27);
+#endif
#if defined(PCBX9E)
#define HARDWARE_POT1
#define HARDWARE_POT2
@@ -979,6 +1011,24 @@
#define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT
#define ADC_CHANNEL_BATT ADC_Channel_10
#define ADC_VREF_PREC2 300
+#elif defined(RADIO_TLITE)
+ #define ADC_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2)
+ #define ADC_RCC_APB1Periph 0
+ #define ADC_RCC_APB2Periph RCC_APB2Periph_ADC1
+ #define ADC_GPIO_PIN_STICK_RV GPIO_Pin_0 // PA.00
+ #define ADC_GPIO_PIN_STICK_RH GPIO_Pin_1 // PA.01
+ #define ADC_GPIO_PIN_STICK_LV GPIO_Pin_2 // PA.02
+ #define ADC_GPIO_PIN_STICK_LH GPIO_Pin_3 // PA.03
+ #define ADC_CHANNEL_STICK_RV ADC_Channel_0 // ADC1_IN0
+ #define ADC_CHANNEL_STICK_RH ADC_Channel_1 // ADC1_IN1
+ #define ADC_CHANNEL_STICK_LV ADC_Channel_2 // ADC1_IN2
+ #define ADC_CHANNEL_STICK_LH ADC_Channel_3 // ADC1_IN3
+ #define ADC_GPIO_PIN_BATT 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 0
+ #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT
+ #define ADC_CHANNEL_BATT ADC_Channel_10
+ #define ADC_VREF_PREC2 330
#elif defined(PCBX7)
#define HARDWARE_POT1
#define HARDWARE_POT2
@@ -1241,7 +1291,7 @@
#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) && defined(HARDWARE_INTERNAL_MODULE))|| defined(RADIO_TX12) || defined(RADIO_T8)
+#elif (defined(RADIO_FAMILY_JUMPER_T12) && defined(HARDWARE_INTERNAL_MODULE))|| defined(RADIO_TX12) || defined(RADIO_T8)
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA1)
#define INTMODULE_RCC_APB1Periph (RCC_APB1Periph_USART3 | RCC_APB1Periph_TIM2)
#define INTMODULE_RCC_APB2Periph 0
@@ -1598,7 +1648,7 @@
#define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource7
#define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line7
#define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn
-#elif defined(RADIO_X7) || defined(RADIO_TX12)
+#elif defined(RADIO_X7) || defined(RADIO_TX12)
#define INTMODULE_HEARTBEAT
#define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER
#define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
@@ -1672,27 +1722,27 @@
#define TRAINER_MODULE_CPPM
#define TRAINER_MODULE_SBUS
#endif
- #define TRAINER_MODULE_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
- #define TRAINER_MODULE_RCC_APB2Periph RCC_APB2Periph_USART6
- #define TRAINER_MODULE_RCC_APB1Periph RCC_APB1Periph_TIM3
- #define TRAINER_MODULE_CPPM_TIMER TRAINER_TIMER
- #define TRAINER_MODULE_CPPM_GPIO INTMODULE_HEARTBEAT_GPIO
- #define TRAINER_MODULE_CPPM_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN
- #define TRAINER_MODULE_CPPM_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource
- #define TRAINER_MODULE_CPPM_INTERRUPT_ENABLE TIM_DIER_CC2IE
- #define TRAINER_MODULE_CPPM_INTERRUPT_FLAG TIM_SR_CC2IF
- #define TRAINER_MODULE_CPPM_CCMR1 (TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0)
- #define TRAINER_MODULE_CPPM_CCER TIM_CCER_CC2E
- #define TRAINER_MODULE_CPPM_COUNTER_REGISTER TRAINER_TIMER->CCR2
- #define TRAINER_MODULE_CPPM_TIMER_IRQn TRAINER_TIMER_IRQn
- #define TRAINER_MODULE_CPPM_GPIO_AF GPIO_AF_TIM3
- #define TRAINER_MODULE_SBUS_GPIO_AF GPIO_AF_USART6
- #define TRAINER_MODULE_SBUS_USART USART6
- #define TRAINER_MODULE_SBUS_GPIO INTMODULE_HEARTBEAT_GPIO
- #define TRAINER_MODULE_SBUS_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN
- #define TRAINER_MODULE_SBUS_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource
- #define TRAINER_MODULE_SBUS_DMA_STREAM DMA2_Stream1
- #define TRAINER_MODULE_SBUS_DMA_CHANNEL DMA_Channel_5
+ #define TRAINER_MODULE_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
+ #define TRAINER_MODULE_RCC_APB2Periph RCC_APB2Periph_USART6
+ #define TRAINER_MODULE_RCC_APB1Periph RCC_APB1Periph_TIM3
+ #define TRAINER_MODULE_CPPM_TIMER TRAINER_TIMER
+ #define TRAINER_MODULE_CPPM_GPIO INTMODULE_HEARTBEAT_GPIO
+ #define TRAINER_MODULE_CPPM_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN
+ #define TRAINER_MODULE_CPPM_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource
+ #define TRAINER_MODULE_CPPM_INTERRUPT_ENABLE TIM_DIER_CC2IE
+ #define TRAINER_MODULE_CPPM_INTERRUPT_FLAG TIM_SR_CC2IF
+ #define TRAINER_MODULE_CPPM_CCMR1 (TIM_CCMR1_IC2F_0 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_CC2S_0)
+ #define TRAINER_MODULE_CPPM_CCER TIM_CCER_CC2E
+ #define TRAINER_MODULE_CPPM_COUNTER_REGISTER TRAINER_TIMER->CCR2
+ #define TRAINER_MODULE_CPPM_TIMER_IRQn TRAINER_TIMER_IRQn
+ #define TRAINER_MODULE_CPPM_GPIO_AF GPIO_AF_TIM3
+ #define TRAINER_MODULE_SBUS_GPIO_AF GPIO_AF_USART6
+ #define TRAINER_MODULE_SBUS_USART USART6
+ #define TRAINER_MODULE_SBUS_GPIO INTMODULE_HEARTBEAT_GPIO
+ #define TRAINER_MODULE_SBUS_GPIO_PIN INTMODULE_HEARTBEAT_GPIO_PIN
+ #define TRAINER_MODULE_SBUS_GPIO_PinSource INTMODULE_HEARTBEAT_EXTI_PinSource
+ #define TRAINER_MODULE_SBUS_DMA_STREAM DMA2_Stream1
+ #define TRAINER_MODULE_SBUS_DMA_CHANNEL DMA_Channel_5
#endif
// USB
@@ -1789,7 +1839,7 @@
#define KEYS_BACKLIGHT_RCC_AHB1Periph 0
// LCD driver
-#if defined(RADIO_TX12) || defined(RADIO_T12) || defined(RADIO_T8)
+#if defined(RADIO_TX12) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8)
#define LCD_VERTICAL_INVERT
#endif
#if defined(PCBX9E)
@@ -1984,12 +2034,16 @@
#define AUDIO_SPEAKER_ENABLE_GPIO_PIN GPIO_Pin_14 // PD.14
#define HEADPHONE_TRAINER_SWITCH_GPIO GPIOD
#define HEADPHONE_TRAINER_SWITCH_GPIO_PIN GPIO_Pin_9 // PD.09
-#elif defined(RADIO_TX12) || defined(RADIO_T8)
+#elif defined(AUDIO_MUTE_GPIO)
#define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1)
#define AUDIO_MUTE_GPIO GPIOE
#define AUDIO_MUTE_GPIO_PIN GPIO_Pin_12 // PE.12
- #define AUDIO_UNMUTE_DELAY 150 // ms
#define AUDIO_MUTE_DELAY 500 // ms
+#if defined(RADIO_TLITE)
+ #define AUDIO_UNMUTE_DELAY 250 // ms
+#else
+ #define AUDIO_UNMUTE_DELAY 150 // ms
+#endif
#else
#define AUDIO_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_DMA1)
#endif
@@ -2110,7 +2164,7 @@
#define BT_USART_IRQn USART3_IRQn
// #define BT_DMA_Stream_RX DMA1_Stream1
// #define BT_DMA_Channel_RX DMA_Channel_4
-#elif defined(PCBX9D) || defined(PCBX9DP) || defined(RADIO_T12) || defined(RADIO_TX12) | defined(RADIO_T8)
+#elif defined(PCBX9D) || defined(PCBX9DP) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_T8)
#define STORAGE_BLUETOOTH
#define BT_RCC_AHB1Periph 0
#define BT_RCC_APB1Periph 0
diff --git a/radio/src/targets/taranis/keys_driver.cpp b/radio/src/targets/taranis/keys_driver.cpp
index d99851441..bca5e3e97 100644
--- a/radio/src/targets/taranis/keys_driver.cpp
+++ b/radio/src/targets/taranis/keys_driver.cpp
@@ -209,6 +209,11 @@ uint32_t switchState(uint8_t index)
ADD_2POS_CASE(A);
ADD_3POS_CASE(B, 1);
ADD_3POS_CASE(C, 2);
+#elif defined(RADIO_TLITE)
+ ADD_3POS_CASE(A, 0);
+ ADD_3POS_CASE(B, 1);
+ ADD_2POS_CASE(C);
+ ADD_2POS_CASE(D);
#else
ADD_3POS_CASE(A, 0);
ADD_3POS_CASE(B, 1);
@@ -242,6 +247,8 @@ uint32_t switchState(uint8_t index)
ADD_3POS_CASE(F, 5);
#elif defined(RADIO_T8)
ADD_2POS_CASE(D);
+#elif defined(RADIO_TLITE)
+ // Only 4 switches
#elif defined(PCBX7)
ADD_3POS_CASE(D, 3);
ADD_2POS_CASE(F);
diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp
index 97f191c2b..07924671c 100644
--- a/radio/src/targets/taranis/lcd_driver_spi.cpp
+++ b/radio/src/targets/taranis/lcd_driver_spi.cpp
@@ -20,7 +20,7 @@
#include "opentx.h"
-#if defined(RADIO_T12) || defined(RADIO_TX12) || defined(RADIO_T8)
+#if defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_TX12) || defined(RADIO_T8)
#define LCD_CONTRAST_OFFSET -10
#else
#define LCD_CONTRAST_OFFSET 160
diff --git a/radio/src/tests/fonts_480x272.png b/radio/src/tests/fonts_480x272.png
index abd3e1f72..94d4237b5 100644
Binary files a/radio/src/tests/fonts_480x272.png and b/radio/src/tests/fonts_480x272.png differ
diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt
index 87f83a9e9..59eae1a46 100644
--- a/radio/src/translations/cz.h.txt
+++ b/radio/src/translations/cz.h.txt
@@ -288,7 +288,7 @@
#if defined(PCBHORUS)
#define LEN_VKEYS "\005"
#define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 "
-#elif defined(RADIO_T12)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Dolů\0""Nhoru""Vprvo""Vlevo"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt
index 0d30316e3..fb36f0021 100644
--- a/radio/src/translations/de.h.txt
+++ b/radio/src/translations/de.h.txt
@@ -294,7 +294,7 @@
#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)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt
index d0dd3e25c..f66e99a33 100644
--- a/radio/src/translations/en.h.txt
+++ b/radio/src/translations/en.h.txt
@@ -294,7 +294,7 @@
#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)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt
index cbbe3b591..0e5fa3dc7 100644
--- a/radio/src/translations/es.h.txt
+++ b/radio/src/translations/es.h.txt
@@ -291,7 +291,7 @@
#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)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt
index 03c1ecf25..0bd9c954f 100644
--- a/radio/src/translations/fi.h.txt
+++ b/radio/src/translations/fi.h.txt
@@ -312,7 +312,7 @@
#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)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt
index ce6624b67..fb818f7e8 100644
--- a/radio/src/translations/fr.h.txt
+++ b/radio/src/translations/fr.h.txt
@@ -314,7 +314,7 @@
#elif defined(PCBXLITE)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Shift""Exit\0""Enter""Bas\0 ""Haut\0""Droit""Gauch"
-#elif defined(RADIO_T12)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt
index eeecb347a..9a0785a1e 100644
--- a/radio/src/translations/it.h.txt
+++ b/radio/src/translations/it.h.txt
@@ -315,7 +315,7 @@
#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)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt
index 087305944..13f567589 100644
--- a/radio/src/translations/nl.h.txt
+++ b/radio/src/translations/nl.h.txt
@@ -292,7 +292,7 @@
#if defined(PCBHORUS)
#define LEN_VKEYS "\005"
#define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 "
-#elif defined(RADIO_T12)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt
index 367694cde..bf59714cf 100644
--- a/radio/src/translations/pl.h.txt
+++ b/radio/src/translations/pl.h.txt
@@ -312,7 +312,7 @@
#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)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt
index 7ef85235b..8c794822e 100644
--- a/radio/src/translations/pt.h.txt
+++ b/radio/src/translations/pt.h.txt
@@ -305,7 +305,7 @@
#if defined(PCBHORUS)
#define LEN_VKEYS "\005"
#define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 "
-#elif defined(RADIO_T12)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt
index 499fcb41d..54c081eb3 100644
--- a/radio/src/translations/se.h.txt
+++ b/radio/src/translations/se.h.txt
@@ -306,7 +306,7 @@
#if defined(PCBHORUS)
#define LEN_VKEYS "\005"
#define TR_VKEYS "PGUP\0""PGDN\0""ENTER""MDL\0 ""RTN\0 ""TELE\0""SYS\0 "
-#elif defined(RADIO_T12)
+#elif defined(RADIO_FAMILY_JUMPER_T12)
#define LEN_VKEYS "\005"
#define TR_VKEYS "Exit\0""Enter""Down\0""Up\0 ""Right""Left\0"
#elif defined(RADIO_TX12)
diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h
index 268eb2606..74735bc7f 100644
--- a/radio/src/translations/untranslated.h
+++ b/radio/src/translations/untranslated.h
@@ -41,7 +41,7 @@
#elif defined(PCBXLITE)
#define TR_POTS_VSRCRAW "\310S1\0""\310S2\0"
#define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0"
-#elif defined(RADIO_T12)
+#elif defined(RADIO_FAMILY_JUMPER_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(RADIO_TX12)
diff --git a/radio/util/font2png.py b/radio/util/font2png.py
index 169b6b63f..b83505a0c 100755
--- a/radio/util/font2png.py
+++ b/radio/util/font2png.py
@@ -77,6 +77,12 @@ def createFontBitmap(filename, fontname, fontsize, fontoffset, foreground, backg
image.paste(extraImage.copy(),(width,1))
elif c == " ":
pass
+ elif c == "j" and fontsize == 32:
+ w, h = font.getsize(c)
+ draw.text((width + 2, fontoffset), c, fill=foreground, font=font)
+ elif c == "j" and fontsize == 64:
+ aw, h = font.getsize(c)
+ draw.text((width + 3, fontoffset), c, fill=foreground, font=font)
else:
w, h = font.getsize(c)
draw.text((width + 1, fontoffset), c, fill=foreground, font=font)
diff --git a/tools/build-jumper.py b/tools/build-jumper.py
index 6e7f3d733..2df2aa46d 100755
--- a/tools/build-jumper.py
+++ b/tools/build-jumper.py
@@ -9,6 +9,11 @@ import tempfile
boards = {
+ "TLITE": {
+ "PCB": "X7",
+ "PCBREV": "TLITE",
+ "DEFAULT_MODE": "2",
+ },
"T12": {
"PCB": "X7",
"PCBREV": "T12",
@@ -53,7 +58,7 @@ def build(board, translation, srcdir):
command = "cmake %s -DTRANSLATIONS=%s -DJUMPER_RELEASE=YES %s" % (cmake_options, translation, srcdir)
print(command)
os.system(command)
- os.system("make firmware -j6")
+ os.system("make firmware -j16")
os.chdir(cwd)
index = 0
while 1:
diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh
index ca25ac809..be5940308 100755
--- a/tools/commit-tests.sh
+++ b/tools/commit-tests.sh
@@ -148,6 +148,24 @@ if [[ " T8 X7 ALL " =~ \ ${FLAVOR}\ ]] ; then
make -j"${CORES}" tests-radio
fi
+if [[ " TLITE X7 ALL " =~ \ ${FLAVOR}\ ]] ; then
+ # OpenTX on TLITE
+ rm -rf ./*
+ cmake "${COMMON_OPTIONS}" -DPCB=X7 -DPCBREV=TLITE -DHELI=YES -DGVARS=YES "${SRCDIR}"
+ make -j"${CORES}" ${FIRMARE_TARGET}
+ make -j"${CORES}" libsimulator
+ make -j"${CORES}" tests-radio
+fi
+
+if [[ " TX12 X7 ALL " =~ \ ${FLAVOR}\ ]] ; then
+ # OpenTX on TX12
+ rm -rf ./*
+ cmake "${COMMON_OPTIONS}" -DPCB=X7 -DPCBREV=TX12 -DHELI=YES -DGVARS=YES "${SRCDIR}"
+ make -j"${CORES}" ${FIRMARE_TARGET}
+ make -j"${CORES}" libsimulator
+ make -j"${CORES}" tests-radio
+fi
+
if [[ " XLITE ALL " =~ \ ${FLAVOR}\ ]] ; then
# OpenTX on X-Lite
rm -rf ./*