diff --git a/src/config/model.c b/src/config/model.c index 57da90e..37215f8 100644 --- a/src/config/model.c +++ b/src/config/model.c @@ -77,7 +77,7 @@ static const char MIXER_USETRIM[] = "usetrim"; static const char MIXER_MUXTYPE[] = "muxtype"; static const char * const MIXER_MUXTYPE_VAL[MUX_LAST] = { - "replace", "multiply", "add", "max", "min", "delay", + "replace", "multiply", "add", "max", "min", "delay", "cycle" #if HAS_EXTENDED_AUDIO "beep","voice", #endif diff --git a/src/mixer.c b/src/mixer.c index e27ba97..734babe 100644 --- a/src/mixer.c +++ b/src/mixer.c @@ -333,6 +333,31 @@ void MIXER_ApplyMixer(struct Mixer *mixer, volatile s32 *raw, s32 *orig_value) else if(value - *orig_value < -rate) value = *orig_value - rate; } + case MUX_CYCLE: + { + if(orig_value != NULL) + { + if(MIXER_GET_CYCLE_DIRECTION(mixer)) + { + value = *orig_value + value/50; + } + else + { + value = *orig_value - value/50; + } + if(value >= CHAN_MAX_VALUE) + { + value = CHAN_MAX_VALUE; + MIXER_FLIP_CYCLE_DIRECTION(mixer); + } + if(value <= CHAN_MIN_VALUE) + { + value = CHAN_MIN_VALUE; + MIXER_FLIP_CYCLE_DIRECTION(mixer); + } + } + } + break; #if HAS_EXTENDED_AUDIO case MUX_BEEP: if (orig_value) { diff --git a/src/mixer.h b/src/mixer.h index a487b1f..def44e2 100644 --- a/src/mixer.h +++ b/src/mixer.h @@ -25,6 +25,8 @@ #define MIXER_APPLY_TRIM(x) (((x)->flags) & 0x10) #define MIXER_SET_APPLY_TRIM(x,y) ((x)->flags = ((x)->flags & ~0x10) | ((y) ? 0x10 : 0)) #define MIXER_SET_MUX(x,y) ((x)->flags = ((x)->flags & ~0x0F) | (y)) +#define MIXER_GET_CYCLE_DIRECTION(x) (((x)->flags) & 0x80) +#define MIXER_FLIP_CYCLE_DIRECTION(x) ((x)->flags = ((x)->flags & 0x80) == 0x80 ? ((x)->flags & 0x7F) : (x)->flags | 0x80) enum { TRIM_ONOFF = 191, @@ -106,6 +108,7 @@ enum MuxType { MUX_MAX, MUX_MIN, MUX_DELAY, + MUX_CYCLE, #if HAS_EXTENDED_AUDIO MUX_BEEP, MUX_VOICE, diff --git a/src/pages/common/advanced/_mixer_setup.c b/src/pages/common/advanced/_mixer_setup.c index fd76d75..f917559 100644 --- a/src/pages/common/advanced/_mixer_setup.c +++ b/src/pages/common/advanced/_mixer_setup.c @@ -344,6 +344,7 @@ const char *set_mux_cb(guiObject_t *obj, int dir, void *data) case MUX_MAX: return _tr("max"); case MUX_MIN: return _tr("min"); case MUX_DELAY: return _tr("delay"); + case MUX_CYCLE: return _tr("cycle"); #if HAS_EXTENDED_AUDIO case MUX_BEEP: return _tr("beep"); case MUX_VOICE: return _tr("voice");