From 769e559837c5137db8297569be3382509da11e15 Mon Sep 17 00:00:00 2001 From: 3djc <5167938+3djc@users.noreply.github.com> Date: Fri, 20 Mar 2026 09:54:37 +0100 Subject: [PATCH] feat(radio): add trims to autosource and autoswitch if configured as 3P switch (#7024) --- radio/src/edgetx.cpp | 12 ++++++++++++ radio/src/switches.cpp | 19 ++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/radio/src/edgetx.cpp b/radio/src/edgetx.cpp index e39312135..618e96c51 100644 --- a/radio/src/edgetx.cpp +++ b/radio/src/edgetx.cpp @@ -482,6 +482,16 @@ int8_t getMovedSource(uint8_t min) } } + static int16_t trimStates[MAX_TRIMS]; + if (result == 0) { + for (uint8_t i = 0; i < MAX_TRIMS; i++) { + if (abs(getTrimValue(mixerCurrentFlightMode, i) - trimStates[i]) > 0) { + result = MIXSRC_FIRST_TRIM + i; + break; + } + } + } + static int16_t sourcesStates[MAX_ANALOG_INPUTS]; if (result == 0) { for (uint8_t i = 0; i < MAX_ANALOG_INPUTS; i++) { @@ -505,9 +515,11 @@ int8_t getMovedSource(uint8_t min) if (result || recent) { memcpy(inputsStates, anas, sizeof(inputsStates)); memcpy(sourcesStates, calibratedAnalogs, sizeof(sourcesStates)); + for (uint8_t i = 0; i < MAX_TRIMS; i++) trimStates[i] = getTrimValue(mixerCurrentFlightMode, i); } s_move_last_time = get_tmr10ms(); + return result; } #endif diff --git a/radio/src/switches.cpp b/radio/src/switches.cpp index d0ac61260..8f7327ef7 100644 --- a/radio/src/switches.cpp +++ b/radio/src/switches.cpp @@ -88,7 +88,7 @@ uint8_t potsPos[MAX_POTS]; #if defined(FUNCTION_SWITCHES) // Customizable switches -// +// // Non pushed : SWSRC_Sx0 = -1024 = Sx(up) = state 0 // Pushed : SWSRC_Sx2 = +1024 = Sx(down) = state 1 @@ -311,17 +311,17 @@ int switchLookupIdx(const char* name, size_t len) if (strncmp(sw_name, name, len) == 0) return i; } - return -1; + return -1; } char switchGetLetter(uint8_t idx) { if (idx >= switchGetMaxAllSwitches() + MAX_FLEX_SWITCHES) return -1; - + const char* name = switchGetDefaultName(idx); if (!name) return -1; - + return name[strlen(name) - 1]; } @@ -393,7 +393,7 @@ void getSwitchesPosition(bool startup) if (!SWITCH_EXISTS(i)) continue; newPos |= checkSwitchPosition(i, startup); } - + switchesPos = newPos; auto max_pots = adcGetMaxInputs(ADC_INPUT_FLEX); @@ -861,6 +861,15 @@ swsrc_t getMovedSwitch() } } + // Trims: only detect trims configured as 3P + for (int i = 0; i < keysGetMaxTrims(); i++) { + if (getRawTrimValue(mixerCurrentFlightMode, i).mode == TRIM_MODE_3POS) { + uint8_t tidx = inputMappingConvertMode(i) * 2; + if (trimDown(tidx)) result = SWSRC_FIRST_TRIM + i * 2; + else if (trimDown(tidx+1)) result = SWSRC_FIRST_TRIM + i * 2 + 1; + } + } + if ((tmr10ms_t)(get_tmr10ms() - s_move_last_time) > 100) result = 0;