feat: use any source for expo/weight/offset (#5220)
Co-authored-by: philmoz <phil.a.mitchell@gmail.com> Co-authored-by: 3djc <3djc@gh.com> Co-authored-by: elecpower <elecpower@users.noreply.github.com>
This commit is contained in:
co-authored by
philmoz
3djc
elecpower
parent
326c58a7fd
commit
4b917b762c
+17
-9
@@ -25,6 +25,8 @@
|
||||
#include "libopenui.h"
|
||||
#endif
|
||||
|
||||
extern int32_t getSourceNumFieldValue(int16_t val, int16_t min, int16_t max);
|
||||
|
||||
constexpr int DEFAULT_POINTS = 5;
|
||||
constexpr int STD_CURVE_POINTS(int p) { return p + DEFAULT_POINTS; }
|
||||
constexpr int CUSTOM_CURVE_POINTS(int p) { return 2 * p + (2 * DEFAULT_POINTS - 2); }
|
||||
@@ -318,10 +320,13 @@ int intpol(int x, uint8_t idx) // -100, -75, -50, -25, 0 ,25 ,50, 75, 100
|
||||
|
||||
int applyCurve(int x, CurveRef & curve)
|
||||
{
|
||||
SourceNumVal v;
|
||||
v.rawValue = curve.value;
|
||||
|
||||
switch (curve.type) {
|
||||
case CURVE_REF_DIFF:
|
||||
{
|
||||
int curveParam = GET_GVAR_PREC1(curve.value, -100, 100, mixerCurrentFlightMode);
|
||||
int curveParam = getSourceNumFieldValue(curve.value, -100, 100);
|
||||
if (curveParam > 0 && x < 0)
|
||||
x = (x * (1000 - curveParam)) / 1000;
|
||||
else if (curveParam < 0 && x > 0)
|
||||
@@ -331,12 +336,12 @@ int applyCurve(int x, CurveRef & curve)
|
||||
|
||||
case CURVE_REF_EXPO:
|
||||
{
|
||||
int curveParam = GET_GVAR_PREC1(curve.value, -100, 100, mixerCurrentFlightMode) / 10;
|
||||
int curveParam = getSourceNumFieldValue(curve.value, -100, 100) / 10;
|
||||
return expo(x, curveParam);
|
||||
}
|
||||
|
||||
case CURVE_REF_FUNC:
|
||||
switch (curve.value) {
|
||||
switch (v.value) {
|
||||
case CURVE_X_GT0:
|
||||
if (x < 0) x = 0; //x|x>0
|
||||
return x;
|
||||
@@ -356,7 +361,7 @@ int applyCurve(int x, CurveRef & curve)
|
||||
|
||||
case CURVE_REF_CUSTOM:
|
||||
{
|
||||
int curveParam = curve.value;
|
||||
int curveParam = v.value;
|
||||
if (curveParam < 0) {
|
||||
x = -x;
|
||||
curveParam = -curveParam;
|
||||
@@ -423,24 +428,27 @@ char *getCurveRefString(char *dest, size_t len, const CurveRef& curve)
|
||||
if (!len) return dest;
|
||||
char *s = dest;
|
||||
|
||||
if (curve.value != 0) {
|
||||
SourceNumVal v;
|
||||
v.rawValue = curve.value;
|
||||
|
||||
if (v.value != 0) {
|
||||
switch (curve.type) {
|
||||
case CURVE_REF_DIFF:
|
||||
*(s++) = 'D'; if (--len == 0) return dest;
|
||||
getValueOrGVarString(s, len, curve.value, -100, 100, 0, "%");
|
||||
getValueOrSrcVarString(s, len, curve.value, -100, 100, 0, "%");
|
||||
return dest;
|
||||
|
||||
case CURVE_REF_EXPO:
|
||||
*(s++) = 'E'; if (--len == 0) return dest;
|
||||
getValueOrGVarString(s, len, curve.value, -100, 100, 0, "%");
|
||||
getValueOrSrcVarString(s, len, curve.value, -100, 100, 0, "%");
|
||||
return dest;
|
||||
|
||||
case CURVE_REF_FUNC:
|
||||
strAppend(dest, STR_VCURVEFUNC[curve.value], len);
|
||||
strAppend(dest, STR_VCURVEFUNC[v.value], len);
|
||||
return dest;
|
||||
|
||||
case CURVE_REF_CUSTOM:
|
||||
return getCurveString(dest, curve.value);
|
||||
return getCurveString(dest, v.value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user