740 lines
31 KiB
C++
740 lines
31 KiB
C++
/*
|
|
* Copyright (C) EdgeTX
|
|
*
|
|
* Based on code named
|
|
* opentx - https://github.com/opentx/opentx
|
|
* th9x - http://code.google.com/p/th9x
|
|
* er9x - http://code.google.com/p/er9x
|
|
* gruvin9x - http://code.google.com/p/gruvin9x
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#include "opentxinterface.h"
|
|
#include "appdata.h"
|
|
#include "constants.h"
|
|
|
|
#include <bitset>
|
|
#include <QMessageBox>
|
|
#include <QTime>
|
|
#include <QUrl>
|
|
|
|
#include "storage.h" // does this need to be last include?
|
|
|
|
#define FILE_TYP_GENERAL 1
|
|
#define FILE_TYP_MODEL 2
|
|
|
|
/// fileId of general file
|
|
#define FILE_GENERAL 0
|
|
/// convert model number 0..MAX_MODELS-1 int fileId
|
|
#define FILE_MODEL(n) (1+n)
|
|
|
|
using namespace Board;
|
|
|
|
Firmware * OpenTxFirmware::getFirmwareVariant(const QString &id)
|
|
{
|
|
if (id == getId()) {
|
|
return this;
|
|
}
|
|
else if (id.contains(getId() + "-") || (!id.contains("-") && id.contains(getId()))) {
|
|
Firmware * result = new OpenTxFirmware(id, this);
|
|
// TODO result.variant = firmware->getVariant(id);
|
|
return result;
|
|
}
|
|
else {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
// TODO centralise those related to data sizes so common to struct and capability
|
|
// current method is too risky
|
|
int OpenTxFirmware::getCapability(::Capability capability)
|
|
{
|
|
switch (capability) {
|
|
case ChannelsName:
|
|
return (HAS_LARGE_LCD(board) ? 6 : 4);
|
|
case CustomFunctions:
|
|
return CPN_MAX_SPECIAL_FUNCTIONS;
|
|
case DangerousFunctions:
|
|
return id.contains("danger") ? 1 : 0;
|
|
case ExtendedTrimsRange:
|
|
return 512;
|
|
case FlightModes:
|
|
return CPN_MAX_FLIGHT_MODES;
|
|
case FlightModesName:
|
|
return 10;
|
|
case GlobalFunctions:
|
|
return CPN_MAX_SPECIAL_FUNCTIONS;
|
|
case Gvars:
|
|
return id.contains("nogvars") ? 0 : (IS_STM32H7(board) || IS_STM32H5(board) ? CPN_MAX_GVARS : 9);
|
|
case GvarsName:
|
|
return 3;
|
|
case Haptic: // TODO remove with X9D
|
|
return board != Board::BOARD_TARANIS_X9D || id.contains("haptic");
|
|
case HasExpoNames:
|
|
return (IS_TARANIS_X9(board) ? 8 : 6);
|
|
case HasFailsafe:
|
|
return 32;
|
|
case HasFlySkyGimbals:
|
|
return (IS_RADIOMASTER_TX16S(board) && id.contains("flyskygimbals"));
|
|
case HasIntModuleCRSF:
|
|
return id.contains("internalcrsf");
|
|
case HasIntModuleELRS:
|
|
return id.contains("internalelrs") || IS_RADIOMASTER_TX12_MK2(board) ||
|
|
IS_IFLIGHT_COMMANDO8(board) || IS_RADIOMASTER_BOXER(board) ||
|
|
IS_RADIOMASTER_POCKET(board) || IS_JUMPER_T20(board) ||
|
|
IS_RADIOMASTER_MT12(board) || IS_RADIOMASTER_TX15(board) || IS_JUMPER_T15PRO(board);
|
|
case HasIntModuleFlySky:
|
|
return id.contains("afhds2a") || id.contains("afhds3") ||
|
|
IS_FLYSKY_NV14(board) || IS_FLYSKY_EL18(board) || IS_FAMILY_PL18(board);
|
|
case HasIntModuleMulti:
|
|
return id.contains("internalmulti") || IS_RADIOMASTER_TX16S(board) || IS_JUMPER_T18(board) ||
|
|
IS_RADIOMASTER_TX12(board) || IS_JUMPER_TLITE(board) || IS_BETAFPV_LR3PRO(board) ||
|
|
(IS_RADIOMASTER_ZORRO(board) && !id.contains("internalelrs")) ||
|
|
(IS_RADIOMASTER_BOXER(board) && !id.contains("internalelrs")) ||
|
|
(IS_RADIOMASTER_POCKET(board) && !id.contains("internalelrs")) ||
|
|
(IS_RADIOMASTER_MT12(board) && !id.contains("internalelrs"));
|
|
case HasMixerNames:
|
|
return (IS_TARANIS_X9(board) ? 8 : 6);
|
|
case HasModelImage:
|
|
return (board == BOARD_TARANIS_X9D || IS_TARANIS_PLUS(board) || board == BOARD_TARANIS_X9DP_2019 || IS_FAMILY_HORUS_OR_T16(board));
|
|
case HasModelLabels:
|
|
return IS_FAMILY_HORUS_OR_T16(board);
|
|
case HasModelsList:
|
|
return IS_FAMILY_HORUS_OR_T16(board);
|
|
case HasModuleR9MFlex:
|
|
return id.contains("flexr9m");
|
|
case HasModuleR9MMini:
|
|
return IS_TARANIS_XLITE(board) && !id.contains("stdr9m");
|
|
case HasSportConnector:
|
|
return IS_ACCESS_RADIO(board, id) || IS_TARANIS_X7(board) || IS_HORUS_X10(board) || IS_TARANIS_XLITE(board);
|
|
case HasTopLcd:
|
|
return IS_TARANIS_X9E(board) ? 1 : 0;
|
|
case HasVario:
|
|
return Boards::isAir(board);
|
|
case HasVarioSink:
|
|
return Boards::isAir(board);
|
|
case Heli:
|
|
if (Boards::getCapability(board, Board::Surface))
|
|
return false;
|
|
else
|
|
return !id.contains("noheli");
|
|
case InputsLength:
|
|
return HAS_LARGE_LCD(board) ? 4 : 3;
|
|
case KeyShortcuts:
|
|
return VERSION_MAJOR > 2 && Boards::getCapability(board, Board::HasColorLcd) ? MAX_KEYSHORTCUTS : 0;
|
|
case LogicalSwitches:
|
|
return CPN_MAX_LOGICAL_SWITCHES;
|
|
case LuaInputsPerScript:
|
|
return CPN_MAX_SCRIPT_INPUTS;
|
|
case LuaOutputsPerScript:
|
|
return CPN_MAX_SCRIPT_OUTPUTS;
|
|
case LuaScripts:
|
|
return id.contains("lua") ? CPN_MAX_SCRIPTS : 0;
|
|
case MavlinkTelemetry:
|
|
return id.contains("mavlink") ? 1 : 0;
|
|
case Mixes:
|
|
return CPN_MAX_MIXERS;
|
|
case ModelImageKeepExtn:
|
|
return IS_FAMILY_HORUS_OR_T16(board);
|
|
case ModelImageNameLen:
|
|
return (IS_FAMILY_HORUS_OR_T16(board) ? 14 : 10); // including extension if saved and <= CPN_MAX_BITMAP_LEN
|
|
case ModelName:
|
|
return (IS_FAMILY_HORUS_OR_T16(board) ? 15 : (HAS_LARGE_LCD(board) ? 12 : 10));
|
|
case Models:
|
|
if (IS_FAMILY_HORUS_OR_T16(board))
|
|
return 0;
|
|
else
|
|
return CPN_MAX_MODELS;
|
|
case ModelTrainerEnable:
|
|
return board != Board::BOARD_TARANIS_XLITE;
|
|
case NumCurvePoints:
|
|
return 512; // Note: less than CPN_MAX_CURVES x CPN_MAX_POINTS
|
|
case NumCurves:
|
|
return CPN_MAX_CURVES;
|
|
case NumFirstUsableModule:
|
|
return (IS_JUMPER_T12(board) && !id.contains("internalmulti") ? 1 : 0);
|
|
case NumModules:
|
|
return CPN_MAX_MODULES;
|
|
case OffsetWeight:
|
|
return 500;
|
|
case Outputs:
|
|
return CPN_MAX_CHNOUT;
|
|
case PPMCenter:
|
|
return 500;
|
|
case PPMFrameLength:
|
|
return 40;
|
|
case QMFavourites:
|
|
return VERSION_MAJOR > 2 && Boards::getCapability(board, Board::HasColorLcd) ? MAX_QMFAVOURITES : 0;
|
|
case SafetyChannelCustomFunction:
|
|
return id.contains("nooverridech") ? 0 : 1;
|
|
case Sensors:
|
|
if (IS_STM32H7(board))
|
|
return CPN_MAX_SENSORS;
|
|
else if (IS_FAMILY_HORUS_OR_T16(board) || IS_TARANIS_X9(board))
|
|
return 60;
|
|
else
|
|
return 40;
|
|
case SlowRange:
|
|
return 250;
|
|
case SlowScale:
|
|
return 10;
|
|
case TelemetryCustomScreens:
|
|
if (IS_FAMILY_HORUS_OR_T16(board))
|
|
return 0;
|
|
else
|
|
return 4;
|
|
case TelemetryCustomScreensBars:
|
|
return (getCapability(TelemetryCustomScreens) ? 4 : 0);
|
|
case TelemetryCustomScreensFieldsPerLine:
|
|
return HAS_LARGE_LCD(board) ? 3 : 2;
|
|
case TelemetryCustomScreensLines:
|
|
return (getCapability(TelemetryCustomScreens) ? 4 : 0);
|
|
case Timers:
|
|
return CPN_MAX_TIMERS;
|
|
case TimersName:
|
|
if (HAS_LARGE_LCD(board))
|
|
return 8;
|
|
else
|
|
return 3;
|
|
case TopBarZones:
|
|
return Boards::getCapability(board, Board::LcdWidth) > Boards::getCapability(board, Board::LcdHeight) ? 4 : 2;
|
|
case TrainerInputs:
|
|
return 16;
|
|
case TrimsRange:
|
|
return 128;
|
|
case VirtualInputs:
|
|
return CPN_MAX_INPUTS;
|
|
case VoicesMaxLength:
|
|
return 8;
|
|
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
QString OpenTxFirmware::getCapabilityStr(::Capability capability)
|
|
{
|
|
switch (capability) {
|
|
case ModelImageFilters:
|
|
return IS_FAMILY_HORUS_OR_T16(board) ? "*.bmp|*.jpg|*.png" : "*.bmp";
|
|
default:
|
|
return QString();
|
|
}
|
|
}
|
|
|
|
QTime OpenTxFirmware::getMaxTimerStart()
|
|
{
|
|
if (IS_HORUS_OR_TARANIS(board))
|
|
return QTime(23, 59, 59);
|
|
else
|
|
return QTime(8, 59, 59);
|
|
}
|
|
|
|
template<typename T, size_t SIZE>
|
|
size_t getSizeA(T (&)[SIZE])
|
|
{
|
|
return SIZE;
|
|
}
|
|
|
|
QString OpenTxFirmware::getReleaseNotesUrl()
|
|
{
|
|
return QString("%1/downloads").arg(EDGETX_HOME_PAGE_URL);
|
|
}
|
|
|
|
QString OpenTxFirmware::getLanguage() const
|
|
{
|
|
QStringList strl = getId().split('-');
|
|
return strl.size() > 2 ? strl.last() : QString();
|
|
}
|
|
|
|
// Firmware registrations
|
|
// NOTE: "recognized" build options are defined in /radio/util/fwoptions.py
|
|
|
|
void registerOpenTxFirmware(OpenTxFirmware * firmware, bool deprecated = false)
|
|
{
|
|
if (!deprecated)
|
|
Firmware::addRegisteredFirmware(firmware);
|
|
}
|
|
|
|
void addOpenTxCommonOptions(OpenTxFirmware * firmware)
|
|
{
|
|
static const Firmware::OptionsGroup fai_options = {
|
|
Firmware::Option("faichoice", Firmware::tr("Possibility to enable FAI MODE (no telemetry) at field")),
|
|
Firmware::Option("faimode", Firmware::tr("FAI MODE (no telemetry) always enabled"))
|
|
};
|
|
firmware->addOptionsGroup(fai_options);
|
|
firmware->addOption("nooverridech", Firmware::tr("No OverrideCH functions available"));
|
|
}
|
|
|
|
enum RfOptions {
|
|
NONE = 0,
|
|
EU = 1 << 0,
|
|
FLEX = 1 << 1,
|
|
AFHDS2A = 1 << 2,
|
|
AFHDS3 = 1 << 3,
|
|
};
|
|
|
|
void addOpenTxRfOptions(OpenTxFirmware * firmware, uint8_t options)
|
|
{
|
|
static const Firmware::Option opt_eu("eu", Firmware::tr("Removes D8 FrSky protocol support which is not legal for use in the EU on radios sold after Jan 1st, 2015"));
|
|
static const Firmware::Option opt_fl("flexr9m", Firmware::tr("Enable non certified firmwares"));
|
|
static const Firmware::Option opt_afhds2a("afhds2a", Firmware::tr("Enable AFHDS2A support"));
|
|
static const Firmware::Option opt_afhds3("afhds3", Firmware::tr("Enable AFHDS3 support"));
|
|
|
|
|
|
if ((options & (EU + FLEX)) == EU + FLEX)
|
|
firmware->addOptionsGroup({opt_eu, opt_fl});
|
|
else if ((options & EU) != 0)
|
|
firmware->addOption(opt_eu);
|
|
else if ((options & FLEX) != 0)
|
|
firmware->addOption(opt_fl);
|
|
if ((options & AFHDS2A) != 0)
|
|
firmware->addOption(opt_afhds2a);
|
|
if ((options & AFHDS3) != 0)
|
|
firmware->addOption(opt_afhds3);
|
|
}
|
|
|
|
void addOpenTxFontOptions(OpenTxFirmware * firmware)
|
|
{
|
|
firmware->addOption("sqt5font", Firmware::tr("Use alternative SQT5 font"));
|
|
}
|
|
|
|
void addOpenTxFrskyOptions(OpenTxFirmware * firmware)
|
|
{
|
|
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"));
|
|
}
|
|
|
|
void addOpenTxTaranisOptions(OpenTxFirmware * firmware)
|
|
{
|
|
addOpenTxFrskyOptions(firmware);
|
|
addOpenTxFontOptions(firmware);
|
|
}
|
|
|
|
// TODO: refactoring OpenTxFirmware constructor - need to check if used elsewhere and how
|
|
#define FIRMWAREID(flavour) std::string(FIRMWARE_ID_PREFIX).append(flavour).c_str()
|
|
|
|
void registerOpenTxFirmwares()
|
|
{
|
|
OpenTxFirmware * firmware;
|
|
|
|
static const Firmware::Option opt_bt("bluetooth", Firmware::tr("Support for bluetooth module"));
|
|
static const Firmware::Option opt_internal_gps("internalgps", Firmware::tr("Support internal GPS"));
|
|
|
|
/* BETAFPV LR3PRO board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("lr3pro"), QCoreApplication::translate("Firmware", "BETAFPV LiteRadio3 Pro"), BOARD_BETAFPV_LR3PRO);
|
|
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);
|
|
|
|
/* Fatfish F16 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("f16"), Firmware::tr("Fatfish F16"), BOARD_FATFISH_F16);
|
|
addOpenTxFrskyOptions(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
firmware->addOptionsGroup({opt_bt, opt_internal_gps});
|
|
firmware->addOption("flyskygimbals", Firmware::tr("Support hardware mod: FlySky Paladin EV Gimbals"));
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* FlySky NV14 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("nv14"), QCoreApplication::translate("Firmware", "FlySky NV14"), BOARD_FLYSKY_NV14);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption(opt_bt);
|
|
addOpenTxRfOptions(firmware, FLEX + AFHDS2A + AFHDS3);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* FlySky EL18 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("el18"), QCoreApplication::translate("Firmware", "FlySky EL18"), BOARD_FLYSKY_EL18);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption(opt_bt);
|
|
addOpenTxRfOptions(firmware, FLEX + AFHDS2A + AFHDS3);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* FlySky PA01 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("pa01"), Firmware::tr("FlySky PA01"), BOARD_FLYSKY_PA01);
|
|
addOpenTxFrskyOptions(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX + AFHDS3);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* FlySky PL18 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("pl18"), Firmware::tr("FlySky PL18"), BOARD_FLYSKY_PL18);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption(opt_bt);
|
|
addOpenTxRfOptions(firmware, FLEX + AFHDS3);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* FlySky PL18EV board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("pl18ev"), Firmware::tr("FlySky PL18EV"), BOARD_FLYSKY_PL18EV);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption(opt_bt);
|
|
addOpenTxRfOptions(firmware, FLEX + AFHDS3);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* FlySky PL18U board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("pl18u"), Firmware::tr("FlySky PL18U"), BOARD_FLYSKY_PL18U);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption(opt_bt);
|
|
addOpenTxRfOptions(firmware, FLEX + AFHDS3);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* FlySky ST16 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("st16"), Firmware::tr("FlySky ST16"), BOARD_FLYSKY_ST16);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption(opt_bt);
|
|
addOpenTxRfOptions(firmware, FLEX + AFHDS3);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* FrSky Horus X10 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x10"), Firmware::tr("FrSky Horus X10 / X10S"), BOARD_X10);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption("internalaccess", Firmware::tr("Support for ACCESS internal module replacement"));
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, EU + FLEX);
|
|
|
|
/* FrSky Horus X10 Express board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x10express"), Firmware::tr("FrSky Horus X10 Express / X10S Express"), BOARD_X10_EXPRESS, "x10express");
|
|
addOpenTxFrskyOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* FrSky Horus X12 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x12s"), Firmware::tr("FrSky Horus X12S"), BOARD_HORUS_X12S);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption("internalaccess", Firmware::tr("Support for ACCESS internal module replacement"));
|
|
firmware->addOption("pcbdev", Firmware::tr("Use ONLY with first DEV pcb version"));
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, EU + FLEX);
|
|
|
|
/* FrSky Taranis X7 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x7"), Firmware::tr("FrSky Taranis X7 / X7S"), BOARD_TARANIS_X7);
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, EU + FLEX);
|
|
|
|
/* FrSky Taranis X7 Access board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x7access"), Firmware::tr("FrSky Taranis X7 / X7S Access"), BOARD_TARANIS_X7_ACCESS, "x7access");
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* FrSky Taranis X-Lite board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("xlite"), Firmware::tr("FrSky Taranis X-Lite"), BOARD_TARANIS_XLITE);
|
|
// firmware->addOption("stdr9m", Firmware::tr("Use JR-sized R9M module"));
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, EU + FLEX);
|
|
|
|
/* FrSky Taranis X-Lite S/PRO board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("xlites"), Firmware::tr("FrSky Taranis X-Lite S/PRO"), BOARD_TARANIS_XLITES);
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* FrSky Taranis X9-Lite board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x9lite"), Firmware::tr("FrSky Taranis X9-Lite"), BOARD_TARANIS_X9LITE);
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* FrSky Taranis X9-LiteS board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x9lites"), Firmware::tr("FrSky Taranis X9-Lite S"), BOARD_TARANIS_X9LITES);
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* FrSky Taranis X9D board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x9d"), Firmware::tr("FrSky Taranis X9D"), BOARD_TARANIS_X9D);
|
|
firmware->addOption("noras", Firmware::tr("Disable RAS (SWR)"));
|
|
firmware->addOption("haptic", Firmware::tr("Haptic module installed"));
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, EU + FLEX + AFHDS2A + AFHDS3);
|
|
|
|
/* FrSky Taranis X9D+ board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x9d+"), Firmware::tr("FrSky Taranis X9D+"), BOARD_TARANIS_X9DP, "x9dp");
|
|
firmware->addOption("noras", Firmware::tr("Disable RAS (SWR)"));
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, EU + FLEX + AFHDS2A + AFHDS3);
|
|
|
|
/* FrSky Taranis X9D+ 2019 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x9d+2019"), Firmware::tr("FrSky Taranis X9D+ 2019"), BOARD_TARANIS_X9DP_2019, "x9dp2019");
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* FrSky Taranis X9E board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("x9e"), Firmware::tr("FrSky Taranis X9E"), BOARD_TARANIS_X9E);
|
|
firmware->addOption("shutdownconfirm", Firmware::tr("Confirmation before radio shutdown"));
|
|
firmware->addOption("horussticks", Firmware::tr("Horus gimbals installed (Hall sensors)"));
|
|
addOpenTxTaranisOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, EU + FLEX);
|
|
|
|
/* HelloRadioSky V14 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("v14"), Firmware::tr("HelloRadioSky V14"), BOARD_HELLORADIOSKY_V14);
|
|
addOpenTxCommonOptions(firmware);
|
|
addOpenTxFontOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* HelloRadioSky V16 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("v16"), Firmware::tr("HelloRadioSky V16"), BOARD_HELLORADIOSKY_V16);
|
|
addOpenTxFrskyOptions(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
firmware->addOptionsGroup({opt_bt, opt_internal_gps});
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* iFlight Commando8 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("commando8"), QCoreApplication::translate("Firmware", "iFlight Commando8"), BOARD_IFLIGHT_COMMANDO8);
|
|
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);
|
|
|
|
/* Jumper T-Lite board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("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 T-Pro board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("tpro"), QCoreApplication::translate("Firmware", "Jumper T-Pro"), BOARD_JUMPER_TPRO);
|
|
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 T-Pro V2 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("tprov2"), QCoreApplication::translate("Firmware", "Jumper T-Pro V2"), BOARD_JUMPER_TPROV2);
|
|
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 T-Pro S board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("tpros"), QCoreApplication::translate("Firmware", "Jumper T-Pro S"), BOARD_JUMPER_TPROS);
|
|
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 Bumblebee board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("bumblebee"), QCoreApplication::translate("Firmware", "Jumper Bumblebee"), BOARD_JUMPER_BUMBLEBEE);
|
|
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 T12 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("t12"), QCoreApplication::translate("Firmware", "Jumper T12 / T12 Pro"), BOARD_JUMPER_T12);
|
|
addOpenTxCommonOptions(firmware);
|
|
firmware->addOption("noheli", Firmware::tr("Disable HELI menu and cyclic mix support"));
|
|
firmware->addOption("nogvars", Firmware::tr("Disable Global variables"));
|
|
firmware->addOption("lua", Firmware::tr("Enable Lua custom scripts screen"));
|
|
firmware->addOption("internalmulti", Firmware::tr("Support for MULTI internal module"));
|
|
addOpenTxFontOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* Jumper T12 MAX board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("t12max"), Firmware::tr("Jumper T12 MAX"), BOARD_JUMPER_T12MAX);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption("internalelrs", Firmware::tr("Select if internal ELRS module is installed"));
|
|
addOpenTxRfOptions(firmware, NONE);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Jumper T14 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("t14"), Firmware::tr("Jumper T14"), BOARD_JUMPER_T14);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption("internalelrs", Firmware::tr("Select if internal ELRS module is installed"));
|
|
addOpenTxRfOptions(firmware, NONE);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Jumper T15 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("t15"), Firmware::tr("Jumper T15"), BOARD_JUMPER_T15);
|
|
addOpenTxFrskyOptions(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Jumper T15 Pro board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("t15pro"), Firmware::tr("Jumper T15 Pro"), BOARD_JUMPER_T15PRO);
|
|
addOpenTxFrskyOptions(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Jumper T16 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("t16"), Firmware::tr("Jumper T16 / T16+ / T16 Pro"), BOARD_JUMPER_T16);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption("internalmulti", Firmware::tr("Support for MULTI internal module"));
|
|
firmware->addOption(opt_bt);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Jumper T18 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("t18"), Firmware::tr("Jumper T18"), BOARD_JUMPER_T18);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption(opt_bt);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* Jumper T20 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("t20"), Firmware::tr("Jumper T20"), BOARD_JUMPER_T20);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption("internalelrs", Firmware::tr("Select if internal ELRS module is installed"));
|
|
addOpenTxRfOptions(firmware, NONE);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Jumper T20 V2 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("t20v2"), Firmware::tr("Jumper T20 V2"), BOARD_JUMPER_T20V2);
|
|
addOpenTxFrskyOptions(firmware);
|
|
firmware->addOption("internalelrs", Firmware::tr("Select if internal ELRS module is installed"));
|
|
addOpenTxRfOptions(firmware, NONE);
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Radiomaster Boxer board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("boxer"), QCoreApplication::translate("Firmware", "Radiomaster Boxer"), Board::BOARD_RADIOMASTER_BOXER);
|
|
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 + AFHDS2A + AFHDS3);
|
|
|
|
/* Radiomaster Pocket board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("pocket"), QCoreApplication::translate("Firmware", "Radiomaster Pocket"), Board::BOARD_RADIOMASTER_POCKET);
|
|
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 + AFHDS2A + AFHDS3);
|
|
|
|
/* Radiomaster MT12 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("mt12"), QCoreApplication::translate("Firmware", "Radiomaster MT12"), Board::BOARD_RADIOMASTER_MT12);
|
|
addOpenTxCommonOptions(firmware);
|
|
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);
|
|
|
|
/* Radiomaster T8 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("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 TX12 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("tx12"), QCoreApplication::translate("Firmware", "Radiomaster TX12"), BOARD_RADIOMASTER_TX12);
|
|
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);
|
|
|
|
/* Radiomaster TX12 Mark II board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("tx12mk2"), QCoreApplication::translate("Firmware", "Radiomaster TX12 Mark II"), BOARD_RADIOMASTER_TX12_MK2);
|
|
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);
|
|
|
|
/* Radiomaster GX12 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("gx12"), QCoreApplication::translate("Firmware", "Radiomaster GX12"), BOARD_RADIOMASTER_GX12);
|
|
addOpenTxCommonOptions(firmware);
|
|
addOpenTxFontOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
|
|
/* Radiomaster TX15 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("tx15"), Firmware::tr("Radiomaster TX15"), BOARD_RADIOMASTER_TX15);
|
|
addOpenTxFrskyOptions(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
firmware->addOptionsGroup({opt_bt, opt_internal_gps});
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Radiomaster TX16S board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("tx16s"), Firmware::tr("Radiomaster TX16S / SE / Hall / Masterfire"), BOARD_RADIOMASTER_TX16S);
|
|
addOpenTxFrskyOptions(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
firmware->addOptionsGroup({opt_bt, opt_internal_gps});
|
|
firmware->addOption("flyskygimbals", Firmware::tr("Support hardware mod: FlySky Paladin EV Gimbals"));
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Radiomaster TX16SMK3 board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("tx16smk3"), Firmware::tr("Radiomaster TX16S MK3"), BOARD_RADIOMASTER_TX16SMK3);
|
|
addOpenTxFrskyOptions(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX);
|
|
firmware->addOptionsGroup({opt_bt, opt_internal_gps});
|
|
registerOpenTxFirmware(firmware);
|
|
|
|
/* Radiomaster Zorro board */
|
|
firmware = new OpenTxFirmware(FIRMWAREID("zorro"), QCoreApplication::translate("Firmware", "Radiomaster Zorro"), Board::BOARD_RADIOMASTER_ZORRO);
|
|
addOpenTxCommonOptions(firmware);
|
|
firmware->addOption("noheli", Firmware::tr("Disable HELI menu and cyclic mix support"));
|
|
firmware->addOption("nogvars", Firmware::tr("Disable Global variables"));
|
|
firmware->addOption("lua", Firmware::tr("Enable Lua custom scripts screen"));
|
|
firmware->addOption("internalelrs", Firmware::tr("Select if internal ELRS module is installed"));
|
|
addOpenTxFontOptions(firmware);
|
|
registerOpenTxFirmware(firmware);
|
|
addOpenTxRfOptions(firmware, FLEX + AFHDS2A + AFHDS3);
|
|
|
|
Firmware::sortRegisteredFirmwares();
|
|
Firmware::setDefaultVariant(Firmware::getFirmwareForFlavour("tx16s"));
|
|
Firmware::setCurrentVariant(Firmware::getDefaultVariant());
|
|
}
|
|
|
|
void unregisterOpenTxFirmwares()
|
|
{
|
|
foreach (Firmware * f, Firmware::getRegisteredFirmwares()) {
|
|
delete f;
|
|
}
|
|
}
|