From d59a853f0c05bea53f0adf8e6887227d915164ae Mon Sep 17 00:00:00 2001 From: Jesper Frickmann Date: Wed, 25 Apr 2018 02:04:43 -0400 Subject: [PATCH] Issue #5696 (#5698) When an "Adjust GV" special function is reusing trim buttons to increase/decrease GVs, then the trim limits are applied instead of GV limits. This patch applies the GV limits. --- radio/src/opentx.cpp | 69 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 22 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 517ac523f..6330fb2fd 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1368,6 +1368,9 @@ uint8_t checkTrim(event_t event) int8_t trimInc = g_model.trimInc + 1; int8_t v = (trimInc==-1) ? min(32, abs(before)/4+1) : (1 << trimInc); // TODO flash saving if (trimInc < 0) if (thro) v = 4; // if throttle trim and trim trottle then step=4 +#if defined(GVARS) + if (TRIM_REUSED(idx)) v = 1; +#endif int16_t after = (k&1) ? before + v : before - v; // positive = k&1 bool beepTrim = false; @@ -1377,35 +1380,57 @@ uint8_t checkTrim(event_t event) AUDIO_TRIM_MIDDLE(); pauseEvents(event); } - else if (before>TRIM_MIN && after<=TRIM_MIN) { - beepTrim = true; - AUDIO_TRIM_MIN(); - killEvents(event); - } - else if (before=TRIM_MAX) { - beepTrim = true; - AUDIO_TRIM_MAX(); - killEvents(event); - } - - if ((beforeTRIM_MAX) || (before>after && after TRIM_EXTENDED_MAX) { - after = TRIM_EXTENDED_MAX; - } #if defined(GVARS) if (TRIM_REUSED(idx)) { - SET_GVAR_VALUE(trimGvar[idx], phase, after); + int8_t gvar = trimGvar[idx]; +#if defined(CPUARM) + int16_t vmin = GVAR_MIN + g_model.gvars[gvar].min; + int16_t vmax = GVAR_MAX - g_model.gvars[gvar].max; +#else + int16_t vmin = TRIM_MIN; + int16_t vmax = TRIM_MAX; +#endif + if (after < vmin) { + after = vmin; + beepTrim = true; + AUDIO_TRIM_MIN(); + killEvents(event); + } + else if (after > vmax) { + after = vmax; + beepTrim = true; + AUDIO_TRIM_MAX(); + killEvents(event); + } + + SET_GVAR_VALUE(gvar, phase, after); } else #endif { + if (before>TRIM_MIN && after<=TRIM_MIN) { + beepTrim = true; + AUDIO_TRIM_MIN(); + killEvents(event); + } + else if (before=TRIM_MAX) { + beepTrim = true; + AUDIO_TRIM_MAX(); + killEvents(event); + } + + if ((beforeTRIM_MAX) || (before>after && after TRIM_EXTENDED_MAX) { + after = TRIM_EXTENDED_MAX; + } + #if defined(CPUARM) if (!setTrimValue(phase, idx, after)) { // we don't play a beep, so we exit now the function -- 2.11.4.GIT