diff --git a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp index b61b8c91d..1920d0f22 100644 --- a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp +++ b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp @@ -214,9 +214,10 @@ Node convert::encode(const GeneralSettings& rhs) Node serialPort; for (int i = 0; i < GeneralSettings::SP_COUNT; i++) { - if (rhs.serialPort[i] != UART_MODE_NONE) { + if (rhs.serialPort[i] != GeneralSettings::AUX_SERIAL_OFF) { Node mode = uartModeLut << rhs.serialPort[i]; serialPort[LookupValue(serialPortLut, i)]["mode"] = mode; + serialPort[LookupValue(serialPortLut, i)]["power"] = (int)rhs.serialPower[i]; } } if (serialPort && serialPort.IsMap()) @@ -421,13 +422,17 @@ bool convert::decode(const Node& node, GeneralSettings& rhs) YAML::Node port_nr = port.first >> serialPortLut; if (port_nr) { int p = port_nr.as(); - if (p >= 0 && p < GeneralSettings::SP_COUNT && port.second.IsMap()) + if (p >= 0 && p < GeneralSettings::SP_COUNT && port.second.IsMap()) { port.second["mode"] >> uartModeLut >> rhs.serialPort[p]; + int pwr = port.second["power"].as(); + if (pwr >= 0 && pwr <= 1) + port.second["power"] >> rhs.serialPower[p]; + } } } } } - + node["antennaMode"] >> antennaModeLut >> rhs.antennaMode; node["backlightColor"] >> rhs.backlightColor; node["pwrOnSpeed"] >> rhs.pwrOnSpeed; diff --git a/companion/src/firmwares/eeprominterface.h b/companion/src/firmwares/eeprominterface.h index 22abfde3f..890ef7495 100644 --- a/companion/src/firmwares/eeprominterface.h +++ b/companion/src/firmwares/eeprominterface.h @@ -168,7 +168,8 @@ enum Capability { TopBarZones, HasModelsList, HasFlySkyGimbals, - RotaryEncoderNavigation + RotaryEncoderNavigation, + HasSoftwareSerialPower }; class EEPROMInterface diff --git a/companion/src/firmwares/generalsettings.h b/companion/src/firmwares/generalsettings.h index 3da7d996e..3ca8c1e3f 100644 --- a/companion/src/firmwares/generalsettings.h +++ b/companion/src/firmwares/generalsettings.h @@ -243,6 +243,7 @@ class GeneralSettings { unsigned int mavbaud; unsigned int switchUnlockStates; unsigned int serialPort[SP_COUNT]; + bool serialPower[SP_COUNT]; int antennaMode; unsigned int backlightColor; CustomFunctionData customFn[CPN_MAX_SPECIAL_FUNCTIONS]; diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index bab62bac1..e8f28ed2f 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -772,6 +772,8 @@ int OpenTxFirmware::getCapability(::Capability capability) IS_TARANIS_X9LITE(board) || IS_RADIOMASTER_TX12(board) || IS_RADIOMASTER_ZORRO(board) || IS_RADIOMASTER_TX16S(board) || IS_JUMPER_T18(board)); + case HasSoftwareSerialPower: + return IS_RADIOMASTER_TX16S(board); default: return 0; } diff --git a/companion/src/generaledit/hardware.cpp b/companion/src/generaledit/hardware.cpp index 5403392a1..c0136980b 100644 --- a/companion/src/generaledit/hardware.cpp +++ b/companion/src/generaledit/hardware.cpp @@ -219,32 +219,46 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings ExclusiveComboGroup *exclGroup = new ExclusiveComboGroup( this, [=](const QVariant &value) { return value == 0; }); + addSection(tr("Serial port"), row); + if (firmware->getCapability(HasAuxSerialMode)) { - QString lbl = "Serial Port"; - if (IS_RADIOMASTER_TX16S(board)) - lbl.append(" (TTL)"); + QString lbl = "AUX1"; addLabel(tr("%1").arg(lbl), row, 0); AutoComboBox *serialPortMode = new AutoComboBox(this); serialPortMode->setModel(editorItemModels->getItemModel(auxmodelid)); serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_AUX1]); exclGroup->addCombo(serialPortMode); - addParams(row, serialPortMode); + + AutoCheckBox *serialPortPower = new AutoCheckBox(this); + serialPortPower->setField(generalSettings.serialPower[GeneralSettings::SP_AUX1], this); + serialPortPower->setText(tr("Power")); + + addParams(row, serialPortMode, serialPortPower); + + if (!firmware->getCapability(HasSoftwareSerialPower)) + serialPortPower->setVisible(false); } if (firmware->getCapability(HasAux2SerialMode)) { - QString lbl = "Serial Port 2"; - if (IS_RADIOMASTER_TX16S(board)) - lbl.append(" (TTL)"); + QString lbl = "AUX2"; addLabel(tr("%1").arg(lbl), row, 0); AutoComboBox *serialPortMode = new AutoComboBox(this); serialPortMode->setModel(editorItemModels->getItemModel(auxmodelid)); serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_AUX2]); exclGroup->addCombo(serialPortMode); - addParams(row, serialPortMode); + + AutoCheckBox *serialPortPower = new AutoCheckBox(this); + serialPortPower->setField(generalSettings.serialPower[GeneralSettings::SP_AUX2], this); + serialPortPower->setText(tr("Power")); + + addParams(row, serialPortMode, serialPortPower); + + if (!firmware->getCapability(HasSoftwareSerialPower)) + serialPortPower->setVisible(false); } if (firmware->getCapability(HasVCPSerialMode)) { - addLabel(tr("Serial Port VCP"), row, 0); + addLabel(tr("VCP"), row, 0); AutoComboBox *serialPortMode = new AutoComboBox(this); serialPortMode->setModel(editorItemModels->getItemModel(vcpmodelid)); serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_VCP]);