fix(radio): GV calculation and menu navigation in weight/offset/expo fields (#5564)

This commit is contained in:
philmoz
2024-10-10 11:43:14 +10:00
committed by GitHub
parent fcc75bd6b7
commit 7f727cb15c
6 changed files with 31 additions and 25 deletions
+1 -2
View File
@@ -78,8 +78,7 @@ void onSourceLongEnterPress(const char * result)
if (result == STR_MENU_INPUTS) {
checkIncDecSelection =
getFirstAvailable(MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT,
isInputAvailable) +
1;
isInputAvailable);
}
#if defined(LUA_MODEL_SCRIPTS)
else if (result == STR_MENU_LUA) {
+2 -2
View File
@@ -181,7 +181,7 @@ inline int showPopupMenus(event_t event, int newval, int i_min, int i_max,
return newval;
}
int checkMovedInput(int newval, int i_min, int i_max, unsigned int i_flags, bool isSource)
int checkMovedInput(int newval, unsigned int i_flags, bool isSource)
{
#if defined(AUTOSWITCH)
if (i_flags & INCDEC_SWITCH) {
@@ -191,7 +191,7 @@ int checkMovedInput(int newval, int i_min, int i_max, unsigned int i_flags, bool
#if defined(AUTOSOURCE)
if (i_flags & (INCDEC_SOURCE|INCDEC_SOURCE_VALUE)) {
int source = getMovedSource(i_min);
int source = getMovedSource(MIXSRC_FIRST_STICK);
if (source) {
if (i_flags & INCDEC_SOURCE_VALUE) {
if (isSource) {
+11 -9
View File
@@ -35,12 +35,11 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
int newval = val;
bool isSource = false;
bool origIsSource = false;
if (i_flags & INCDEC_SOURCE_VALUE) {
SourceNumVal v;
v.rawValue = val;
// Save isSource flag;
origIsSource = isSource = v.isSource;
isSource = v.isSource;
// Remove isSource flag;
val = v.value;
newval = v.value;
@@ -54,19 +53,22 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
val = -val;
}
int vmin = isSource ? srcMin : i_min;
int vmax = isSource ? srcMax : i_max;
if (event == EVT_KEY_FIRST(KEY_UP) || event == EVT_KEY_REPT(KEY_UP) ||
event == EVT_KEY_FIRST(KEY_RIGHT) || event == EVT_KEY_REPT(KEY_RIGHT)) {
do {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval += min(10, i_max - val);
newval += min(10, vmax - val);
}
else {
newval++;
}
} while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) &&
newval <= i_max);
newval <= vmax);
if (newval > i_max) {
if (newval > vmax) {
newval = val;
killEvents(event);
AUDIO_KEY_ERROR();
@@ -75,21 +77,21 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
event == EVT_KEY_FIRST(KEY_LEFT) || event == EVT_KEY_REPT(KEY_LEFT)) {
do {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval -= min(10, val - i_min);
newval -= min(10, val - vmin);
} else {
newval--;
}
} while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) &&
newval >= i_min);
newval >= vmin);
if (newval < i_min) {
if (newval < vmin) {
newval = val;
killEvents(event);
AUDIO_KEY_ERROR();
}
}
auto moved = checkMovedInput(newval, i_min, i_max, i_flags, isSource);
auto moved = checkMovedInput(newval, i_flags, isSource);
if (!isValueAvailable || isValueAvailable(moved))
newval = moved;
+14 -9
View File
@@ -54,6 +54,8 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
if (i_flags & INCDEC_SOURCE_VALUE) {
SourceNumVal v;
v.rawValue = val;
// Save isSource flag;
isSource = v.isSource;
// Remove isSource flag;
val = v.value;
newval = v.value;
@@ -67,20 +69,23 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
val = -val;
}
int vmin = isSource ? srcMin : i_min;
int vmax = isSource ? srcMax : i_max;
if (event == evt_rot_inc || event == EVT_KEY_FIRST(KEY_PLUS) ||
event == EVT_KEY_REPT(KEY_PLUS)) {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval += min(10, i_max - val);
newval += min(10, vmax - val);
} else {
newval += min<int>(rotaryEncoderGetAccel(), i_max - val);
newval += min<int>(rotaryEncoderGetAccel(), vmax - val);
}
while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval <= i_max) {
while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval <= vmax) {
newval++;
}
if (newval > i_max) {
if (newval > vmax) {
newval = val;
AUDIO_KEY_ERROR();
}
@@ -88,22 +93,22 @@ int checkIncDec(event_t event, int val, int i_min, int i_max, int srcMin, int sr
event == EVT_KEY_REPT(KEY_MINUS)) {
if (IS_KEY_REPT(event) && (i_flags & INCDEC_REP10)) {
newval -= min(10, val - i_min);
newval -= min(10, val - vmin);
} else {
newval -= min<int>(rotaryEncoderGetAccel(), val - i_min);
newval -= min<int>(rotaryEncoderGetAccel(), val - vmin);
}
while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval >= i_min) {
while (!(i_flags & INCDEC_SKIP_VAL_CHECK_FUNC) && isValueAvailable && !isValueAvailable(newval) && newval >= vmin) {
newval--;
}
if (newval < i_min) {
if (newval < vmin) {
newval = val;
AUDIO_KEY_ERROR();
}
}
auto moved = checkMovedInput(newval, i_min, i_max, i_flags, isSource);
auto moved = checkMovedInput(newval, i_flags, isSource);
if (!isValueAvailable || isValueAvailable(moved))
newval = moved;
+1 -1
View File
@@ -60,7 +60,7 @@ int32_t getSourceNumFieldValue(int16_t val, int16_t min, int16_t max)
SourceNumVal v; v.rawValue = val;
if (v.isSource) {
result = getValue(v.value);
if (v.value >= MIXSRC_FIRST_GVAR && v.value <= MIXSRC_LAST_GVAR) {
if (abs(v.value) >= MIXSRC_FIRST_GVAR && v.value <= MIXSRC_LAST_GVAR) {
// Mimic behviour of GET_GVAR_PREC1
result = result * 10;
} else {
+2 -2
View File
@@ -437,8 +437,8 @@ char *getValueOrSrcVarString(char *dest, size_t len, gvar_t value, gvar_t vmin,
SourceNumVal v;
v.rawValue = value;
if (v.isSource) {
if (v.value >= MIXSRC_FIRST_GVAR && v.value <= MIXSRC_LAST_GVAR) {
getGVarString(dest, v.value - MIXSRC_FIRST_GVAR);
if (abs(v.value) >= MIXSRC_FIRST_GVAR && v.value <= MIXSRC_LAST_GVAR) {
getGVarString(dest, (v.value < 0) ? v.value + MIXSRC_FIRST_GVAR - 1 : v.value - MIXSRC_FIRST_GVAR);
} else {
const char* s = getSourceString(v.value);
strncpy(dest, s, len);