feat: Convert PPM_UNIT build option to runtime radio setting (#3993)

This commit is contained in:
philmoz
2023-10-10 19:47:50 +10:00
committed by GitHub
parent b05044091a
commit 837677b3ef
58 changed files with 248 additions and 188 deletions
+32 -38
View File
@@ -34,14 +34,6 @@ enum MenuModelOutputsItems {
ITEM_OUTPUTS_MAXROW = ITEM_OUTPUTS_COUNT-1
};
#if defined(PPM_UNIT_US)
#define LIMITS_MIN_POS 12*FW+1
#define PREC_THRESHOLD 804
#else
#define LIMITS_MIN_POS 12*FW-2
#define PREC_THRESHOLD 0
#endif
#define LIMITS_OFFSET_POS 8*FW-1
#if defined(PPM_LIMITS_SYMETRICAL)
@@ -70,14 +62,6 @@ enum MenuModelOutputsItems {
#define CONVERT_US_MIN_MAX(x) ((int16_t(x)*128)/25)
#define MIN_MAX_ATTR attr
#if defined(PPM_UNIT_US)
#define SET_MIN_MAX(x, val) x = ((val)*250)/128
#define MIN_MAX_DISPLAY(x) CONVERT_US_MIN_MAX(x)
#else
#define MIN_MAX_DISPLAY(x) (x)
#define SET_MIN_MAX(x, val) x = (val)
#endif
enum MenuModelOutputsOneItems {
ITEM_OUTPUTONE_CH_NAME,
ITEM_OUTPUTONE_OFFSET,
@@ -96,6 +80,13 @@ enum MenuModelOutputsOneItems {
#define LIMITS_ONE_2ND_COLUMN (13*FW)
int32_t minMaxDisplay(int32_t val)
{
if (g_eeGeneral.ppmunit == PPM_US)
val = CONVERT_US_MIN_MAX(val);
return val;
}
void menuModelLimitsOne(event_t event)
{
title(STR_MENULIMITS);
@@ -135,7 +126,7 @@ void menuModelLimitsOne(event_t event)
ld->min = GVAR_MENU_ITEM(LIMITS_ONE_2ND_COLUMN, y, ld->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, attr|PREC1, 0, event);
break;
}
lcdDrawNumber(LIMITS_ONE_2ND_COLUMN, y, MIN_MAX_DISPLAY(ld->min-LIMITS_MIN_MAX_OFFSET), attr|PREC1);
lcdDrawNumber(LIMITS_ONE_2ND_COLUMN, y, minMaxDisplay(ld->min-LIMITS_MIN_MAX_OFFSET), attr|PREC1);
if (active) {
ld->min = LIMITS_MIN_MAX_OFFSET + checkIncDec(event, ld->min-LIMITS_MIN_MAX_OFFSET, -limit, 0, EE_MODEL, nullptr, stops1000);
}
@@ -147,7 +138,7 @@ void menuModelLimitsOne(event_t event)
ld->max = GVAR_MENU_ITEM(LIMITS_ONE_2ND_COLUMN, y, ld->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, attr|PREC1, 0, event);
break;
}
lcdDrawNumber(LIMITS_ONE_2ND_COLUMN, y, MIN_MAX_DISPLAY(ld->max+LIMITS_MIN_MAX_OFFSET), attr|PREC1);
lcdDrawNumber(LIMITS_ONE_2ND_COLUMN, y, minMaxDisplay(ld->max+LIMITS_MIN_MAX_OFFSET), attr|PREC1);
if (active) {
ld->max = -LIMITS_MIN_MAX_OFFSET + checkIncDec(event, ld->max+LIMITS_MIN_MAX_OFFSET, 0, +limit, EE_MODEL, nullptr, stops1000);
}
@@ -274,39 +265,42 @@ void menuModelLimits(event_t event)
lcdDrawSizedText(0, y, ld->name, sizeof(ld->name), ((sub==k) ? INVERS : 0) | LEFT);
}
coord_t limitsMinPos = (g_eeGeneral.ppmunit == PPM_US) ? 12*FW+1 : 12*FW-2;
int precThreshold = (g_eeGeneral.ppmunit == PPM_US) ? 804 : 0;
for (uint8_t j=0; j<ITEM_OUTPUTS_COUNT; j++) {
switch (j) {
case ITEM_OUTPUTS_OFFSET:
#if defined(PPM_UNIT_US)
lcdDrawNumber(LIMITS_OFFSET_POS, y, ((int32_t)ld->offset*128) / 25, PREC1|RIGHT);
#else
if (g_eeGeneral.ppmunit == PPM_US) {
lcdDrawNumber(LIMITS_OFFSET_POS, y, ((int32_t)ld->offset*128) / 25, PREC1|RIGHT);
} else {
#if defined(GVARS)
if (GV_IS_GV_VALUE(ld->offset, -GV_RANGELARGE, GV_RANGELARGE)) {
drawGVarName(LIMITS_OFFSET_POS, y, ld->offset, attr|PREC1|RIGHT);
break;
}
if (GV_IS_GV_VALUE(ld->offset, -GV_RANGELARGE, GV_RANGELARGE)) {
drawGVarName(LIMITS_OFFSET_POS, y, ld->offset, attr|PREC1|RIGHT);
break;
}
#endif
if (abs(ld->offset) >= 1000) {
lcdDrawNumber(LIMITS_OFFSET_POS, y, ld->offset/10, RIGHT);
if (abs(ld->offset) >= 1000) {
lcdDrawNumber(LIMITS_OFFSET_POS, y, ld->offset/10, RIGHT);
}
else {
lcdDrawNumber(LIMITS_OFFSET_POS, y, ld->offset, PREC1|RIGHT);
}
}
else {
lcdDrawNumber(LIMITS_OFFSET_POS, y, ld->offset, PREC1|RIGHT);
}
#endif
break;
case ITEM_OUTPUTS_MIN:
#if defined(GVARS)
if (GV_IS_GV_VALUE(ld->min, -GV_RANGELARGE, GV_RANGELARGE)) {
drawGVarName(LIMITS_MIN_POS, y, ld->min, attr|PREC1|RIGHT);
drawGVarName(limitsMinPos, y, ld->min, attr|PREC1|RIGHT);
break;
}
#endif
if (ld->min <= PREC_THRESHOLD) {
lcdDrawNumber(LIMITS_MIN_POS, y, MIN_MAX_DISPLAY(ld->min-LIMITS_MIN_MAX_OFFSET)/10, RIGHT);
if (ld->min <= precThreshold) {
lcdDrawNumber(limitsMinPos, y, minMaxDisplay(ld->min-LIMITS_MIN_MAX_OFFSET)/10, RIGHT);
}
else {
lcdDrawNumber(LIMITS_MIN_POS, y, MIN_MAX_DISPLAY(ld->min-LIMITS_MIN_MAX_OFFSET), attr|PREC1|RIGHT);
lcdDrawNumber(limitsMinPos, y, minMaxDisplay(ld->min-LIMITS_MIN_MAX_OFFSET), attr|PREC1|RIGHT);
}
break;
@@ -317,11 +311,11 @@ void menuModelLimits(event_t event)
break;
}
#endif
if (ld->max >= -PREC_THRESHOLD) {
lcdDrawNumber(LIMITS_MAX_POS, y, MIN_MAX_DISPLAY(ld->max+LIMITS_MIN_MAX_OFFSET)/10, RIGHT);
if (ld->max >= -precThreshold) {
lcdDrawNumber(LIMITS_MAX_POS, y, minMaxDisplay(ld->max+LIMITS_MIN_MAX_OFFSET)/10, RIGHT);
}
else {
lcdDrawNumber(LIMITS_MAX_POS, y, MIN_MAX_DISPLAY(ld->max+LIMITS_MIN_MAX_OFFSET), attr|PREC1|RIGHT);
lcdDrawNumber(LIMITS_MAX_POS, y, minMaxDisplay(ld->max+LIMITS_MIN_MAX_OFFSET), attr|PREC1|RIGHT);
}
break;