From 78550abc2db2671d2936b950b79577839376dc98 Mon Sep 17 00:00:00 2001 From: philmoz Date: Tue, 1 Apr 2025 19:23:17 +1100 Subject: [PATCH] fix(radio): channel outputs may jump when mix lines are inserted or deleted (#6034) --- radio/src/mixes.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/radio/src/mixes.cpp b/radio/src/mixes.cpp index 362455eaa..57ec3bf75 100644 --- a/radio/src/mixes.cpp +++ b/radio/src/mixes.cpp @@ -31,6 +31,9 @@ MixData* mixAddress(uint8_t idx) { return &g_model.mixData[idx]; } uint8_t getMixCount() { return _nb_mix_lines; } +// Slow up/down calculation array +extern int32_t act [MAX_MIXERS]; + void insertMix(uint8_t idx, uint8_t channel) { mixerTaskStop(); @@ -52,6 +55,10 @@ void insertMix(uint8_t idx, uint8_t channel) mix->weight = 100; mixerTaskStart(); + // Update slow up/down array + memmove(&act[idx + 1], &act[idx], (MAX_MIXERS - (idx + 1)) * sizeof(int32_t)); + act[idx] = 0; + _nb_mix_lines += 1; storageDirty(EE_MODEL); } @@ -64,6 +71,10 @@ void deleteMix(uint8_t idx) memclear(&g_model.mixData[MAX_MIXERS - 1], sizeof(MixData)); mixerTaskStart(); + // Update slow up/down array + memmove(&act[idx], &act[idx + 1], (MAX_MIXERS - (idx + 1)) * sizeof(int32_t)); + act[MAX_MIXERS - 1] = 0; + _nb_mix_lines -= 1; storageDirty(EE_MODEL); }