Merge remote-tracking branch 'origin/2.3' into elecpower/cpn-tele-edit-prt

This commit is contained in:
elecpower
2021-02-01 06:39:51 +11:00
140 changed files with 2870 additions and 822 deletions
+1 -1
View File
@@ -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
+2 -2
View File
@@ -2,11 +2,11 @@ project(OpenTX)
set(VERSION_MAJOR "2")
set(VERSION_MINOR "3")
set(VERSION_REVISION "11")
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)
+38
View File
@@ -2082,3 +2082,41 @@ Adam Sosnowski
SaltCtyRacingFPV
Georg Bernhardt
James Mildenhall
Dave Plummer
Ivan Mokris
Patrick Daniels
Stuart Olson
Cory Znebel
Andrey Yarovoy
Christian Pons
Burt Pickard-Richardson
Michal Mesaros
Conrad Young
Martin Mathes
Jens Rainer Hansen
Mark Trible
Marc Dubois
Alan Wilkins
Daniel Hryciuk
Thomas Fox
Sidney B Harden
Augustas Sereika
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
Peter Newman
Kevin Cave
Arold Reinders
+4
View File
@@ -343,8 +343,12 @@ 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)
set(FLAVOUR t8)
elseif(PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019)
set(FLAVOUR x9d+2019)
elseif(PCB STREQUAL X10 AND PCBREV STREQUAL EXPRESS)
+22
View File
@@ -179,6 +179,16 @@
<file>images/simulator/JumperT12/JumperT12-x.png</file>
<file>images/simulator/JumperT12/JumperT12-center.png</file>
<file>images/simulator/JumperT12/JumperT12-top.png</file>
<file>images/simulator/JumperTLITE/bottom.png</file>
<file>images/simulator/JumperTLITE/bottom_right.png</file>
<file>images/simulator/JumperTLITE/bottom_left.png</file>
<file>images/simulator/JumperTLITE/left.png</file>
<file>images/simulator/JumperTLITE/left_top.png</file>
<file>images/simulator/JumperTLITE/left_bottom.png</file>
<file>images/simulator/JumperTLITE/right.png</file>
<file>images/simulator/JumperTLITE/right_top.png</file>
<file>images/simulator/JumperTLITE/right_bottom.png</file>
<file>images/simulator/JumperTLITE/top.png</file>
<file>images/simulator/TX12/left.png</file>
<file>images/simulator/TX12/left-pageup.png</file>
<file>images/simulator/TX12/left-pagedn.png</file>
@@ -190,6 +200,18 @@
<file>images/simulator/TX12/right-mdl.png</file>
<file>images/simulator/TX12/bottom.png</file>
<file>images/simulator/TX12/top.png</file>
<file>images/simulator/T8/left.png</file>
<file>images/simulator/T8/left-pageup.png</file>
<file>images/simulator/T8/left-pagedn.png</file>
<file>images/simulator/T8/left-rtn.png</file>
<file>images/simulator/T8/left-sys.png</file>
<file>images/simulator/T8/right.png</file>
<file>images/simulator/T8/right-ent.png</file>
<file>images/simulator/T8/right-mdl.png</file>
<file>images/simulator/T8/right-up.png</file>
<file>images/simulator/T8/right-dn.png</file>
<file>images/simulator/T8/bottom.png</file>
<file>images/simulator/T8/top.png</file>
<file>images/simulator/JumperT16/left.png</file>
<file>images/simulator/JumperT16/right.png</file>
<file>images/simulator/JumperT16/top.png</file>
+33 -5
View File
@@ -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:
@@ -87,6 +89,8 @@ uint32_t Boards::getFourCC(Type board)
return 0x3878746F;
case BOARD_RADIOMASTER_TX12:
return 0x4178746F;
case BOARD_RADIOMASTER_T8:
return 0x4378746F;
case BOARD_UNKNOWN:
break;
}
@@ -113,7 +117,9 @@ 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;
case BOARD_UNKNOWN:
return EESIZE_MAX;
@@ -148,7 +154,9 @@ 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;
case BOARD_HORUS_X12S:
case BOARD_X10:
@@ -181,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"},
@@ -232,6 +240,16 @@ SwitchInfo Boards::getSwitchInfo(Board::Type board, int index)
if (index < DIM(switches))
return switches[index];
}
else if (IS_RADIOMASTER_T8(board)) {
const Board::SwitchInfo switches[] = {
{SWITCH_TOGGLE, "SA"},
{SWITCH_3POS, "SB"},
{SWITCH_3POS, "SC"},
{SWITCH_TOGGLE, "SD"}
};
if (index < DIM(switches))
return switches[index];
}
else if (IS_JUMPER_T12(board)) {
const Board::SwitchInfo switches[] = {
{SWITCH_3POS, "SA"},
@@ -310,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))
@@ -367,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))
@@ -383,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);
@@ -530,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:
@@ -560,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:
@@ -568,6 +594,8 @@ QString Boards::getBoardName(Board::Type board)
return "Radiomaster TX16S";
case BOARD_RADIOMASTER_TX12:
return "Radiomaster TX12";
case BOARD_RADIOMASTER_T8:
return "Radiomaster T8";
default:
return tr("Unknown");
}
+15 -3
View File
@@ -53,10 +53,12 @@ namespace Board {
BOARD_RADIOMASTER_TX16S,
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_TX12;
enum PotType
{
POT_NONE,
@@ -204,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;
@@ -224,6 +231,11 @@ inline bool IS_RADIOMASTER_TX12(Board::Type board)
return board == Board::BOARD_RADIOMASTER_TX12;
}
inline bool IS_RADIOMASTER_T8(Board::Type board)
{
return board == Board::BOARD_RADIOMASTER_T8;
}
inline bool IS_FAMILY_T16(Board::Type board)
{
return board == Board::BOARD_JUMPER_T16 || board == Board::BOARD_RADIOMASTER_TX16S || board == Board::BOARD_JUMPER_T18;
@@ -231,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;
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)
@@ -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;
@@ -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);
}
@@ -37,6 +37,8 @@
#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 {
public:
@@ -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:
@@ -68,6 +70,8 @@ const char * OpenTxEepromInterface::getName()
return "OpenTX for Radiomaster TX16S";
case BOARD_RADIOMASTER_TX12:
return "OpenTX for Radiomaster TX12";
case BOARD_RADIOMASTER_T8:
return "OpenTX for Radiomaster T8";
case BOARD_TARANIS_X9D:
return "OpenTX for FrSky Taranis X9D";
case BOARD_TARANIS_X9DP:
@@ -336,9 +340,15 @@ 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;
}
else if (IS_RADIOMASTER_T8(board)) {
variant |= RADIOMASTER_T8_VARIANT;
}
OpenTxGeneralData generator((GeneralSettings &)radioData.generalSettings, board, version, variant);
// generator.dump();
QByteArray data;
@@ -683,8 +693,12 @@ 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))
return RADIOMASTER_T8_VARIANT;
else
return 0;
case MavlinkTelemetry:
@@ -746,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;
}
@@ -778,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;
}
@@ -949,11 +963,21 @@ 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;
}
}
else if (IS_RADIOMASTER_T8(board)) {
if (variant != RADIOMASTER_T8_VARIANT) {
variantError = true;
}
}
else if (IS_TARANIS(board)) {
if (variant != 0) {
variantError = true;
@@ -1275,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);
/* Jumper T16 board */
firmware = new OpenTxFirmware("opentx-t16", Firmware::tr("Jumper T16 / T16+ / T16 Pro"), BOARD_JUMPER_T16);
addOpenTxFrskyOptions(firmware);
@@ -1294,6 +1328,17 @@ void registerOpenTxFirmwares()
registerOpenTxFirmware(firmware);
addOpenTxRfOptions(firmware, FLEX);
/* Radiomaster T8 board */
firmware = new OpenTxFirmware("opentx-t8", QCoreApplication::translate("Firmware", "Radiomaster T8"), BOARD_RADIOMASTER_T8);
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, NONE);
firmware->addOption("bindkey", Firmware::tr("Allow bind using bind key"));
/* Radiomaster TX16S board */
firmware = new OpenTxFirmware("opentx-tx16s", Firmware::tr("Radiomaster TX16S / SE / Hall / Masterfire"), BOARD_RADIOMASTER_TX16S);
addOpenTxFrskyOptions(firmware);
+1 -1
View File
@@ -309,7 +309,7 @@ bool SensorData::isSourceAvailable(const ModelData * model, const int index)
const int sensorcnt = firmware->getCapability(Sensors);
const int i = abs(index);
if (model && sensorcnt > 0 and i <= sensorcnt) {
if (model && sensorcnt > 0 && i <= sensorcnt) {
if (i > 0)
return model->sensorData[i - 1].isAvailable();
else
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

+1 -1
View File
@@ -1585,7 +1585,7 @@ void MainWindow::updateWindowActions()
QString scut;
if (++count < 10)
scut = tr("Alt+%1").arg(count);
QAction * act = addActToGroup(windowsListActions, "", "", "window_ptr", qVariantFromValue(win), QVariant(), scut);
QAction * act = addActToGroup(windowsListActions, "", "", "window_ptr", QVariant::fromValue(win), QVariant(), scut);
act->setChecked(win == mdiArea->activeSubWindow());
updateWindowActionTitle(win, act);
}
+4
View File
@@ -13,9 +13,11 @@ set(simulation_SRCS
simulateduiwidgetX10.cpp
simulateduiwidgetX12.cpp
simulateduiwidgetJumperT12.cpp
simulateduiwidgetJumperTLITE.cpp
simulateduiwidgetJumperT16.cpp
simulateduiwidgetJumperT18.cpp
simulateduiwidgetTX12.cpp
simulateduiwidgetT8.cpp
simulateduiwidgetTX16S.cpp
simulatorinterface.cpp
simulatormainwindow.cpp
@@ -40,9 +42,11 @@ set(simulation_UIS
simulateduiwidgetX10.ui
simulateduiwidgetX12.ui
simulateduiwidgetJumperT12.ui
simulateduiwidgetJumperTLITE.ui
simulateduiwidgetJumperT16.ui
simulateduiwidgetJumperT18.ui
simulateduiwidgetTX12.ui
simulateduiwidgetT8.ui
simulateduiwidgetTX16S.ui
simulatormainwindow.ui
simulatorstartupdialog.ui
@@ -112,10 +112,12 @@ namespace Ui {
class SimulatedUIWidgetX10;
class SimulatedUIWidgetX12;
class SimulatedUIWidgetJumperT12;
class SimulatedUIWidgetJumperTLITE;
class SimulatedUIWidgetJumperT16;
class SimulatedUIWidgetJumperT18;
class SimulatedUIWidgetTX16S;
class SimulatedUIWidgetTX12;
class SimulatedUIWidgetT8;
}
class SimulatedUIWidget9X: public SimulatedUIWidget
@@ -242,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
@@ -278,6 +292,17 @@ class SimulatedUIWidgetTX12: public SimulatedUIWidget
Ui::SimulatedUIWidgetTX12 * ui;
};
class SimulatedUIWidgetT8: public SimulatedUIWidget
{
Q_OBJECT
public:
explicit SimulatedUIWidgetT8(SimulatorInterface * simulator, QWidget * parent = nullptr);
virtual ~SimulatedUIWidgetT8();
private:
Ui::SimulatedUIWidgetT8 * ui;
};
class SimulatedUIWidgetTX16S: public SimulatedUIWidget
{
@@ -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<int>() << 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<int>() << 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<int>() << 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<int>() << 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<int>() << 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<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(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;
}
@@ -0,0 +1,258 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SimulatedUIWidgetJumperTLITE</class>
<widget class="QWidget" name="SimulatedUIWidgetJumperTLITE">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>501</width>
<height>310</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>501</width>
<height>310</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>501</width>
<height>310 </height>
</size>
</property>
<property name="windowTitle">
<string notr="true">Jumper T-Lite 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>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="1" column="0" rowspan="3">
<widget class="ButtonsWidget" name="leftbuttons" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>122</width>
<height>287</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>122</width>
<height>287</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperTLITE/left.png);</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="LcdWidget" name="lcd" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>800</width>
<height>155</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>800</width>
<height>155</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(215, 243, 255);</string>
</property>
</widget>
</item>
<item row="1" column="2" rowspan="3">
<widget class="ButtonsWidget" name="rightbuttons" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>122</width>
<height>287</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>122</width>
<height>287</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperTLITE/right.png)</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QWidget" name="top" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>258</width>
<height>26</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>258</width>
<height>26</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperTLITE/top.png)</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="ButtonsWidget" name="bottombuttons" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>258</width>
<height>106</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>258</width>
<height>106</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperTLITE/bottom.png)</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>10</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>12</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>12</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="4" column="0" colspan="3">
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>10</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>10</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(247, 245, 245);</string>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
</layout>
</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/>
<connections/>
</ui>
@@ -0,0 +1,67 @@
#include "simulateduiwidget.h"
#include "ui_simulateduiwidgetT8.h"
// NOTE: RadioUiAction(NUMBER,...): NUMBER relates to enum EnumKeys in the specific board.h
SimulatedUIWidgetT8::SimulatedUIWidgetT8(SimulatorInterface *simulator, QWidget * parent):
SimulatedUIWidget(simulator, parent),
ui(new Ui::SimulatedUIWidgetT8)
{
RadioUiAction * act;
ui->setupUi(this);
// add actions in order of appearance on the help menu
act = new RadioUiAction(5, QList<int>() << Qt::Key_Up, SIMU_STR_HLP_KEY_UP, SIMU_STR_HLP_ACT_MDL);
addRadioWidget(ui->rightbuttons->addArea(QRect(25, 40, 35, 20), "T8/right-mdl.png", act));
act = new RadioUiAction(6, QList<int>() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_GO_UP, SIMU_STR_HLP_ACT_UP);
addRadioWidget(ui->rightbuttons->addArea(QRect(25, 90, 35, 20), "T8/right-up.png", act));
act = new RadioUiAction(7, QList<int>() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_GO_DN, SIMU_STR_HLP_ACT_DN);
addRadioWidget(ui->rightbuttons->addArea(QRect(25, 135, 35, 20), "T8/right-dn.png", act));
act = new RadioUiAction(1, QList<int>() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_ACTIVATE, SIMU_STR_HLP_ACT_ENT);
addRadioWidget(ui->rightbuttons->addArea(QRect(25, 180, 35, 20), "T8/right-ent.png", act));
act = new RadioUiAction(4, QList<int>() << Qt::Key_Left, SIMU_STR_HLP_KEY_LFT, SIMU_STR_HLP_ACT_SYS);
addRadioWidget(ui->leftbuttons->addArea(QRect(60, 45, 35, 20), "T8/left-sys.png", act));
act = new RadioUiAction(0, QList<int>() << Qt::Key_Down << Qt::Key_Delete << Qt::Key_Escape << Qt::Key_Backspace, SIMU_STR_HLP_KEYS_EXIT, SIMU_STR_HLP_ACT_EXIT);
addRadioWidget(ui->leftbuttons->addArea(QRect(60, 85, 35, 20), "T8/left-rtn.png", act));
act = new RadioUiAction(3, QList<int>() << Qt::Key_PageDown, SIMU_STR_HLP_KEY_PGDN, SIMU_STR_HLP_ACT_PGDN);
addRadioWidget(ui->leftbuttons->addArea(QRect(60, 135, 35, 20), "T8/left-pagedn.png", act));
act = new RadioUiAction(2, QList<int>() << Qt::Key_PageUp, SIMU_STR_HLP_KEY_PGUP, SIMU_STR_HLP_ACT_PGUP);
addRadioWidget(ui->leftbuttons->addArea(QRect(60, 180, 35, 20), "T8/left-pageup.png", act));
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);
}
SimulatedUIWidgetT8::~SimulatedUIWidgetT8()
{
delete ui;
}
@@ -0,0 +1,258 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SimulatedUIWidgetT8</class>
<widget class="QWidget" name="SimulatedUIWidgetT8">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>480</width>
<height>300</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>480</width>
<height>300</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>480</width>
<height>300</height>
</size>
</property>
<property name="windowTitle">
<string notr="true">Radiomaster T8 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>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="1" column="0" rowspan="3">
<widget class="ButtonsWidget" name="leftbuttons" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>113</width>
<height>280</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>113</width>
<height>280</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/T8/left.png);</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="LcdWidget" name="lcd" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>254</width>
<height>158</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>254</width>
<height>158</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(215, 243, 255);</string>
</property>
</widget>
</item>
<item row="1" column="2" rowspan="3">
<widget class="ButtonsWidget" name="rightbuttons" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>113</width>
<height>280</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>113</width>
<height>280</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/T8/right.png)</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QWidget" name="top" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>254</width>
<height>35</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>254</width>
<height>35</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/T8/top.png)</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QWidget" name="bottom" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>254</width>
<height>113</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>254</width>
<height>113</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/T8/bottom.png)</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>10</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>12</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>12</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="4" column="0" colspan="3">
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>10</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>10</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(247, 245, 245);</string>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
</layout>
</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/>
<connections/>
</ui>
@@ -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;
@@ -100,6 +103,9 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato
case Board::BOARD_RADIOMASTER_TX12:
radioUiWidget = new SimulatedUIWidgetTX12(simulator, this);
break;
case Board::BOARD_RADIOMASTER_T8:
radioUiWidget = new SimulatedUIWidgetT8(simulator, this);
break;
case Board::BOARD_RADIOMASTER_TX16S:
radioUiWidget = new SimulatedUIWidgetTX16S(simulator, this);
break;
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

