From ebfb0b61f018955162cb112bebeee04d8acb1c2e Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Thu, 17 Mar 2022 10:00:04 +0100 Subject: [PATCH] Companion: YAML and hardware panel --- .../firmwares/edgetx/yaml_generalsettings.cpp | 55 ++++++++++--------- .../firmwares/edgetx/yaml_generalsettings.h | 10 +++- .../src/firmwares/edgetx/yaml_moduledata.cpp | 9 +++ companion/src/firmwares/generalsettings.cpp | 16 +++--- companion/src/firmwares/generalsettings.h | 13 +++-- companion/src/firmwares/moduledata.h | 5 ++ .../src/firmwares/opentx/opentxeeprom.cpp | 16 ++++-- companion/src/generaledit/hardware.cpp | 32 +++++++---- companion/src/generaledit/hardware.h | 1 + 9 files changed, 98 insertions(+), 59 deletions(-) diff --git a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp index e63478760..b02ba90bb 100644 --- a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp +++ b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp @@ -111,31 +111,28 @@ const YamlLookupTable internalModuleLut = { { MODULE_TYPE_FLYSKY, "TYPE_FLYSKY" }, }; -struct YamlTelemetryBaudrate { - unsigned int value; - - YamlTelemetryBaudrate() = default; - - YamlTelemetryBaudrate(const unsigned int * telemetryBaudrate) - { - if (Boards::getCapability(getCurrentFirmware()->getBoard(), Board::SportMaxBaudRate) < 400000) { - value = *telemetryBaudrate; - } - else { - value = (*telemetryBaudrate + telemetryBaudratesList.size() - 1) % telemetryBaudratesList.size(); - } +YamlTelemetryBaudrate::YamlTelemetryBaudrate( + const unsigned int* moduleBaudrate) +{ + if (Boards::getCapability(getCurrentFirmware()->getBoard(), + Board::SportMaxBaudRate) < 400000) { + value = *moduleBaudrate; + } else { + value = (*moduleBaudrate + moduleBaudratesList.size() - 1) % + moduleBaudratesList.size(); } +} - void toCpn(unsigned int * telemetryBaudrate, unsigned int variant) - { - if (Boards::getCapability((Board::Type)variant, Board::SportMaxBaudRate) < 400000) { - *telemetryBaudrate = value; - } - else { - *telemetryBaudrate = (value + 1) % telemetryBaudratesList.size(); - } +void YamlTelemetryBaudrate::toCpn(unsigned int* moduleBaudrate, + unsigned int variant) +{ + if (Boards::getCapability((Board::Type)variant, Board::SportMaxBaudRate) < + 400000) { + *moduleBaudrate = value; + } else { + *moduleBaudrate = (value + 1) % moduleBaudratesList.size(); } -}; +} namespace YAML { @@ -179,8 +176,8 @@ Node convert::encode(const GeneralSettings& rhs) node["adjustRTC"] = (int)rhs.adjustRTC; node["inactivityTimer"] = rhs.inactivityTimer; - YamlTelemetryBaudrate telemetryBaudrate(&rhs.telemetryBaudrate); - node["telemetryBaudrate"] = telemetryBaudrate.value; + YamlTelemetryBaudrate internalModuleBaudrate(&rhs.internalModuleBaudrate); + node["internalModuleBaudrate"] = internalModuleBaudrate.value; node["internalModule"] = LookupValue(internalModuleLut, rhs.internalModule); node["splashMode"] = rhs.splashMode; // TODO: B&W only @@ -358,9 +355,13 @@ bool convert::decode(const Node& node, GeneralSettings& rhs) node["adjustRTC"] >> rhs.adjustRTC; node["inactivityTimer"] >> rhs.inactivityTimer; - YamlTelemetryBaudrate telemetryBaudrate; - node["telemetryBaudrate"] >> telemetryBaudrate.value; - telemetryBaudrate.toCpn(&rhs.telemetryBaudrate, rhs.variant); + YamlTelemetryBaudrate internalModuleBaudrate; + if (node["telemetryBaudrate"]) { + node["telemetryBaudrate"] >> internalModuleBaudrate.value; + } else { + node["internalModuleBaudrate"] >> internalModuleBaudrate.value; + } + internalModuleBaudrate.toCpn(&rhs.internalModuleBaudrate, rhs.variant); if (node["internalModule"]) { node["internalModule"] >> internalModuleLut >> rhs.internalModule; diff --git a/companion/src/firmwares/edgetx/yaml_generalsettings.h b/companion/src/firmwares/edgetx/yaml_generalsettings.h index 401f6e4a1..fb204e6e3 100644 --- a/companion/src/firmwares/edgetx/yaml_generalsettings.h +++ b/companion/src/firmwares/edgetx/yaml_generalsettings.h @@ -21,6 +21,14 @@ #include "yaml_ops.h" #include "generalsettings.h" +struct YamlTelemetryBaudrate { + unsigned int value; + + YamlTelemetryBaudrate() = default; + YamlTelemetryBaudrate(const unsigned int* moduleBaudrate); + void toCpn(unsigned int* moduleBaudrate, unsigned int variant); +}; + namespace YAML { template<> @@ -30,5 +38,3 @@ namespace YAML { static bool decode(const Node& node, GeneralSettings& rhs); }; } - - diff --git a/companion/src/firmwares/edgetx/yaml_moduledata.cpp b/companion/src/firmwares/edgetx/yaml_moduledata.cpp index 11d263265..8491ce125 100644 --- a/companion/src/firmwares/edgetx/yaml_moduledata.cpp +++ b/companion/src/firmwares/edgetx/yaml_moduledata.cpp @@ -19,6 +19,7 @@ */ #include "yaml_moduledata.h" +#include "yaml_generalsettings.h" #include "moduledata.h" #include "rawsource.h" @@ -296,8 +297,16 @@ Node convert::encode(const ModuleData& rhs) case PULSES_GHOST: { Node ghost; ghost["raw12bits"] = (int)rhs.ghost.raw12bits; + YamlTelemetryBaudrate br(&rhs.ghost.telemetryBaudrate); + ghost["telemetryBaudrate"] = br.value; mod["ghost"] = ghost; } break; + case PULSES_CROSSFIRE: { + Node crsf; + YamlTelemetryBaudrate br(&rhs.crsf.telemetryBaudrate); + crsf["telemetryBaudrate"] = br.value; + mod["crsf"] = crsf; + } break; // TODO: afhds3, flysky default: { Node ppm; diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index af0fd86e9..1e68b2b37 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -426,9 +426,9 @@ QString GeneralSettings::serialPortModeToString(int port_nr) const return serialModeToString(serialPort[port_nr]); } -QString GeneralSettings::telemetryBaudrateToString() const +QString GeneralSettings::internalModuleBaudrateToString() const { - return telemetryBaudrateToString(telemetryBaudrate); + return moduleBaudrateToString(internalModuleBaudrate); } // static @@ -495,9 +495,9 @@ QString GeneralSettings::serialModeToString(int value) } // static -QString GeneralSettings::telemetryBaudrateToString(int value) +QString GeneralSettings::moduleBaudrateToString(int value) { - return telemetryBaudratesList.value(value, CPN_STR_UNKNOWN_ITEM); + return moduleBaudratesList.value(value, CPN_STR_UNKNOWN_ITEM); } // static @@ -576,13 +576,13 @@ AbstractStaticItemModel * GeneralSettings::serialModeItemModel(int port_nr) } // static -AbstractStaticItemModel * GeneralSettings::telemetryBaudrateItemModel() +AbstractStaticItemModel * GeneralSettings::internalModuleBaudrateItemModel() { AbstractStaticItemModel * mdl = new AbstractStaticItemModel(); - mdl->setName(AIM_GS_TELEMETRYBAUDRATE); + mdl->setName(AIM_GS_INTMODULEBAUDRATE); - for (int i = 0; i < telemetryBaudratesList.size(); i++) { - mdl->appendToItemList(telemetryBaudrateToString(i), i); + for (int i = 0; i < moduleBaudratesList.size(); i++) { + mdl->appendToItemList(moduleBaudrateToString(i), i); } mdl->loadItemList(); diff --git a/companion/src/firmwares/generalsettings.h b/companion/src/firmwares/generalsettings.h index 6df039207..4d98286d5 100644 --- a/companion/src/firmwares/generalsettings.h +++ b/companion/src/firmwares/generalsettings.h @@ -39,11 +39,12 @@ class AbstractStaticItemModel; constexpr char AIM_GS_ANTENNAMODE[] {"gs.antennamode"}; constexpr char AIM_GS_BLUETOOTHMODE[] {"gs.bluetoothmode"}; constexpr char AIM_GS_SERIALMODE[] {"gs.serialmode%1"}; -constexpr char AIM_GS_TELEMETRYBAUDRATE[] {"gs.telemetrybaudrate"}; +constexpr char AIM_GS_INTMODULEBAUDRATE[] {"gs.intmodulebaudrate"}; constexpr char AIM_TRAINERMIX_MODE[] {"trainermix.mode"}; constexpr char AIM_TRAINERMIX_SRC[] {"trainermix.src"}; -static const QStringList telemetryBaudratesList({ "115K", "400K", "921K", "1.87M", "3.75M", "5.25M" }); +static const QStringList moduleBaudratesList({"115K", "400K", "921K", "1.87M", + "3.75M", "5.25M"}); enum UartModes { UART_MODE_NONE, @@ -193,7 +194,7 @@ class GeneralSettings { bool adjustRTC; bool optrexDisplay; unsigned int inactivityTimer; - unsigned int telemetryBaudrate; + unsigned int internalModuleBaudrate; bool minuteBeep; bool preBeep; bool flashBeep; @@ -267,16 +268,16 @@ class GeneralSettings { QString antennaModeToString() const; QString bluetoothModeToString() const; QString serialPortModeToString(int port_nr) const; - QString telemetryBaudrateToString() const; + QString internalModuleBaudrateToString() const; static QString antennaModeToString(int value); static QString bluetoothModeToString(int value); static QString serialModeToString(int value); - static QString telemetryBaudrateToString(int value); + static QString moduleBaudrateToString(int value); static FieldRange getPPM_MultiplierRange(); static FieldRange getTxCurrentCalibration(); static AbstractStaticItemModel * antennaModeItemModel(); static AbstractStaticItemModel * bluetoothModeItemModel(); static AbstractStaticItemModel * serialModeItemModel(int port_nr); - static AbstractStaticItemModel * telemetryBaudrateItemModel(); + static AbstractStaticItemModel * internalModuleBaudrateItemModel(); }; diff --git a/companion/src/firmwares/moduledata.h b/companion/src/firmwares/moduledata.h index dbf9111b6..93c5584b3 100644 --- a/companion/src/firmwares/moduledata.h +++ b/companion/src/firmwares/moduledata.h @@ -229,8 +229,13 @@ class ModuleData { struct GHOST { bool raw12bits; + unsigned int telemetryBaudrate; } ghost; + struct CRSF { + unsigned int telemetryBaudrate; + } crsf; + struct Access { unsigned int receivers; char receiverName[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME+1]; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index b9114cb31..4b10c0dfa 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -3070,7 +3070,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type } internalField.Append(new UnsignedField<8>(this, generalData.inactivityTimer)); - internalField.Append(new UnsignedField<3>(this, generalData.telemetryBaudrate)); + internalField.Append(new UnsignedField<3>(this, generalData.internalModuleBaudrate)); if (IS_FAMILY_HORUS_OR_T16(board)) internalField.Append(new SpareBitsField<3>(this)); else if (IS_TARANIS(board)) @@ -3369,8 +3369,11 @@ void OpenTxGeneralData::beforeExport() chkSum = sum; - if (Boards::getCapability((Board::Type)generalData.variant, Board::SportMaxBaudRate) >= 400000) - generalData.telemetryBaudrate = (generalData.telemetryBaudrate + telemetryBaudratesList.size() - 1) % telemetryBaudratesList.size(); + if (Boards::getCapability((Board::Type)generalData.variant, + Board::SportMaxBaudRate) >= 400000) + generalData.internalModuleBaudrate = + (generalData.internalModuleBaudrate + moduleBaudratesList.size() - 1) % + moduleBaudratesList.size(); } void OpenTxGeneralData::afterImport() @@ -3382,7 +3385,8 @@ void OpenTxGeneralData::afterImport() } } - if (Boards::getCapability((Board::Type)generalData.variant, Board::SportMaxBaudRate) >= 400000) - generalData.telemetryBaudrate = (generalData.telemetryBaudrate + 1) % telemetryBaudratesList.size(); + if (Boards::getCapability((Board::Type)generalData.variant, + Board::SportMaxBaudRate) >= 400000) + generalData.internalModuleBaudrate = + (generalData.internalModuleBaudrate + 1) % moduleBaudratesList.size(); } - diff --git a/companion/src/generaledit/hardware.cpp b/companion/src/generaledit/hardware.cpp index abd7d4a1d..0f64ff369 100644 --- a/companion/src/generaledit/hardware.cpp +++ b/companion/src/generaledit/hardware.cpp @@ -96,7 +96,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings int btmodelid = editorItemModels->registerItemModel(GeneralSettings::bluetoothModeItemModel()); int auxmodelid = editorItemModels->registerItemModel(GeneralSettings::serialModeItemModel(GeneralSettings::SP_AUX1)); int vcpmodelid = editorItemModels->registerItemModel(GeneralSettings::serialModeItemModel(GeneralSettings::SP_VCP)); - int baudmodelid = editorItemModels->registerItemModel(GeneralSettings::telemetryBaudrateItemModel()); + int baudmodelid = editorItemModels->registerItemModel(GeneralSettings::internalModuleBaudrateItemModel()); id = editorItemModels->registerItemModel(ModuleData::internalModuleItemModel()); tabFilteredModels->registerItemModel(new FilteredItemModel(editorItemModels->getItemModel(id)), FIM_INTERNALMODULES); @@ -182,16 +182,21 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings internalModule = new AutoComboBox(this); internalModule->setModel(tabFilteredModels->getItemModel(FIM_INTERNALMODULES)); internalModule->setField(generalSettings.internalModule, this); - addParams(row, internalModule); - connect(internalModule, &AutoComboBox::currentDataChanged, this, &HardwarePanel::on_internalModuleChanged); - } - if (firmware->getCapability(HasTelemetryBaudrate)) { - addLabel(tr("Maximum Baud"), row, 0); - AutoComboBox *maxBaudRate = new AutoComboBox(this); - maxBaudRate->setModel(editorItemModels->getItemModel(baudmodelid)); - maxBaudRate->setField(generalSettings.telemetryBaudrate, this); - addParams(row, maxBaudRate); + connect(internalModule, &AutoComboBox::currentDataChanged, this, + &HardwarePanel::on_internalModuleChanged); + + internalModuleBaudRate = new AutoComboBox(this); + internalModuleBaudRate->setModel(editorItemModels->getItemModel(baudmodelid)); + internalModuleBaudRate->setField(generalSettings.internalModuleBaudrate, this); + + if (m_internalModule != MODULE_TYPE_GHOST && m_internalModule != MODULE_TYPE_CROSSFIRE) { + generalSettings.internalModuleBaudrate = 0; + internalModuleBaudRate->setVisible(false); + } + + addParams(row, internalModule, internalModuleBaudRate); + row++; } // All values except 0 are mutually exclusive @@ -275,6 +280,13 @@ void HardwarePanel::on_internalModuleChanged() } else { m_internalModule = generalSettings.internalModule; + if (m_internalModule == MODULE_TYPE_GHOST || m_internalModule == MODULE_TYPE_CROSSFIRE) { + // TODO: set proper default baudrate + internalModuleBaudRate->setVisible(true); + } else { + generalSettings.internalModuleBaudrate = 0; + internalModuleBaudRate->setVisible(false); + } emit internalModuleChanged(); } } diff --git a/companion/src/generaledit/hardware.h b/companion/src/generaledit/hardware.h index 423d9bc86..c23a663a4 100644 --- a/companion/src/generaledit/hardware.h +++ b/companion/src/generaledit/hardware.h @@ -48,6 +48,7 @@ class HardwarePanel : public GeneralPanel QGridLayout *grid; AutoComboBox *internalModule; unsigned int m_internalModule = 0; + AutoComboBox *internalModuleBaudRate; void addStick(int index, int & row); void addPot(int index, int & row);