From c6d28e9a460eaea48c58418a5d0048d91fb647e3 Mon Sep 17 00:00:00 2001 From: elecpower Date: Sun, 1 Mar 2026 08:25:16 +1100 Subject: [PATCH] feat(cpn): SBUS trainer support on serial inputs on H5/H7 --- .../firmwares/edgetx/yaml_generalsettings.cpp | 1 + companion/src/firmwares/generalsettings.cpp | 17 ++++++++++------- companion/src/firmwares/generalsettings.h | 1 + companion/src/firmwares/modeldata.cpp | 6 ++++-- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp index d215df51bf9..f7a174031c6 100644 --- a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp +++ b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp @@ -93,6 +93,7 @@ const YamlLookupTable uartModeLut = { { GeneralSettings::AUX_SERIAL_TELE_MIRROR, "TELEMETRY_MIRROR" }, { GeneralSettings::AUX_SERIAL_TELE_IN, "TELEMETRY_IN" }, { GeneralSettings::AUX_SERIAL_SBUS_TRAINER, "SBUS_TRAINER" }, + { GeneralSettings::AUX_SERIAL_SBUS_TRAINER_INV, "SBUS_TRAINER_INV" }, { GeneralSettings::AUX_SERIAL_LUA, "LUA" }, { GeneralSettings::AUX_SERIAL_CLI, "CLI" }, { GeneralSettings::AUX_SERIAL_GPS, "GPS" }, diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index 9faf0ca857e..5b6e24e7e98 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -511,6 +511,8 @@ QString GeneralSettings::serialModeToString(int value) return tr("Telemetry In"); case AUX_SERIAL_SBUS_TRAINER: return tr("SBUS Trainer"); + case AUX_SERIAL_SBUS_TRAINER_INV: + return tr("SBUS Trainer Inverted"); case AUX_SERIAL_LUA: return tr("LUA"); case AUX_SERIAL_CLI: @@ -600,16 +602,17 @@ AbstractStaticItemModel * GeneralSettings::serialModeItemModel() if (i == AUX_SERIAL_EXT_MODULE) { contexts &= ~(AUX2Context | VCPContext); - } - else if (i == AUX_SERIAL_TELE_IN || - i == AUX_SERIAL_SBUS_TRAINER || - i == AUX_SERIAL_GPS || - i == AUX_SERIAL_SPACEMOUSE || - i == AUX_SERIAL_EXT_MODULE) { + } else if (i == AUX_SERIAL_TELE_IN || + i == AUX_SERIAL_SBUS_TRAINER || + i == AUX_SERIAL_SBUS_TRAINER_INV || + i == AUX_SERIAL_GPS || + i == AUX_SERIAL_SPACEMOUSE || + i == AUX_SERIAL_EXT_MODULE) { contexts &= ~VCPContext; } - mdl->appendToItemList(serialModeToString(i), i, true, 0, contexts); + bool avail = IS_STM32F2F4(getCurrentBoard()) && i == AUX_SERIAL_SBUS_TRAINER_INV ? false : true; + mdl->appendToItemList(serialModeToString(i), i, avail, 0, contexts); } mdl->loadItemList(); diff --git a/companion/src/firmwares/generalsettings.h b/companion/src/firmwares/generalsettings.h index 9ff926369e0..d929dc5b420 100644 --- a/companion/src/firmwares/generalsettings.h +++ b/companion/src/firmwares/generalsettings.h @@ -161,6 +161,7 @@ class GeneralSettings { AUX_SERIAL_TELE_MIRROR, AUX_SERIAL_TELE_IN, AUX_SERIAL_SBUS_TRAINER, + AUX_SERIAL_SBUS_TRAINER_INV, AUX_SERIAL_LUA, AUX_SERIAL_CLI, AUX_SERIAL_GPS, diff --git a/companion/src/firmwares/modeldata.cpp b/companion/src/firmwares/modeldata.cpp index 1a669ec53e5..aac26cc0e06 100644 --- a/companion/src/firmwares/modeldata.cpp +++ b/companion/src/firmwares/modeldata.cpp @@ -1844,8 +1844,10 @@ bool ModelData::isTrainerModeAvailable(const GeneralSettings & generalSettings, return false; if (value == TRAINER_MODE_MASTER_SERIAL && - (generalSettings.serialPort[GeneralSettings::SP_AUX1] != GeneralSettings::AUX_SERIAL_SBUS_TRAINER && - generalSettings.serialPort[GeneralSettings::SP_AUX2] != GeneralSettings::AUX_SERIAL_SBUS_TRAINER)) + generalSettings.serialPort[GeneralSettings::SP_AUX1] != GeneralSettings::AUX_SERIAL_SBUS_TRAINER && + generalSettings.serialPort[GeneralSettings::SP_AUX1] != GeneralSettings::AUX_SERIAL_SBUS_TRAINER_INV && + generalSettings.serialPort[GeneralSettings::SP_AUX2] != GeneralSettings::AUX_SERIAL_SBUS_TRAINER && + generalSettings.serialPort[GeneralSettings::SP_AUX2] != GeneralSettings::AUX_SERIAL_SBUS_TRAINER_INV) return false; if ((value == TRAINER_MODE_MASTER_BLUETOOTH || value == TRAINER_MODE_SLAVE_BLUETOOTH) &&