+411
View File
@@ -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 }
+4
View File
@@ -345,6 +345,10 @@ if(RADIOMASTER_RELEASE)
add_definitions(-DRADIOMASTER_RELEASE)
endif()
if(RADIOMASTER_RTF_RELEASE)
add_definitions(-DRADIOMASTER_RTF_RELEASE)
endif()
if(TBS_RELEASE)
add_definitions(-DTBS_RELEASE)
endif()
+6 -2
View File
@@ -208,7 +208,11 @@ enum TrainerMode {
};
#endif
#if defined(RADIO_T16) && !defined(INTERNAL_MODULE_MULTI)
#define TRAINER_MODE_MIN() TRAINER_MODE_MASTER_TRAINER_JACK
#if !defined(HARDWARE_EXTERNAL_MODULE)
#define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE
#elif defined(RADIO_T16) && !defined(INTERNAL_MODULE_MULTI)
#if defined(BLUETOOTH)
#define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH
#else
@@ -670,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")
Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 81 KiB

+2 -1
View File
@@ -181,8 +181,9 @@ uint8_t * lcdLoadBitmap(uint8_t * dest, const char * filename, uint8_t width, ui
#if defined(BOOT)
#define BLINK_ON_PHASE (0)
#else
#define BLINK_ON_PHASE (g_blinkTmr10ms & (1<<6))
#define SLOW_BLINK_ON_PHASE (g_blinkTmr10ms & (1<<7))
#define BLINK_ON_PHASE (g_blinkTmr10ms & (1<<6))
#define FAST_BLINK_ON_PHASE (g_blinkTmr10ms & (1<<4))
#endif
inline display_t getPixel(uint8_t x, uint8_t y)
+1 -1
View File
@@ -165,7 +165,7 @@ void menuModelCurveOne(event_t event)
}
break;
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_MDL)
case EVT_KEY_FIRST(KEY_MODEL):
pushMenu(menuChannelsView);
killEvents(event);
+1 -1
View File
@@ -49,7 +49,7 @@ enum ExposFields {
void menuModelExpoOne(event_t event)
{
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_MDL)
if (event == EVT_KEY_FIRST(KEY_MODEL)) {
pushMenu(menuChannelsView);
killEvents(event);
+1 -1
View File
@@ -85,7 +85,7 @@ void drawOffsetBar(uint8_t x, uint8_t y, MixData * md)
void menuModelMixOne(event_t event)
{
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_MDL)
if (event == EVT_KEY_FIRST(KEY_MODEL)) {
pushMenu(menuChannelsView);
killEvents(event);
+3 -3
View File
@@ -203,7 +203,7 @@ void menuModelSelect(event_t event)
}
break;
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEDN)
case EVT_KEY_FIRST(KEY_PAGEUP):
chainMenu(menuTabModel[DIM(menuTabModel)-1]);
killEvents(event);
@@ -212,7 +212,7 @@ void menuModelSelect(event_t event)
case EVT_KEY_FIRST(KEY_PAGEDN):
chainMenu(menuModelSetup);
break;
#elif defined(NAVIGATION_X7)
#elif defined(KEYS_GPIO_REG_PAGE)
case EVT_KEY_LONG(KEY_PAGE):
chainMenu(menuTabModel[DIM(menuTabModel)-1]);
killEvents(event);
@@ -244,7 +244,7 @@ void menuModelSelect(event_t event)
#endif
#endif
#if defined(NAVIGATION_X7)
#if defined(ROTARY_ENCODER) && defined(NAVIGATION_X7)
case EVT_ROTARY_LEFT:
case EVT_ROTARY_RIGHT:
#endif
+72 -29
View File
@@ -111,7 +111,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_2,
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_3,
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
#if defined(MULTIMODULE)
@@ -156,6 +156,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_EXTRA_MODULE_CHANNELS,
ITEM_MODEL_SETUP_EXTRA_MODULE_BIND,
#endif
#endif
#if defined(PCBTARANIS)
ITEM_MODEL_SETUP_TRAINER_LABEL,
@@ -183,13 +184,16 @@ enum MenuModelSetupItems {
#define REGISTRATION_ID_ROWS
#endif
#if defined(HARDWARE_INTERNAL_MODULE)
#if defined(HARDWARE_INTERNAL_MODULE) && defined(HARDWARE_EXTERNAL_MODULE)
#define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE)
#define CURRENT_RECEIVER_EDITED(k) (k - (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_RECEIVER_1 : ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_1))
#elif defined(PCBSKY9X)
#define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTRA_MODULE_LABEL ? EXTRA_MODULE : EXTERNAL_MODULE)
#define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTRA_MODULE_LABEL ? EXTRA_MODULE : EXTERNAL_MODULE)
#elif defined(HARDWARE_INTERNAL_MODULE)
#define CURRENT_MODULE_EDITED(k) (INTERNAL_MODULE)
#define CURRENT_RECEIVER_EDITED(k) (k - ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_1)
#else
#define CURRENT_MODULE_EDITED(k) (EXTERNAL_MODULE)
#define CURRENT_MODULE_EDITED(k) (EXTERNAL_MODULE)
#define CURRENT_RECEIVER_EDITED(k) (k - ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_RECEIVER_1)
#endif
@@ -335,6 +339,32 @@ void onBluetoothConnectMenu(const char * result)
#define INTERNAL_MODULE_ROWS
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
#define EXTERNAL_MODULE_ROWS \
LABEL(ExternalModule), \
MODULE_TYPE_ROWS(EXTERNAL_MODULE), \
MULTIMODULE_TYPE_ROWS(EXTERNAL_MODULE) /* PROTOCOL */ \
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE) /* SUBTYPE */ \
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE) \
AFHDS3_PROTOCOL_ROW(EXTERNAL_MODULE) \
AFHDS3_MODE_ROWS(EXTERNAL_MODULE) \
MODULE_CHANNELS_ROWS(EXTERNAL_MODULE), \
IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, MODULE_BIND_ROWS(EXTERNAL_MODULE)), /* line reused for PPM: PPM settings */ \
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), /* RxNum */ \
AFHDS3_MODULE_ROWS(EXTERNAL_MODULE) \
MODULE_POWER_ROW(EXTERNAL_MODULE), \
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, MODULE_OPTION_ROW(EXTERNAL_MODULE)), \
MULTIMODULE_MODULE_ROWS(EXTERNAL_MODULE) \
FAILSAFE_ROWS(EXTERNAL_MODULE), /* ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE */ \
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 1), /* Range check and Register buttons */ \
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), /* Module options */ \
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), /* Receiver 1 */ \
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), /* Receiver 2 */ \
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), /* Receiver 3 */
#else
#define EXTERNAL_MODULE_ROWS
#endif
void menuModelSetup(event_t event)
{
int8_t old_editMode = s_editMode;
@@ -370,26 +400,7 @@ void menuModelSetup(event_t event)
INTERNAL_MODULE_ROWS
LABEL(ExternalModule),
MODULE_TYPE_ROWS(EXTERNAL_MODULE),
MULTIMODULE_TYPE_ROWS(EXTERNAL_MODULE) // PROTOCOL
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE) // SUBTYPE
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE)
AFHDS3_PROTOCOL_ROW(EXTERNAL_MODULE)
AFHDS3_MODE_ROWS(EXTERNAL_MODULE)
MODULE_CHANNELS_ROWS(EXTERNAL_MODULE),
IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, MODULE_BIND_ROWS(EXTERNAL_MODULE)), // line reused for PPM: PPM settings
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // RxNum
AFHDS3_MODULE_ROWS(EXTERNAL_MODULE)
MODULE_POWER_ROW(EXTERNAL_MODULE),
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, MODULE_OPTION_ROW(EXTERNAL_MODULE)),
MULTIMODULE_MODULE_ROWS(EXTERNAL_MODULE)
FAILSAFE_ROWS(EXTERNAL_MODULE), //ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 1), // Range check and Register buttons
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Module options
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 1
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 2
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 3
EXTERNAL_MODULE_ROWS
TRAINER_ROWS
});
@@ -857,7 +868,7 @@ void menuModelSetup(event_t event)
#if !defined(INTERNAL_MODULE_MULTI)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE:
{
lcdDrawTextAlignedLeft(y, INDENT TR_MODE);
lcdDrawText(INDENT_WIDTH, y, STR_MODE);
#if defined(INTERNAL_MODULE_PXX1)
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_INTERNAL_MODULE_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
if (isModuleXJT(INTERNAL_MODULE))
@@ -912,14 +923,18 @@ void menuModelSetup(event_t event)
break;
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL:
lcdDrawTextAlignedLeft(y, STR_EXTERNALRF);
break;
#endif
#if defined(INTERNAL_MODULE_MULTI)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE:
#endif
lcdDrawTextAlignedLeft(y, INDENT TR_MODE);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_EXTERNAL_MODULE_PROTOCOLS, moduleIdx == EXTERNAL_MODULE ? reusableBuffer.moduleSetup.newType : g_model.moduleData[moduleIdx].type, menuHorizontalPosition==0 ? attr : 0);
if (isModuleXJT(moduleIdx))
@@ -1013,7 +1028,9 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_PROTOCOL:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL:
#endif
{
lcdDrawTextAlignedLeft(y, TR_TYPE);
int multi_rfProto = g_model.moduleData[moduleIdx].getMultiProtocol();
@@ -1052,7 +1069,9 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_SUBTYPE:
#endif
{
lcdDrawTextAlignedLeft(y, STR_SUBTYPE);
lcdDrawMultiSubProtocolString(MODEL_SETUP_2ND_COLUMN, y, moduleIdx, g_model.moduleData[moduleIdx].subType, attr);
@@ -1073,7 +1092,7 @@ void menuModelSetup(event_t event)
#if defined(AFHDS3)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS_PROTOCOL:
lcdDrawTextAlignedLeft(y, TR_PROTO);
lcdDrawText(INDENT_WIDTH, y, STR_PROTOCOL);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_AFHDS3_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].subType, attr);
if (attr && s_editMode > 0 && menuHorizontalPosition == 0) {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].subType, AFHDS_SUBTYPE_FIRST, AFHDS_SUBTYPE_LAST);
@@ -1095,7 +1114,7 @@ void menuModelSetup(event_t event)
lcdDrawTextAlignedLeft(y, INDENT TR_MODE);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VTRAINERMODES, g_model.trainerData.mode, attr);
if (attr) {
g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX(), EE_MODEL, isTrainerModeAvailable);
g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, TRAINER_MODE_MIN(), TRAINER_MODE_MAX(), EE_MODEL, isTrainerModeAvailable);
#if defined(BLUETOOTH)
if (checkIncDec_Ret) {
bluetooth.state = BLUETOOTH_STATE_OFF;
@@ -1182,7 +1201,9 @@ void menuModelSetup(event_t event)
#if defined(PCBSKY9X)
case ITEM_MODEL_SETUP_EXTRA_MODULE_CHANNELS:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS:
#endif
{
ModuleData & moduleData = g_model.moduleData[moduleIdx];
lcdDrawTextAlignedLeft(y, STR_CHANNELRANGE);
@@ -1308,7 +1329,9 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE:
#endif
{
ModuleData & moduleData = g_model.moduleData[moduleIdx];
if (isModulePPM(moduleIdx)) {
@@ -1462,7 +1485,9 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE:
#endif
{
ModuleData &moduleData = g_model.moduleData[moduleIdx];
lcdDrawTextAlignedLeft(y, STR_FAILSAFE);
@@ -1523,7 +1548,9 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS:
#endif
{
#if defined(MULTIMODULE)
if (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx)) {
@@ -1602,7 +1629,9 @@ void menuModelSetup(event_t event)
#if defined(INTERNAL_MODULE_MULTI)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_POWER:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER:
#endif
{
auto & module = g_model.moduleData[moduleIdx];
// Lite FCC / Lite FLEX / Lite Pro Flex
@@ -1687,7 +1716,9 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_AUTOBIND:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND:
#endif
if (g_model.moduleData[moduleIdx].getMultiProtocol() == MODULE_SUBTYPE_MULTI_DSM2) {
int8_t value = (g_model.moduleData[moduleIdx].multi.optionValue & 0x02) >> 1;
lcdDrawText(INDENT_WIDTH, y, STR_MULTI_SERVOFREQ);
@@ -1708,13 +1739,17 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_DISABLE_TELEM:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_DISABLE_TELEM:
#endif
g_model.moduleData[moduleIdx].multi.disableTelemetry = editCheckBox(g_model.moduleData[moduleIdx].multi.disableTelemetry, MODEL_SETUP_2ND_COLUMN, y, INDENT TR_DISABLE_TELEM, attr, event);
break;
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_DISABLE_MAPPING:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_DISABLE_MAPPING:
#endif
g_model.moduleData[moduleIdx].multi.disableMapping = editCheckBox(g_model.moduleData[moduleIdx].multi.disableMapping, MODEL_SETUP_2ND_COLUMN, y, INDENT TR_DISABLE_CH_MAP, attr, event);
break;
#endif
@@ -1739,7 +1774,10 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS:
#endif
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS: {
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS:
#endif
{
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
char statusText[64];
@@ -1750,7 +1788,10 @@ void menuModelSetup(event_t event)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS:
#endif
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS: {
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS:
#endif
{
lcdDrawTextAlignedLeft(y, STR_MODULE_SYNC);
char statusText[64];
getModuleSyncStatusString(moduleIdx, statusText);
@@ -1848,11 +1889,13 @@ void menuModelSetup(event_t event)
checkModelIdUnique(g_eeGeneral.currModel, EXTRA_MODULE);
break;
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_MODEL_NUM:
if (menuHorizontalPosition == 0)
checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE);
break;
#endif
}
}
}
+8 -3
View File
@@ -49,10 +49,15 @@ void menuRadioDiagKeys(event_t event)
displayKeyState(i&1? 20*FW : 18*FW, y, TRM_BASE+i);
}
if (i <= KEY_MAX) {
y = MENU_HEADER_HEIGHT + 1 + FH*i;
if (i == 7) {
y = MENU_HEADER_HEIGHT + 1 + FH * 6;
lcdDrawTextAtIndex(8, y, STR_VKEYS, i, 0);
displayKeyState(lcdNextPos + 10, y, i);
}
else if (i <= KEY_MAX) {
y = MENU_HEADER_HEIGHT + 1 + FH * i;
lcdDrawTextAtIndex(0, y, STR_VKEYS, i, 0);
displayKeyState(5*FW+2, y, i);
displayKeyState(5 * FW + 2, y, i);
}
#if defined(PCBSKY9X)
+16 -10
View File
@@ -79,13 +79,13 @@ enum {
ITEM_RADIO_SETUP_MEMORY_WARNING,
ITEM_RADIO_SETUP_ALARM_WARNING,
ITEM_RADIO_SETUP_RSSI_POWEROFF_ALARM,
ITEM_RADIO_SETUP_BACKLIGHT_LABEL,
ITEM_RADIO_SETUP_BACKLIGHT_MODE,
ITEM_RADIO_SETUP_BACKLIGHT_DELAY,
ITEM_RADIO_SETUP_BRIGHTNESS,
CASE_BACKLIGHT(ITEM_RADIO_SETUP_BACKLIGHT_LABEL)
CASE_BACKLIGHT(ITEM_RADIO_SETUP_BACKLIGHT_MODE)
CASE_BACKLIGHT(ITEM_RADIO_SETUP_BACKLIGHT_DELAY)
CASE_BACKLIGHT(ITEM_RADIO_SETUP_BRIGHTNESS)
CASE_PWM_BACKLIGHT(ITEM_RADIO_SETUP_BACKLIGHT_BRIGHTNESS_OFF)
CASE_PWM_BACKLIGHT(ITEM_RADIO_SETUP_BACKLIGHT_BRIGHTNESS_ON)
ITEM_RADIO_SETUP_FLASH_BEEP,
CASE_BACKLIGHT(ITEM_RADIO_SETUP_FLASH_BEEP)
CASE_SPLASH_PARAM(ITEM_RADIO_SETUP_DISABLE_SPLASH)
CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_ON_SPEED)
CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_OFF_SPEED)
@@ -152,10 +152,14 @@ void menuRadioSetup(event_t event)
CASE_GYRO(0)
CASE_GYRO(0)
0, LABEL(ALARMS), 0, CASE_CAPACITY(0)
0, 0, 0, 0,
LABEL(BACKLIGHT), 0, 0, 0, CASE_PWM_BACKLIGHT(0)
0, 0, 0, 0, /* ITEM_RADIO_SETUP_INACTIVITY_ALARM ITEM_RADIO_SETUP_MEMORY_WARNING ITEM_RADIO_SETUP_ALARM_WARNING ITEM_RADIO_SETUP_RSSI_POWEROFF_ALARM */
CASE_BACKLIGHT(LABEL(BACKLIGHT))
CASE_BACKLIGHT(0)
CASE_BACKLIGHT(0)
CASE_BACKLIGHT(0)
CASE_PWM_BACKLIGHT(0)
0,
CASE_PWM_BACKLIGHT(0)
CASE_BACKLIGHT(0)
CASE_SPLASH_PARAM(0)
CASE_PWR_BUTTON_PRESS(0)
CASE_PWR_BUTTON_PRESS(0)
@@ -251,7 +255,7 @@ void menuRadioSetup(event_t event)
putsVolts(lcdLastRightPos+FW, y, 120+g_eeGeneral.vBatMax, (menuHorizontalPosition>0 ? attr : 0)|LEFT|NO_UNIT);
if (attr && s_editMode>0) {
if (menuHorizontalPosition==0)
CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatMin, -50, g_eeGeneral.vBatMax+29); // min=4.0V
CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatMin, -60, g_eeGeneral.vBatMax+29); // min=3.0V
else
CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatMax, g_eeGeneral.vBatMin-29, +40); // max=16.0V
}
@@ -411,7 +415,7 @@ void menuRadioSetup(event_t event)
case ITEM_RADIO_SETUP_BATTERY_WARNING:
lcdDrawTextAlignedLeft(y, STR_BATTERYWARNING);
putsVolts(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.vBatWarn, attr|LEFT);
if(attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatWarn, 40, 120); //4-12V
if(attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatWarn, 30, 120); //3-12V
break;
case ITEM_RADIO_SETUP_MEMORY_WARNING:
@@ -450,6 +454,7 @@ void menuRadioSetup(event_t event)
if(attr) g_eeGeneral.inactivityTimer = checkIncDec(event, g_eeGeneral.inactivityTimer, 0, 250, EE_GENERAL); //0..250minutes
break;
#if defined(BACKLIGHT_GPIO)
case ITEM_RADIO_SETUP_BACKLIGHT_LABEL:
lcdDrawTextAlignedLeft(y, STR_BACKLIGHT_LABEL);
break;
@@ -478,6 +483,7 @@ void menuRadioSetup(event_t event)
g_eeGeneral.backlightBright = 100 - b;
}
break;
#endif
#if defined(PWM_BACKLIGHT)
case ITEM_RADIO_SETUP_BACKLIGHT_BRIGHTNESS_OFF:
+1 -1
View File
@@ -42,7 +42,7 @@ enum AboutScreens {
#define ABOUT_X 2
#define ABOUT_INDENT 4
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEDN)
#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP)
#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGEDN)
#elif defined(NAVIGATION_X7)
+6 -1
View File
@@ -26,7 +26,12 @@ constexpr coord_t CHANNEL_GAUGE_OFFSET = CHANNEL_VALUE_OFFSET;
constexpr coord_t CHANNEL_BAR_WIDTH = 70;
constexpr coord_t CHANNEL_PROPERTIES_OFFSET = CHANNEL_GAUGE_OFFSET + CHANNEL_BAR_WIDTH + 2;
#if defined(NAVIGATION_X7_TX12)
#if defined(RADIO_T8)
#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP)
#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGEDN)
#define EVT_KEY_NEXT_PAGE EVT_KEY_BREAK(KEY_PLUS)
#define EVT_KEY_PREVIOUS_PAGE EVT_KEY_BREAK(KEY_MINUS)
#elif defined(NAVIGATION_X7_TX12)
#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP)
#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGEDN)
#define EVT_KEY_NEXT_PAGE EVT_ROTARY_RIGHT
+13 -2
View File
@@ -93,8 +93,9 @@ void doMainScreenGraphics()
if (g_model.throttleReversed && CONVERT_MODE(2) == THR_STICK)
calibStickVert = -calibStickVert;
drawStick(RBOX_CENTERX, calibratedAnalogs[CONVERT_MODE(3)], calibStickVert);
#if defined(HARDWARE_POT1)
drawPotsBars();
#endif
}
void displayTrims(uint8_t phase)
@@ -213,7 +214,16 @@ void displayVoltageOrAlarm()
#define displayVoltageOrAlarm() displayBattVoltage()
#endif
#if defined(NAVIGATION_X7_TX12)
#if defined(RADIO_T8)
#define EVT_KEY_CONTEXT_MENU EVT_KEY_LONG(KEY_ENTER)
#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP)
#define EVT_KEY_NEXT_VIEW EVT_KEY_FIRST(KEY_PAGEDN)
#define EVT_KEY_NEXT_PAGE EVT_KEY_FIRST(KEY_PLUS)
#define EVT_KEY_PREVIOUS_PAGE EVT_KEY_FIRST(KEY_MINUS)
#define EVT_KEY_MODEL_MENU EVT_KEY_LONG(KEY_MODEL)
#define EVT_KEY_GENERAL_MENU EVT_KEY_LONG(KEY_SYS)
#define EVT_KEY_TELEMETRY EVT_KEY_LONG(KEY_PAGEUP)
#elif defined(NAVIGATION_X7_TX12)
#define EVT_KEY_CONTEXT_MENU EVT_KEY_LONG(KEY_ENTER)
#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_FIRST(KEY_PAGEUP)
#define EVT_KEY_NEXT_VIEW EVT_KEY_FIRST(KEY_PAGEDN)
@@ -410,6 +420,7 @@ void menuMainView(event_t event)
killEvents(event);
break;
case EVT_KEY_FIRST(KEY_EXIT):
#if defined(GVARS)
if (gvarDisplayTimer > 0) {
+6 -6
View File
@@ -31,7 +31,7 @@ void menuStatisticsView(event_t event)
switch (event) {
case EVT_KEY_FIRST(KEY_UP):
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEDN)
case EVT_KEY_BREAK(KEY_PAGEDN):
#elif defined(NAVIGATION_X7)
case EVT_KEY_BREAK(KEY_PAGE):
@@ -41,7 +41,7 @@ void menuStatisticsView(event_t event)
break;
case EVT_KEY_FIRST(KEY_DOWN):
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEUP)
case EVT_KEY_BREAK(KEY_PAGEUP):
killEvents(event);
chainMenu(menuStatisticsDebug2);
@@ -140,7 +140,7 @@ void menuStatisticsDebug(event_t event)
break;
case EVT_KEY_FIRST(KEY_UP):
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEDN)
case EVT_KEY_BREAK(KEY_PAGEDN):
disableVBatBridge();
chainMenu(menuStatisticsDebug2);
@@ -153,7 +153,7 @@ void menuStatisticsDebug(event_t event)
#endif
case EVT_KEY_FIRST(KEY_DOWN):
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEUP)
case EVT_KEY_BREAK(KEY_PAGEUP):
#elif defined(NAVIGATION_X7)
case EVT_KEY_LONG(KEY_PAGE):
@@ -278,7 +278,7 @@ void menuStatisticsDebug2(event_t event)
break;
case EVT_KEY_FIRST(KEY_UP):
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEDN)
case EVT_KEY_BREAK(KEY_PAGEDN):
#elif defined(NAVIGATION_X7)
case EVT_KEY_BREAK(KEY_PAGE):
@@ -287,7 +287,7 @@ void menuStatisticsDebug2(event_t event)
return;
case EVT_KEY_FIRST(KEY_DOWN):
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEUP)
case EVT_KEY_BREAK(KEY_PAGEUP):
#elif defined(NAVIGATION_X7)
case EVT_KEY_LONG(KEY_PAGE):
@@ -47,8 +47,7 @@ enum {
ITEM_RECEIVER_SETTINGS_PWM_RATE,
ITEM_RECEIVER_SETTINGS_TELEMETRY,
ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW,
ITEM_RECEIVER_SETTINGS_SPORT_FPORT,
ITEM_RECEIVER_SETTINGS_FPORT2,
ITEM_RECEIVER_SETTINGS_SPORT_MODE,
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1,
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED2,
ITEM_RECEIVER_SETTINGS_PINMAP_FIRST
@@ -60,6 +59,15 @@ enum {
#define CH_ENABLE_SPORT 4
#define CH_ENABLE_SBUS 5
bool isSPortModeAvailable(int mode)
{
uint8_t receiverId = reusableBuffer.hardwareAndSettings.receiverSettings.receiverId;
if (mode == 2 && !IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_FPORT2)) {
return false;
}
return true;
}
bool menuModelReceiverOptions(event_t event)
{
const int lim = (g_model.extendedLimits ? (512 * LIMIT_EXT_PERCENT / 100) : 512) * 2;
@@ -82,8 +90,7 @@ bool menuModelReceiverOptions(event_t event)
0, // PWM rate
isModuleR9MAccess(g_moduleIdx) && receiverVariant == PXX2_VARIANT_EU && reusableBuffer.hardwareAndSettings.moduleSettings.txPower > 14 /*25mW*/ ? READONLY_ROW : (uint8_t)0, // Telemetry
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_TELEMETRY_25MW, 0),
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_FPORT, 0),
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_FPORT2, 0),
uint8_t((IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_FPORT) || IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_FPORT2)) ? 0 : HIDDEN_ROW),
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
0 // channels ...
@@ -171,21 +178,19 @@ bool menuModelReceiverOptions(event_t event)
}
break;
case ITEM_RECEIVER_SETTINGS_SPORT_FPORT:
lcdDrawText(MENUS_MARGIN_LEFT, y, "F.Port");
reusableBuffer.hardwareAndSettings.receiverSettings.fport = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.fport, RECEIVER_OPTIONS_2ND_COLUMN, y, attr, event);
if (attr && checkIncDec_Ret) {
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
}
break;
case ITEM_RECEIVER_SETTINGS_FPORT2:
lcdDrawText(MENUS_MARGIN_LEFT, y, "F.Port2");
reusableBuffer.hardwareAndSettings.receiverSettings.fport2 = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.fport2, RECEIVER_OPTIONS_2ND_COLUMN, y, attr, event);
if (attr && checkIncDec_Ret) {
case ITEM_RECEIVER_SETTINGS_SPORT_MODE:
{
lcdDrawText(0, y, STR_PROTOCOL);
uint8_t portType = reusableBuffer.hardwareAndSettings.receiverSettings.fport | (reusableBuffer.hardwareAndSettings.receiverSettings.fport2 << 1);
lcdDrawTextAtIndex(LCD_W/2, y, STR_SPORT_MODES, portType, attr);
portType = checkIncDec(event, portType, 0, 2, EE_MODEL, isSPortModeAvailable);
if (checkIncDec_Ret) {
reusableBuffer.hardwareAndSettings.receiverSettings.fport = portType & 0x01;
reusableBuffer.hardwareAndSettings.receiverSettings.fport2 = (portType & 0x02) >> 1;
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
}
break;
}
case ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1:
lcdDrawText(LCD_W/2, y+1, STR_MORE_OPTIONS_AVAILABLE, SMLSIZE|CENTERED);
+1 -1
View File
@@ -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 ) {
@@ -246,6 +245,7 @@ void onModelSelectMenu(const char * result)
if (!confirmModelChange())
return;
}
// we store the latest changes if any
storageFlushCurrentModel();
storageCheck(true);
+4 -2
View File
@@ -577,7 +577,7 @@ void onModelAntennaSwitchConfirm(const char * result)
MODULE_TYPE_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE*/ \
MULTIMODULE_STATUS_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS */ \
MODULE_CHANNELS_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS*/ \
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(IF_INTERNAL_MODULE_ON(isModuleRxNumAvailable(INTERNAL_MODULE) ? (uint8_t)2 : (uint8_t)1))), /* *ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE */\
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, MODULE_BIND_ROWS(INTERNAL_MODULE)), /* *ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE */\
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM*/ \
MODULE_OPTION_ROW(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS */ \
MULTIMODULE_MODULE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_AUTOBIND */ \
@@ -1549,6 +1549,7 @@ bool menuModelSetup(event_t event)
lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, STR_RECEIVER);
int l_posHorz = menuHorizontalPosition;
coord_t bindButtonPos = MODEL_SETUP_2ND_COLUMN;
// RXNUM
if (isModuleRxNumAvailable(moduleIdx)) {
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0 | LEFT, 2);
bindButtonPos += 40;
@@ -1572,12 +1573,13 @@ bool menuModelSetup(event_t event)
else if (attr) {
l_posHorz += 1;
}
// BIND - RANGE
if (isModuleBindRangeAvailable(moduleIdx)) {
drawButton(bindButtonPos, y, STR_MODULE_BIND, (moduleState[moduleIdx].mode == MODULE_MODE_BIND ? BUTTON_ON : BUTTON_OFF) | (l_posHorz==1 ? attr : 0));
if (isModuleRangeAvailable(moduleIdx)) {
drawButton(bindButtonPos + 80, y, STR_MODULE_RANGE, (moduleState[moduleIdx].mode == MODULE_MODE_RANGECHECK ? BUTTON_ON : BUTTON_OFF) | (l_posHorz==2 ? attr : 0));
}
uint8_t newFlag = 0;
uint8_t newFlag = MODULE_MODE_NORMAL;
#if defined(MULTIMODULE)
if (getMultiBindStatus(moduleIdx) == MULTI_BIND_FINISHED) {
setMultiBindStatus(moduleIdx, MULTI_NORMAL_OPERATION);
@@ -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
}
@@ -47,8 +47,7 @@ enum {
ITEM_RECEIVER_SETTINGS_PWM_RATE,
ITEM_RECEIVER_SETTINGS_TELEMETRY,
ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW,
ITEM_RECEIVER_SETTINGS_SPORT_FPORT,
ITEM_RECEIVER_SETTINGS_FPORT2,
ITEM_RECEIVER_SETTINGS_SPORT_MODE,
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1,
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED2,
ITEM_RECEIVER_SETTINGS_PINMAP_FIRST
@@ -60,6 +59,15 @@ enum {
#define CH_ENABLE_SPORT 4
#define CH_ENABLE_SBUS 5
bool isSPortModeAvailable(int mode)
{
uint8_t receiverId = reusableBuffer.hardwareAndSettings.receiverSettings.receiverId;
if (mode == 2 && !IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_FPORT2)) {
return false;
}
return true;
}
void menuModelReceiverOptions(event_t event)
{
const int lim = (g_model.extendedLimits ? (512 * LIMIT_EXT_PERCENT / 100) : 512) * 2;
@@ -82,8 +90,7 @@ void menuModelReceiverOptions(event_t event)
0, // PWM rate
isModuleR9MAccess(g_moduleIdx) && receiverVariant == PXX2_VARIANT_EU && reusableBuffer.hardwareAndSettings.moduleSettings.txPower > 14 /*25mW*/ ? READONLY_ROW : (uint8_t)0, // Telemetry
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_TELEMETRY_25MW, 0),
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_FPORT, 0),
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_FPORT2, 0),
uint8_t((IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_FPORT) || IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_FPORT2)) ? 0 : HIDDEN_ROW),
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
0 // channels ...
@@ -134,11 +141,11 @@ void menuModelReceiverOptions(event_t event)
lcdInvertLine(0);
if (reusableBuffer.hardwareAndSettings.receiverSettings.state == PXX2_SETTINGS_OK) {
for (uint8_t k=0; k<LCD_LINES-1; k++) {
coord_t y = MENU_HEADER_HEIGHT + 1 + k*FH;
for (uint8_t k = 0; k < LCD_LINES - 1; k++) {
coord_t y = MENU_HEADER_HEIGHT + 1 + k * FH;
uint8_t i = k + menuVerticalOffset;
for (int j=0; j<=i; ++j) {
if (j<(int)DIM(mstate_tab) && mstate_tab[j] == HIDDEN_ROW) {
for (int j = 0; j <= i; ++j) {
if (j < (int)DIM(mstate_tab) && mstate_tab[j] == HIDDEN_ROW) {
++i;
}
}
@@ -166,19 +173,19 @@ void menuModelReceiverOptions(event_t event)
}
break;
case ITEM_RECEIVER_SETTINGS_SPORT_FPORT:
reusableBuffer.hardwareAndSettings.receiverSettings.fport = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.fport, RECEIVER_OPTIONS_2ND_COLUMN, y, "F.Port", attr, event);
if (attr && checkIncDec_Ret) {
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
}
break;
case ITEM_RECEIVER_SETTINGS_FPORT2:
reusableBuffer.hardwareAndSettings.receiverSettings.fport2 = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.fport2, RECEIVER_OPTIONS_2ND_COLUMN, y, "F.Port2", attr, event);
if (attr && checkIncDec_Ret) {
case ITEM_RECEIVER_SETTINGS_SPORT_MODE:
{
lcdDrawText(0, y, STR_PROTOCOL);
uint8_t portType = reusableBuffer.hardwareAndSettings.receiverSettings.fport | (reusableBuffer.hardwareAndSettings.receiverSettings.fport2 << 1);
lcdDrawTextAtIndex(RECEIVER_OPTIONS_2ND_COLUMN, y, STR_SPORT_MODES, portType, attr);
portType = checkIncDec(event, portType, 0, 2, EE_MODEL, isSPortModeAvailable);
if (checkIncDec_Ret) {
reusableBuffer.hardwareAndSettings.receiverSettings.fport = portType & 0x01;
reusableBuffer.hardwareAndSettings.receiverSettings.fport2 = (portType & 0x02) >> 1;
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
}
break;
}
case ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1:
lcdDrawText(LCD_W/2, y+1, STR_MORE_OPTIONS_AVAILABLE, SMLSIZE|CENTERED);
+30 -33
View File
@@ -98,8 +98,10 @@ enum {
ITEM_RADIO_HARDWARE_STICK2,
ITEM_RADIO_HARDWARE_STICK3,
ITEM_RADIO_HARDWARE_STICK4,
#if (NUM_POTS + NUM_SLIDERS) > 0
ITEM_RADIO_HARDWARE_LABEL_POTS,
ITEM_RADIO_HARDWARE_POT1,
#endif
#if defined(HARDWARE_POT2)
ITEM_RADIO_HARDWARE_POT2,
#endif
@@ -195,20 +197,22 @@ enum {
ITEM_RADIO_HARDWARE_MAX
};
#if (NUM_POTS + NUM_SLIDERS) == 1
#define POTS_ROWS NAVIGATION_LINE_BY_LINE|1
#if (NUM_POTS + NUM_SLIDERS) == 0
#define POTS_ROWS
#elif (NUM_POTS + NUM_SLIDERS) == 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)
@@ -238,20 +242,20 @@ enum {
#endif
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
#define EXTERNAL_ANTENNA_ROW 0,
void onHardwareAntennaSwitchConfirm(const char * result)
{
if (result == STR_OK) {
// Switch to external antenna confirmation
g_eeGeneral.antennaMode = reusableBuffer.radioHardware.antennaMode;
storageDirty(EE_GENERAL);
#define EXTERNAL_ANTENNA_ROW 0,
void onHardwareAntennaSwitchConfirm(const char * result)
{
if (result == STR_OK) {
// Switch to external antenna confirmation
g_eeGeneral.antennaMode = reusableBuffer.radioHardware.antennaMode;
storageDirty(EE_GENERAL);
}
else {
reusableBuffer.radioHardware.antennaMode = g_eeGeneral.antennaMode;
}
}
else {
reusableBuffer.radioHardware.antennaMode = g_eeGeneral.antennaMode;
}
}
#else
#define EXTERNAL_ANTENNA_ROW
#define EXTERNAL_ANTENNA_ROW
#endif
#if defined(PCBX9LITE)
@@ -262,7 +266,7 @@ void onHardwareAntennaSwitchConfirm(const char * result)
#define SWITCH_TYPE_MAX(sw) (SWITCH_3POS)
#elif defined(PCBX9E)
#define SWITCH_TYPE_MAX(sw) ((MIXSRC_SF - MIXSRC_FIRST_SWITCH == sw || MIXSRC_SH - MIXSRC_FIRST_SWITCH == sw) ? SWITCH_2POS : SWITCH_3POS)
#elif defined(RADIO_TX12)
#elif defined(RADIO_TX12) || defined(RADIO_T8)
#define SWITCH_TYPE_MAX(sw) ((MIXSRC_SA - MIXSRC_FIRST_SWITCH == sw || MIXSRC_SD - MIXSRC_FIRST_SWITCH == sw) ? SWITCH_2POS : SWITCH_3POS)
#else
#define SWITCH_TYPE_MAX(sw) ((MIXSRC_SF - MIXSRC_FIRST_SWITCH == sw || MIXSRC_SH - MIXSRC_FIRST_SWITCH <= sw) ? SWITCH_2POS : SWITCH_3POS)
@@ -326,31 +330,22 @@ void menuRadioHardware(event_t event)
0 /* stick 2 */,
0 /* stick 3 */,
0 /* stick 4 */,
LABEL(Pots),
POTS_ROWS,
POTS_ROWS
LABEL(Switches),
SWITCHES_ROWS,
0 /* battery calib */,
RTC_ROW
TX_CAPACITY_MEASUREMENT_ROWS
MAX_BAUD_ROWS
BLUETOOTH_ROWS
EXTERNAL_ANTENNA_ROW
AUX_SERIAL_ROWS
0 /* ADC filter */,
READONLY_ROW /* RAS */,
SPORT_POWER_ROWS
1 /* debugs */,
0,
0
0 /* EEPROM backup */,
0 /* Factory reset */
});
uint8_t sub = menuVerticalPosition - HEADER_LINE;
@@ -399,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;
@@ -450,6 +446,7 @@ void menuRadioHardware(event_t event)
g_eeGeneral.slidersConfig |= (potType << idx);
break;
}
#endif
#endif
case ITEM_RADIO_HARDWARE_LABEL_SWITCHES:
@@ -34,7 +34,7 @@ enum NavigationDirection {
#if defined(NAVIGATION_XLITE)
#define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_LONG(KEY_LEFT) && IS_SHIFT_PRESSED())
#define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_LONG(KEY_RIGHT) && IS_SHIFT_PRESSED())
#elif defined(NAVIGATION_X7_TX12)
#elif defined(KEYS_GPIO_REG_PAGEDN)
#define EVT_KEY_PREVIOUS_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_PAGEUP))
#define EVT_KEY_NEXT_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_PAGEDN))
#elif defined(NAVIGATION_X7) || defined(NAVIGATION_X9D)
+3 -3
View File
@@ -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);
}
}
@@ -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);
}
}
+21 -10
View File
@@ -56,8 +56,11 @@ void onSwitchLongEnterPress(const char * result)
int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_flags, IsValueAvailable isValueAvailable, const CheckIncDecStops &stops)
{
int newval = val;
#if defined(ROTARY_ENCODER_NAVIGATION)
if (s_editMode>0 && event==EVT_ROTARY_RIGHT) {
#else
if (s_editMode>0 && (event==EVT_KEY_FIRST(KEY_PLUS) || event==EVT_KEY_REPT(KEY_PLUS))) {
#endif
newval += min<int>(rotencSpeed, i_max-val);
while (isValueAvailable && !isValueAvailable(newval) && newval<=i_max) {
newval++;
@@ -67,7 +70,11 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, unsigned int i_fla
AUDIO_KEY_ERROR();
}
}
#if defined(ROTARY_ENCODER_NAVIGATION)
else if (s_editMode>0 && event==EVT_ROTARY_LEFT) {
#else
if (s_editMode>0 && (event==EVT_KEY_FIRST(KEY_MINUS) || event==EVT_KEY_REPT(KEY_MINUS))) {
#endif
newval -= min<int>(rotencSpeed, val-i_min);
while (isValueAvailable && !isValueAvailable(newval) && newval>=i_min) {
newval--;
@@ -99,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);
}
}
@@ -217,7 +224,7 @@ void check(event_t event, uint8_t curr, const MenuHandlerFunc * menuTab, uint8_t
if (menuTab) {
int cc = curr;
switch (event) {
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEUP)
case EVT_KEY_FIRST(KEY_PAGEUP):
#else
case EVT_KEY_LONG(KEY_PAGE):
@@ -232,7 +239,7 @@ void check(event_t event, uint8_t curr, const MenuHandlerFunc * menuTab, uint8_t
killEvents(event);
break;
#if defined(NAVIGATION_X7_TX12)
#if defined(KEYS_GPIO_REG_PAGEDN)
case EVT_KEY_FIRST(KEY_PAGEDN):
#else
case EVT_KEY_BREAK(KEY_PAGE):
@@ -310,12 +317,14 @@ void check(event_t event, uint8_t curr, const MenuHandlerFunc * menuTab, uint8_t
}
}
break;
#if defined(ROTARY_ENCODER_NAVIGATION)
case EVT_ROTARY_RIGHT:
case EVT_KEY_FIRST(KEY_RIGHT):
AUDIO_KEY_PRESS();
// no break
case EVT_KEY_REPT(KEY_RIGHT):
#else
case EVT_KEY_FIRST(KEY_DOWN):
case EVT_KEY_REPT(KEY_DOWN):
#endif
if (s_editMode > 0) break; // TODO it was !=
if ((COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE)) {
if (l_posHorz >= 0) {
@@ -341,12 +350,14 @@ void check(event_t event, uint8_t curr, const MenuHandlerFunc * menuTab, uint8_t
l_posHorz = POS_HORZ_INIT(l_posVert);
break;
#if defined(ROTARY_ENCODER_NAVIGATION)
case EVT_ROTARY_LEFT:
case EVT_KEY_FIRST(KEY_LEFT):
AUDIO_KEY_PRESS();
// no break
case EVT_KEY_REPT(KEY_LEFT):
#else
case EVT_KEY_FIRST(KEY_UP):
case EVT_KEY_REPT(KEY_UP):
#endif
if (s_editMode > 0) break; // TODO it was !=
if ((COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE)) {
if (l_posHorz >= 0) {
+1 -1
View File
@@ -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);
}
}
+1 -11
View File
@@ -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<<KEY_SHIFT) + (1<<KEY_UP))) == ((1<<KEY_SHIFT) + (1<<KEY_UP)))
// set to 0
@@ -46,7 +37,6 @@ int8_t checkIncDec_Ret;
#define DBLKEYS_PRESSED_RGT_UP(in) ((in & ((1<<KEY_SHIFT) + (1<<KEY_RIGHT))) == ((1<<KEY_SHIFT) + (1<<KEY_RIGHT)))
// set to min
#define DBLKEYS_PRESSED_LFT_DWN(in) ((in & ((1<<KEY_SHIFT) + (1<<KEY_LEFT))) == ((1<<KEY_SHIFT) + (1<<KEY_LEFT)))
#endif
INIT_STOPS(stops100, 3, -100, 0, 100)
INIT_STOPS(stops1000, 3, -1000, 0, 1000)
@@ -166,7 +156,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);
}
}
+5
View File
@@ -82,6 +82,11 @@ inline bool IS_KEY_EVT(event_t evt, uint8_t key)
#define EVT_ROTARY_RIGHT 0xDE00
#define IS_NEXT_EVENT(event) (event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN))
#define IS_PREVIOUS_EVENT(event) (event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP))
#elif defined(RADIO_T8)
#define EVT_ROTARY_BREAK EVT_KEY_BREAK(KEY_ENTER)
#define EVT_ROTARY_LONG EVT_KEY_LONG(KEY_ENTER)
#define IS_NEXT_EVENT(event) (event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN))
#define IS_PREVIOUS_EVENT(event) (event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP))
#elif (defined(PCBHORUS) || defined(PCBTARANIS)) && defined(ROTARY_ENCODER_NAVIGATION)
#define EVT_ROTARY_BREAK EVT_KEY_BREAK(KEY_ENTER)
#define EVT_ROTARY_LONG EVT_KEY_LONG(KEY_ENTER)
+2
View File
@@ -28,6 +28,8 @@ if(PYTHONINTERP_FOUND)
add_lua_export_target(x10 ${LUA_INCLUDES} -DPCBHORUS -DPCBX10)
add_lua_export_target(x12s ${LUA_INCLUDES} -DPCBHORUS -DPCBX12S)
add_lua_export_target(t12 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_T12)
add_lua_export_target(tlite ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_TLITE)
add_lua_export_target(tx12 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_TX12)
add_lua_export_target(t8 ${LUA_INCLUDES} -DPCBTARANIS -DPCBX7 -DRADIO_T8)
add_lua_export_target(t16 ${LUA_INCLUDES} -DPCBHORUS -DPCBX10 -DRADIO_T16)
endif()
+46 -14
View File
@@ -40,8 +40,12 @@
#include "lua/lua_exports_x7.inc"
#elif defined(RADIO_T12)
#include "lua/lua_exports_t12.inc"
#elif defined(RADIO_TLITE)
#include "lua/lua_exports_tlite.inc"
#elif defined(RADIO_TX12)
#include "lua/lua_exports_tx12.inc"
#elif defined(RADIO_T8)
#include "lua/lua_exports_t8.inc"
#elif defined(PCBX9LITES)
#include "lua/lua_exports_x9lites.inc"
#elif defined(PCBX9LITE)
@@ -1596,13 +1600,42 @@ static int luaMultiBuffer(lua_State * L)
}
#endif
/*luadoc
@function setSerialBaudrate(baudrate)
@param baudrate Desired baurate
Set baudrate for serial port(s) affected to LUA
@status current Introduced in 2.3.12
*/
static int luaSetSerialBaudrate(lua_State * L)
{
#if defined(AUX_SERIAL) || defined(AUX2_SERIAL)
unsigned int baudrate = luaL_checkunsigned(L, 1);
#endif
#if defined(AUX_SERIAL)
if (auxSerialMode == UART_MODE_LUA) {
auxSerialStop();
auxSerialSetup(baudrate, false);
}
#endif
#if defined(AUX2_SERIAL)
if (aux2SerialMode == UART_MODE_LUA) {
aux2SerialStop();
aux2SerialSetup(baudrate, false);
}
#endif
return 1;
}
/*luadoc
@function serialWrite(str)
@param str (string) String to be written to the serial port.
Writes a string to the serial port. The string is allowed to contain any character, including 0.
@status current Introduced in TODO
@status current Introduced in 2.3.10
*/
static int luaSerialWrite(lua_State * L)
{
@@ -1612,21 +1645,22 @@ static int luaSerialWrite(lua_State * L)
if (!str || len < 1)
return 0;
#if !defined(SIMU)
#if defined(USB_SERIAL)
#if defined(USB_SERIAL)
if (getSelectedUsbMode() == USB_SERIAL_MODE) {
size_t wr_len = len;
const char* p = str;
while(wr_len--) usbSerialPutc(*p++);
}
#endif
#if defined(AUX_SERIAL)
#endif
#if defined(AUX_SERIAL)
if (auxSerialMode == UART_MODE_LUA) {
size_t wr_len = len;
const char* p = str;
while(wr_len--) auxSerialPutc(*p++);
}
#endif
#endif
#if defined(AUX2_SERIAL)
if (aux2SerialMode == UART_MODE_LUA) {
size_t wr_len = len;
@@ -1634,9 +1668,6 @@ static int luaSerialWrite(lua_State * L)
while(wr_len--) aux2SerialPutc(*p++);
}
#endif
#else
debugPrintf("luaSerialWrite: %.*s",len,str);
#endif
return 0;
}
@@ -1740,6 +1771,7 @@ const luaL_Reg opentxLib[] = {
#if defined(MULTIMODULE)
{ "multiBuffer", luaMultiBuffer },
#endif
{ "setSerialBaudrate", luaSetSerialBaudrate },
{ "serialWrite", luaSerialWrite },
{ "serialRead", luaSerialRead },
{ nullptr, nullptr } /* sentinel */
@@ -1779,11 +1811,11 @@ const luaR_value_entry opentxConstants[] = {
{ "MIXSRC_SE", MIXSRC_SE },
{ "MIXSRC_SG", MIXSRC_SG },
#endif
#if !defined(PCBXLITE) && !defined(PCBX9LITE)
#if defined(HARDWARE_SWITCH_F)
{ "MIXSRC_SF", MIXSRC_SF },
#if !defined(RADIO_TX12)
{ "MIXSRC_SH", MIXSRC_SH },
#endif
#if defined(HARDWARE_SWITCH_H)
{ "MIXSRC_SH", MIXSRC_SH },
#endif
{ "MIXSRC_CH1", MIXSRC_CH1 },
{ "SWSRC_LAST", SWSRC_LAST_LOGICAL_SWITCH },
@@ -1845,7 +1877,7 @@ const luaR_value_entry opentxConstants[] = {
{ "ROTENC_LOWSPEED", ROTENC_LOWSPEED },
{ "ROTENC_MIDSPEED", ROTENC_MIDSPEED },
{ "ROTENC_HIGHSPEED", ROTENC_HIGHSPEED },
#elif defined(PCBX9D) || defined(PCBX9DP) // key reverted between field nav and value change
#elif defined(PCBX9D) || defined(PCBX9DP) || defined(RADIO_T8) // key reverted between field nav and value change
{ "EVT_VIRTUAL_PREV", EVT_KEY_FIRST(KEY_PLUS) },
{ "EVT_VIRTUAL_PREV_REPT", EVT_KEY_REPT(KEY_PLUS) },
{ "EVT_VIRTUAL_NEXT", EVT_KEY_FIRST(KEY_MINUS) },
@@ -1882,7 +1914,7 @@ const luaR_value_entry opentxConstants[] = {
{ "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) },
{ "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) },
#elif defined(NAVIGATION_X7) || defined(NAVIGATION_X9D)
#if defined(RADIO_TX12)
#if defined(RADIO_TX12) || defined(RADIO_T8)
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_BREAK(KEY_PAGEUP) },
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_PAGEDN) },
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_MODEL) },
+19 -3
View File
@@ -745,11 +745,23 @@ void displayLuaError(const char * title)
if (lua_warning_info[0]) {
char * split = strstr(lua_warning_info, ": ");
if (split) {
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y+FH+3, lua_warning_info, split-lua_warning_info, SMLSIZE);
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y+2*FH+2, split+2, lua_warning_info+LUA_WARNING_INFO_LEN-split, SMLSIZE);
#if LCD_W == 128
if (strlen(split + 2) <= 20) {
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y + FH + 3, lua_warning_info, split - lua_warning_info, SMLSIZE);
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y + 2 * FH + 2, split + 2, strlen(split + 2), SMLSIZE);
}
else {
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y + FH, lua_warning_info, split - lua_warning_info, SMLSIZE);
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y + 2 * FH, split + 2, 20, SMLSIZE);
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y + 3 * FH, split + 22, strlen(split + 22), SMLSIZE);
}
#else
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y + FH + 3, lua_warning_info, split - lua_warning_info, SMLSIZE);
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y + 2 * FH + 2, split + 2, lua_warning_info + LUA_WARNING_INFO_LEN - split, SMLSIZE);
#endif
}
else {
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y+FH+3, lua_warning_info, 40, SMLSIZE);
lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y + FH + 3, lua_warning_info, 40, SMLSIZE);
}
}
}
@@ -787,7 +799,11 @@ void luaError(lua_State * L, uint8_t error, bool acknowledge)
#if defined(SIMU)
if (!strncmp(msg, ".", 2)) msg += 1;
#endif
#if LCD_W == 128
msg = strrchr(msg, '/') + 1;
#else
if (!strncmp(msg, "/SCRIPTS/", 9)) msg += 9;
#endif
strncpy(lua_warning_info, msg, LUA_WARNING_INFO_LEN);
lua_warning_info[LUA_WARNING_INFO_LEN] = '\0';
}
+4
View File
@@ -531,6 +531,10 @@ void perMain()
}
#endif
#if defined(KEYS_GPIO_REG_BIND) && defined(BIND_KEY)
bindButtonHandler(evt);
#endif
#if defined(GUI)
DEBUG_TIMER_START(debugTimerGuiMain);
guiMain(evt);
+24 -3
View File
@@ -334,6 +334,14 @@ void generalDefault()
setDefaultOwnerId();
#endif
#if defined(RADIOMASTER_RTF_RELEASE)
// Those settings are for headless radio
g_eeGeneral.USBMode = USB_JOYSTICK_MODE;
g_eeGeneral.disableRtcWarning = 1;
g_eeGeneral.splashMode = 3; // Disable splash
g_eeGeneral.pwrOnSpeed = 1; // 1 second
#endif
g_eeGeneral.chkSum = 0xFFFF;
}
@@ -523,6 +531,15 @@ void modelDefault(uint8_t id)
g_model.switchWarningState |= (1 << (3*i));
}
#endif
#if defined(RADIOMASTER_RTF_RELEASE)
// Those settings are for headless radio
g_model.trainerData.mode = TRAINER_MODE_SLAVE;
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_MULTIMODULE;
g_model.moduleData[INTERNAL_MODULE].setMultiProtocol(MODULE_SUBTYPE_MULTI_FRSKY);
g_model.moduleData[INTERNAL_MODULE].subType = MM_RF_FRSKY_SUBTYPE_D8;
g_model.moduleData[INTERNAL_MODULE].failsafeMode = FAILSAFE_NOPULSES;
#endif
}
bool isInputRecursive(int index)
@@ -540,6 +557,8 @@ bool isInputRecursive(int index)
}
#if defined(AUTOSOURCE)
constexpr int MULTIPOS_STEP_SIZE = (2 * RESX) / XPOTS_MULTIPOS_COUNT;
int8_t getMovedSource(GET_MOVED_SOURCE_PARAMS)
{
int8_t result = 0;
@@ -548,7 +567,7 @@ int8_t getMovedSource(GET_MOVED_SOURCE_PARAMS)
static int16_t inputsStates[MAX_INPUTS];
if (min <= MIXSRC_FIRST_INPUT) {
for (uint8_t i=0; i<MAX_INPUTS; i++) {
if (abs(anas[i] - inputsStates[i]) > 512) {
if (abs(anas[i] - inputsStates[i]) > MULTIPOS_STEP_SIZE) {
if (!isInputRecursive(i)) {
result = MIXSRC_FIRST_INPUT+i;
break;
@@ -560,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<NUM_STICKS+NUM_POTS+NUM_SLIDERS; i++) {
if (abs(calibratedAnalogs[i] - sourcesStates[i]) > 512) {
if (abs(calibratedAnalogs[i] - sourcesStates[i]) > MULTIPOS_STEP_SIZE) {
result = MIXSRC_Rud+i;
break;
}
@@ -917,7 +936,7 @@ void checkAll()
checkFailsafe();
checkRSSIAlarmsDisabled();
#if defined(SDCARD)
#if defined(SDCARD) && !defined(RADIOMASTER_RTF_RELEASE)
checkSDVersion();
#endif
@@ -2183,6 +2202,7 @@ uint32_t pwrCheck()
#endif
event_t evt = getEvent(false);
DISPLAY_WARNING(evt);
LED_ERROR_BEGIN();
lcdRefresh();
if (warningResult) {
@@ -2192,6 +2212,7 @@ uint32_t pwrCheck()
else if (!warningText) {
// shutdown has been cancelled
pwr_check_state = PWR_CHECK_PAUSED;
LED_ERROR_END();
return e_power_on;
}
}
+24
View File
@@ -69,6 +69,12 @@
#define CASE_GYRO(x)
#endif
#if defined(BACKLIGHT_GPIO)
#define CASE_BACKLIGHT(x) x,
#else
#define CASE_BACKLIGHT(x)
#endif
#if defined(LUA)
#define CASE_LUA(x) x,
#else
@@ -276,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
@@ -382,6 +394,8 @@ inline bool SPLASH_NEEDED()
#define ROTENC_HIGHSPEED 50
#define ROTENC_DELAY_MIDSPEED 32
#define ROTENC_DELAY_HIGHSPEED 16
#elif defined(RADIO_T8)
constexpr uint8_t rotencSpeed = 1;
#endif
constexpr uint8_t HEART_TIMER_10MS = 0x01;
@@ -437,6 +451,10 @@ extern uint8_t potsPos[NUM_XPOTS];
bool trimDown(uint8_t idx);
void readKeysAndTrims();
#if defined(KEYS_GPIO_REG_BIND)
void bindButtonHandler(event_t event);
#endif
uint16_t evalChkSum();
void alert(const char * title, const char * msg, uint8_t sound);
@@ -998,7 +1016,13 @@ constexpr uint8_t OPENTX_START_NO_CHECKS = 0x04;
#if defined(STATUS_LEDS)
#define LED_ERROR_BEGIN() ledRed()
#if defined(RADIO_T8)
// Because of green backlit logo, green is preferred on this radio
#define LED_ERROR_END() ledGreen()
#define LED_BIND() ledBlue()
#else
#define LED_ERROR_END() ledBlue()
#endif
#else
#define LED_ERROR_BEGIN()
#define LED_ERROR_END()
+3
View File
@@ -97,6 +97,9 @@ static const char * const options[] = {
#endif
#if defined(HARDWARE_EXTERNAL_ACCESS_MOD)
"externalaccessmod",
#endif
#if defined(BIND_KEY)
"bindkey",
#endif
nullptr //sentinel
};
+8
View File
@@ -203,6 +203,14 @@ enum MMRFrskySubtypes {
MM_RF_FRSKY_SUBTYPE_D16_CLONED
};
enum MMRFrskyX2Subtypes {
MM_RF_FRSKYX2_SUBTYPE_D16,
MM_RF_FRSKYX2_SUBTYPE_D8,
MM_RF_FRSKYX2_SUBTYPE_D16_LBT,
MM_RF_FRSKYX2_SUBTYPE_D16_LBT_8CH,
MM_RF_FRSKYX2_SUBTYPE_D16_CLONED
};
enum ModuleSubtypeDSM2 {
DSM2_PROTO_LP45,
DSM2_PROTO_DSM2,
+1 -1
View File
@@ -475,7 +475,7 @@ bool setupPulsesInternalModule(uint8_t protocol)
#endif
default:
scheduleNextMixerCalculation(INTERNAL_MODULE, 10 /*ms*/); // used for USB sim for example
scheduleNextMixerCalculation(INTERNAL_MODULE, 10 /* ms */); // used for USB sim for example
return false;
}
}
+4
View File
@@ -143,8 +143,12 @@ 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)
#define OTX_FOURCC 0x4378746F // otx for Radiomaster T8
#elif defined(PCBX7)
#define OTX_FOURCC 0x3678746F // otx for Taranis X7 / X7S / X7 Express / X7S Express
#elif defined(PCBX9LITES)
+10 -1
View File
@@ -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
@@ -273,6 +273,15 @@ void OpenTxSim::updateKeysAndSwitches(bool start)
KEY_Down, KEY_EXIT,
KEY_Right, KEY_TELE,
KEY_Left, KEY_SYS,
#elif defined(RADIO_T8)
KEY_Page_Up, KEY_PAGEUP,
KEY_Page_Down, KEY_PAGEDN,
KEY_Return, KEY_ENTER,
KEY_Right, KEY_MODEL,
KEY_BackSpace, KEY_EXIT,
KEY_Left, KEY_SYS,
KEY_Up, KEY_PLUS,
KEY_Down, KEY_MINUS,
#elif defined(PCBTARANIS)
KEY_Page_Up, KEY_MENU,
#if defined(KEYS_GPIO_REG_PAGE)
+7
View File
@@ -53,6 +53,13 @@ void preModelLoad()
}
pauseMixerCalculations();
#if defined(INTMODULE_PWR_GPIO)
INTERNAL_MODULE_OFF();
#endif
#if defined(EXTMODULE_PWR_GPIO)
EXTERNAL_MODULE_OFF();
#endif
stopTrainer();
}
+25 -10
View File
@@ -520,14 +520,28 @@ swsrc_t getMovedSwitch()
swsrc_t result = 0;
#if defined(PCBTARANIS) || defined(PCBHORUS)
for (int i=0; i<NUM_SWITCHES; i++) {
// Switches
for (int i = 0; i < NUM_SWITCHES; i++) {
if (SWITCH_EXISTS(i)) {
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;
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;
}
}
}
}
@@ -663,6 +677,9 @@ void checkSwitches()
}
int x = SWITCH_WARNING_LIST_X;
int y = SWITCH_WARNING_LIST_Y;
#if defined(COLORLCD)
lcdNextPos = SWITCH_WARNING_LIST_X;
#endif
int numWarnings = 0;
for (int i=0; i<NUM_SWITCHES; ++i) {
#if defined(COLORLCD)
@@ -672,8 +689,7 @@ void checkSwitches()
if (++numWarnings < 6) {
// LcdFlags attr = ((states & mask) == (switches_states & mask)) ? TEXT_COLOR : ALARM_COLOR;
LcdFlags attr = ALARM_COLOR;
drawSwitch(x, y, SWSRC_FIRST_SWITCH+i*3+state-1, attr);
x += 35;
drawSwitch(lcdNextPos, y, SWSRC_FIRST_SWITCH+i*3+state-1, attr);
}
}
}
@@ -706,8 +722,7 @@ void checkSwitches()
// TODO add an helper
strncpy(s, &STR_VSRCRAW[1+(NUM_STICKS+1+i)*STR_VSRCRAW[0]], STR_VSRCRAW[0]);
s[int(STR_VSRCRAW[0])] = '\0';
lcdDrawText(x, y, s, ALARM_COLOR);
x += 40;
lcdDrawText(lcdNextPos, y, s, ALARM_COLOR);
#else
lcdDrawTextAtIndex(x, y, STR_VSRCRAW, NUM_STICKS + 1 + i, INVERS);
if (IS_POT(POT1 + i))
@@ -125,6 +125,9 @@ 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) || 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)
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);
@@ -136,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

Some files were not shown because too many files have changed in this diff Show More