diff --git a/radio/src/gui/taranis/menu_model_curves.cpp b/radio/src/gui/taranis/menu_model_curves.cpp index bbb91726f..498605634 100644 --- a/radio/src/gui/taranis/menu_model_curves.cpp +++ b/radio/src/gui/taranis/menu_model_curves.cpp @@ -80,6 +80,18 @@ bool moveCurve(uint8_t index, int8_t shift) return true; } +int8_t getCurveX(int noPoints, int point) +{ + return -100 + div10_and_round( (point*2000) / (noPoints-1) ); +} + +void resetCustomCurveX(int8_t * points, int noPoints) +{ + for (int i=0; i 0 ? 3+crv.points : -3-crv.points); if (newType == CURVE_TYPE_CUSTOM) { - for (int i=0; i<3+crv.points; i++) - points[5+crv.points+i] = -100 + ((i+1)*200) / (4+crv.points); + resetCustomCurveX(points, 5+crv.points); } crv.type = newType; } @@ -165,12 +180,12 @@ void menuModelCurveOne(uint8_t event) newPoints[0] = points[0]; newPoints[4+count] = points[4+crv.points]; for (int i=1; i<4+count; i++) - newPoints[i] = calcRESXto100(applyCustomCurve(calc100toRESX(-100 + (i*200) / (4+count)), s_curveChan)); + newPoints[i] = calcRESXto100(applyCustomCurve(calc100toRESX(getCurveX(5+count, i)), s_curveChan)); moveCurve(s_curveChan, checkIncDec_Ret*(crv.type==CURVE_TYPE_CUSTOM?2:1)); for (int i=0; i<5+count; i++) { points[i] = newPoints[i]; if (crv.type == CURVE_TYPE_CUSTOM && i!=0 && i!=4+count) - points[5+count+i-1] = -100 + (i*200) / (4+count); + points[5+count+i-1] = getCurveX(5+count, i); } crv.points = count; } @@ -217,7 +232,7 @@ void menuModelCurveOne(uint8_t event) } if (i>=pointsOfs && i0 && i<5+crv.points-1) x = points[5+crv.points+i-1]; lcdDrawNumber(6+10*FW+FW/2, posY, i+1, LEFT); lcdDrawNumber(3+14*FW, posY, x, LEFT|(selectionMode==1?attr:0));