From 5f68e37b2c82b096e975e3fdde1a00d24d75c7cc Mon Sep 17 00:00:00 2001 From: Michael <101.37584@germanynet.de> Date: Sun, 29 Sep 2024 18:12:45 +0200 Subject: [PATCH] added Companion support for crsfArmingMode setting --- .../src/firmwares/edgetx/yaml_modeldata.cpp | 2 ++ companion/src/firmwares/modeldata.h | 1 + companion/src/modeledit/setup.cpp | 15 ++++++++++++- companion/src/modeledit/setup.h | 1 + companion/src/modeledit/setup_module.ui | 21 +++++++++++++++++++ companion/src/modelprinter.cpp | 13 ++++++++++++ companion/src/modelprinter.h | 1 + 7 files changed, 53 insertions(+), 1 deletion(-) diff --git a/companion/src/firmwares/edgetx/yaml_modeldata.cpp b/companion/src/firmwares/edgetx/yaml_modeldata.cpp index a217f33f3dd..7fe1708c67a 100644 --- a/companion/src/firmwares/edgetx/yaml_modeldata.cpp +++ b/companion/src/firmwares/edgetx/yaml_modeldata.cpp @@ -1002,6 +1002,7 @@ Node convert::encode(const ModelData& rhs) node["extendedTrims"] = (int)rhs.extendedTrims; node["throttleReversed"] = (int)rhs.throttleReversed; node["checklistInteractive"] = (int)rhs.checklistInteractive; + node["crsfArmingMode"] = rhs.crsfArmingMode; for (int i = 0; i < CPN_MAX_FLIGHT_MODES; i++) { if (!rhs.flightModeData[i].isEmpty(i)) { @@ -1308,6 +1309,7 @@ bool convert::decode(const Node& node, ModelData& rhs) node["extendedTrims"] >> rhs.extendedTrims; node["throttleReversed"] >> rhs.throttleReversed; node["checklistInteractive"] >> rhs.checklistInteractive; + node["crsfArmingMode"] >> rhs.crsfArmingMode; node["flightModeData"] >> rhs.flightModeData; node["mixData"] >> rhs.mixData; diff --git a/companion/src/firmwares/modeldata.h b/companion/src/firmwares/modeldata.h index 4fe0b970684..e4ab3d95eb0 100644 --- a/companion/src/firmwares/modeldata.h +++ b/companion/src/firmwares/modeldata.h @@ -147,6 +147,7 @@ class ModelData { bool extendedTrims; bool throttleReversed; bool checklistInteractive; + int crsfArmingMode; FlightModeData flightModeData[CPN_MAX_FLIGHT_MODES]; MixData mixData[CPN_MAX_MIXERS]; LimitData limitData[CPN_MAX_CHNOUT]; diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index 5ed52cd23b4..96143a74693 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -230,6 +230,7 @@ void TimerPanel::onModeChanged(int index) #define MASK_CHANNELMAP (1<<20) #define MASK_MULTI_BAYANG_OPT (1<<21) #define MASK_AFHDS (1<<22) +#define MASK_CSRF_ARMING_MODE (1<<23) quint8 ModulePanel::failsafesValueDisplayType = ModulePanel::FAILSAFE_DISPLAY_PERCENT; @@ -505,7 +506,7 @@ void ModulePanel::update() max_rx_num = 20; break; case PULSES_CROSSFIRE: - mask |= MASK_CHANNELS_RANGE | MASK_RX_NUMBER | MASK_BAUDRATE; + mask |= MASK_CHANNELS_RANGE | MASK_RX_NUMBER | MASK_BAUDRATE | MASK_CSRF_ARMING_MODE; module.channelsCount = 16; ui->telemetryBaudrate->setModel(ModuleData::telemetryBaudrateItemModel(protocol)); ui->telemetryBaudrate->setField(module.crsf.telemetryBaudrate); @@ -602,6 +603,8 @@ void ModulePanel::update() ui->channelsCount->setMaximum(module.getMaxChannelCount()); ui->channelsCount->setValue(module.channelsCount); ui->channelsCount->setSingleStep(firmware->getCapability(HasPPMStart) ? 1 : 2); + ui->label_crsfArmingMode->setVisible(mask & MASK_CSRF_ARMING_MODE); + ui->crsfArmingMode->setVisible(mask & MASK_CSRF_ARMING_MODE); // PPM settings fields ui->label_ppmPolarity->setVisible(mask & MASK_SBUSPPM_FIELDS); @@ -837,12 +840,22 @@ void ModulePanel::update() } } + if (mask & MASK_CSRF_ARMING_MODE) { + ui->crsfArmingMode->setCurrentIndex(model->crsfArmingMode); + } + ui->label_rxFreq->setVisible((mask & MASK_RX_FREQ)); ui->rxFreq->setVisible((mask & MASK_RX_FREQ)); lock = false; } +void ModulePanel::on_crsfArmingMode_currentIndexChanged(int index) +{ + model->crsfArmingMode = index; + emit modified(); +} + void ModulePanel::onProtocolChanged(int index) { if (!lock) { diff --git a/companion/src/modeledit/setup.h b/companion/src/modeledit/setup.h index 0916ac191f4..ade58ac759d 100644 --- a/companion/src/modeledit/setup.h +++ b/companion/src/modeledit/setup.h @@ -122,6 +122,7 @@ class ModulePanel : public ModelPanel void onClearAccessRxClicked(); void on_chkOption_stateChanged(int state); void on_cboOption_currentIndexChanged(int value); + void on_crsfArmingMode_currentIndexChanged(int index); private: enum FailsafeValueDisplayTypes { FAILSAFE_DISPLAY_PERCENT = 1, FAILSAFE_DISPLAY_USEC = 2 }; diff --git a/companion/src/modeledit/setup_module.ui b/companion/src/modeledit/setup_module.ui index 51e71f6f9c3..f747184d91a 100644 --- a/companion/src/modeledit/setup_module.ui +++ b/companion/src/modeledit/setup_module.ui @@ -429,6 +429,27 @@ + + + + Arming + + + + + + + + Channel + + + + + Function + + + + diff --git a/companion/src/modelprinter.cpp b/companion/src/modelprinter.cpp index f17d09d4947..8a13e819796 100644 --- a/companion/src/modelprinter.cpp +++ b/companion/src/modelprinter.cpp @@ -187,6 +187,18 @@ QString ModelPrinter::printTrimIncrementMode() } } +QString ModelPrinter::printCrsfArmingMode() +{ + switch (model.crsfArmingMode) { + case 0: + return tr("Channel"); + case 1: + return tr("Function"); + default: + return tr("Unknown"); + } +} + QString ModelPrinter::printModule(int idx) { QStringList str; @@ -749,6 +761,7 @@ QString ModelPrinter::printSettingsOther() { QStringList str; str << printLabelValue(tr("Extended Limits"), printBoolean(model.extendedLimits, BOOLEAN_YESNO)); + str << printLabelValue(tr("CRSF Arming"), printCrsfArmingMode()); if (firmware->getCapability(HasDisplayText)) str << printLabelValue(tr("Display Checklist"), printBoolean(model.displayChecklist, BOOLEAN_YESNO)); if (firmware->getCapability(GlobalFunctions)) diff --git a/companion/src/modelprinter.h b/companion/src/modelprinter.h index e0617de8b79..66029d216ed 100644 --- a/companion/src/modelprinter.h +++ b/companion/src/modelprinter.h @@ -104,6 +104,7 @@ class ModelPrinter: public QObject QString printTelemetryScreenType(unsigned int val); QString printTelemetryScreen(unsigned int idx, unsigned int line, unsigned int width); QString printChecklist(); + QString printCrsfArmingMode(); const GeneralSettings * gs() { return &generalSettings; } private: