From 26d8121d9149bb83b9d7fb139caa666b56980948 Mon Sep 17 00:00:00 2001 From: philmoz Date: Wed, 14 Aug 2024 21:10:26 +1000 Subject: [PATCH] Add ability to set source for backlight / brightness control. --- .../src/datamodels/compounditemmodels.cpp | 59 ++++++++++++++++ companion/src/datamodels/compounditemmodels.h | 18 +++++ companion/src/firmwares/boardjson.cpp | 10 +++ companion/src/firmwares/boardjson.h | 2 + companion/src/firmwares/boards.cpp | 5 ++ companion/src/firmwares/boards.h | 1 + .../firmwares/edgetx/yaml_generalsettings.cpp | 7 ++ companion/src/firmwares/generalsettings.cpp | 5 ++ companion/src/firmwares/generalsettings.h | 3 + companion/src/firmwares/rawsource.cpp | 9 ++- companion/src/firmwares/rawsource.h | 11 ++- companion/src/generaledit/generaledit.cpp | 3 +- companion/src/generaledit/generalsetup.cpp | 38 +++++++++-- companion/src/generaledit/generalsetup.h | 4 +- companion/src/generaledit/generalsetup.ui | 26 ++++++- companion/src/generaledit/hardware.cpp | 25 ++++++- companion/src/generaledit/hardware.h | 4 +- radio/src/datastructs.h | 10 +-- radio/src/datastructs_private.h | 44 ++++++------ radio/src/edgetx.cpp | 28 ++++++++ radio/src/edgetx.h | 4 ++ radio/src/functions.cpp | 26 ++----- radio/src/gui/128x64/radio_setup.cpp | 68 ++++++++++++++----- radio/src/gui/212x64/radio_setup.cpp | 36 ++++++++++ radio/src/gui/colorlcd/libui/page.h | 2 +- radio/src/gui/colorlcd/radio/radio_setup.cpp | 39 +++++++++++ radio/src/gui/gui_common.cpp | 5 ++ radio/src/gui/gui_common.h | 1 + radio/src/gui/navigation/navigation.cpp | 45 +++++++----- radio/src/mixer.cpp | 24 +++++-- .../storage/yaml/yaml_datastructs_128x64.cpp | 28 ++++---- .../src/storage/yaml/yaml_datastructs_f16.cpp | 30 ++++---- .../storage/yaml/yaml_datastructs_gx12.cpp | 28 ++++---- .../storage/yaml/yaml_datastructs_nb4p.cpp | 30 ++++---- .../storage/yaml/yaml_datastructs_nv14.cpp | 30 ++++---- .../storage/yaml/yaml_datastructs_pa01.cpp | 30 ++++---- .../storage/yaml/yaml_datastructs_pl18.cpp | 30 ++++---- .../storage/yaml/yaml_datastructs_pl18u.cpp | 30 ++++---- .../storage/yaml/yaml_datastructs_st16.cpp | 30 ++++---- .../src/storage/yaml/yaml_datastructs_t15.cpp | 30 ++++---- .../storage/yaml/yaml_datastructs_t15pro.cpp | 30 ++++---- .../src/storage/yaml/yaml_datastructs_t20.cpp | 28 ++++---- .../storage/yaml/yaml_datastructs_tpro.cpp | 28 ++++---- .../storage/yaml/yaml_datastructs_tx15.cpp | 30 ++++---- .../src/storage/yaml/yaml_datastructs_x10.cpp | 30 ++++---- .../src/storage/yaml/yaml_datastructs_x9d.cpp | 28 ++++---- .../yaml/yaml_datastructs_x9dp2019.cpp | 28 ++++---- .../src/storage/yaml/yaml_datastructs_x9e.cpp | 28 ++++---- .../storage/yaml/yaml_datastructs_xlite.cpp | 28 ++++---- .../storage/yaml/yaml_datastructs_xlites.cpp | 28 ++++---- radio/src/translations/i18n/cn.h | 2 + radio/src/translations/i18n/cz.h | 2 + radio/src/translations/i18n/da.h | 2 + radio/src/translations/i18n/de.h | 2 + radio/src/translations/i18n/en.h | 2 + radio/src/translations/i18n/es.h | 2 + radio/src/translations/i18n/fi.h | 2 + radio/src/translations/i18n/fr.h | 2 + radio/src/translations/i18n/he.h | 2 + radio/src/translations/i18n/it.h | 2 + radio/src/translations/i18n/jp.h | 2 + radio/src/translations/i18n/ko.h | 2 + radio/src/translations/i18n/nl.h | 2 + radio/src/translations/i18n/pl.h | 2 + radio/src/translations/i18n/pt.h | 2 + radio/src/translations/i18n/ru.h | 2 + radio/src/translations/i18n/se.h | 2 + radio/src/translations/i18n/tw.h | 2 + radio/src/translations/i18n/ua.h | 2 + radio/src/translations/sim_string_list.h | 2 + radio/src/translations/string_list.h | 2 + 71 files changed, 812 insertions(+), 374 deletions(-) diff --git a/companion/src/datamodels/compounditemmodels.cpp b/companion/src/datamodels/compounditemmodels.cpp index e00a997a612..382d3bdfce7 100644 --- a/companion/src/datamodels/compounditemmodels.cpp +++ b/companion/src/datamodels/compounditemmodels.cpp @@ -667,6 +667,62 @@ void FlexSwitchesItemModel::update(const int event) } } +// +// ControlSourceItemModel +// + +ControlSourceItemModel::ControlSourceItemModel(const GeneralSettings * const generalSettings, const ModelData * const modelData, + Firmware * firmware, const Boards * const board, const Board::Type boardType) : + AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType) +{ + setId(IMID_ControlSource); + setUpdateMask(IMUE_Hardware); + + // Descending source direction: inverted (!) sources + addItems(SOURCE_TYPE_SWITCH, -board->getCapability(Board::Switches)); + addItems(SOURCE_TYPE_INPUT, -board->getCapability(Board::Inputs), -board->getCapability(Board::Sticks)); + + // Ascending source direction (including zero) + addItems(SOURCE_TYPE_NONE, 1); + addItems(SOURCE_TYPE_INPUT, board->getCapability(Board::Inputs), board->getCapability(Board::Sticks)); + addItems(SOURCE_TYPE_SWITCH, board->getCapability(Board::Switches)); +} + +void ControlSourceItemModel::setDynamicItemData(QStandardItem * item, const RawSource & src) const +{ + item->setText(src.toString(modelData, generalSettings, boardType)); + item->setData(src.isAvailable(modelData, generalSettings, boardType, RawSource::AVAILABLE_CONTROLSRC), IMDR_Available); +} + +void ControlSourceItemModel::addItems(const RawSourceType & type, int count, const int start) +{ + const int idxAdj = (type == SOURCE_TYPE_NONE ? -1 : 0); + + int first = start + count < 0 ? start + count : start + 1; + int last = start + count < 0 ? start : start + count + 1; + + for (int i = first; i < last; ++i) { + const RawSource src = RawSource(type, i + idxAdj); + QStandardItem * modelItem = new QStandardItem(); + modelItem->setData(src.toValue(), IMDR_Id); + modelItem->setData(type, IMDR_Type); + setDynamicItemData(modelItem, src); + appendRow(modelItem); + } +} + +void ControlSourceItemModel::update(const int event) +{ + if (doUpdate(event)) { + emit aboutToBeUpdated(); + + for (int i = 0; i < rowCount(); ++i) + setDynamicItemData(item(i), RawSource(item(i)->data(IMDR_Id).toInt())); + + emit updateComplete(); + } +} + // // CompoundItemModelFactory // @@ -722,6 +778,9 @@ void CompoundItemModelFactory::addItemModel(const int id) case AbstractItemModel::IMID_FlexSwitches: registerItemModel(new FlexSwitchesItemModel(generalSettings, modelData, firmware, board, boardType)); break; + case AbstractItemModel::IMID_ControlSource: + registerItemModel(new ControlSourceItemModel(generalSettings, modelData, firmware, board, boardType)); + break; default: qDebug() << "Error: unknown item model: id"; break; diff --git a/companion/src/datamodels/compounditemmodels.h b/companion/src/datamodels/compounditemmodels.h index 466a0d7f276..80b13d5b929 100644 --- a/companion/src/datamodels/compounditemmodels.h +++ b/companion/src/datamodels/compounditemmodels.h @@ -47,6 +47,7 @@ class AbstractItemModel: public QStandardItemModel IMID_CurveRefType, IMID_CurveRefFunc, IMID_FlexSwitches, + IMID_ControlSource, IMID_ReservedCount, IMID_Custom }; @@ -81,6 +82,7 @@ class AbstractItemModel: public QStandardItemModel IMUE_Timers = 1 << 9, IMUE_Modules = 1 << 10, IMUE_FunctionSwitches = 1 << 11, + IMUE_Hardware = 1 << 12, IMUE_All = IMUE_SystemRefresh | IMUE_Channels | IMUE_Curves | IMUE_FlightModes | IMUE_GVars | IMUE_Inputs | IMUE_LogicalSwitches | IMUE_Scripts | IMUE_TeleSensors | IMUE_Timers | IMUE_Modules | IMUE_FunctionSwitches }; @@ -349,6 +351,22 @@ class FlexSwitchesItemModel: public AbstractDynamicItemModel virtual void setDynamicItemData(QStandardItem * item, const int value) const; }; +class ControlSourceItemModel: public AbstractDynamicItemModel +{ + Q_OBJECT + public: + explicit ControlSourceItemModel(const GeneralSettings * const generalSettings, const ModelData * const modelData, + Firmware * firmware, const Boards * const board, const Board::Type boardType); + virtual ~ControlSourceItemModel() {}; + + public slots: + virtual void update(const int event = IMUE_SystemRefresh) override; + + protected: + virtual void setDynamicItemData(QStandardItem * item, const RawSource & src) const; + void addItems(const RawSourceType & type, int count, const int start = 0); +}; + // // CompoundItemModelFactory diff --git a/companion/src/firmwares/boardjson.cpp b/companion/src/firmwares/boardjson.cpp index 65d8539fbb6..a02d0325b55 100644 --- a/companion/src/firmwares/boardjson.cpp +++ b/companion/src/firmwares/boardjson.cpp @@ -752,6 +752,11 @@ bool BoardJson::isInputFlex(const InputDefn & defn) return defn.type == Board::AIT_FLEX; } +const bool BoardJson::isInputFlexGyroAxis(int index) const +{ + return (index >=0 && index < (int)m_inputs->size()) ? isInputFlexGyroAxis(m_inputs->at(index)) : false; +} + // static bool BoardJson::isInputFlexGyroAxis(const InputDefn & defn) { @@ -761,6 +766,11 @@ bool BoardJson::isInputFlexGyroAxis(const InputDefn & defn) val[0] == 'T' && val[1] == 'I' && val[2] == 'L' && val[3] == 'T' && val[4] == '_' && (val[5] == 'X' || val[5] == 'Y')); } +const bool BoardJson::isInputFlexJoystickAxis(int index) const +{ + return (index >=0 && index < (int)m_inputs->size()) ? isInputFlexJoystickAxis(m_inputs->at(index)) : false; +} + // static bool BoardJson::isInputFlexJoystickAxis(const InputDefn & defn) { diff --git a/companion/src/firmwares/boardjson.h b/companion/src/firmwares/boardjson.h index 1adba2a45e0..e2edad5768c 100644 --- a/companion/src/firmwares/boardjson.h +++ b/companion/src/firmwares/boardjson.h @@ -130,6 +130,8 @@ class BoardJson const bool isInputCalibrated(int index) const; const bool isInputConfigurable(int index) const; const bool isInputIgnored(int index) const; + const bool isInputFlexGyroAxis(int index) const; + const bool isInputFlexJoystickAxis(int index) const; const bool isInputFlexPot(int index) const; const bool isInputFlexSwitch(int index) const; const bool isInputStick(int index) const; diff --git a/companion/src/firmwares/boards.cpp b/companion/src/firmwares/boards.cpp index 0dabbc6ac66..66e406c9df3 100644 --- a/companion/src/firmwares/boards.cpp +++ b/companion/src/firmwares/boards.cpp @@ -1159,6 +1159,11 @@ bool Boards::isInputConfigurable(int index, Board::Type board) return getBoardJson(board)->isInputConfigurable(index); } +bool Boards::isInputGyroAxis(int index, Board::Type board) +{ + return getBoardJson(board)->isInputFlexGyroAxis(index); +} + bool Boards::isInputIgnored(int index, Board::Type board) { return getBoardJson(board)->isInputIgnored(index); diff --git a/companion/src/firmwares/boards.h b/companion/src/firmwares/boards.h index f452d6c33bf..d20c5d470be 100644 --- a/companion/src/firmwares/boards.h +++ b/companion/src/firmwares/boards.h @@ -454,6 +454,7 @@ class Boards static bool isInputAvailable(int index, Board::Type board = Board::BOARD_UNKNOWN); static bool isInputCalibrated(int index, Board::Type board = Board::BOARD_UNKNOWN); static bool isInputConfigurable(int index, Board::Type board = Board::BOARD_UNKNOWN); + static bool isInputGyroAxis(int index, Board::Type board = Board::BOARD_UNKNOWN); static bool isInputIgnored(int index, Board::Type board = Board::BOARD_UNKNOWN); static bool isInputPot(int index, Board::Type board = Board::BOARD_UNKNOWN); static bool isInputStick(int index, Board::Type board = Board::BOARD_UNKNOWN); diff --git a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp index 02913b80e07..790c5920332 100644 --- a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp +++ b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp @@ -25,6 +25,7 @@ #include "yaml_calibdata.h" #include "yaml_switchconfig.h" #include "yaml_moduledata.h" +#include "yaml_rawsource.h" #include "eeprominterface.h" #include "edgetxinterface.h" @@ -370,6 +371,9 @@ Node convert::encode(const GeneralSettings& rhs) if (hasColorLcd) node["selectedTheme"] = rhs.selectedTheme; + node["backlightSrc"] = rhs.backlightSrc; + node["volumeSrc"] = rhs.volumeSrc; + // Radio level tabs control (global settings) if (hasColorLcd) node["radioThemesDisabled"] = (int)rhs.radioThemesDisabled; @@ -694,6 +698,9 @@ bool convert::decode(const Node& node, GeneralSettings& rhs) node["selectedTheme"] >> rhs.selectedTheme; + node["backlightSrc"] >> rhs.backlightSrc; + node["volumeSrc"] >> rhs.volumeSrc; + // Radio level tabs control (global settings) node["radioThemesDisabled"] >> rhs.radioThemesDisabled; node["radioGFDisabled"] >> rhs.radioGFDisabled; diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index 3b0cbf01102..5ca06b708e9 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -432,6 +432,11 @@ void GeneralSettings::convert(RadioDataConversionState & cstate) customFn[i].convert(cstate.withComponentIndex(i)); } + cstate.setComponent(""); + cstate.setSubComp(tr("Backlight Source")); + backlightSrc.convert(cstate); + cstate.setSubComp(tr("Volume Source")); + volumeSrc.convert(cstate); } QString GeneralSettings::antennaModeToString() const diff --git a/companion/src/firmwares/generalsettings.h b/companion/src/firmwares/generalsettings.h index a0d25dcdc36..5cf884e5647 100644 --- a/companion/src/firmwares/generalsettings.h +++ b/companion/src/firmwares/generalsettings.h @@ -394,6 +394,9 @@ class GeneralSettings { char selectedTheme[SELECTED_THEME_NAME_LEN + 1]; + RawSource backlightSrc; + RawSource volumeSrc; + // Radio level tabs control (global settings) bool radioThemesDisabled; bool radioGFDisabled; diff --git a/companion/src/firmwares/rawsource.cpp b/companion/src/firmwares/rawsource.cpp index c784bafb63d..ef7bb59c736 100644 --- a/companion/src/firmwares/rawsource.cpp +++ b/companion/src/firmwares/rawsource.cpp @@ -280,7 +280,10 @@ bool RawSource::isStick(Board::Type board) const return false; } -bool RawSource::isAvailable(const ModelData * const model, const GeneralSettings * const gs, Board::Type board) const +bool RawSource::isAvailable(const ModelData * const model, + const GeneralSettings * const gs, + Board::Type board, + const int flags) const { if (type == SOURCE_TYPE_NONE && index == 0) return true; @@ -392,6 +395,10 @@ bool RawSource::isAvailable(const ModelData * const model, const GeneralSettings gs->serialPort[GeneralSettings::SP_AUX2] == GeneralSettings::AUX_SERIAL_SPACEMOUSE)))) return false; + if (type == SOURCE_TYPE_INPUT && (flags & AVAILABLE_CONTROLSRC) && + Boards::isInputGyroAxis(abs(index) - 1, board)) + return false; + return true; } diff --git a/companion/src/firmwares/rawsource.h b/companion/src/firmwares/rawsource.h index ba00c7b02aa..75274ea975a 100644 --- a/companion/src/firmwares/rawsource.h +++ b/companion/src/firmwares/rawsource.h @@ -248,6 +248,12 @@ class RawSource { AllSourceGroups = InputSourceGroups | GVarsGroup | TelemGroup | ScriptsGroup }; + // flags to refine isAvailable + enum AvailableFlags { + AVAILABLE_ALL, + AVAILABLE_CONTROLSRC = 0x001 + }; + RawSource() { clear(); } explicit RawSource(int value): @@ -272,7 +278,10 @@ class RawSource { RawSourceRange getRange(const ModelData * model, const GeneralSettings & settings, unsigned int flags=0) const; bool isStick(Board::Type board = Board::BOARD_UNKNOWN) const; bool isTimeBased(Board::Type board = Board::BOARD_UNKNOWN) const; - bool isAvailable(const ModelData * const model = nullptr, const GeneralSettings * const gs = nullptr, Board::Type board = Board::BOARD_UNKNOWN) const; + bool isAvailable(const ModelData * const model = nullptr, + const GeneralSettings * const gs = nullptr, + Board::Type board = Board::BOARD_UNKNOWN, + const int flags = 0) const; bool isSet() const { return type != SOURCE_TYPE_NONE || index != 0; } void clear() { type = SOURCE_TYPE_NONE; index = 0; } static StringTagMappingTable getSpecialTypesLookupTable(); diff --git a/companion/src/generaledit/generaledit.cpp b/companion/src/generaledit/generaledit.cpp index 5bfad3249c1..05c11f91748 100644 --- a/companion/src/generaledit/generaledit.cpp +++ b/companion/src/generaledit/generaledit.cpp @@ -51,8 +51,9 @@ GeneralEdit::GeneralEdit(QWidget * parent, RadioData & radioData, Firmware * fir editorItemModels->addItemModel(AbstractItemModel::IMID_RawSwitch); editorItemModels->addItemModel(AbstractItemModel::IMID_CustomFuncAction); editorItemModels->addItemModel(AbstractItemModel::IMID_CustomFuncResetParam); + editorItemModels->addItemModel(AbstractItemModel::IMID_ControlSource); - addTab(new GeneralSetupPanel(this, generalSettings, firmware), tr("Setup")); + addTab(new GeneralSetupPanel(this, generalSettings, firmware, editorItemModels), tr("Setup")); addTab(new CustomFunctionsPanel(this, nullptr, generalSettings, firmware, editorItemModels), tr("Global Functions")); addTab(new TrainerPanel(this, generalSettings, firmware, editorItemModels), tr("Trainer")); auto hwpnl = new HardwarePanel(this, generalSettings, firmware, editorItemModels); diff --git a/companion/src/generaledit/generalsetup.cpp b/companion/src/generaledit/generalsetup.cpp index 11ce8902b4a..a564effcf04 100644 --- a/companion/src/generaledit/generalsetup.cpp +++ b/companion/src/generaledit/generalsetup.cpp @@ -25,22 +25,22 @@ #include "filtereditemmodels.h" #include "autocombobox.h" #include "namevalidator.h" +#include "helpers.h" constexpr char FIM_HATSMODE[] {"Hats Mode"}; constexpr char FIM_STICKMODE[] {"Stick Mode"}; constexpr char FIM_TEMPLATESETUP[] {"Template Setup"}; constexpr char FIM_BACKLIGHTMODE[] {"Backlight Mode"}; +constexpr char FIM_CONTROLSRC[] {"Control Source"}; -GeneralSetupPanel::GeneralSetupPanel(QWidget * parent, GeneralSettings & generalSettings, Firmware * firmware): +GeneralSetupPanel::GeneralSetupPanel(QWidget * parent, GeneralSettings & generalSettings, + Firmware * firmware, CompoundItemModelFactory * sharedItemModels): GeneralPanel(parent, generalSettings, firmware), ui(new Ui::GeneralSetup) { ui->setupUi(this); - Board::Type board = firmware->getBoard(); - panelFilteredModels = new FilteredItemModelFactory(); - panelFilteredModels->registerItemModel(new FilteredItemModel(GeneralSettings::hatsModeItemModel()), FIM_HATSMODE); panelFilteredModels->registerItemModel(new FilteredItemModel(GeneralSettings::stickModeItemModel()), FIM_STICKMODE); panelFilteredModels->registerItemModel(new FilteredItemModel(GeneralSettings::templateSetupItemModel(), @@ -48,6 +48,8 @@ ui(new Ui::GeneralSetup) GeneralSettings::RadioTypeContextSurface), FIM_TEMPLATESETUP); panelFilteredModels->registerItemModel(new FilteredItemModel(GeneralSettings::backlightModeItemModel()), FIM_BACKLIGHTMODE); + panelFilteredModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_ControlSource)), + FIM_CONTROLSRC); QLabel *pmsl[] = {ui->ro_label, ui->ro1_label, ui->ro2_label, ui->ro3_label, ui->ro4_label, ui->ro5_label, ui->ro6_label, ui->ro7_label, ui->ro8_label, NULL}; QSlider *tpmsld[] = {ui->chkSA, ui->chkSB, ui->chkSC, ui->chkSD, ui->chkSE, ui->chkSF, ui->chkSG, ui->chkSH, NULL}; @@ -93,6 +95,18 @@ ui(new Ui::GeneralSetup) lock = true; + ui->volumeCtrl_CB->setSizeAdjustPolicy(QComboBox::AdjustToContents); + ui->volumeCtrl_CB->setModel(panelFilteredModels->getItemModel(FIM_CONTROLSRC)); + ui->volumeCtrl_CB->setCurrentIndex(ui->volumeCtrl_CB->findData(generalSettings.volumeSrc.toValue())); + if (ui->volumeCtrl_CB->currentIndex() < 0 && generalSettings.volumeSrc.toValue() == 0) + ui->volumeCtrl_CB->setCurrentIndex(Helpers::getFirstPosValueIndex(ui->volumeCtrl_CB)); + + ui->brightCtrl_CB->setSizeAdjustPolicy(QComboBox::AdjustToContents); + ui->brightCtrl_CB->setModel(panelFilteredModels->getItemModel(FIM_CONTROLSRC)); + ui->brightCtrl_CB->setCurrentIndex(ui->brightCtrl_CB->findData(generalSettings.backlightSrc.toValue())); + if (ui->brightCtrl_CB->currentIndex() < 0 && generalSettings.backlightSrc.toValue() == 0) + ui->brightCtrl_CB->setCurrentIndex(Helpers::getFirstPosValueIndex(ui->brightCtrl_CB)); + ui->backlightswCB->setModel(panelFilteredModels->getItemModel(FIM_BACKLIGHTMODE)); ui->backlightswCB->setCurrentIndex(ui->backlightswCB->findData(generalSettings.backlightMode)); @@ -729,6 +743,22 @@ void GeneralSetupPanel::on_OFFBright_SB_editingFinished() } } +void GeneralSetupPanel::on_volumeCtrl_CB_currentIndexChanged(int index) +{ + if (!lock) { + generalSettings.volumeSrc = RawSource(ui->volumeCtrl_CB->itemData(ui->volumeCtrl_CB->currentIndex()).toInt()); + emit modified(); + } +} + +void GeneralSetupPanel::on_brightCtrl_CB_currentIndexChanged(int index) +{ + if (!lock) { + generalSettings.backlightSrc = RawSource(ui->brightCtrl_CB->itemData(ui->brightCtrl_CB->currentIndex()).toInt()); + emit modified(); + } +} + void GeneralSetupPanel::on_volume_SL_valueChanged() { if (!lock) { diff --git a/companion/src/generaledit/generalsetup.h b/companion/src/generaledit/generalsetup.h index 94dce1efbe1..389d30238f0 100644 --- a/companion/src/generaledit/generalsetup.h +++ b/companion/src/generaledit/generalsetup.h @@ -35,7 +35,7 @@ class GeneralSetupPanel : public GeneralPanel Q_OBJECT public: - GeneralSetupPanel(QWidget *parent, GeneralSettings & generalSettings, Firmware * firmware); + GeneralSetupPanel(QWidget *parent, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels); virtual ~GeneralSetupPanel(); private slots: @@ -47,6 +47,8 @@ class GeneralSetupPanel : public GeneralPanel void on_displayTypeCB_currentIndexChanged(int index); void on_BLBright_SB_editingFinished(); void on_OFFBright_SB_editingFinished(); + void on_brightCtrl_CB_currentIndexChanged(int index); + void on_volumeCtrl_CB_currentIndexChanged(int index); void on_countrycode_CB_currentIndexChanged(int index); void on_units_CB_currentIndexChanged(int index); void on_ppm_units_CB_currentIndexChanged(int index); diff --git a/companion/src/generaledit/generalsetup.ui b/companion/src/generaledit/generalsetup.ui index fbabc39e3c3..eaaee94b2ce 100644 --- a/companion/src/generaledit/generalsetup.ui +++ b/companion/src/generaledit/generalsetup.ui @@ -651,6 +651,10 @@ + + + + @@ -722,13 +726,20 @@ - + Backlight OFF Brightness + + + + Backlight Control + + + @@ -932,7 +943,7 @@ - + 5 @@ -942,6 +953,10 @@ + + + + @@ -1147,6 +1162,13 @@ + + + + Volume Control + + + diff --git a/companion/src/generaledit/hardware.cpp b/companion/src/generaledit/hardware.cpp index 31620feee0a..8c9ba3989b2 100644 --- a/companion/src/generaledit/hardware.cpp +++ b/companion/src/generaledit/hardware.cpp @@ -365,6 +365,10 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings addParams(); } + connect(this, &HardwarePanel::inputFlexTypeChanged, [=](AutoComboBox *cb, int index) + { setFlexTypeModel(cb, index); } + ); + connect(this, &HardwarePanel::refreshItemModels, [=]() { updateItemModels(); }); addVSpring(grid, 0, grid->rowCount()); addHSpring(grid, grid->columnCount(), 0); disableMouseScrolling(); @@ -446,6 +450,7 @@ void HardwarePanel::addFlex(int index) name->setValidator(new NameValidator(board, this)); name->setField(config.name, HARDWARE_NAME_LEN, this); params->append(name); + connect(name, &AutoLineEdit::editingFinished, [=] () { emit refreshItemModels(); }); AutoComboBox *type = new AutoComboBox(this); setFlexTypeModel(type, index); @@ -465,11 +470,10 @@ void HardwarePanel::addFlex(int index) } else { invertToggles[index - Boards::getCapability(board, Board::Sticks)]->show(); } - emit InputFlexTypeChanged(); + emit inputFlexTypeChanged(type, index); + emit refreshItemModels(); }); - connect(this, &HardwarePanel::InputFlexTypeChanged, [=]() { setFlexTypeModel(type, index); }); - params->append(type); AutoCheckBox *inverted = new AutoCheckBox(this); @@ -508,6 +512,7 @@ void HardwarePanel::addSwitch(int index) name->setValidator(new NameValidator(board, this)); name->setField(config.name, HARDWARE_NAME_LEN, this); params->append(name); + connect(name, &AutoLineEdit::editingFinished, [=] () { emit refreshItemModels(); }); AutoComboBox *input = nullptr; @@ -538,6 +543,12 @@ void HardwarePanel::addSwitch(int index) type->setField(config.type, this); params->append(type); + if (!generalSettings.isSwitchFunc(index)) { + connect(type, &AutoComboBox::currentDataChanged, [=] (int val) { + emit refreshItemModels(); + }); + } + if (generalSettings.isSwitchFlex(index)) { connect(input, &AutoComboBox::currentDataChanged, [=] (int val) { if (val < 0) { @@ -547,6 +558,8 @@ void HardwarePanel::addSwitch(int index) } else type->setModel(tabFilteredModels->getItemModel(FIM_SWITCHTYPE3POS)); + + emit refreshItemModels(); }); } @@ -562,6 +575,7 @@ void HardwarePanel::addSwitch(int index) connect(type, &AutoComboBox::currentDataChanged, [=] (int val) { start->setEnabled(val == Board::SWITCH_2POS); + emit refreshItemModels(); }); if (Boards::getCapability(board, Board::FunctionSwitchColors)) { @@ -677,3 +691,8 @@ void HardwarePanel::updateSerialPortUSBVCP() view->setRowHidden(i, false); } } + +void HardwarePanel::updateItemModels() +{ + editorItemModels->update(AbstractItemModel::IMUE_Hardware); +} diff --git a/companion/src/generaledit/hardware.h b/companion/src/generaledit/hardware.h index 8500e5b56aa..ad25cd2611a 100644 --- a/companion/src/generaledit/hardware.h +++ b/companion/src/generaledit/hardware.h @@ -41,7 +41,8 @@ class HardwarePanel : public GeneralPanel signals: void internalModuleChanged(); - void InputFlexTypeChanged(); + void inputFlexTypeChanged(AutoComboBox *cb, int index); + void refreshItemModels(); private slots: void on_internalModuleChanged(); @@ -73,4 +74,5 @@ class HardwarePanel : public GeneralPanel void setFlexTypeModel(AutoComboBox * cb, int index); void updateSerialPortUSBVCP(); + void updateItemModels(); }; diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 178025db4c6..32a9b58e0ee 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -77,15 +77,15 @@ static inline void check_struct() #endif #if defined(PCBXLITES) - CHKSIZE(RadioData, 945); + CHKSIZE(RadioData, 948); #elif defined(RADIO_ST16) || defined(PCBPA01) || defined(RADIO_TX15) || defined(RADIO_T15PRO) - CHKSIZE(RadioData, 1177); + CHKSIZE(RadioData, 1179); #elif defined(COLORLCD) - CHKSIZE(RadioData, 1057); + CHKSIZE(RadioData, 1059); #elif defined(RADIO_GX12) - CHKSIZE(RadioData, 1063); + CHKSIZE(RadioData, 1066); #else - CHKSIZE(RadioData, 943); + CHKSIZE(RadioData, 946); #endif #if defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_BUMBLEBEE) diff --git a/radio/src/datastructs_private.h b/radio/src/datastructs_private.h index a95dd9ed3e7..1fa3fc2670e 100644 --- a/radio/src/datastructs_private.h +++ b/radio/src/datastructs_private.h @@ -1126,6 +1126,26 @@ PACK(struct RadioData { NOBACKUP(char selectedTheme[SELECTED_THEME_NAME_LEN]); #endif + NOBACKUP(int16_t backlightSrc:10 CUST(r_mixSrcRawEx,w_mixSrcRawEx)); + + NOBACKUP(int16_t radioGFDisabled:1); + NOBACKUP(int16_t radioTrainerDisabled:1); + NOBACKUP(int16_t modelHeliDisabled:1); + NOBACKUP(int16_t modelFMDisabled:1); + NOBACKUP(int16_t modelCurvesDisabled:1); + NOBACKUP(int16_t modelGVDisabled:1); + + NOBACKUP(int16_t volumeSrc:10 CUST(r_mixSrcRawEx,w_mixSrcRawEx)); + + NOBACKUP(int16_t modelLSDisabled:1); + NOBACKUP(int16_t modelSFDisabled:1); + NOBACKUP(int16_t modelCustomScriptsDisabled:1); + NOBACKUP(int16_t modelTelemetryDisabled:1); + NOBACKUP(int16_t disableTrainerPoweroffAlarm:1); + NOBACKUP(int16_t disablePwrOnOffHaptic:1); + + NOBACKUP(uint8_t modelQuickSelect:1); + #if defined(COLORLCD) NOBACKUP(uint8_t labelSingleSelect:1); // 0 = multi-select, 1 = single select labels NOBACKUP(uint8_t labelMultiMode:1); // 0 = match all labels (AND), 1 = match any labels (OR) @@ -1133,30 +1153,12 @@ PACK(struct RadioData { // Radio level tabs control (global settings) NOBACKUP(uint8_t modelSelectLayout:2); NOBACKUP(uint8_t radioThemesDisabled:1); -#endif - NOBACKUP(uint8_t radioGFDisabled:1); - NOBACKUP(uint8_t radioTrainerDisabled:1); - // Model level tabs control (global setting) - NOBACKUP(uint8_t modelHeliDisabled:1); - NOBACKUP(uint8_t modelFMDisabled:1); - NOBACKUP(uint8_t modelCurvesDisabled:1); - NOBACKUP(uint8_t modelGVDisabled:1); - NOBACKUP(uint8_t modelLSDisabled:1); - NOBACKUP(uint8_t modelSFDisabled:1); - NOBACKUP(uint8_t modelCustomScriptsDisabled:1); - NOBACKUP(uint8_t modelTelemetryDisabled:1); - NOBACKUP(uint8_t disableTrainerPoweroffAlarm:1); - NOBACKUP(uint8_t disablePwrOnOffHaptic:1); - - NOBACKUP(uint8_t modelQuickSelect:1); - -#if defined(COLORLCD) - NOBACKUP(uint8_t spare:5 SKIP); + NOBACKUP(uint8_t spare:1 SKIP); #elif LCD_W == 128 uint8_t invertLCD:1; // Invert B&W LCD display - NOBACKUP(uint8_t spare:2 SKIP); + NOBACKUP(uint8_t spare:6 SKIP); #else - NOBACKUP(uint8_t spare:3 SKIP); + NOBACKUP(uint8_t spare:7 SKIP); #endif NOBACKUP(uint8_t pwrOffIfInactive); diff --git a/radio/src/edgetx.cpp b/radio/src/edgetx.cpp index f7e451f6db8..79c49e68aca 100644 --- a/radio/src/edgetx.cpp +++ b/radio/src/edgetx.cpp @@ -582,6 +582,34 @@ ls_telemetry_value_t maxTelemValue(source_t channel) return 30000; } +void calcBacklightValue(int16_t source) +{ + getvalue_t raw = getValue(source); +#if defined(COLORLCD) + requiredBacklightBright = BACKLIGHT_LEVEL_MAX - (g_eeGeneral.blOffBright + + ((1024 + raw) * ((BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright) - g_eeGeneral.blOffBright) / 2048)); +#elif defined(OLED_SCREEN) + requiredBacklightBright = (raw + 1024) * 254 / 2048; +#else + requiredBacklightBright = (1024 - raw) * 100 / 2048; +#endif +} + +#define VOLUME_HYSTERESIS 10 // how much must a input value change to actually be considered for new volume setting +getvalue_t requiredSpeakerVolumeRawLast = 1024 + 1; //initial value must be outside normal range + +void calcVolumeValue(int16_t source) +{ + getvalue_t raw = getValue(source); + // only set volume if input changed more than hysteresis + if (abs(requiredSpeakerVolumeRawLast - raw) > VOLUME_HYSTERESIS) { + requiredSpeakerVolumeRawLast = raw; + } + requiredSpeakerVolume = + ((1024 + requiredSpeakerVolumeRawLast) * VOLUME_LEVEL_MAX) / + 2048; +} + void checkBacklight() { static uint8_t tmr10ms ; diff --git a/radio/src/edgetx.h b/radio/src/edgetx.h index c268e112873..7366a7590f9 100644 --- a/radio/src/edgetx.h +++ b/radio/src/edgetx.h @@ -434,6 +434,7 @@ enum FunctionsActive { FUNCTION_RACING_MODE, FUNCTION_DISABLE_TOUCH, FUNCTION_DISABLE_AUDIO_AMP, + FUNCTION_VOLUME, }; #define VARIO_FREQUENCY_ZERO 700/*Hz*/ @@ -891,3 +892,6 @@ extern bool modelTelemetryEnabled(); int pwrDelayFromYaml(int delay); int pwrDelayToYaml(int delay); + +void calcBacklightValue(int16_t source); +void calcVolumeValue(int16_t source); diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index 83acddbf61d..af2a8521f75 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -146,9 +146,6 @@ bool isRepeatDelayElapsed(const CustomFunctionData * functions, CustomFunctionsC } } -#define VOLUME_HYSTERESIS 10 // how much must a input value change to actually be considered for new volume setting -getvalue_t requiredSpeakerVolumeRawLast = 1024 + 1; //initial value must be outside normal range - void evalFunctions(CustomFunctionData * functions, CustomFunctionsContext & functionsContext) { MASK_FUNC_TYPE newActiveFunctions = 0; @@ -315,14 +312,8 @@ void evalFunctions(CustomFunctionData * functions, CustomFunctionsContext & func #if defined(AUDIO) case FUNC_VOLUME: { - getvalue_t raw = getValue(CFN_PARAM(cfn)); - // only set volume if input changed more than hysteresis - if (abs(requiredSpeakerVolumeRawLast - raw) > VOLUME_HYSTERESIS) { - requiredSpeakerVolumeRawLast = raw; - } - requiredSpeakerVolume = - ((1024 + requiredSpeakerVolumeRawLast) * VOLUME_LEVEL_MAX) / - 2048; + newActiveFunctions |= (1u << FUNCTION_VOLUME); + calcVolumeValue(CFN_PARAM(cfn)); break; } #endif @@ -402,18 +393,9 @@ void evalFunctions(CustomFunctionData * functions, CustomFunctionsContext & func // like original backlight and turn on // regardless of backlight settings requiredBacklightBright = BACKLIGHT_FORCED_ON; - break; + } else { + calcBacklightValue(CFN_PARAM(cfn)); } - - getvalue_t raw = limit(-RESX, (int)getValue(CFN_PARAM(cfn)), RESX); -#if defined(COLORLCD) - requiredBacklightBright = BACKLIGHT_LEVEL_MAX - (g_eeGeneral.blOffBright + - ((1024 + raw) * ((BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright) - g_eeGeneral.blOffBright) / 2048)); -#elif defined(OLED_SCREEN) - requiredBacklightBright = (raw + 1024) * 254 / 2048; -#else - requiredBacklightBright = (1024 - raw) * 100 / 2048; -#endif break; } diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index c74dee862cc..31694956ba4 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -49,15 +49,17 @@ int8_t slider_5pos(coord_t y, int8_t value, event_t event, uint8_t attr, const c enum { CASE_RTCLOCK(ITEM_RADIO_SETUP_DATE) CASE_RTCLOCK(ITEM_RADIO_SETUP_TIME) - ITEM_RADIO_SETUP_SOUND_LABEL, + CASE_AUDIO(ITEM_RADIO_SETUP_SOUND_LABEL) CASE_AUDIO(ITEM_RADIO_SETUP_BEEP_MODE) - ITEM_RADIO_SETUP_SPEAKER_VOLUME, - ITEM_RADIO_SETUP_BEEP_VOLUME, - ITEM_RADIO_SETUP_BEEP_LENGTH, + CASE_AUDIO(ITEM_RADIO_SETUP_SPEAKER_VOLUME) + CASE_AUDIO(ITEM_RADIO_SETUP_BEEP_VOLUME) + CASE_AUDIO(ITEM_RADIO_SETUP_BEEP_LENGTH) CASE_AUDIO(ITEM_RADIO_SETUP_SPEAKER_PITCH) - ITEM_RADIO_SETUP_WAV_VOLUME, - ITEM_RADIO_SETUP_BACKGROUND_VOLUME, - ITEM_RADIO_SETUP_START_SOUND, + CASE_AUDIO(ITEM_RADIO_SETUP_WAV_VOLUME) + CASE_AUDIO(ITEM_RADIO_SETUP_BACKGROUND_VOLUME) + CASE_AUDIO(ITEM_RADIO_SETUP_VOLUME_SOURCE) + CASE_AUDIO(ITEM_RADIO_SETUP_VOLUME_SOURCE_OVRRIDE) + CASE_AUDIO(ITEM_RADIO_SETUP_START_SOUND) CASE_VARIO(ITEM_RADIO_SETUP_VARIO_LABEL) CASE_VARIO(ITEM_RADIO_SETUP_VARIO_VOLUME) CASE_VARIO(ITEM_RADIO_SETUP_VARIO_PITCH) @@ -82,6 +84,8 @@ enum { CASE_BACKLIGHT(ITEM_RADIO_SETUP_BACKLIGHT_DELAY) CASE_BACKLIGHT(ITEM_RADIO_SETUP_BRIGHTNESS) CASE_CONTRAST(ITEM_RADIO_SETUP_CONTRAST) + CASE_BACKLIGHT(ITEM_RADIO_SETUP_BACKLIGHT_SOURCE) + CASE_BACKLIGHT(ITEM_RADIO_SETUP_BACKLIGHT_SOURCE_OVERRIDE) CASE_BACKLIGHT(ITEM_RADIO_SETUP_FLASH_BEEP) CASE_SPLASH_PARAM(ITEM_RADIO_SETUP_DISABLE_SPLASH) CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_ON_SPEED) @@ -130,6 +134,8 @@ PACK(struct ExpandState { static struct ExpandState expandState; static uint8_t SOUND_ROW(uint8_t value) { return expandState.sound ? value : HIDDEN_ROW; } +static uint8_t SOUND_WARNING_ROW(uint8_t value) { return expandState.sound && isFunctionActive(FUNCTION_VOLUME) ? value : HIDDEN_ROW; } +static uint8_t BACKLIGHT_WARNING_ROW(uint8_t value) { return isFunctionActive(FUNCTION_BACKLIGHT) ? value : HIDDEN_ROW; } static uint8_t ALARMS_ROW(uint8_t value) { return expandState.alarms ? value : HIDDEN_ROW; } @@ -177,13 +183,15 @@ void menuRadioSetup(event_t event) // Sound 0, CASE_AUDIO(SOUND_ROW(0)) - SOUND_ROW(0), - SOUND_ROW(0), - SOUND_ROW(0), CASE_AUDIO(SOUND_ROW(0)) - SOUND_ROW(0), - SOUND_ROW(0), - SOUND_ROW(0), + CASE_AUDIO(SOUND_ROW(0)) + CASE_AUDIO(SOUND_ROW(0)) + CASE_AUDIO(SOUND_ROW(0)) + CASE_AUDIO(SOUND_ROW(0)) + CASE_AUDIO(SOUND_ROW(0)) + CASE_AUDIO(SOUND_ROW(0)) + CASE_AUDIO(SOUND_WARNING_ROW(LABEL(0))) + CASE_AUDIO(SOUND_ROW(0)) // Vario CASE_VARIO(LABEL(VARIO)) CASE_VARIO(0) @@ -214,6 +222,8 @@ void menuRadioSetup(event_t event) CASE_BACKLIGHT(0) CASE_CONTRAST(0) CASE_BACKLIGHT(0) + CASE_BACKLIGHT(BACKLIGHT_WARNING_ROW(LABEL(0))) + CASE_BACKLIGHT(0) CASE_SPLASH_PARAM(0) CASE_PWR_BUTTON_PRESS(0) CASE_PWR_BUTTON_PRESS(0) @@ -335,15 +345,14 @@ void menuRadioSetup(event_t event) break; #endif +#if defined(AUDIO) case ITEM_RADIO_SETUP_SOUND_LABEL: expandState.sound = expandableSection(y, STR_SOUND_LABEL, expandState.sound, attr, event); break; -#if defined(AUDIO) case ITEM_RADIO_SETUP_BEEP_MODE: g_eeGeneral.beepMode = editChoice(LCD_W-2, y, STR_MODE, STR_VBEEPMODE, g_eeGeneral.beepMode, -2, 1, attr|RIGHT, event, INDENT_WIDTH); break; -#endif case ITEM_RADIO_SETUP_SPEAKER_VOLUME: { @@ -375,7 +384,6 @@ void menuRadioSetup(event_t event) g_eeGeneral.beepLength = slider_5pos(y, g_eeGeneral.beepLength, event, attr, STR_BEEP_LENGTH); break; -#if defined(AUDIO) case ITEM_RADIO_SETUP_SPEAKER_PITCH: { lcdDrawTextIndented(y, STR_BEEP_PITCH); @@ -388,11 +396,24 @@ void menuRadioSetup(event_t event) } } break; -#endif + + case ITEM_RADIO_SETUP_VOLUME_SOURCE: + lcdDrawTextIndented(y, STR_CONTROL); + drawSource(LCD_W-2, y, g_eeGeneral.volumeSrc, STREXPANDED|RIGHT|attr); + if (attr) + g_eeGeneral.volumeSrc = checkIncDec(event, g_eeGeneral.volumeSrc, + MIXSRC_NONE, MIXSRC_LAST_SWITCH, EE_MODEL|INCDEC_SOURCE|INCDEC_SOURCE_INVERT|NO_INCDEC_MARKS, + isSourceAvailableForBacklightOrVolume); + break; + + case ITEM_RADIO_SETUP_VOLUME_SOURCE_OVRRIDE: + lcdDrawText(LCD_W, y, STR_SF_OVERRIDDEN, RIGHT); + break; case ITEM_RADIO_SETUP_START_SOUND: g_eeGeneral.dontPlayHello = !editCheckBox(!g_eeGeneral.dontPlayHello, LCD_W-9, y, STR_PLAY_HELLO, attr, event, INDENT_WIDTH) ; break; +#endif #if defined(VARIO) case ITEM_RADIO_SETUP_VARIO_LABEL: @@ -565,6 +586,19 @@ void menuRadioSetup(event_t event) #endif } break; + + case ITEM_RADIO_SETUP_BACKLIGHT_SOURCE: + lcdDrawTextIndented(y, STR_CONTROL); + drawSource(LCD_W-2, y, g_eeGeneral.backlightSrc, STREXPANDED|RIGHT|attr); + if (attr) + g_eeGeneral.backlightSrc = checkIncDec(event, g_eeGeneral.backlightSrc, + MIXSRC_NONE, MIXSRC_LAST_SWITCH, EE_MODEL|INCDEC_SOURCE|INCDEC_SOURCE_INVERT|NO_INCDEC_MARKS, + isSourceAvailableForBacklightOrVolume); + break; + + case ITEM_RADIO_SETUP_BACKLIGHT_SOURCE_OVERRIDE: + lcdDrawText(LCD_W, y, STR_SF_OVERRIDDEN, RIGHT); + break; #endif #if !defined(OLED_SCREEN) diff --git a/radio/src/gui/212x64/radio_setup.cpp b/radio/src/gui/212x64/radio_setup.cpp index 35523054e1e..f428074bb6d 100644 --- a/radio/src/gui/212x64/radio_setup.cpp +++ b/radio/src/gui/212x64/radio_setup.cpp @@ -56,6 +56,8 @@ enum MenuRadioSetupItems { ITEM_RADIO_SETUP_SPEAKER_PITCH, ITEM_RADIO_SETUP_WAV_VOLUME, ITEM_RADIO_SETUP_BACKGROUND_VOLUME, + ITEM_RADIO_SETUP_VOLUME_SOURCE, + ITEM_RADIO_SETUP_VOLUME_SOURCE_OVRRIDE, ITEM_RADIO_SETUP_START_SOUND, CASE_VARIO(ITEM_RADIO_SETUP_VARIO_LABEL) CASE_VARIO(ITEM_RADIO_SETUP_VARIO_VOLUME) @@ -79,6 +81,8 @@ enum MenuRadioSetupItems { ITEM_RADIO_SETUP_BRIGHTNESS, ITEM_RADIO_SETUP_CONTRAST, CASE_PCBX9E_PCBX9DP(ITEM_RADIO_SETUP_BACKLIGHT_COLOR) + ITEM_RADIO_SETUP_BACKLIGHT_SOURCE, + ITEM_RADIO_SETUP_BACKLIGHT_SOURCE_OVERRIDE, ITEM_RADIO_SETUP_FLASH_BEEP, CASE_SPLASH_PARAM(ITEM_RADIO_SETUP_DISABLE_SPLASH) CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_ON_SPEED) @@ -129,6 +133,8 @@ PACK(struct ExpandState { static struct ExpandState expandState; static uint8_t SOUND_ROW(uint8_t value) { return expandState.sound ? value : HIDDEN_ROW; } +static uint8_t SOUND_WARNING_ROW(uint8_t value) { return expandState.sound && isFunctionActive(FUNCTION_VOLUME) ? value : HIDDEN_ROW; } +static uint8_t BACKLIGHT_WARNING_ROW(uint8_t value) { return isFunctionActive(FUNCTION_BACKLIGHT) ? value : HIDDEN_ROW; } static uint8_t ALARMS_ROW(uint8_t value) { return expandState.alarms ? value : HIDDEN_ROW; } @@ -186,6 +192,8 @@ void menuRadioSetup(event_t event) SOUND_ROW(0), // speaker piutch SOUND_ROW(0), // wav volume SOUND_ROW(0), // background volume + SOUND_ROW(0), // volume control + SOUND_WARNING_ROW(LABEL(0)), // volume control override warning SOUND_ROW(0), // startup sound // Vario CASE_VARIO(LABEL(VARIO)) @@ -213,6 +221,8 @@ void menuRadioSetup(event_t event) 0, // brightness 0, // contrast CASE_PCBX9E_PCBX9DP(0) // backlight color + 0, // backlight control + BACKLIGHT_WARNING_ROW(LABEL(0)), // backlight control override warning 0, // flash beep CASE_SPLASH_PARAM(0) // disable splash CASE_PWR_BUTTON_PRESS(0) // pwr on speed @@ -407,6 +417,19 @@ void menuRadioSetup(event_t event) } break; + case ITEM_RADIO_SETUP_VOLUME_SOURCE: + lcdDrawTextIndented(y, STR_CONTROL); + drawSource(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.volumeSrc, STREXPANDED|attr); + if (attr) + g_eeGeneral.volumeSrc = checkIncDec(event, g_eeGeneral.volumeSrc, + MIXSRC_NONE, MIXSRC_LAST_SWITCH, EE_MODEL|INCDEC_SOURCE|INCDEC_SOURCE_INVERT|NO_INCDEC_MARKS, + isSourceAvailableForBacklightOrVolume); + break; + + case ITEM_RADIO_SETUP_VOLUME_SOURCE_OVRRIDE: + lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, STR_SF_OVERRIDDEN, RIGHT); + break; + case ITEM_RADIO_SETUP_START_SOUND: g_eeGeneral.dontPlayHello = !editCheckBox(!g_eeGeneral.dontPlayHello, RADIO_SETUP_2ND_COLUMN, y, STR_PLAY_HELLO, attr, event, INDENT_WIDTH) ; break; @@ -562,6 +585,19 @@ void menuRadioSetup(event_t event) break; #endif + case ITEM_RADIO_SETUP_BACKLIGHT_SOURCE: + lcdDrawTextIndented(y, STR_CONTROL); + drawSource(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.backlightSrc, STREXPANDED|attr); + if (attr) + g_eeGeneral.backlightSrc = checkIncDec(event, g_eeGeneral.backlightSrc, + MIXSRC_NONE, MIXSRC_LAST_SWITCH, EE_MODEL|INCDEC_SOURCE|INCDEC_SOURCE_INVERT|NO_INCDEC_MARKS, + isSourceAvailableForBacklightOrVolume); + break; + + case ITEM_RADIO_SETUP_BACKLIGHT_SOURCE_OVERRIDE: + lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, STR_SF_OVERRIDDEN, RIGHT); + break; + case ITEM_RADIO_SETUP_DISABLE_SPLASH: lcdDrawTextAlignedLeft(y, STR_SPLASHSCREEN); if (SPLASH_NEEDED()) { diff --git a/radio/src/gui/colorlcd/libui/page.h b/radio/src/gui/colorlcd/libui/page.h index 63e263ae914..ad719904279 100644 --- a/radio/src/gui/colorlcd/libui/page.h +++ b/radio/src/gui/colorlcd/libui/page.h @@ -87,7 +87,7 @@ class SubPage : public Page Window* setupLine(const char* title, std::function createEdit, coord_t lblYOffset = 0); - static constexpr coord_t EDT_X = LCD_W * 9 / 20; + static LAYOUT_SIZE(EDT_X, LCD_W * 9 / 20, LCD_W * 8 / 20) protected: coord_t y = 0; diff --git a/radio/src/gui/colorlcd/radio/radio_setup.cpp b/radio/src/gui/colorlcd/radio/radio_setup.cpp index f6e87224a12..79688dc5442 100644 --- a/radio/src/gui/colorlcd/radio/radio_setup.cpp +++ b/radio/src/gui/colorlcd/radio/radio_setup.cpp @@ -31,6 +31,7 @@ #include "edgetx.h" #include "page.h" #include "storage/modelslist.h" +#include "sourcechoice.h" #include "tasks/mixer_task.h" #include "slider.h" #include "key_shortcuts.h" @@ -189,6 +190,26 @@ class DateTimeWindow : public Window } }; +class ControlTextOverride : public StaticText +{ + public: + ControlTextOverride(Window* parent, coord_t x, coord_t y, FunctionsActive func) : + StaticText(parent, {x + XO, y + PAD_MEDIUM, 0, 0}, STR_SF_OVERRIDDEN, COLOR_THEME_WARNING_INDEX, FONT_SZ), func(func) + { + } + + void checkEvents() override + { + show(isFunctionActive(func)); + } + + static LAYOUT_SIZE(FONT_SZ, FONT(STD), FONT(XS)) + static LAYOUT_ORIENTATION(XO, PAD_LARGE * 12, PAD_LARGE * 8) + + protected: + FunctionsActive func; +}; + #if defined(AUDIO) static SetupLineDef soundPageSetupLines[] = { { @@ -255,6 +276,16 @@ static SetupLineDef soundPageSetupLines[] = { GET_SET_DEFAULT(g_eeGeneral.backgroundVolume)))->setPos(x, y); } }, + { + // Volume source + STR_DEF(STR_CONTROL), + [](Window* parent, coord_t x, coord_t y) { + auto choice = new SourceChoice(parent, {x, y, 0, 0}, MIXSRC_NONE, MIXSRC_LAST_SWITCH, + GET_SET_DEFAULT(g_eeGeneral.volumeSrc), true); + choice->setAvailableHandler(isSourceAvailableForBacklightOrVolume); + new ControlTextOverride(parent, x, y, FUNCTION_VOLUME); + } + }, #if defined(KCX_BTAUDIO) { STR_DEF(STR_BTAUDIO), @@ -496,6 +527,14 @@ class BacklightPage : public SubPage }); #endif + // Backlight/Brightness source + setupLine(STR_CONTROL, [=](Window* parent, coord_t x, coord_t y) { + auto choice = new SourceChoice(parent, {x, y, 0, 0}, MIXSRC_NONE, MIXSRC_LAST_SWITCH, + GET_SET_DEFAULT(g_eeGeneral.backlightSrc), true); + choice->setAvailableHandler(isSourceAvailableForBacklightOrVolume); + new ControlTextOverride(parent, x, y, FUNCTION_BACKLIGHT); + }); + // Flash beep setupLine(STR_ALARM, [=](Window* parent, coord_t x, coord_t y) { new ToggleSwitch(parent, {x, y, 0, 0}, GET_SET_DEFAULT(g_eeGeneral.alarmsFlash)); diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index 57c48285722..98eac71fc6f 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -308,6 +308,11 @@ bool isSourceAvailable(int source) ); } +bool isSourceAvailableForBacklightOrVolume(int source) +{ + return checkSourceAvailable(source, SRC_SWITCH | SRC_POT | SRC_NONE); +} + bool isLogicalSwitchAvailable(int index) { LogicalSwitchData * lsw = lswAddress(index); diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 7effb887569..192328ceaf5 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -60,6 +60,7 @@ bool isInputAvailable(int input); bool isThrottleSourceAvailable(int source); bool isLogicalSwitchAvailable(int index); bool isAssignableFunctionAvailable(int function); +bool isSourceAvailableForBacklightOrVolume(int source); bool isSourceAvailable(int source); int timersSetupCount(); bool isTimerSourceAvailable(int source); diff --git a/radio/src/gui/navigation/navigation.cpp b/radio/src/gui/navigation/navigation.cpp index af348cfc4d3..dfa600d6485 100644 --- a/radio/src/gui/navigation/navigation.cpp +++ b/radio/src/gui/navigation/navigation.cpp @@ -93,6 +93,31 @@ void addPopupItem(int i_min, int i_max, int rangeMin, int rangeMax, IsValueAvail } } +struct popupCheckDef { + MixSources first; + MixSources last; + const char* title; +}; + +static const popupCheckDef popupChecks[] = { + { MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT, STR_MENU_INPUTS }, +#if defined(LUA_MODEL_SCRIPTS) + { MIXSRC_FIRST_LUA, MIXSRC_LAST_LUA, STR_MENU_LUA }, +#endif + { MIXSRC_FIRST_STICK, MIXSRC_LAST_STICK, STR_MENU_STICKS }, + { MIXSRC_FIRST_POT, MIXSRC_LAST_POT, STR_MENU_POTS }, + { MIXSRC_MIN, MIXSRC_MIN, STR_MENU_MIN }, + { MIXSRC_MAX, MIXSRC_MAX, STR_MENU_MAX }, +#if defined(HELI) + { MIXSRC_FIRST_HELI, MIXSRC_LAST_HELI, STR_MENU_HELI }, +#endif + { MIXSRC_FIRST_TRIM, MIXSRC_LAST_TRIM, STR_MENU_TRIMS }, + { MIXSRC_FIRST_SWITCH, MIXSRC_LAST_SWITCH, STR_MENU_SWITCHES }, + { MIXSRC_FIRST_TRAINER, MIXSRC_LAST_TRAINER, STR_MENU_TRAINER }, + { MIXSRC_FIRST_CH, MIXSRC_LAST_CH, STR_MENU_CHANNELS }, + { MIXSRC_FIRST_GVAR, MIXSRC_LAST_GVAR, STR_MENU_GVARS }, +}; + inline int showPopupMenus(event_t event, int newval, int i_min, int i_max, unsigned int i_flags, IsValueAvailable isValueAvailable, bool& isSource) @@ -105,23 +130,9 @@ inline int showPopupMenus(event_t event, int newval, int i_min, int i_max, POPUP_MENU_ADD_ITEM(STR_CONSTANT); } - addPopupItem(i_min, i_max, MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT, isValueAvailable, STR_MENU_INPUTS); -#if defined(LUA_MODEL_SCRIPTS) - addPopupItem(i_min, i_max, MIXSRC_FIRST_LUA, MIXSRC_LAST_LUA, isValueAvailable, STR_MENU_LUA); -#endif - if (i_min <= MIXSRC_FIRST_STICK && i_max >= MIXSRC_FIRST_STICK) POPUP_MENU_ADD_ITEM(STR_MENU_STICKS); - if (i_min <= MIXSRC_FIRST_POT && i_max >= MIXSRC_FIRST_POT) POPUP_MENU_ADD_ITEM(STR_MENU_POTS); - if (i_min <= MIXSRC_MIN && i_max >= MIXSRC_MIN) POPUP_MENU_ADD_ITEM(STR_MENU_MIN); - if (i_min <= MIXSRC_MAX && i_max >= MIXSRC_MAX) POPUP_MENU_ADD_ITEM(STR_MENU_MAX); -#if defined(HELI) - if (modelHeliEnabled()) - addPopupItem(i_min, i_max, MIXSRC_FIRST_HELI, MIXSRC_LAST_HELI, isValueAvailable, STR_MENU_HELI); -#endif - if (i_min <= MIXSRC_FIRST_TRIM && i_max >= MIXSRC_FIRST_TRIM) POPUP_MENU_ADD_ITEM(STR_MENU_TRIMS); - if (i_min <= MIXSRC_FIRST_SWITCH && i_max >= MIXSRC_FIRST_SWITCH) POPUP_MENU_ADD_ITEM(STR_MENU_SWITCHES); - addPopupItem(i_min, i_max, MIXSRC_FIRST_TRAINER, MIXSRC_LAST_TRAINER, isValueAvailable, STR_MENU_TRAINER); - if (i_min <= MIXSRC_FIRST_CH && i_max >= MIXSRC_FIRST_CH) POPUP_MENU_ADD_ITEM(STR_MENU_CHANNELS); - addPopupItem(i_min, i_max, MIXSRC_FIRST_GVAR, MIXSRC_LAST_GVAR, isValueAvailable, STR_MENU_GVARS); + for (size_t i = 0; i < DIM(popupChecks); i += 1) { + addPopupItem(i_min, i_max, popupChecks[i].first, popupChecks[i].last, isValueAvailable, popupChecks[i].title); + } if (modelTelemetryEnabled() && i_min <= MIXSRC_FIRST_TELEM && i_max >= MIXSRC_FIRST_TELEM) { for (int i = 0; i < MAX_TELEMETRY_SENSORS; i++) { diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index f9fc5081092..f60e6761029 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -1194,12 +1194,6 @@ void evalMixes(uint8_t tick10ms) // must be done after mixing because some functions use the inputs/channels values // must be done before limits because of the applyLimit function: it checks for safety switches which would be not initialized otherwise if (tick10ms) { -#if defined(AUDIO) - requiredSpeakerVolume = g_eeGeneral.speakerVolume + VOLUME_LEVEL_DEF; -#endif - - requiredBacklightBright = g_eeGeneral.getBrightness(); - if (radioGFEnabled()) { evalFunctions(g_eeGeneral.customFn, globalFunctionsContext); } else { @@ -1217,6 +1211,24 @@ void evalMixes(uint8_t tick10ms) } } #endif + +#if defined(AUDIO) + if (!isFunctionActive(FUNCTION_VOLUME)) { + if (g_eeGeneral.volumeSrc) { + calcVolumeValue(g_eeGeneral.volumeSrc); + } else { + requiredSpeakerVolume = g_eeGeneral.speakerVolume + VOLUME_LEVEL_DEF; + } + } +#endif + + if (!isFunctionActive(FUNCTION_BACKLIGHT)) { + if (g_eeGeneral.backlightSrc) { + calcBacklightValue(g_eeGeneral.backlightSrc); + } else { + requiredBacklightBright = g_eeGeneral.getBrightness(); + } + } } //========== LIMITS =============== diff --git a/radio/src/storage/yaml/yaml_datastructs_128x64.cpp b/radio/src/storage/yaml/yaml_datastructs_128x64.cpp index 890293d18bb..83ad2c1bd22 100644 --- a/radio/src/storage/yaml/yaml_datastructs_128x64.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_128x64.cpp @@ -367,21 +367,23 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "rotEncMode", 3 ), YAML_SIGNED( "uartSampleMode", 2 ), YAML_PADDING( 3 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "invertLCD", 1 ), - YAML_PADDING( 2 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_END }; diff --git a/radio/src/storage/yaml/yaml_datastructs_f16.cpp b/radio/src/storage/yaml/yaml_datastructs_f16.cpp index 3d6ee52e489..836264dd917 100644 --- a/radio/src/storage/yaml/yaml_datastructs_f16.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_f16.cpp @@ -427,25 +427,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "imuMax", 8 ), YAML_SIGNED( "imuOffset", 8 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_gx12.cpp b/radio/src/storage/yaml/yaml_datastructs_gx12.cpp index 2aee55bcc82..f7c629142ee 100644 --- a/radio/src/storage/yaml/yaml_datastructs_gx12.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_gx12.cpp @@ -391,21 +391,23 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "rotEncMode", 3 ), YAML_SIGNED( "uartSampleMode", 2 ), YAML_PADDING( 3 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "invertLCD", 1 ), - YAML_PADDING( 2 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_END }; diff --git a/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp b/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp index 8db20644583..18c504e0d54 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nb4p.cpp @@ -418,25 +418,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "uartSampleMode", 2 ), YAML_UNSIGNED( "stickDeadZone", 3 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp index 20a04c45997..f439071be20 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp @@ -425,25 +425,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "uartSampleMode", 2 ), YAML_UNSIGNED( "stickDeadZone", 3 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_pa01.cpp b/radio/src/storage/yaml/yaml_datastructs_pa01.cpp index 5f3392a0555..5901a1974f0 100644 --- a/radio/src/storage/yaml/yaml_datastructs_pa01.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_pa01.cpp @@ -450,25 +450,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "imuMax", 8 ), YAML_SIGNED( "imuOffset", 8 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_pl18.cpp b/radio/src/storage/yaml/yaml_datastructs_pl18.cpp index 6c3bb5fc780..da5ea20cb88 100644 --- a/radio/src/storage/yaml/yaml_datastructs_pl18.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_pl18.cpp @@ -425,25 +425,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "uartSampleMode", 2 ), YAML_UNSIGNED( "stickDeadZone", 3 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp b/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp index 8dfd18c660b..6523e4d6e47 100644 --- a/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_pl18u.cpp @@ -418,25 +418,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "uartSampleMode", 2 ), YAML_UNSIGNED( "stickDeadZone", 3 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_st16.cpp b/radio/src/storage/yaml/yaml_datastructs_st16.cpp index a59adaa6a15..fefe37832b4 100644 --- a/radio/src/storage/yaml/yaml_datastructs_st16.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_st16.cpp @@ -450,25 +450,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "imuMax", 8 ), YAML_SIGNED( "imuOffset", 8 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_t15.cpp b/radio/src/storage/yaml/yaml_datastructs_t15.cpp index bab90cd2984..a6f3ecb94cd 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t15.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t15.cpp @@ -435,25 +435,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "imuMax", 8 ), YAML_SIGNED( "imuOffset", 8 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_t15pro.cpp b/radio/src/storage/yaml/yaml_datastructs_t15pro.cpp index a59adaa6a15..fefe37832b4 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t15pro.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t15pro.cpp @@ -450,25 +450,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "imuMax", 8 ), YAML_SIGNED( "imuOffset", 8 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_t20.cpp b/radio/src/storage/yaml/yaml_datastructs_t20.cpp index 1e6dceaec98..87fe9c934c1 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t20.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t20.cpp @@ -376,21 +376,23 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "rotEncMode", 3 ), YAML_SIGNED( "uartSampleMode", 2 ), YAML_PADDING( 3 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "invertLCD", 1 ), - YAML_PADDING( 2 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_END }; diff --git a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp index f4987223ae9..81b54a990c5 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp @@ -376,21 +376,23 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "rotEncMode", 3 ), YAML_SIGNED( "uartSampleMode", 2 ), YAML_PADDING( 3 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "invertLCD", 1 ), - YAML_PADDING( 2 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_END }; diff --git a/radio/src/storage/yaml/yaml_datastructs_tx15.cpp b/radio/src/storage/yaml/yaml_datastructs_tx15.cpp index a59adaa6a15..fefe37832b4 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tx15.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tx15.cpp @@ -450,25 +450,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "imuMax", 8 ), YAML_SIGNED( "imuOffset", 8 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/yaml/yaml_datastructs_x10.cpp index 2a219413e40..2c523eba863 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x10.cpp @@ -426,25 +426,27 @@ static const struct YamlNode struct_RadioData[] = { YAML_SIGNED( "imuMax", 8 ), YAML_SIGNED( "imuOffset", 8 ), YAML_STRING("selectedTheme", 26), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "labelSingleSelect", 1 ), YAML_UNSIGNED( "labelMultiMode", 1 ), YAML_UNSIGNED( "favMultiMode", 1 ), YAML_UNSIGNED( "modelSelectLayout", 2 ), YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 5 ), + YAML_PADDING( 1 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_ARRAY("keyShortcuts", 8, 6, struct_QuickMenuPage, NULL), YAML_ARRAY("qmFavorites", 8, 12, struct_QuickMenuPage, NULL), diff --git a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp index ea5edac3bcd..02b3afb5f85 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp @@ -367,20 +367,22 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "rotEncMode", 3 ), YAML_SIGNED( "uartSampleMode", 2 ), YAML_PADDING( 3 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 3 ), + YAML_PADDING( 7 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_END }; diff --git a/radio/src/storage/yaml/yaml_datastructs_x9dp2019.cpp b/radio/src/storage/yaml/yaml_datastructs_x9dp2019.cpp index ea5edac3bcd..02b3afb5f85 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9dp2019.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9dp2019.cpp @@ -367,20 +367,22 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "rotEncMode", 3 ), YAML_SIGNED( "uartSampleMode", 2 ), YAML_PADDING( 3 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 3 ), + YAML_PADDING( 7 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_END }; diff --git a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp index 9d79dc58921..03f9451c49c 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp @@ -367,20 +367,22 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "rotEncMode", 3 ), YAML_SIGNED( "uartSampleMode", 2 ), YAML_PADDING( 3 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_PADDING( 3 ), + YAML_PADDING( 7 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_END }; diff --git a/radio/src/storage/yaml/yaml_datastructs_xlite.cpp b/radio/src/storage/yaml/yaml_datastructs_xlite.cpp index 890293d18bb..83ad2c1bd22 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlite.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlite.cpp @@ -367,21 +367,23 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "rotEncMode", 3 ), YAML_SIGNED( "uartSampleMode", 2 ), YAML_PADDING( 3 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "invertLCD", 1 ), - YAML_PADDING( 2 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_END }; diff --git a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp index ed54cd6b65f..9ce5f298fcc 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp @@ -371,21 +371,23 @@ static const struct YamlNode struct_RadioData[] = { YAML_PADDING( 3 ), YAML_SIGNED( "imuMax", 8 ), YAML_SIGNED( "imuOffset", 8 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), + YAML_SIGNED_CUST( "backlightSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "radioGFDisabled", 1 ), + YAML_SIGNED( "radioTrainerDisabled", 1 ), + YAML_SIGNED( "modelHeliDisabled", 1 ), + YAML_SIGNED( "modelFMDisabled", 1 ), + YAML_SIGNED( "modelCurvesDisabled", 1 ), + YAML_SIGNED( "modelGVDisabled", 1 ), + YAML_SIGNED_CUST( "volumeSrc", 10, r_mixSrcRawEx, w_mixSrcRawEx ), + YAML_SIGNED( "modelLSDisabled", 1 ), + YAML_SIGNED( "modelSFDisabled", 1 ), + YAML_SIGNED( "modelCustomScriptsDisabled", 1 ), + YAML_SIGNED( "modelTelemetryDisabled", 1 ), + YAML_SIGNED( "disableTrainerPoweroffAlarm", 1 ), + YAML_SIGNED( "disablePwrOnOffHaptic", 1 ), YAML_UNSIGNED( "modelQuickSelect", 1 ), YAML_UNSIGNED( "invertLCD", 1 ), - YAML_PADDING( 2 ), + YAML_PADDING( 6 ), YAML_UNSIGNED( "pwrOffIfInactive", 8 ), YAML_END }; diff --git a/radio/src/translations/i18n/cn.h b/radio/src/translations/i18n/cn.h index 74be9980ebd..a41ecd69430 100644 --- a/radio/src/translations/i18n/cn.h +++ b/radio/src/translations/i18n/cn.h @@ -806,6 +806,8 @@ #define TR_VOLUME "音量" #define TR_LCD "LCD" #define TR_BRIGHTNESS "亮度" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU 温度" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "主板温度" diff --git a/radio/src/translations/i18n/cz.h b/radio/src/translations/i18n/cz.h index 47e37644e30..aa7e9b6f3fd 100644 --- a/radio/src/translations/i18n/cz.h +++ b/radio/src/translations/i18n/cz.h @@ -805,6 +805,8 @@ #define TR_VOLUME "Hlasitost" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Jas" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "Tepl. CPU\016>" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "Tepl. MB \016>" diff --git a/radio/src/translations/i18n/da.h b/radio/src/translations/i18n/da.h index de5e22443c2..ec99a246020 100644 --- a/radio/src/translations/i18n/da.h +++ b/radio/src/translations/i18n/da.h @@ -811,6 +811,8 @@ #define TR_VOLUME "Lydstyrke" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Skarphed" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU temp." #define TR_COPROC "CoProc" #define TR_COPROC_TEMP TR("CoProc temp", "CoProc temp.") diff --git a/radio/src/translations/i18n/de.h b/radio/src/translations/i18n/de.h index bea9fa00343..f28fcc4dfa6 100644 --- a/radio/src/translations/i18n/de.h +++ b/radio/src/translations/i18n/de.h @@ -801,6 +801,8 @@ #define TR_VOLUME "Lautstärke" #define TR_LCD "Bildschirm" #define TR_BRIGHTNESS "Helligkeit" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU-Temp.\016>" #define TR_COPROC "CoProz." #define TR_COPROC_TEMP "MB Temp. \016>" diff --git a/radio/src/translations/i18n/en.h b/radio/src/translations/i18n/en.h index e0575ba9838..9be7c8161fb 100644 --- a/radio/src/translations/i18n/en.h +++ b/radio/src/translations/i18n/en.h @@ -807,6 +807,8 @@ #define TR_VOLUME "Volume" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Brightness" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU temp." #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp." diff --git a/radio/src/translations/i18n/es.h b/radio/src/translations/i18n/es.h index b865da1ff2e..c1a18c4ed77 100644 --- a/radio/src/translations/i18n/es.h +++ b/radio/src/translations/i18n/es.h @@ -801,6 +801,8 @@ #define TR_VOLUME "Volumen" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Brillo" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU Temp.\016>" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp. \016>" diff --git a/radio/src/translations/i18n/fi.h b/radio/src/translations/i18n/fi.h index ea8757466cf..65e0d40fd3c 100644 --- a/radio/src/translations/i18n/fi.h +++ b/radio/src/translations/i18n/fi.h @@ -801,6 +801,8 @@ #define TR_VOLUME "Äänenvoimakkuus" #define TR_LCD "LCD-näyttö" #define TR_BRIGHTNESS "Kirkkaus" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU:n lämpötila\016>" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp. \016>" diff --git a/radio/src/translations/i18n/fr.h b/radio/src/translations/i18n/fr.h index b8c83b1ceb6..f65f3275bdb 100644 --- a/radio/src/translations/i18n/fr.h +++ b/radio/src/translations/i18n/fr.h @@ -805,6 +805,8 @@ #define TR_VOLUME "Volume" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Luminosité" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "Temp. CPU\016>" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "Temp. CM \016>" diff --git a/radio/src/translations/i18n/he.h b/radio/src/translations/i18n/he.h index acd07b7fc38..bb308368a6b 100644 --- a/radio/src/translations/i18n/he.h +++ b/radio/src/translations/i18n/he.h @@ -809,6 +809,8 @@ #define TR_VOLUME "עוצמה" #define TR_LCD "LCD" #define TR_BRIGHTNESS "בהירות" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "טמפ' גבוה במעבד" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp." diff --git a/radio/src/translations/i18n/it.h b/radio/src/translations/i18n/it.h index 620d14fcebb..4489c56b99a 100644 --- a/radio/src/translations/i18n/it.h +++ b/radio/src/translations/i18n/it.h @@ -806,6 +806,8 @@ #define TR_VOLUME "Volume Audio" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Luminosità" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "Temp CPU \016>" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "Temp. MB \016>" diff --git a/radio/src/translations/i18n/jp.h b/radio/src/translations/i18n/jp.h index 914198ef55f..c59d0745bf5 100644 --- a/radio/src/translations/i18n/jp.h +++ b/radio/src/translations/i18n/jp.h @@ -805,6 +805,8 @@ #define TR_VOLUME "音量" #define TR_LCD "LCD" #define TR_BRIGHTNESS "輝度" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU温度" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB温度" diff --git a/radio/src/translations/i18n/ko.h b/radio/src/translations/i18n/ko.h index 85e43ee61dc..7f61ab2dacc 100644 --- a/radio/src/translations/i18n/ko.h +++ b/radio/src/translations/i18n/ko.h @@ -841,6 +841,8 @@ #define TR_VOLUME "볼륨" #define TR_LCD "LCD" #define TR_BRIGHTNESS "밝기" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU 온도" #define TR_COPROC "보조 프로세서" #define TR_COPROC_TEMP "메인보드 온도" diff --git a/radio/src/translations/i18n/nl.h b/radio/src/translations/i18n/nl.h index a1acd768ba7..ac4a70dfa1e 100644 --- a/radio/src/translations/i18n/nl.h +++ b/radio/src/translations/i18n/nl.h @@ -803,6 +803,8 @@ #define TR_VOLUME "Volume" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Helderheid" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU-Temp.\016>" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp. \016>" diff --git a/radio/src/translations/i18n/pl.h b/radio/src/translations/i18n/pl.h index db0c3c8626d..cc43c4bf5fc 100644 --- a/radio/src/translations/i18n/pl.h +++ b/radio/src/translations/i18n/pl.h @@ -800,6 +800,8 @@ #define TR_VOLUME "Głośność" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Jasność" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "Temp. CPU\016>" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "Temp. MB" diff --git a/radio/src/translations/i18n/pt.h b/radio/src/translations/i18n/pt.h index a998a5a6866..07d99fc1383 100644 --- a/radio/src/translations/i18n/pt.h +++ b/radio/src/translations/i18n/pt.h @@ -806,6 +806,8 @@ #define TR_VOLUME "Volume" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Brilho" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU temp." #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp." diff --git a/radio/src/translations/i18n/ru.h b/radio/src/translations/i18n/ru.h index c3b76d5fcb5..922a6332da8 100644 --- a/radio/src/translations/i18n/ru.h +++ b/radio/src/translations/i18n/ru.h @@ -808,6 +808,8 @@ #define TR_VOLUME "Громкость" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Подсветка" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "Темпер проц" #define TR_COPROC "Сопроцессор" #define TR_COPROC_TEMP "Темпер сопроц" diff --git a/radio/src/translations/i18n/se.h b/radio/src/translations/i18n/se.h index 4e5be13883f..c4859c016a4 100644 --- a/radio/src/translations/i18n/se.h +++ b/radio/src/translations/i18n/se.h @@ -806,6 +806,8 @@ #define TR_VOLUME "Volym" #define TR_LCD "LCD" #define TR_BRIGHTNESS "Ljusstyrka" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU temp.\016>" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB temp. \016>" diff --git a/radio/src/translations/i18n/tw.h b/radio/src/translations/i18n/tw.h index d97a0d516fa..61fc3513c31 100644 --- a/radio/src/translations/i18n/tw.h +++ b/radio/src/translations/i18n/tw.h @@ -803,6 +803,8 @@ #define TR_VOLUME "音量" #define TR_LCD "LCD" #define TR_BRIGHTNESS "亮度" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU 溫度" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "主板溫度" diff --git a/radio/src/translations/i18n/ua.h b/radio/src/translations/i18n/ua.h index 78525e91523..c938d72a182 100644 --- a/radio/src/translations/i18n/ua.h +++ b/radio/src/translations/i18n/ua.h @@ -807,6 +807,8 @@ #define TR_VOLUME "Загальна гучн." #define TR_LCD "LCD" /*use english*/ #define TR_BRIGHTNESS "Яскравість" +#define TR_CONTROL "Control" +#define TR_SF_OVERRIDDEN "Overridden by SF/GF" #define TR_CPU_TEMP "CPU темп." #define TR_COPROC "Сопроцессор" #define TR_COPROC_TEMP "MB темп." diff --git a/radio/src/translations/sim_string_list.h b/radio/src/translations/sim_string_list.h index 4a7ff978887..b3faa111032 100644 --- a/radio/src/translations/sim_string_list.h +++ b/radio/src/translations/sim_string_list.h @@ -464,6 +464,7 @@ #define STR_CONNECTED currentLangStrings->STR_CONNECTED #define STR_CONSTANT currentLangStrings->STR_CONSTANT #define STR_CONTRAST currentLangStrings->STR_CONTRAST +#define STR_CONTROL currentLangStrings->STR_CONTROL #define STR_COPROC_TEMP currentLangStrings->STR_COPROC_TEMP #define STR_COPROC currentLangStrings->STR_COPROC #define STR_COPY_FILE currentLangStrings->STR_COPY_FILE @@ -907,6 +908,7 @@ #define STR_SF_LCD_TO_VIDEO currentLangStrings->STR_SF_LCD_TO_VIDEO #define STR_SF_LOGS currentLangStrings->STR_SF_LOGS #define STR_SF_MOD_BIND currentLangStrings->STR_SF_MOD_BIND +#define STR_SF_OVERRIDDEN currentLangStrings->STR_SF_OVERRIDDEN #define STR_SF_PLAY_SCRIPT currentLangStrings->STR_SF_PLAY_SCRIPT #define STR_SF_RACING_MODE currentLangStrings->STR_SF_RACING_MODE #define STR_SF_RANGE_CHECK currentLangStrings->STR_SF_RANGE_CHECK diff --git a/radio/src/translations/string_list.h b/radio/src/translations/string_list.h index 09600c730fa..5d05077affb 100644 --- a/radio/src/translations/string_list.h +++ b/radio/src/translations/string_list.h @@ -463,6 +463,7 @@ STR(CONFIRMRESET) STR(CONNECTED) STR(CONSTANT) STR(CONTRAST) +STR(CONTROL) STR(COPROC_TEMP) STR(COPROC) STR(COPY_FILE) @@ -906,6 +907,7 @@ STR(SF_INST_TRIM) STR(SF_LCD_TO_VIDEO) STR(SF_LOGS) STR(SF_MOD_BIND) +STR(SF_OVERRIDDEN) STR(SF_PLAY_SCRIPT) STR(SF_RACING_MODE) STR(SF_RANGE_CHECK)