diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt
index b59e3b646..e3b20611e 100644
--- a/companion/src/CMakeLists.txt
+++ b/companion/src/CMakeLists.txt
@@ -323,6 +323,8 @@ elseif(PCB STREQUAL X7 AND PCBREV STREQUAL TX12MK2)
set(FLAVOUR tx12mk2)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL ZORRO)
set(FLAVOUR zorro)
+elseif(PCB STREQUAL X7 AND PCBREV STREQUAL BOXER)
+ set(FLAVOUR boxer)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL LR3PRO)
set(FLAVOUR lr3pro)
elseif(PCB STREQUAL X7 AND PCBREV STREQUAL COMMANDO8)
diff --git a/companion/src/companion.qrc b/companion/src/companion.qrc
index dcb9eb145..33b315545 100644
--- a/companion/src/companion.qrc
+++ b/companion/src/companion.qrc
@@ -234,6 +234,17 @@
images/simulator/Zorro/right-mdl.png
images/simulator/Zorro/bottom.png
images/simulator/Zorro/top.png
+ images/simulator/Boxer/bottom.png
+ images/simulator/Boxer/left.png
+ images/simulator/Boxer/left-sys.png
+ images/simulator/Boxer/left-pageup.png
+ images/simulator/Boxer/left-pagedn.png
+ images/simulator/Boxer/left-rtn.png
+ images/simulator/Boxer/left-tele.png
+ images/simulator/Boxer/right.png
+ images/simulator/Boxer/right-mdl.png
+ images/simulator/Boxer/right-ent.png
+ images/simulator/Boxer/top.png
images/simulator/T8/left.png
images/simulator/T8/left-pageup.png
images/simulator/T8/left-pagedn.png
diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp
index eff00db3f..cf054e623 100644
--- a/companion/src/firmwares/boards.cpp
+++ b/companion/src/firmwares/boards.cpp
@@ -101,6 +101,8 @@ uint32_t Boards::getFourCC(Type board)
return 0x4878746F;
case BOARD_RADIOMASTER_ZORRO:
return 0x4778746F;
+ case BOARD_RADIOMASTER_BOXER:
+ return 0x4778746F;
case BOARD_RADIOMASTER_T8:
return 0x4378746F;
case BOARD_FLYSKY_NV14:
@@ -137,6 +139,7 @@ int Boards::getEEpromSize(Board::Type board)
case BOARD_RADIOMASTER_TX12_MK2:
case BOARD_RADIOMASTER_T8:
case BOARD_RADIOMASTER_ZORRO:
+ case BOARD_RADIOMASTER_BOXER:
return EESIZE_TARANIS;
case BOARD_UNKNOWN:
return EESIZE_MAX;
@@ -179,6 +182,7 @@ int Boards::getFlashSize(Type board)
case BOARD_RADIOMASTER_TX12:
case BOARD_RADIOMASTER_TX12_MK2:
case BOARD_RADIOMASTER_ZORRO:
+ case BOARD_RADIOMASTER_BOXER:
case BOARD_RADIOMASTER_T8:
return FSIZE_TARANIS;
case BOARD_HORUS_X12S:
@@ -290,6 +294,18 @@ SwitchInfo Boards::getSwitchInfo(Board::Type board, int index)
if (index < DIM(switches))
return switches[index];
}
+ else if (IS_RADIOMASTER_BOXER(board)) {
+ const Board::SwitchInfo switches[] = {
+ {SWITCH_2POS, "SA"},
+ {SWITCH_3POS, "SB"},
+ {SWITCH_3POS, "SC"},
+ {SWITCH_3POS, "SD"},
+ {SWITCH_2POS, "SE"},
+ {SWITCH_TOGGLE, "SF"}
+ };
+ if (index < DIM(switches))
+ return switches[index];
+ }
else if (IS_RADIOMASTER_T8(board)) {
const Board::SwitchInfo switches[] = {
{SWITCH_TOGGLE, "SA"},
@@ -404,6 +420,8 @@ int Boards::getCapability(Board::Type board, Board::Capability capability)
return 1;
else if (IS_JUMPER_TLITE(board) || IS_BETAFPV_LR3PRO(board) || IS_IFLIGHT_COMMANDO8(board))
return 0;
+ else if (IS_RADIOMASTER_BOXER(board))
+ return 3;
else if (IS_TARANIS_SMALL(board) || IS_JUMPER_TPRO(board))
return 2;
else if (IS_TARANIS_X9E(board))
@@ -470,7 +488,7 @@ int Boards::getCapability(Board::Type board, Board::Capability capability)
return 4;
else if (board == BOARD_FLYSKY_NV14)
return 8;
- else if (board == BOARD_RADIOMASTER_TX12_MK2)
+ else if (board == BOARD_RADIOMASTER_TX12_MK2 || board == BOARD_RADIOMASTER_BOXER)
return 6;
else if (IS_FAMILY_T12(board))
return 8;
@@ -608,6 +626,12 @@ StringTagMappingTable Boards::getAnalogNamesLookupTable(Board::Type board)
{tr("TltX").toStdString(), "TILT_X"},
{tr("TltY").toStdString(), "TILT_Y"},
});
+ } else if (IS_RADIOMASTER_BOXER(board)) {
+ tbl.insert(tbl.end(), {
+ {tr("S1").toStdString(), "POT1"},
+ {tr("S2").toStdString(), "POT2"},
+ {tr("S3").toStdString(), "POT3"},
+ });
} else if ((IS_TARANIS_SMALL(board) && !IS_JUMPER_TLITE(board)) || IS_FLYSKY_NV14(board)) {
tbl.insert(tbl.end(), {
{tr("S1").toStdString(), "POT1"},
@@ -723,6 +747,8 @@ QString Boards::getBoardName(Board::Type board)
return "Radiomaster TX12 Mark II";
case BOARD_RADIOMASTER_ZORRO:
return "Radiomaster Zorro";
+ case BOARD_RADIOMASTER_BOXER:
+ return "Radiomaster Boxer";
case BOARD_RADIOMASTER_T8:
return "Radiomaster T8";
case BOARD_FLYSKY_NV14:
@@ -941,8 +967,9 @@ int Boards::getDefaultInternalModules(Board::Type board)
case BOARD_JUMPER_TPRO:
return (int)MODULE_TYPE_MULTIMODULE;
- case BOARD_RADIOMASTER_ZORRO:
case BOARD_BETAFPV_LR3PRO:
+ case BOARD_RADIOMASTER_ZORRO:
+ case BOARD_RADIOMASTER_BOXER:
case BOARD_RADIOMASTER_TX12_MK2:
case BOARD_IFLIGHT_COMMANDO8:
return (int)MODULE_TYPE_CROSSFIRE;
diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h
index a4b91e687..2a46e967f 100644
--- a/companion/src/firmwares/boards.h
+++ b/companion/src/firmwares/boards.h
@@ -61,6 +61,7 @@ namespace Board {
BOARD_JUMPER_T18,
BOARD_RADIOMASTER_TX12,
BOARD_RADIOMASTER_TX12_MK2,
+ BOARD_RADIOMASTER_BOXER,
BOARD_RADIOMASTER_T8,
BOARD_JUMPER_TLITE,
BOARD_FLYSKY_NV14,
@@ -300,6 +301,11 @@ inline bool IS_RADIOMASTER_ZORRO(Board::Type board)
return board == Board::BOARD_RADIOMASTER_ZORRO;
}
+inline bool IS_RADIOMASTER_BOXER(Board::Type board)
+{
+ return board == Board::BOARD_RADIOMASTER_BOXER;
+}
+
inline bool IS_RADIOMASTER_T8(Board::Type board)
{
return board == Board::BOARD_RADIOMASTER_T8;
@@ -316,6 +322,7 @@ inline bool IS_FAMILY_T12(Board::Type board)
board == Board::BOARD_RADIOMASTER_TX12 ||
board == Board::BOARD_RADIOMASTER_TX12_MK2 ||
board == Board::BOARD_RADIOMASTER_ZORRO ||
+ board == Board::BOARD_RADIOMASTER_BOXER ||
board == Board::BOARD_RADIOMASTER_T8 ||
board == Board::BOARD_JUMPER_TLITE ||
board == Board::BOARD_JUMPER_TPRO ||
diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp
index 744350bf2..b24dc9853 100644
--- a/companion/src/firmwares/generalsettings.cpp
+++ b/companion/src/firmwares/generalsettings.cpp
@@ -289,6 +289,11 @@ void GeneralSettings::setDefaultControlTypes(Board::Type board)
potConfig[0] = Board::POT_WITHOUT_DETENT;
potConfig[1] = Board::POT_WITHOUT_DETENT;
}
+ else if(IS_RADIOMASTER_BOXER(board)) {
+ potConfig[0] = Board::POT_WITH_DETENT;
+ potConfig[1] = Board::POT_WITH_DETENT;
+ potConfig[2] = Board::POT_MULTIPOS_SWITCH;
+ }
else if (IS_FAMILY_T12(board)) {
potConfig[0] = Board::POT_WITH_DETENT;
potConfig[1] = Board::POT_WITH_DETENT;
diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp
index 8269b5c7d..1a6f4df16 100644
--- a/companion/src/firmwares/opentx/opentxinterface.cpp
+++ b/companion/src/firmwares/opentx/opentxinterface.cpp
@@ -76,6 +76,8 @@ const char * OpenTxEepromInterface::getName()
return "EdgeTX for Radiomaster TX12 Mark II";
case BOARD_RADIOMASTER_ZORRO:
return "EdgeTX for Radiomaster Zorro";
+ case BOARD_RADIOMASTER_BOXER:
+ return "EdgeTX for Radiomaster Boxer";
case BOARD_RADIOMASTER_T8:
return "EdgeTX for Radiomaster T8";
case BOARD_TARANIS_X9D:
@@ -764,7 +766,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
return IS_FAMILY_T16(board);
case HasVCPSerialMode:
return IS_FAMILY_HORUS_OR_T16(board) || IS_RADIOMASTER_ZORRO(board) ||
- IS_JUMPER_TPRO(board) || IS_RADIOMASTER_TX12_MK2(board);
+ IS_JUMPER_TPRO(board) || IS_RADIOMASTER_TX12_MK2(board) || IS_RADIOMASTER_BOXER(board);
case HasBluetooth:
return (IS_FAMILY_HORUS_OR_T16(board) || IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board)|| IS_TARANIS_X9E(board) || IS_TARANIS_X9DP_2019(board) || IS_FLYSKY_NV14(board)) ? true : false;
case HasAntennaChoice:
@@ -784,17 +786,20 @@ int OpenTxFirmware::getCapability(::Capability capability)
IS_TARANIS_X7(board) || IS_JUMPER_TPRO(board) ||
IS_TARANIS_X9LITE(board) || IS_RADIOMASTER_TX12(board) ||
IS_RADIOMASTER_TX12_MK2(board) || IS_RADIOMASTER_ZORRO(board) ||
- IS_RADIOMASTER_TX16S(board) || IS_JUMPER_T18(board));
+ IS_RADIOMASTER_BOXER(board) || IS_RADIOMASTER_TX16S(board) ||
+ IS_JUMPER_T18(board));
case HasSoftwareSerialPower:
return IS_RADIOMASTER_TX16S(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_ZORRO(board) && !id.contains("internalelrs")) ||
+ IS_RADIOMASTER_BOXER(board);
case HasIntModuleCRSF:
return id.contains("internalcrsf");
case HasIntModuleELRS:
- return id.contains("internalelrs") || IS_RADIOMASTER_TX12_MK2(board) || IS_IFLIGHT_COMMANDO8(board);
+ return id.contains("internalelrs") || IS_RADIOMASTER_TX12_MK2(board) ||
+ IS_IFLIGHT_COMMANDO8(board) || IS_RADIOMASTER_BOXER(board);
case HasIntModuleFlySky:
return id.contains("afhds3") || IS_FLYSKY_NV14(board);
default:
@@ -1472,6 +1477,16 @@ void registerOpenTxFirmwares()
registerOpenTxFirmware(firmware);
addOpenTxRfOptions(firmware, FLEX + AFHDS3);
+ /* 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 + AFHDS3);
+
/* Radiomaster T8 board */
firmware = new OpenTxFirmware(FIRMWAREID("t8"), QCoreApplication::translate("Firmware", "Radiomaster T8"), BOARD_RADIOMASTER_T8);
addOpenTxCommonOptions(firmware);
diff --git a/companion/src/images/simulator/Boxer/bottom.png b/companion/src/images/simulator/Boxer/bottom.png
new file mode 100644
index 000000000..6c00a1a53
Binary files /dev/null and b/companion/src/images/simulator/Boxer/bottom.png differ
diff --git a/companion/src/images/simulator/Boxer/left-pagedn.png b/companion/src/images/simulator/Boxer/left-pagedn.png
new file mode 100644
index 000000000..49ac3ec84
Binary files /dev/null and b/companion/src/images/simulator/Boxer/left-pagedn.png differ
diff --git a/companion/src/images/simulator/Boxer/left-pageup.png b/companion/src/images/simulator/Boxer/left-pageup.png
new file mode 100644
index 000000000..2dff4b2d8
Binary files /dev/null and b/companion/src/images/simulator/Boxer/left-pageup.png differ
diff --git a/companion/src/images/simulator/Boxer/left-rtn.png b/companion/src/images/simulator/Boxer/left-rtn.png
new file mode 100644
index 000000000..44cfaa2ed
Binary files /dev/null and b/companion/src/images/simulator/Boxer/left-rtn.png differ
diff --git a/companion/src/images/simulator/Boxer/left-sys.png b/companion/src/images/simulator/Boxer/left-sys.png
new file mode 100644
index 000000000..e22f48796
Binary files /dev/null and b/companion/src/images/simulator/Boxer/left-sys.png differ
diff --git a/companion/src/images/simulator/Boxer/left-tele.png b/companion/src/images/simulator/Boxer/left-tele.png
new file mode 100644
index 000000000..bc835305f
Binary files /dev/null and b/companion/src/images/simulator/Boxer/left-tele.png differ
diff --git a/companion/src/images/simulator/Boxer/left.png b/companion/src/images/simulator/Boxer/left.png
new file mode 100644
index 000000000..89ed37d64
Binary files /dev/null and b/companion/src/images/simulator/Boxer/left.png differ
diff --git a/companion/src/images/simulator/Boxer/right-ent.png b/companion/src/images/simulator/Boxer/right-ent.png
new file mode 100644
index 000000000..6449dea55
Binary files /dev/null and b/companion/src/images/simulator/Boxer/right-ent.png differ
diff --git a/companion/src/images/simulator/Boxer/right-mdl.png b/companion/src/images/simulator/Boxer/right-mdl.png
new file mode 100644
index 000000000..53946e275
Binary files /dev/null and b/companion/src/images/simulator/Boxer/right-mdl.png differ
diff --git a/companion/src/images/simulator/Boxer/right.png b/companion/src/images/simulator/Boxer/right.png
new file mode 100644
index 000000000..bab435974
Binary files /dev/null and b/companion/src/images/simulator/Boxer/right.png differ
diff --git a/companion/src/images/simulator/Boxer/top.png b/companion/src/images/simulator/Boxer/top.png
new file mode 100644
index 000000000..10ab0f9f0
Binary files /dev/null and b/companion/src/images/simulator/Boxer/top.png differ
diff --git a/companion/src/simulation/CMakeLists.txt b/companion/src/simulation/CMakeLists.txt
index d0d4f03be..b9f824d2c 100644
--- a/companion/src/simulation/CMakeLists.txt
+++ b/companion/src/simulation/CMakeLists.txt
@@ -21,6 +21,7 @@ set(simulation_SRCS
simulateduiwidgetJumperT18.cpp
simulateduiwidgetTX12.cpp
simulateduiwidgetZorro.cpp
+ simulateduiwidgetBoxer.cpp
simulateduiwidgetT8.cpp
simulateduiwidgetTX16S.cpp
simulateduiwidgetNV14.cpp
@@ -56,6 +57,7 @@ set(simulation_UIS
simulateduiwidgetJumperT18.ui
simulateduiwidgetTX12.ui
simulateduiwidgetZorro.ui
+ simulateduiwidgetBoxer.ui
simulateduiwidgetT8.ui
simulateduiwidgetTX16S.ui
simulateduiwidgetNV14.ui
diff --git a/companion/src/simulation/simulateduiwidget.h b/companion/src/simulation/simulateduiwidget.h
index c08e4ef18..e4eb209ff 100644
--- a/companion/src/simulation/simulateduiwidget.h
+++ b/companion/src/simulation/simulateduiwidget.h
@@ -121,6 +121,7 @@ namespace Ui {
class SimulatedUIWidgetTX16S;
class SimulatedUIWidgetTX12;
class SimulatedUIWidgetZorro;
+ class SimulatedUIWidgetBoxer;
class SimulatedUIWidgetT8;
class SimulatedUIWidgetNV14;
}
@@ -345,6 +346,18 @@ class SimulatedUIWidgetZorro: public SimulatedUIWidget
Ui::SimulatedUIWidgetZorro * ui;
};
+class SimulatedUIWidgetBoxer: public SimulatedUIWidget
+{
+ Q_OBJECT
+
+ public:
+ explicit SimulatedUIWidgetBoxer(SimulatorInterface * simulator, QWidget * parent = nullptr);
+ virtual ~SimulatedUIWidgetBoxer();
+
+ private:
+ Ui::SimulatedUIWidgetBoxer * ui;
+};
+
class SimulatedUIWidgetT8: public SimulatedUIWidget
{
Q_OBJECT
diff --git a/companion/src/simulation/simulateduiwidgetBoxer.cpp b/companion/src/simulation/simulateduiwidgetBoxer.cpp
new file mode 100644
index 000000000..f788b9ca2
--- /dev/null
+++ b/companion/src/simulation/simulateduiwidgetBoxer.cpp
@@ -0,0 +1,67 @@
+#include "simulateduiwidget.h"
+#include "ui_simulateduiwidgetBoxer.h"
+
+// NOTE: RadioUiAction(NUMBER,...): NUMBER relates to enum EnumKeys in the specific board.h
+
+SimulatedUIWidgetBoxer::SimulatedUIWidgetBoxer(SimulatorInterface *simulator, QWidget * parent):
+ SimulatedUIWidget(simulator, parent),
+ ui(new Ui::SimulatedUIWidgetBoxer)
+{
+ RadioUiAction * act;
+
+ ui->setupUi(this);
+
+ // add actions in order of appearance on the help menu
+
+ act = new RadioUiAction(5, QList() << Qt::Key_Up, SIMU_STR_HLP_KEY_UP, SIMU_STR_HLP_ACT_MDL);
+ addRadioWidget(ui->rightbuttons->addArea(QRect(80, 10, 60, 30), "Boxer/right-mdl.png", act));
+
+ m_mouseMidClickAction = new RadioUiAction(1, QList() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_ACTIVATE, SIMU_STR_HLP_ACT_ROT_DN);
+ addRadioWidget(ui->rightbuttons->addArea(QRect(40, 60, 46, 90), "Boxer/right-ent.png", m_mouseMidClickAction));
+
+ act = new RadioUiAction(4, QList() << Qt::Key_Left, SIMU_STR_HLP_KEY_LFT, SIMU_STR_HLP_ACT_SYS);
+ addRadioWidget(ui->leftbuttons->addArea(QRect(18, 10, 66, 30), "Boxer/left-sys.png", act));
+
+ act = new RadioUiAction(6, QList() << Qt::Key_Right, SIMU_STR_HLP_KEY_RGT, SIMU_STR_HLP_ACT_TELE);
+ addRadioWidget(ui->leftbuttons->addArea(QRect(72, 149, 62, 24), "Boxer/left-tele.png", act));
+
+ act = new RadioUiAction(3, QList() << Qt::Key_PageDown, SIMU_STR_HLP_KEY_PGDN, SIMU_STR_HLP_ACT_PGDN);
+ addRadioWidget(ui->leftbuttons->addArea(QRect(72, 79, 62, 24), "Boxer/left-pagedn.png", act));
+
+ act = new RadioUiAction(2, QList() << Qt::Key_PageUp, SIMU_STR_HLP_KEY_PGUP, SIMU_STR_HLP_ACT_PGUP);
+ addRadioWidget(ui->leftbuttons->addArea(QRect(72, 114, 62, 24), "Boxer/left-pageup.png", act));
+
+ act = new RadioUiAction(0, QList() << 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(72, 44, 62, 24), "Boxer/left-rtn.png", act));
+
+ m_scrollUpAction = new RadioUiAction(-1, QList() << Qt::Key_Minus << Qt::Key_Equal << Qt::Key_Left, SIMU_STR_HLP_KEYS_GO_LFT, SIMU_STR_HLP_ACT_ROT_LFT);
+ m_scrollDnAction = new RadioUiAction(-1, QList() << Qt::Key_Plus << Qt::Key_Right, SIMU_STR_HLP_KEYS_GO_RGT, SIMU_STR_HLP_ACT_ROT_RGT);
+ connectScrollActions();
+
+ 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);
+}
+
+SimulatedUIWidgetBoxer::~SimulatedUIWidgetBoxer()
+{
+ delete ui;
+}
diff --git a/companion/src/simulation/simulateduiwidgetBoxer.ui b/companion/src/simulation/simulateduiwidgetBoxer.ui
new file mode 100644
index 000000000..1a4583b1b
--- /dev/null
+++ b/companion/src/simulation/simulateduiwidgetBoxer.ui
@@ -0,0 +1,219 @@
+
+
+ SimulatedUIWidgetBoxer
+
+
+
+ 0
+ 0
+ 567
+ 186
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 567
+ 186
+
+
+
+
+ 567
+ 186
+
+
+
+ Radiomaster Boxer Simulator
+
+
+ background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 255, 255, 255), stop:0.757062 rgba(241, 238, 238, 255), stop:1 rgba(247, 245, 245, 255));
+
+
+
+ true
+
+
+
+ 0
+ 0
+ 157
+ 186
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 157
+ 186
+
+
+
+
+ 157
+ 186
+
+
+
+ background:url(:/images/simulator/Boxer/left.png);
+
+
+
+
+
+ 410
+ 0
+ 157
+ 186
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 157
+ 186
+
+
+
+
+ 157
+ 186
+
+
+
+ background:url(:/images/simulator/Boxer/right.png)
+
+
+
+
+
+ 155
+ 176
+ 256
+ 10
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 256
+ 10
+
+
+
+
+ 256
+ 10
+
+
+
+ background:url(:/images/simulator/Boxer/bottom.png)
+
+
+
+
+
+ 155
+ 48
+ 256
+ 128
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 200
+ 100
+
+
+
+
+ 424
+ 180
+
+
+
+ background-color: rgb(215, 243, 255);
+
+
+
+
+
+ 137
+ 0
+ 300
+ 49
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 200
+ 40
+
+
+
+
+ 300
+ 49
+
+
+
+ background:url(:/images/simulator/Boxer/top.png)
+
+
+ bottom
+ top
+ rightbuttons
+ leftbuttons
+ lcd
+
+
+
+ LcdWidget
+ QWidget
+
+ 1
+
+
+ ButtonsWidget
+ QWidget
+
+ 1
+
+
+
+
+
+
+
diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp
index 2fc458dac..8c1b0f3e2 100644
--- a/companion/src/simulation/simulatorwidget.cpp
+++ b/companion/src/simulation/simulatorwidget.cpp
@@ -116,6 +116,9 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato
case Board::BOARD_RADIOMASTER_ZORRO:
radioUiWidget = new SimulatedUIWidgetZorro(simulator, this);
break;
+ case Board::BOARD_RADIOMASTER_BOXER:
+ radioUiWidget = new SimulatedUIWidgetBoxer(simulator, this);
+ break;
case Board::BOARD_RADIOMASTER_T8:
radioUiWidget = new SimulatedUIWidgetT8(simulator, this);
break;
diff --git a/tools/build-companion.sh b/tools/build-companion.sh
index 7df4b1f8a..ef6de2a86 100755
--- a/tools/build-companion.sh
+++ b/tools/build-companion.sh
@@ -66,7 +66,7 @@ cd build
declare -a simulator_plugins=(x9lite x9lites
x7 x7-access
t8 t12 tx12 tx12mk2
- zorro commando8
+ zorro commando8 boxer
tlite tpro lr3pro
x9d x9dp x9dp2019 x9e
xlite xlites
@@ -107,6 +107,9 @@ do
zorro)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=ZORRO"
;;
+ boxer)
+ BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=BOXER"
+ ;;
lr3pro)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=LR3PRO"
;;
@@ -158,6 +161,10 @@ do
commando8)
BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=COMMANDO8"
;;
+ *)
+ echo "Unknown target: $target_name"
+ exit 1
+ ;;
esac
rm -f CMakeCache.txt native/CMakeCache.txt