fix(firmware): range for V2 value may be incorrect for some logical switches (#7158)

This commit is contained in:
philmoz
2026-03-10 15:22:22 +10:00
committed by GitHub
parent 61f89b6076
commit 48e3b2ac7b
5 changed files with 30 additions and 24 deletions
+16 -12
View File
@@ -585,7 +585,7 @@ getvalue_t convert16bitsTelemValue(source_t channel, ls_telemetry_value_t value)
ls_telemetry_value_t maxTelemValue(source_t channel)
{
return 30000;
return MIXSRC_MAX_VALUE;
}
void calcBacklightValue(int16_t source)
@@ -2012,7 +2012,7 @@ void getMixSrcRange(const int source, int16_t & valMin, int16_t & valMax, LcdFla
}
#if defined(LUA_INPUTS)
else if (asrc >= MIXSRC_FIRST_LUA && asrc <= MIXSRC_LAST_LUA) {
valMax = 30000;
valMax = MIXSRC_MAX_VALUE;
valMin = -valMax;
}
#endif
@@ -2055,7 +2055,7 @@ void getMixSrcRange(const int source, int16_t & valMin, int16_t & valMax, LcdFla
*flags |= TIMEHOUR;
}
else {
valMax = 30000;
valMax = MIXSRC_MAX_VALUE;
valMin = -valMax;
}
}
@@ -2075,16 +2075,20 @@ bool validateLSV2Range(LogicalSwitchData* cs, int16_t& v2_min, int16_t& v2_max,
// min < 0 && max >= 0
v2_min = 0;
}
} else if (cs->func == LS_FUNC_DIFFEGREATER) {
// delta range (min - max) .. (max - min)
int16_t v = v2_min - v2_max;
v2_max = v2_max - v2_min;
v2_min = v;
} else if (cs->func == LS_FUNC_ADIFFEGREATER) {
// abs delta range 0 .. (max - min)
v2_max = v2_max - v2_min;
v2_min = 0;
} else {
uint16_t v = v2_max - v2_min;
if (v > MIXSRC_MAX_VALUE) v = MIXSRC_MAX_VALUE;
if (cs->func == LS_FUNC_DIFFEGREATER) {
// delta range (min - max) .. (max - min)
v2_max = v;
v2_min = -v;
} else if (cs->func == LS_FUNC_ADIFFEGREATER) {
// abs delta range 0 .. (max - min)
v2_max = v;
v2_min = 0;
}
}
TRACE(">>>>> %d %d %d",cs->func,v2_min,v2_max);
bool rv = false;