diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 0ae0ced37..8d1cdb67d 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -354,6 +354,8 @@ elseif(PCB STREQUAL X10 AND PCBREV STREQUAL T18) set(FLAVOUR t18) elseif(PCB STREQUAL NV14 AND PCBREV STREQUAL EL18) set(FLAVOUR el18) +elseif(PCB STREQUAL PL18 AND PCBREV STREQUAL PL18EV) + set(FLAVOUR pl18ev) elseif(PCB STREQUAL PL18) set(FLAVOUR pl18) else() diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index ca22eec16..778a2f50c 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -153,10 +153,10 @@ uint32_t Boards::getFourCC(Type board) case BOARD_RADIOMASTER_T8: return 0x4378746F; case BOARD_FLYSKY_NV14: - return 0x3A78746F; case BOARD_FLYSKY_EL18: return 0x3A78746F; case BOARD_FLYSKY_PL18: + case BOARD_FLYSKY_PL18EV: return 0x4878746F; default: return 0; @@ -215,6 +215,7 @@ int Boards::getEEpromSize(Board::Type board) case BOARD_FLYSKY_NV14: case BOARD_FLYSKY_EL18: case BOARD_FLYSKY_PL18: + case BOARD_FLYSKY_PL18EV: case BOARD_FATFISH_F16: case BOARD_HELLORADIOSKY_V16: return 0; @@ -273,6 +274,7 @@ int Boards::getFlashSize(Type board) case BOARD_FLYSKY_NV14: case BOARD_FLYSKY_EL18: case BOARD_FLYSKY_PL18: + case BOARD_FLYSKY_PL18EV: case BOARD_FATFISH_F16: case BOARD_HELLORADIOSKY_V16: return FSIZE_HORUS; @@ -307,7 +309,7 @@ int Boards::getCapability(Board::Type board, Board::Capability capability) return 4; else if(IS_RADIOMASTER_ZORRO(board)) return 8; - else if (board == BOARD_RADIOMASTER_POCKET) + else if (IS_RADIOMASTER_POCKET(board)) return 5; else if (IS_FAMILY_T12(board)) return 6; @@ -337,7 +339,7 @@ int Boards::getCapability(Board::Type board, Board::Capability capability) return (IS_STM32(board) && !IS_TARANIS_X9(board)); case HasLedStripGPIO: - return (IS_RADIOMASTER_MT12(board) || IS_FLYSKY_PL18(board) || + return (IS_RADIOMASTER_MT12(board) || IS_FAMILY_PL18(board) || IS_HELLORADIOSKY_V16(board)); case HasSDCard: @@ -371,7 +373,7 @@ int Boards::getCapability(Board::Type board, Board::Capability capability) case LcdHeight: if (IS_FLYSKY_NV14(board) || IS_FLYSKY_EL18(board)) return 480; - else if (IS_FLYSKY_PL18(board) || IS_JUMPER_T15(board)) + else if (IS_FAMILY_PL18(board) || IS_JUMPER_T15(board)) return 320; else if (IS_FAMILY_HORUS_OR_T16(board)) return 272; @@ -381,7 +383,7 @@ int Boards::getCapability(Board::Type board, Board::Capability capability) case LcdWidth: if (IS_FLYSKY_NV14(board) || IS_FLYSKY_EL18(board)) return 320; - else if (IS_FLYSKY_PL18(board)) + else if (IS_FAMILY_PL18(board)) return 480; else if (IS_FAMILY_HORUS_OR_T16(board)) return 480; @@ -518,6 +520,18 @@ StringTagMappingTable Boards::getLegacyAnalogsLookupTable(Board::Type board) {tr("SL1").toStdString(), "LS"}, {tr("SL2").toStdString(), "RS"}, }); + } else if (IS_FLYSKY_PL18EV(board)) { + tbl.insert(tbl.end(), { + {tr("P1").toStdString(), "POT1"}, + {tr("P2").toStdString(), "POT2"}, + {tr("P3").toStdString(), "POT3"}, + {tr("SL1").toStdString(), "LS"}, + {tr("SL2").toStdString(), "RS"}, + {tr("EXT1").toStdString(), "EXT1"}, + {tr("EXT2").toStdString(), "EXT2"}, + {tr("EXT3").toStdString(), "EXT3"}, + {tr("EXT4").toStdString(), "EXT4"}, + }); } else if (IS_HORUS_X10(board) || IS_FAMILY_T16(board)) { tbl.insert(tbl.end(), { {tr("P1").toStdString(), "S1"}, @@ -641,6 +655,8 @@ QString Boards::getBoardName(Board::Type board) return "FlySky EL18"; case BOARD_FLYSKY_PL18: return "FlySky PL18"; + case BOARD_FLYSKY_PL18EV: + return "FlySky PL18EV"; case BOARD_BETAFPV_LR3PRO: return "BETAFPV LR3PRO"; case BOARD_IFLIGHT_COMMANDO8: @@ -752,6 +768,7 @@ int Boards::getDefaultInternalModules(Board::Type board) case BOARD_JUMPER_TPRO: case BOARD_JUMPER_TPROV2: case BOARD_FLYSKY_PL18: + case BOARD_FLYSKY_PL18EV: return (int)MODULE_TYPE_MULTIMODULE; case BOARD_BETAFPV_LR3PRO: @@ -836,6 +853,7 @@ void Boards::getBattRange(Board::Type board, int& vmin, int& vmax, unsigned int& BR(35, 42, 37) break; case BOARD_FLYSKY_PL18: + case BOARD_FLYSKY_PL18EV: BR(35, 43, 37) break; case BOARD_IFLIGHT_COMMANDO8: diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index b019e5a1d..5c8131774 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -78,6 +78,7 @@ namespace Board { BOARD_JUMPER_TLITE_F4, BOARD_FLYSKY_NV14, BOARD_FLYSKY_PL18, + BOARD_FLYSKY_PL18EV, BOARD_RADIOMASTER_ZORRO, BOARD_JUMPER_TPRO, BOARD_BETAFPV_LR3PRO, @@ -660,6 +661,16 @@ inline bool IS_FLYSKY_PL18(Board::Type board) return (board == Board::BOARD_FLYSKY_PL18); } +inline bool IS_FLYSKY_PL18EV(Board::Type board) +{ + return (board == Board::BOARD_FLYSKY_PL18EV); +} + +inline bool IS_FAMILY_PL18(Board::Type board) +{ + return IS_FLYSKY_PL18(board) || IS_FLYSKY_PL18EV(board); +} + inline bool IS_TARANIS_XLITE(Board::Type board) { return board == Board::BOARD_TARANIS_XLITE || board == Board::BOARD_TARANIS_XLITES; @@ -739,7 +750,7 @@ inline bool IS_FAMILY_HORUS_OR_T16(Board::Type board) { return IS_FAMILY_HORUS(board) || IS_FAMILY_T16(board) || IS_FLYSKY_NV14(board)/*generally*/ || IS_FLYSKY_EL18(board)/*generally*/ - || IS_FLYSKY_PL18(board); + || IS_FAMILY_PL18(board); } inline bool IS_HORUS_OR_TARANIS(Board::Type board) @@ -750,7 +761,7 @@ inline bool IS_HORUS_OR_TARANIS(Board::Type board) inline bool IS_STM32(Board::Type board) { return IS_TARANIS(board) || IS_FAMILY_HORUS_OR_T16(board) || - IS_FLYSKY_NV14(board) || IS_FLYSKY_EL18(board) || IS_FLYSKY_PL18(board); + IS_FLYSKY_NV14(board) || IS_FLYSKY_EL18(board) || IS_FAMILY_PL18(board); } inline bool IS_ARM(Board::Type board) diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index 6b6996717..c4f9be1a0 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -222,6 +222,8 @@ void GeneralSettings::init() strcpy(bluetoothName, "nv14"); else if (IS_FLYSKY_PL18(board)) strcpy(bluetoothName, "pl18"); + else if (IS_FLYSKY_PL18EV(board)) + strcpy(bluetoothName, "pl18ev"); else if (IS_FAMILY_HORUS_OR_T16(board)) strcpy(bluetoothName, "horus"); else if (IS_TARANIS_X9E(board) || IS_TARANIS_SMALL(board)) @@ -328,7 +330,7 @@ void GeneralSettings::init() internalModule = g.profile[g.sessionId()].defaultInternalModule(); - if (IS_FLYSKY_NV14(board) || IS_FLYSKY_PL18(board)) + if (IS_FLYSKY_NV14(board) || IS_FAMILY_PL18(board)) stickDeadZone = 2; } diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index 9d1f26bac..cf953ee06 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -314,7 +314,7 @@ int OpenTxFirmware::getCapability(::Capability capability) IS_RADIOMASTER_MT12(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) || IS_FLYSKY_EL18(board) || IS_FLYSKY_PL18(board)) ? true : false; + IS_TARANIS_X9DP_2019(board) || IS_FLYSKY_NV14(board) || IS_FLYSKY_EL18(board) || IS_FAMILY_PL18(board)) ? true : false; case HasADCJitterFilter: return IS_HORUS_OR_TARANIS(board); case HasTelemetryBaudrate: @@ -505,6 +505,13 @@ void registerOpenTxFirmwares() 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); + /* FrSky Horus X10 board */ firmware = new OpenTxFirmware(FIRMWAREID("x10"), Firmware::tr("FrSky Horus X10 / X10S"), BOARD_X10); addOpenTxFrskyOptions(firmware); diff --git a/companion/src/generaledit/generalsetup.cpp b/companion/src/generaledit/generalsetup.cpp index 18cb7a742..cd82552e1 100644 --- a/companion/src/generaledit/generalsetup.cpp +++ b/companion/src/generaledit/generalsetup.cpp @@ -190,7 +190,7 @@ ui(new Ui::GeneralSetup) ui->usbModeCB->hide(); } - if (IS_FLYSKY_EL18(board) || IS_FLYSKY_NV14(board) || IS_FLYSKY_PL18(board)) { + if (IS_FLYSKY_EL18(board) || IS_FLYSKY_NV14(board) || IS_FAMILY_PL18(board)) { ui->hatsModeCB->setModel(panelFilteredModels->getItemModel(FIM_HATSMODE)); ui->hatsModeCB->setField(generalSettings.hatsMode, this); } diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index 6c3417358..924095d22 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -284,7 +284,7 @@ SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & ge ui->trimsDisplay->setField(model.trimsDisplay, this); - if (IS_FLYSKY_EL18(board) || IS_FLYSKY_NV14(board) || IS_FLYSKY_PL18(board)) { + if (IS_FLYSKY_EL18(board) || IS_FLYSKY_NV14(board) || IS_FAMILY_PL18(board)) { ui->cboHatsMode->setModel(panelFilteredModels->getItemModel(FIM_HATSMODE)); ui->cboHatsMode->setField(model.hatsMode, this); } diff --git a/companion/src/modelprinter.cpp b/companion/src/modelprinter.cpp index 4d0dae9b0..1c28df380 100644 --- a/companion/src/modelprinter.cpp +++ b/companion/src/modelprinter.cpp @@ -866,7 +866,7 @@ QString ModelPrinter::printSettingsTrim() str << printLabelValue(tr("Display"), printTrimsDisplayMode()); str << printLabelValue(tr("Extended"), printBoolean(model.extendedTrims, BOOLEAN_YESNO)); Board::Type board = firmware->getBoard(); - if (IS_FLYSKY_EL18(board) || IS_FLYSKY_NV14(board) || IS_FLYSKY_PL18(board)) { + if (IS_FLYSKY_EL18(board) || IS_FLYSKY_NV14(board) || IS_FAMILY_PL18(board)) { str << printLabelValue(tr("Hats Mode"), printHatsMode()); } return str.join(" ");