diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 9a5f4bd69..8ac5fc51f 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -631,12 +631,13 @@ void menuModelSetup(event_t event) case ITEM_MODEL_SETUP_THROTTLE_TRACE: { lcdDrawTextAlignedLeft(y, STR_TTRACE); - if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.thrTraceSrc, NUM_POTS+NUM_SLIDERS+MAX_OUTPUT_CHANNELS); - uint8_t idx = g_model.thrTraceSrc + MIXSRC_Thr; - if (idx > MIXSRC_Thr) - idx += 1; - if (idx >= MIXSRC_FIRST_POT+NUM_POTS+NUM_SLIDERS) - idx += MIXSRC_CH1 - MIXSRC_FIRST_POT - NUM_POTS - NUM_SLIDERS; + if (attr) + CHECK_INCDEC_MODELVAR_ZERO_CHECK( + event, g_model.thrTraceSrc, + NUM_POTS + NUM_SLIDERS + MAX_OUTPUT_CHANNELS, + isThrottleSourceAvailable); + + uint8_t idx = throttleSource2Source(g_model.thrTraceSrc); drawSource(MODEL_SETUP_2ND_COLUMN, y, idx, attr); break; } diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 5b187a545..2bc541987 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -606,12 +606,13 @@ void menuModelSetup(event_t event) case ITEM_MODEL_SETUP_THROTTLE_TRACE: { lcdDrawTextAlignedLeft(y, STR_TTRACE); - if (attr) CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, g_model.thrTraceSrc, NUM_POTS+NUM_SLIDERS+MAX_OUTPUT_CHANNELS, isThrottleSourceAvailable); - uint8_t idx = g_model.thrTraceSrc + MIXSRC_Thr; - if (idx > MIXSRC_Thr) - idx += 1; - if (idx >= MIXSRC_FIRST_POT+NUM_POTS+NUM_SLIDERS) - idx += MIXSRC_CH1 - MIXSRC_FIRST_POT - NUM_POTS - NUM_SLIDERS; + if (attr) + CHECK_INCDEC_MODELVAR_ZERO_CHECK( + event, g_model.thrTraceSrc, + NUM_POTS + NUM_SLIDERS + MAX_OUTPUT_CHANNELS, + isThrottleSourceAvailable); + + uint8_t idx = throttleSource2Source(g_model.thrTraceSrc); drawSource(MODEL_SETUP_2ND_COLUMN, y, idx, attr); break; } diff --git a/radio/src/gui/colorlcd/model_setup.cpp b/radio/src/gui/colorlcd/model_setup.cpp index 6e6f97265..85e8a8e20 100644 --- a/radio/src/gui/colorlcd/model_setup.cpp +++ b/radio/src/gui/colorlcd/model_setup.cpp @@ -1141,27 +1141,15 @@ void ModelSetupPage::build(FormWindow * window) new StaticText(window, grid.getLabelSlot(true), STR_TTRACE); auto sc = new SourceChoice( window, grid.getFieldSlot(), 0, MIXSRC_LAST_CH, - [=]() { - int16_t src = g_model.thrTraceSrc; - if (src == 0) return (int16_t)MIXSRC_Thr; - if (--src < NUM_POTS + NUM_SLIDERS) return (int16_t)(src + MIXSRC_FIRST_POT); - return (int16_t)(src - (NUM_POTS + NUM_SLIDERS) + MIXSRC_FIRST_CH); - }, + [=]() { return throttleSource2Source(g_model.thrTraceSrc); }, [=](int16_t src) { - if (src == MIXSRC_Thr) - g_model.thrTraceSrc = 0; - else if (src <= MIXSRC_LAST_POT) - g_model.thrTraceSrc = src - MIXSRC_FIRST_POT + 1; - else if (src <= MIXSRC_LAST_CH) - g_model.thrTraceSrc = src - MIXSRC_FIRST_CH + NUM_POTS + NUM_SLIDERS + 1; - SET_DIRTY(); + int16_t val = source2ThrottleSource(src); + if (val >= 0) { + g_model.thrTraceSrc = val; + SET_DIRTY(); + } }); - sc->setAvailableHandler([=](int16_t src) { - return isSourceAvailable(src) && - ((src == MIXSRC_Thr) || - ((src >= MIXSRC_FIRST_POT) && (src <= MIXSRC_LAST_POT)) || - ((src >= MIXSRC_FIRST_CH) && (src <= MIXSRC_LAST_CH))); - }); + sc->setAvailableHandler(isThrottleSourceAvailable); grid.nextLine(); // Throttle trim diff --git a/radio/src/gui/gui_common.cpp b/radio/src/gui/gui_common.cpp index d243d154f..f703aa5e3 100644 --- a/radio/src/gui/gui_common.cpp +++ b/radio/src/gui/gui_common.cpp @@ -442,12 +442,15 @@ bool isSwitch2POSWarningStateAvailable(int state) // return isSwitchAvailable(swtch, TimersContext); //} -bool isThrottleSourceAvailable(int source) +bool isThrottleSourceAvailable(int src) { - if (source >= THROTTLE_SOURCE_FIRST_POT && source < THROTTLE_SOURCE_FIRST_POT+NUM_POTS+NUM_SLIDERS && !IS_POT_SLIDER_AVAILABLE(POT1+source-THROTTLE_SOURCE_FIRST_POT)) - return false; - else - return true; +#if !defined(LIBOPENUI) + src = throttleSource2Source(src); +#endif + return isSourceAvailable(src) && + ((src == MIXSRC_Thr) || + ((src >= MIXSRC_FIRST_POT) && (src <= MIXSRC_LAST_POT)) || + ((src >= MIXSRC_FIRST_CH) && (src <= MIXSRC_LAST_CH))); } bool isLogicalSwitchFunctionAvailable(int function) diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 438989eb0..ac9f9d460 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -229,32 +229,6 @@ enum SwashType { #include "pulses/modules_constants.h" -enum ThrottleSources { - THROTTLE_SOURCE_THR, - THROTTLE_SOURCE_FIRST_POT, -#if defined(PCBX9E) - THROTTLE_SOURCE_F1 = THROTTLE_SOURCE_FIRST_POT, - THROTTLE_SOURCE_F2, - THROTTLE_SOURCE_F3, - THROTTLE_SOURCE_F4, - THROTTLE_SOURCE_S1, - THROTTLE_SOURCE_S2, - THROTTLE_SOURCE_LS, - THROTTLE_SOURCE_RS, -#elif defined(PCBTARANIS) - THROTTLE_SOURCE_S1 = THROTTLE_SOURCE_FIRST_POT, - THROTTLE_SOURCE_S2, - THROTTLE_SOURCE_S3, - THROTTLE_SOURCE_LS, - THROTTLE_SOURCE_RS, -#else - THROTTLE_SOURCE_P1 = THROTTLE_SOURCE_FIRST_POT, - THROTTLE_SOURCE_P2, - THROTTLE_SOURCE_P3, -#endif - THROTTLE_SOURCE_CH1, -}; - enum DisplayTrims { DISPLAY_TRIMS_NEVER, diff --git a/radio/src/timers.cpp b/radio/src/timers.cpp index 0ee289e78..c3d336b1f 100644 --- a/radio/src/timers.cpp +++ b/radio/src/timers.cpp @@ -174,3 +174,22 @@ void evalTimers(int16_t throttle, uint8_t tick10ms) } } } + +int16_t throttleSource2Source(int16_t thrSrc) +{ + if (thrSrc == 0) return (int16_t)MIXSRC_Thr; + if (--thrSrc < NUM_POTS + NUM_SLIDERS) + return (int16_t)(thrSrc + MIXSRC_FIRST_POT); + return (int16_t)(thrSrc - (NUM_POTS + NUM_SLIDERS) + MIXSRC_FIRST_CH); +} + +int16_t source2ThrottleSource(int16_t src) +{ + if (src == MIXSRC_Thr) + return 0; + else if (src <= MIXSRC_LAST_POT) + return src - MIXSRC_FIRST_POT + 1; + else if (src <= MIXSRC_LAST_CH) + return src - MIXSRC_FIRST_CH + NUM_POTS + NUM_SLIDERS + 1; + return -1; +} diff --git a/radio/src/timers.h b/radio/src/timers.h index fb5f7a4be..5226414a0 100644 --- a/radio/src/timers.h +++ b/radio/src/timers.h @@ -62,4 +62,7 @@ static inline tmr10ms_t get_tmr10ms() return g_tmr10ms; } +int16_t throttleSource2Source(int16_t thrSrc); +int16_t source2ThrottleSource(int16_t src); + #endif // _TIMERS_H_