chore: cleanup GVAR code (#6332)

This commit is contained in:
philmoz
2025-06-17 14:43:00 +10:00
committed by GitHub
parent a332fa5b9b
commit 3216eeaefe
16 changed files with 91 additions and 123 deletions
+4 -4
View File
@@ -90,7 +90,7 @@ int32_t gvValDisplay(int32_t val)
int32_t gvValEdit(const char* title, int32_t val, int32_t offset, int min, int max, coord_t y, uint8_t attr, event_t event, bool active, LcdFlags flags)
{
lcdDrawText(0, y, title, flags);
if (GV_IS_GV_VALUE(val, -GV_RANGELARGE, GV_RANGELARGE) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) {
if (GV_IS_GV_VALUE(val) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) {
if (event == EVT_KEY_LONG(KEY_ENTER))
killEvents(event);
return GVAR_MENU_ITEM(LIMITS_ONE_2ND_COLUMN, y, val, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, attr|PREC1|flags, 0, event);
@@ -275,7 +275,7 @@ void menuModelLimits(event_t event)
switch (j) {
case ITEM_OUTPUTS_OFFSET:
#if defined(GVARS)
if (GV_IS_GV_VALUE(ld->offset, -GV_RANGELARGE, GV_RANGELARGE)) {
if (GV_IS_GV_VALUE(ld->offset)) {
drawGVarName(LIMITS_OFFSET_POS, y, ld->offset, attr|PREC1|RIGHT);
break;
}
@@ -285,7 +285,7 @@ void menuModelLimits(event_t event)
case ITEM_OUTPUTS_MIN:
#if defined(GVARS)
if (GV_IS_GV_VALUE(ld->min, -GV_RANGELARGE, GV_RANGELARGE)) {
if (GV_IS_GV_VALUE(ld->min)) {
drawGVarName(limitsMinPos, y, ld->min, attr|PREC1|RIGHT);
break;
}
@@ -300,7 +300,7 @@ void menuModelLimits(event_t event)
case ITEM_OUTPUTS_MAX:
#if defined(GVARS)
if (GV_IS_GV_VALUE(ld->max, -GV_RANGELARGE, GV_RANGELARGE)) {
if (GV_IS_GV_VALUE(ld->max)) {
drawGVarName(LIMITS_MAX_POS, y, ld->max, attr|PREC1|RIGHT);
break;
}
+5 -11
View File
@@ -199,7 +199,6 @@ void drawGVarValue(coord_t x, coord_t y, uint8_t gvar, gvar_t value, LcdFlags fl
int16_t editGVarFieldValue(coord_t x, coord_t y, int16_t value, int16_t min, int16_t max, LcdFlags attr, uint8_t editflags, event_t event)
{
uint16_t delta = GV_GET_GV1_VALUE(min, max);
bool invers = (attr & INVERS);
// TRACE("editGVarFieldValue(val=%d min=%d max=%d)", value, min, max);
@@ -208,24 +207,19 @@ int16_t editGVarFieldValue(coord_t x, coord_t y, int16_t value, int16_t min, int
killEvents(event);
s_editMode = !s_editMode;
if (attr & PREC1)
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, mixerCurrentFlightMode)*10 : delta);
value = (GV_IS_GV_VALUE(value) ? GET_GVAR(value, min, max, mixerCurrentFlightMode)*10 : GV_VALUE_FROM_INDEX(0));
else
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, mixerCurrentFlightMode) : delta);
value = (GV_IS_GV_VALUE(value) ? GET_GVAR(value, min, max, mixerCurrentFlightMode) : GV_VALUE_FROM_INDEX(0));
storageDirty(EE_MODEL);
}
if (GV_IS_GV_VALUE(value, min, max)) {
if (GV_IS_GV_VALUE(value)) {
attr &= ~PREC1;
int8_t idx = (int16_t)GV_INDEX_CALC_DELTA(value, delta);
int8_t idx = (int16_t)GV_INDEX_FROM_VALUE(value);
if (invers) {
CHECK_INCDEC_MODELVAR(event, idx, -MAX_GVARS, MAX_GVARS-1);
}
if (idx < 0) {
value = (int16_t)GV_CALC_VALUE_IDX_NEG(idx, delta);
}
else {
value = (int16_t)GV_CALC_VALUE_IDX_POS(idx, delta);
}
value = (int16_t)GV_VALUE_FROM_INDEX(idx);
drawGVarName(x, y, idx, attr);
}
else {
+3 -3
View File
@@ -161,7 +161,7 @@ void menuModelLimits(event_t event)
break;
case ITEM_LIMITS_OFFSET:
if (GV_IS_GV_VALUE(ld->offset, -1000, 1000) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) {
if (GV_IS_GV_VALUE(ld->offset) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) {
if (event == EVT_KEY_LONG(KEY_ENTER))
killEvents(event);
ld->offset = GVAR_MENU_ITEM(LIMITS_OFFSET_POS, y, ld->offset, -1000, 1000, RIGHT|attr|PREC1, 0, event);
@@ -184,7 +184,7 @@ void menuModelLimits(event_t event)
break;
case ITEM_LIMITS_MIN:
if (GV_IS_GV_VALUE(ld->min, -GV_RANGELARGE, GV_RANGELARGE) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) {
if (GV_IS_GV_VALUE(ld->min) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) {
if (event == EVT_KEY_LONG(KEY_ENTER))
killEvents(event);
ld->min = GVAR_MENU_ITEM(LIMITS_MIN_POS, y, ld->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, attr|PREC1|RIGHT, 0, event);
@@ -195,7 +195,7 @@ void menuModelLimits(event_t event)
break;
case ITEM_LIMITS_MAX:
if (GV_IS_GV_VALUE(ld->max, -GV_RANGELARGE, GV_RANGELARGE) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) {
if (GV_IS_GV_VALUE(ld->max) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) {
if (event == EVT_KEY_LONG(KEY_ENTER))
killEvents(event);
ld->max = GVAR_MENU_ITEM(LIMITS_MAX_POS, y, ld->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, attr|PREC1|RIGHT, 0, event);
+5 -11
View File
@@ -157,7 +157,6 @@ void drawGVarValue(coord_t x, coord_t y, uint8_t gvar, gvar_t value, LcdFlags fl
int16_t editGVarFieldValue(coord_t x, coord_t y, int16_t value, int16_t min, int16_t max, LcdFlags attr, uint8_t editflags, event_t event)
{
uint16_t delta = GV_GET_GV1_VALUE(min, max);
bool invers = (attr & INVERS);
// TRACE("editGVarFieldValue(val=%d min=%d max=%d)", value, min, max);
@@ -166,26 +165,21 @@ int16_t editGVarFieldValue(coord_t x, coord_t y, int16_t value, int16_t min, int
killEvents(event);
s_editMode = !s_editMode;
if (attr & PREC1) {
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, mixerCurrentFlightMode)*10 : delta);
value = (GV_IS_GV_VALUE(value) ? GET_GVAR(value, min, max, mixerCurrentFlightMode)*10 : GV_VALUE_FROM_INDEX(0));
}
else {
value = (GV_IS_GV_VALUE(value, min, max) ? GET_GVAR(value, min, max, mixerCurrentFlightMode) : delta);
value = (GV_IS_GV_VALUE(value) ? GET_GVAR(value, min, max, mixerCurrentFlightMode) : GV_VALUE_FROM_INDEX(0));
}
storageDirty(EE_MODEL);
}
if (GV_IS_GV_VALUE(value, min, max)) {
if (GV_IS_GV_VALUE(value)) {
attr &= ~PREC1;
int8_t idx = (int16_t)GV_INDEX_CALC_DELTA(value, delta);
int8_t idx = (int16_t)GV_INDEX_FROM_VALUE(value);
if (invers) {
CHECK_INCDEC_MODELVAR(event, idx, -MAX_GVARS, MAX_GVARS-1);
}
if (idx < 0) {
value = (int16_t)GV_CALC_VALUE_IDX_NEG(idx, delta);
}
else {
value = (int16_t)GV_CALC_VALUE_IDX_POS(idx, delta);
}
value = (int16_t)GV_VALUE_FROM_INDEX(idx);
drawGVarName(x, y, idx, attr);
}
else {
@@ -158,7 +158,7 @@ void OutputChannelBar::drawLimitLines(bool forced)
int32_t ldMin;
int32_t ldMax;
if (GV_IS_GV_VALUE(ld->min, -CHANNELS_LIMIT, 0)) {
if (GV_IS_GV_VALUE(ld->min)) {
ldMin =
GET_GVAR_PREC1(ld->min, -CHANNELS_LIMIT, 0, mixerCurrentFlightMode) +
LIMIT_STD_MAX;
@@ -170,7 +170,7 @@ void OutputChannelBar::drawLimitLines(bool forced)
limMin = ldMin;
}
if (GV_IS_GV_VALUE(ld->max, 0, CHANNELS_LIMIT)) {
if (GV_IS_GV_VALUE(ld->max)) {
ldMax =
GET_GVAR_PREC1(ld->max, 0, CHANNELS_LIMIT, mixerCurrentFlightMode) -
LIMIT_STD_MAX;
@@ -40,15 +40,10 @@ GVarNumberEdit::GVarNumberEdit(Window* parent, int32_t vmin,
gvar_field = new Choice(
this, {0, 0, EdgeTxStyles::EDIT_FLD_WIDTH_NARROW, 0}, -MAX_GVARS, MAX_GVARS - 1,
[=]() {
uint16_t gvar1 = GV_GET_GV1_VALUE(vmin, vmax);
return GV_INDEX_CALC_DELTA(getValue(), gvar1);
return GV_INDEX_FROM_VALUE(getValue());
},
[=](int idx) {
uint16_t gvar1 = GV_GET_GV1_VALUE(vmin, vmax);
if (idx < 0)
setValue(GV_CALC_VALUE_IDX_NEG(idx, gvar1));
else
setValue(GV_CALC_VALUE_IDX_POS(idx, gvar1));
setValue(GV_VALUE_FROM_INDEX(idx));
});
gvar_field->setTextHandler(
[=](int32_t value) { return getGVarString(value); });
@@ -63,9 +58,9 @@ GVarNumberEdit::GVarNumberEdit(Window* parent, int32_t vmin,
if (modelGVEnabled()) {
m_gvBtn = new TextButton(this, {EdgeTxStyles::EDIT_FLD_WIDTH_NARROW + PAD_TINY, 0, GV_BTN_W, 0}, STR_GV, [=]() {
switchGVarMode();
return GV_IS_GV_VALUE(getValue(), vmin, vmax);
return GV_IS_GV_VALUE(getValue());
});
m_gvBtn->check(GV_IS_GV_VALUE(getValue(), vmin, vmax));
m_gvBtn->check(GV_IS_GV_VALUE(getValue()));
}
#endif
@@ -79,13 +74,13 @@ void GVarNumberEdit::switchGVarMode()
if (modelGVEnabled()) {
int32_t value = getValue();
setValue(
GV_IS_GV_VALUE(value, vmin, vmax)
GV_IS_GV_VALUE(value)
? ((textFlags & PREC1)
? GET_GVAR_PREC1(value, vmin, vmax, mixerCurrentFlightMode)
: GET_GVAR(value, vmin, vmax, mixerCurrentFlightMode))
: GV_GET_GV1_VALUE(vmin, vmax));
: GV_VALUE_FROM_INDEX(0));
m_gvBtn->check(GV_IS_GV_VALUE(value, vmin, vmax));
m_gvBtn->check(GV_IS_GV_VALUE(value));
// update field type based on value
update();
@@ -115,7 +110,7 @@ void GVarNumberEdit::update()
num_field->hide();
int32_t value = getValue();
if (GV_IS_GV_VALUE(value, vmin, vmax)) {
if (GV_IS_GV_VALUE(value)) {
// GVAR mode
act_field = gvar_field;
num_field->setSetValueHandler(nullptr);
@@ -84,7 +84,7 @@ void InputMixButtonBase::setWeight(gvar_t value, gvar_t min, gvar_t max)
}
char s[32];
getValueOrSrcVarString(s, sizeof(s), value, min, max, 0, "%");
getValueOrSrcVarString(s, sizeof(s), value, 0, "%");
if (getTextWidth(s, 0, FONT(STD)) > WGT_W)
lv_obj_add_state(weight, LV_STATE_USER_1);
else
@@ -148,16 +148,15 @@ class OutputLineButton : public ListLineButton
}
char s[32];
getValueOrGVarString(s, sizeof(s), output->min, -GV_RANGELARGE, 0, PREC1,
getValueOrGVarString(s, sizeof(s), output->min, PREC1,
nullptr, -LIMITS_MIN_MAX_OFFSET, true);
lv_label_set_text(min, s);
getValueOrGVarString(s, sizeof(s), output->max, 0, GV_RANGELARGE, PREC1,
getValueOrGVarString(s, sizeof(s), output->max, PREC1,
nullptr, +LIMITS_MIN_MAX_OFFSET, true);
lv_label_set_text(max, s);
getValueOrGVarString(s, sizeof(s), output->offset, -LIMIT_STD_MAX,
+LIMIT_STD_MAX, PREC1, nullptr, 0, true);
getValueOrGVarString(s, sizeof(s), output->offset, PREC1, nullptr, 0, true);
lv_label_set_text(offset, s);
lv_label_set_text_fmt(center, "%d%s", PPM_CENTER + output->ppmCenter,