mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-25 09:16:01 +03:00
Final updates
- Converted Maths.h to tabs - Added leading zeros to odometer and decimal place
This commit is contained in:
parent
de2c439b5d
commit
524b0d0bf4
7 changed files with 133 additions and 124 deletions
|
@ -29,11 +29,11 @@
|
|||
//#define VERY_FAST_MATH // order 7 approximation
|
||||
|
||||
// Use floating point M_PI instead explicitly.
|
||||
#define M_PIf 3.14159265358979323846f
|
||||
#define M_LN2f 0.69314718055994530942f
|
||||
#define M_Ef 2.71828182845904523536f
|
||||
#define M_PIf 3.14159265358979323846f
|
||||
#define M_LN2f 0.69314718055994530942f
|
||||
#define M_Ef 2.71828182845904523536f
|
||||
|
||||
#define RAD (M_PIf / 180.0f)
|
||||
#define RAD (M_PIf / 180.0f)
|
||||
|
||||
#define DEGREES_TO_CENTIDEGREES(angle) ((angle) * 100)
|
||||
#define CENTIDEGREES_TO_DEGREES(angle) ((angle) / 100.0f)
|
||||
|
@ -56,47 +56,47 @@
|
|||
#define RADIANS_TO_CENTIDEGREES(angle) (((angle) * 100.0f) / RAD)
|
||||
#define CENTIDEGREES_TO_RADIANS(angle) (((angle) / 100.0f) * RAD)
|
||||
|
||||
#define CENTIMETERS_TO_CENTIFEET(cm) (cm / 0.3048f)
|
||||
#define CENTIMETERS_TO_FEET(cm) (cm / 30.48f)
|
||||
#define CENTIMETERS_TO_METERS(cm) (cm / 100.0f)
|
||||
#define CENTIMETERS_TO_CENTIFEET(cm) (cm / 0.3048f)
|
||||
#define CENTIMETERS_TO_FEET(cm) (cm / 30.48f)
|
||||
#define CENTIMETERS_TO_METERS(cm) (cm / 100.0f)
|
||||
|
||||
#define METERS_TO_CENTIMETERS(m) (m * 100)
|
||||
#define METERS_TO_CENTIMETERS(m) (m * 100)
|
||||
|
||||
#define CMSEC_TO_CENTIMPH(cms) (cms * 2.2369363f)
|
||||
#define CMSEC_TO_CENTIKPH(cms) (cms * 3.6f)
|
||||
#define CMSEC_TO_CENTIKNOTS(cms) (cms * 1.943845f)
|
||||
#define CMSEC_TO_CENTIMPH(cms) (cms * 2.2369363f)
|
||||
#define CMSEC_TO_CENTIKPH(cms) (cms * 3.6f)
|
||||
#define CMSEC_TO_CENTIKNOTS(cms) (cms * 1.943845f)
|
||||
|
||||
#define C_TO_KELVIN(temp) (temp + 273.15f)
|
||||
|
||||
// Standard Sea Level values
|
||||
// Ref:https://en.wikipedia.org/wiki/Standard_sea_level
|
||||
#define SSL_AIR_DENSITY 1.225f // kg/m^3
|
||||
#define SSL_AIR_PRESSURE 101325.01576f // Pascal
|
||||
#define SSL_AIR_TEMPERATURE 288.15f // K
|
||||
#define SSL_AIR_DENSITY 1.225f // kg/m^3
|
||||
#define SSL_AIR_PRESSURE 101325.01576f // Pascal
|
||||
#define SSL_AIR_TEMPERATURE 288.15f // K
|
||||
|
||||
// copied from https://code.google.com/p/cxutil/source/browse/include/cxutil/utility.h#70
|
||||
#define _CHOOSE2(binoper, lexpr, lvar, rexpr, rvar) \
|
||||
( __extension__ ({ \
|
||||
__typeof__(lexpr) lvar = (lexpr); \
|
||||
__typeof__(rexpr) rvar = (rexpr); \
|
||||
lvar binoper rvar ? lvar : rvar; \
|
||||
}))
|
||||
#define _CHOOSE2(binoper, lexpr, lvar, rexpr, rvar) \
|
||||
( __extension__ ({ \
|
||||
__typeof__(lexpr) lvar = (lexpr); \
|
||||
__typeof__(rexpr) rvar = (rexpr); \
|
||||
lvar binoper rvar ? lvar : rvar; \
|
||||
}))
|
||||
#define _CHOOSE_VAR2(prefix, unique) prefix##unique
|
||||
#define _CHOOSE_VAR(prefix, unique) _CHOOSE_VAR2(prefix, unique)
|
||||
#define _CHOOSE(binoper, lexpr, rexpr) \
|
||||
_CHOOSE2( \
|
||||
binoper, \
|
||||
lexpr, _CHOOSE_VAR(_left, __COUNTER__), \
|
||||
rexpr, _CHOOSE_VAR(_right, __COUNTER__) \
|
||||
)
|
||||
#define _CHOOSE(binoper, lexpr, rexpr) \
|
||||
_CHOOSE2( \
|
||||
binoper, \
|
||||
lexpr, _CHOOSE_VAR(_left, __COUNTER__), \
|
||||
rexpr, _CHOOSE_VAR(_right, __COUNTER__) \
|
||||
)
|
||||
#define MIN(a, b) _CHOOSE(<, a, b)
|
||||
#define MAX(a, b) _CHOOSE(>, a, b)
|
||||
|
||||
#define _ABS_II(x, var) \
|
||||
( __extension__ ({ \
|
||||
__typeof__(x) var = (x); \
|
||||
var < 0 ? -var : var; \
|
||||
}))
|
||||
#define _ABS_II(x, var) \
|
||||
( __extension__ ({ \
|
||||
__typeof__(x) var = (x); \
|
||||
var < 0 ? -var : var; \
|
||||
}))
|
||||
#define _ABS_I(x, var) _ABS_II(x, var)
|
||||
#define ABS(x) _ABS_I(x, _CHOOSE_VAR(_abs, __COUNTER__))
|
||||
|
||||
|
@ -104,36 +104,35 @@
|
|||
|
||||
// Floating point Euler angles.
|
||||
typedef struct fp_angles {
|
||||
float roll;
|
||||
float pitch;
|
||||
float yaw;
|
||||
float roll;
|
||||
float pitch;
|
||||
float yaw;
|
||||
} fp_angles_def;
|
||||
|
||||
typedef union {
|
||||
float raw[3];
|
||||
fp_angles_def angles;
|
||||
float raw[3];
|
||||
fp_angles_def angles;
|
||||
} fp_angles_t;
|
||||
|
||||
typedef struct stdev_s
|
||||
{
|
||||
float m_oldM, m_newM, m_oldS, m_newS;
|
||||
int m_n;
|
||||
typedef struct stdev_s {
|
||||
float m_oldM, m_newM, m_oldS, m_newS;
|
||||
int m_n;
|
||||
} stdev_t;
|
||||
|
||||
typedef struct filterWithBufferSample_s {
|
||||
float value;
|
||||
uint32_t timestamp;
|
||||
float value;
|
||||
uint32_t timestamp;
|
||||
} filterWithBufferSample_t;
|
||||
|
||||
typedef struct filterWithBufferState_s {
|
||||
uint16_t filter_size;
|
||||
uint16_t sample_index;
|
||||
filterWithBufferSample_t * samples;
|
||||
uint16_t filter_size;
|
||||
uint16_t sample_index;
|
||||
filterWithBufferSample_t * samples;
|
||||
} filterWithBufferState_t;
|
||||
|
||||
typedef struct {
|
||||
float XtY[4];
|
||||
float XtX[4][4];
|
||||
float XtY[4];
|
||||
float XtX[4][4];
|
||||
} sensorCalibrationState_t;
|
||||
|
||||
void sensorCalibrationResetState(sensorCalibrationState_t * state);
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
#ifdef USE_STATS
|
||||
|
||||
typedef struct statsConfig_s {
|
||||
uint32_t stats_total_time; // [s]
|
||||
uint32_t stats_total_dist; // [m]
|
||||
uint32_t stats_total_time; // [Seconds]
|
||||
uint32_t stats_total_dist; // [Metres]
|
||||
#ifdef USE_ADC
|
||||
uint32_t stats_total_energy; // deciWatt hour (x0.1Wh)
|
||||
#endif
|
||||
|
|
|
@ -311,7 +311,7 @@ static void osdFormatDistanceSymbol(char *buff, int32_t dist, uint8_t decimals)
|
|||
case OSD_UNIT_UK:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_IMPERIAL:
|
||||
if (osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(dist), FEET_PER_MILE, decimals, 3, digits)) {
|
||||
if (osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(dist), FEET_PER_MILE, decimals, 3, digits, false)) {
|
||||
buff[sym_index] = symbol_mi;
|
||||
} else {
|
||||
buff[sym_index] = symbol_ft;
|
||||
|
@ -321,7 +321,7 @@ static void osdFormatDistanceSymbol(char *buff, int32_t dist, uint8_t decimals)
|
|||
case OSD_UNIT_METRIC_MPH:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_METRIC:
|
||||
if (osdFormatCentiNumber(buff, dist, METERS_PER_KILOMETER, decimals, 3, digits)) {
|
||||
if (osdFormatCentiNumber(buff, dist, METERS_PER_KILOMETER, decimals, 3, digits, false)) {
|
||||
buff[sym_index] = symbol_km;
|
||||
} else {
|
||||
buff[sym_index] = symbol_m;
|
||||
|
@ -329,7 +329,7 @@ static void osdFormatDistanceSymbol(char *buff, int32_t dist, uint8_t decimals)
|
|||
buff[sym_index + 1] = '\0';
|
||||
break;
|
||||
case OSD_UNIT_GA:
|
||||
if (osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(dist), (uint32_t)FEET_PER_NAUTICALMILE, decimals, 3, digits)) {
|
||||
if (osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(dist), (uint32_t)FEET_PER_NAUTICALMILE, decimals, 3, digits, false)) {
|
||||
buff[sym_index] = symbol_nm;
|
||||
} else {
|
||||
buff[sym_index] = symbol_ft;
|
||||
|
@ -484,7 +484,7 @@ static void osdFormatWindSpeedStr(char *buff, int32_t ws, bool isValid)
|
|||
break;
|
||||
}
|
||||
|
||||
osdFormatCentiNumber(buff, centivalue, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, centivalue, 0, 2, 0, 3, false);
|
||||
|
||||
if (!isValid && ((millis() / 1000) % 4 < 2))
|
||||
suffix = '*';
|
||||
|
@ -557,7 +557,7 @@ void osdFormatAltitudeSymbol(char *buff, int32_t alt)
|
|||
case OSD_UNIT_GA:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_IMPERIAL:
|
||||
if (osdFormatCentiNumber(buff + totalDigits - digits, CENTIMETERS_TO_CENTIFEET(alt), 1000, 0, 2, digits)) {
|
||||
if (osdFormatCentiNumber(buff + totalDigits - digits, CENTIMETERS_TO_CENTIFEET(alt), 1000, 0, 2, digits, false)) {
|
||||
// Scaled to kft
|
||||
buff[symbolIndex++] = symbolKFt;
|
||||
} else {
|
||||
|
@ -570,7 +570,7 @@ void osdFormatAltitudeSymbol(char *buff, int32_t alt)
|
|||
FALLTHROUGH;
|
||||
case OSD_UNIT_METRIC:
|
||||
// alt is alredy in cm
|
||||
if (osdFormatCentiNumber(buff + totalDigits - digits, alt, 1000, 0, 2, digits)) {
|
||||
if (osdFormatCentiNumber(buff + totalDigits - digits, alt, 1000, 0, 2, digits, false)) {
|
||||
// Scaled to km
|
||||
buff[symbolIndex++] = SYM_ALT_KM;
|
||||
} else {
|
||||
|
@ -1142,7 +1142,7 @@ static void osdFormatGVar(char *buff, uint8_t index)
|
|||
buff[1] = '0'+index;
|
||||
buff[2] = ':';
|
||||
#ifdef USE_PROGRAMMING_FRAMEWORK
|
||||
osdFormatCentiNumber(buff + 3, (int32_t)gvGet(index)*(int32_t)100, 1, 0, 0, 5);
|
||||
osdFormatCentiNumber(buff + 3, (int32_t)gvGet(index)*(int32_t)100, 1, 0, 0, 5, false);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1153,7 +1153,7 @@ static void osdFormatRpm(char *buff, uint32_t rpm)
|
|||
if (rpm) {
|
||||
if ( digitCount(rpm) > osdConfig()->esc_rpm_precision) {
|
||||
uint8_t rpmMaxDecimals = (osdConfig()->esc_rpm_precision - 3);
|
||||
osdFormatCentiNumber(buff + 1, rpm / 10, 0, rpmMaxDecimals, rpmMaxDecimals, osdConfig()->esc_rpm_precision-1);
|
||||
osdFormatCentiNumber(buff + 1, rpm / 10, 0, rpmMaxDecimals, rpmMaxDecimals, osdConfig()->esc_rpm_precision-1, false);
|
||||
buff[osdConfig()->esc_rpm_precision] = 'K';
|
||||
buff[osdConfig()->esc_rpm_precision+1] = '\0';
|
||||
}
|
||||
|
@ -1477,13 +1477,13 @@ static void osdFormatPidControllerOutput(char *buff, const char *label, const pi
|
|||
strcpy(buff, label);
|
||||
for (uint8_t i = strlen(label); i < 5; ++i) buff[i] = ' ';
|
||||
uint8_t decimals = showDecimal ? 1 : 0;
|
||||
osdFormatCentiNumber(buff + 5, pidController->proportional * scale, 0, decimals, 0, 4);
|
||||
osdFormatCentiNumber(buff + 5, pidController->proportional * scale, 0, decimals, 0, 4, false);
|
||||
buff[9] = ' ';
|
||||
osdFormatCentiNumber(buff + 10, pidController->integrator * scale, 0, decimals, 0, 4);
|
||||
osdFormatCentiNumber(buff + 10, pidController->integrator * scale, 0, decimals, 0, 4, false);
|
||||
buff[14] = ' ';
|
||||
osdFormatCentiNumber(buff + 15, pidController->derivative * scale, 0, decimals, 0, 4);
|
||||
osdFormatCentiNumber(buff + 15, pidController->derivative * scale, 0, decimals, 0, 4, false);
|
||||
buff[19] = ' ';
|
||||
osdFormatCentiNumber(buff + 20, pidController->output_constrained * scale, 0, decimals, 0, 4);
|
||||
osdFormatCentiNumber(buff + 20, pidController->output_constrained * scale, 0, decimals, 0, 4, false);
|
||||
buff[24] = '\0';
|
||||
}
|
||||
|
||||
|
@ -1499,7 +1499,7 @@ static void osdDisplayBatteryVoltage(uint8_t elemPosX, uint8_t elemPosY, uint16_
|
|||
|
||||
elemAttr = TEXT_ATTRIBUTES_NONE;
|
||||
digits = MIN(digits, 5);
|
||||
osdFormatCentiNumber(buff, voltage, 0, decimals, 0, digits);
|
||||
osdFormatCentiNumber(buff, voltage, 0, decimals, 0, digits, false);
|
||||
buff[digits] = SYM_VOLT;
|
||||
buff[digits+1] = '\0';
|
||||
const batteryState_e batteryVoltageState = checkBatteryVoltageState();
|
||||
|
@ -1593,7 +1593,7 @@ static void osdDisplayAdjustableDecimalValue(uint8_t elemPosX, uint8_t elemPosY,
|
|||
displayWrite(osdDisplayPort, elemPosX, elemPosY, str);
|
||||
|
||||
elemAttr = TEXT_ATTRIBUTES_NONE;
|
||||
osdFormatCentiNumber(buff, value * 100, 0, maxDecimals, 0, MIN(valueLength, 8));
|
||||
osdFormatCentiNumber(buff, value * 100, 0, maxDecimals, 0, MIN(valueLength, 8), false);
|
||||
if (isAdjustmentFunctionSelected(adjFunc))
|
||||
TEXT_ATTRIBUTES_ADD_BLINK(elemAttr);
|
||||
displayWriteWithAttr(osdDisplayPort, elemPosX + strlen(str) + 1 + valueOffset, elemPosY, buff, elemAttr);
|
||||
|
@ -1698,7 +1698,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
}
|
||||
|
||||
case OSD_CURRENT_DRAW: {
|
||||
osdFormatCentiNumber(buff, getAmperage(), 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, getAmperage(), 0, 2, 0, 3, false);
|
||||
buff[3] = SYM_AMP;
|
||||
buff[4] = '\0';
|
||||
|
||||
|
@ -1725,7 +1725,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
buff[5] = SYM_MAH;
|
||||
buff[6] = '\0';
|
||||
} else {
|
||||
if (osdFormatCentiNumber(buff, getMAhDrawn() * 100, 1000, 0, (mah_digits - 2), mah_digits)) {
|
||||
if (osdFormatCentiNumber(buff, getMAhDrawn() * 100, 1000, 0, (mah_digits - 2), mah_digits, false)) {
|
||||
// Shown in Ah
|
||||
buff[mah_digits] = SYM_AH;
|
||||
} else {
|
||||
|
@ -1740,7 +1740,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
}
|
||||
|
||||
case OSD_WH_DRAWN:
|
||||
osdFormatCentiNumber(buff, getMWhDrawn() / 10, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, getMWhDrawn() / 10, 0, 2, 0, 3, false);
|
||||
osdUpdateBatteryCapacityOrVoltageTextAttributes(&elemAttr);
|
||||
buff[3] = SYM_WH;
|
||||
buff[4] = '\0';
|
||||
|
@ -1755,7 +1755,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
else if (currentBatteryProfile->capacity.unit == BAT_CAPACITY_UNIT_MAH)
|
||||
tfp_sprintf(buff, "%4lu", (unsigned long)getBatteryRemainingCapacity());
|
||||
else // currentBatteryProfile->capacity.unit == BAT_CAPACITY_UNIT_MWH
|
||||
osdFormatCentiNumber(buff + 1, getBatteryRemainingCapacity() / 10, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff + 1, getBatteryRemainingCapacity() / 10, 0, 2, 0, 3, false);
|
||||
|
||||
buff[4] = currentBatteryProfile->capacity.unit == BAT_CAPACITY_UNIT_MAH ? SYM_MAH : SYM_WH;
|
||||
buff[5] = '\0';
|
||||
|
@ -1823,7 +1823,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
|
||||
buff[0] = SYM_GLIDESLOPE;
|
||||
if (glideSlope > 0.0f && glideSlope < 100.0f) {
|
||||
osdFormatCentiNumber(buff + 1, glideSlope * 100.0f, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff + 1, glideSlope * 100.0f, 0, 2, 0, 3, false);
|
||||
} else {
|
||||
buff[1] = buff[2] = buff[3] = '-';
|
||||
}
|
||||
|
@ -1904,30 +1904,32 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
case OSD_ODOMETER:
|
||||
{
|
||||
displayWriteChar(osdDisplayPort, elemPosX, elemPosY, SYM_ODOMETER);
|
||||
uint32_t odometerDist = getTotalTravelDistance() / 100;
|
||||
uint32_t odometerDist = (uint32_t)(getTotalTravelDistance() / 100);
|
||||
#ifdef USE_STATS
|
||||
odometerDist+= statsConfig()->stats_total_dist;
|
||||
#endif
|
||||
odometerDist = odometerDist / 10;
|
||||
|
||||
switch (osdConfig()->units) {
|
||||
case OSD_UNIT_UK:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_IMPERIAL:
|
||||
tfp_sprintf(buff, "%5d", (int)(odometerDist / METERS_PER_MILE));
|
||||
buff[5] = SYM_MI;
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(odometerDist), FEET_PER_MILE, 1, 0, 6, true);
|
||||
buff[6] = SYM_MI;
|
||||
break;
|
||||
default:
|
||||
case OSD_UNIT_GA:
|
||||
tfp_sprintf(buff, "%5d", (int)(odometerDist / METERS_PER_NAUTICALMILE));
|
||||
buff[5] = SYM_NM;
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(odometerDist), (uint32_t)FEET_PER_NAUTICALMILE, 1, 0, 6, true);
|
||||
buff[6] = SYM_NM;
|
||||
break;
|
||||
case OSD_UNIT_METRIC_MPH:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_METRIC:
|
||||
tfp_sprintf(buff, "%5d", (int)(odometerDist / METERS_PER_KILOMETER));
|
||||
buff[5] = SYM_KM;
|
||||
osdFormatCentiNumber(buff, odometerDist, METERS_PER_KILOMETER, 1, 0, 6, true);
|
||||
buff[6] = SYM_KM;
|
||||
break;
|
||||
}
|
||||
buff[6] = '\0';
|
||||
buff[7] = '\0';
|
||||
elemPosX++;
|
||||
}
|
||||
break;
|
||||
|
@ -2014,7 +2016,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
digits = 3U;
|
||||
}
|
||||
#endif
|
||||
osdFormatCentiNumber(&buff[2], centiHDOP, 0, 1, 0, digits);
|
||||
osdFormatCentiNumber(&buff[2], centiHDOP, 0, 1, 0, digits, false);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2444,7 +2446,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
buff[0] = SYM_ROLL_LEVEL;
|
||||
if (ABS(attitude.values.roll) >= 1)
|
||||
buff[0] += (attitude.values.roll < 0 ? -1 : 1);
|
||||
osdFormatCentiNumber(buff + 1, DECIDEGREES_TO_CENTIDEGREES(ABS(attitude.values.roll)), 0, 1, 0, 3);
|
||||
osdFormatCentiNumber(buff + 1, DECIDEGREES_TO_CENTIDEGREES(ABS(attitude.values.roll)), 0, 1, 0, 3, false);
|
||||
break;
|
||||
|
||||
case OSD_ATTITUDE_PITCH:
|
||||
|
@ -2454,7 +2456,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
buff[0] = SYM_PITCH_DOWN;
|
||||
else if (attitude.values.pitch < 0)
|
||||
buff[0] = SYM_PITCH_UP;
|
||||
osdFormatCentiNumber(buff + 1, DECIDEGREES_TO_CENTIDEGREES(ABS(attitude.values.pitch)), 0, 1, 0, 3);
|
||||
osdFormatCentiNumber(buff + 1, DECIDEGREES_TO_CENTIDEGREES(ABS(attitude.values.pitch)), 0, 1, 0, 3, false);
|
||||
break;
|
||||
|
||||
case OSD_ARTIFICIAL_HORIZON:
|
||||
|
@ -2515,7 +2517,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
break;
|
||||
}
|
||||
|
||||
osdFormatCentiNumber(buff, value, 0, 1, 0, 3);
|
||||
osdFormatCentiNumber(buff, value, 0, 1, 0, 3, false);
|
||||
buff[3] = sym;
|
||||
buff[4] = '\0';
|
||||
break;
|
||||
|
@ -2548,7 +2550,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
case OSD_UNIT_IMPERIAL:
|
||||
// mAh/foot
|
||||
if (efficiencyValid) {
|
||||
osdFormatCentiNumber(buff, (value * METERS_PER_FOOT), 1, 2, 2, 3);
|
||||
osdFormatCentiNumber(buff, (value * METERS_PER_FOOT), 1, 2, 2, 3, false);
|
||||
tfp_sprintf(buff, "%s%c%c", buff, SYM_AH_V_FT_0, SYM_AH_V_FT_1);
|
||||
} else {
|
||||
buff[0] = buff[1] = buff[2] = '-';
|
||||
|
@ -2562,7 +2564,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
case OSD_UNIT_METRIC:
|
||||
// mAh/metre
|
||||
if (efficiencyValid) {
|
||||
osdFormatCentiNumber(buff, value, 1, 2, 2, 3);
|
||||
osdFormatCentiNumber(buff, value, 1, 2, 2, 3, false);
|
||||
tfp_sprintf(buff, "%s%c%c", buff, SYM_AH_V_M_0, SYM_AH_V_M_1);
|
||||
} else {
|
||||
buff[0] = buff[1] = buff[2] = '-';
|
||||
|
@ -2857,7 +2859,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
|
||||
case OSD_POWER:
|
||||
{
|
||||
bool kiloWatt = osdFormatCentiNumber(buff, getPower(), 1000, 2, 2, 3);
|
||||
bool kiloWatt = osdFormatCentiNumber(buff, getPower(), 1000, 2, 2, 3, false);
|
||||
buff[3] = kiloWatt ? SYM_KILOWATT : SYM_WATT;
|
||||
buff[4] = '\0';
|
||||
|
||||
|
@ -3020,7 +3022,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
case OSD_UNIT_UK:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_IMPERIAL:
|
||||
moreThanAh = osdFormatCentiNumber(buff, value * METERS_PER_MILE / 10, 1000, 0, 2, digits);
|
||||
moreThanAh = osdFormatCentiNumber(buff, value * METERS_PER_MILE / 10, 1000, 0, 2, digits, false);
|
||||
if (!moreThanAh) {
|
||||
tfp_sprintf(buff, "%s%c%c", buff, SYM_MAH_MI_0, SYM_MAH_MI_1);
|
||||
} else {
|
||||
|
@ -3034,7 +3036,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
}
|
||||
break;
|
||||
case OSD_UNIT_GA:
|
||||
moreThanAh = osdFormatCentiNumber(buff, value * METERS_PER_NAUTICALMILE / 10, 1000, 0, 2, digits);
|
||||
moreThanAh = osdFormatCentiNumber(buff, value * METERS_PER_NAUTICALMILE / 10, 1000, 0, 2, digits, false);
|
||||
if (!moreThanAh) {
|
||||
tfp_sprintf(buff, "%s%c%c", buff, SYM_MAH_NM_0, SYM_MAH_NM_1);
|
||||
} else {
|
||||
|
@ -3050,7 +3052,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
case OSD_UNIT_METRIC_MPH:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_METRIC:
|
||||
moreThanAh = osdFormatCentiNumber(buff, value * 100, 1000, 0, 2, digits);
|
||||
moreThanAh = osdFormatCentiNumber(buff, value * 100, 1000, 0, 2, digits, false);
|
||||
if (!moreThanAh) {
|
||||
tfp_sprintf(buff, "%s%c%c", buff, SYM_MAH_KM_0, SYM_MAH_KM_1);
|
||||
} else {
|
||||
|
@ -3091,17 +3093,17 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
case OSD_UNIT_UK:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_IMPERIAL:
|
||||
osdFormatCentiNumber(buff, value * METERS_PER_MILE / 10000, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, value * METERS_PER_MILE / 10000, 0, 2, 0, 3, false);
|
||||
buff[3] = SYM_WH_MI;
|
||||
break;
|
||||
case OSD_UNIT_GA:
|
||||
osdFormatCentiNumber(buff, value * METERS_PER_NAUTICALMILE / 10000, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, value * METERS_PER_NAUTICALMILE / 10000, 0, 2, 0, 3, false);
|
||||
buff[3] = SYM_WH_NM;
|
||||
break;
|
||||
case OSD_UNIT_METRIC_MPH:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_METRIC:
|
||||
osdFormatCentiNumber(buff, value / 10, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, value / 10, 0, 2, 0, 3, false);
|
||||
buff[3] = SYM_WH_KM;
|
||||
break;
|
||||
}
|
||||
|
@ -3115,7 +3117,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
case OSD_GFORCE:
|
||||
{
|
||||
buff[0] = SYM_GFORCE;
|
||||
osdFormatCentiNumber(buff + 1, GForce, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff + 1, GForce, 0, 2, 0, 3, false);
|
||||
if (GForce > osdConfig()->gforce_alarm * 100) {
|
||||
TEXT_ATTRIBUTES_ADD_BLINK(elemAttr);
|
||||
}
|
||||
|
@ -3128,7 +3130,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
{
|
||||
float GForceValue = GForceAxis[item - OSD_GFORCE_X];
|
||||
buff[0] = SYM_GFORCE_X + item - OSD_GFORCE_X;
|
||||
osdFormatCentiNumber(buff + 1, GForceValue, 0, 2, 0, 4);
|
||||
osdFormatCentiNumber(buff + 1, GForceValue, 0, 2, 0, 4, false);
|
||||
if ((GForceValue < osdConfig()->gforce_axis_alarm_min * 100) || (GForceValue > osdConfig()->gforce_axis_alarm_max * 100)) {
|
||||
TEXT_ATTRIBUTES_ADD_BLINK(elemAttr);
|
||||
}
|
||||
|
@ -3304,7 +3306,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
}
|
||||
buff[0] = SYM_SCALE;
|
||||
if (osdMapData.scale > 0) {
|
||||
bool scaled = osdFormatCentiNumber(&buff[1], osdMapData.scale * scaleToUnit, scaleUnitDivisor, maxDecimals, 2, 3);
|
||||
bool scaled = osdFormatCentiNumber(&buff[1], osdMapData.scale * scaleToUnit, scaleUnitDivisor, maxDecimals, 2, 3, false);
|
||||
buff[4] = scaled ? symScaled : symUnscaled;
|
||||
// Make sure this is cleared if the map stops being drawn
|
||||
osdMapData.scale = 0;
|
||||
|
@ -3473,14 +3475,14 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
|
||||
#ifdef USE_POWER_LIMITS
|
||||
case OSD_PLIMIT_REMAINING_BURST_TIME:
|
||||
osdFormatCentiNumber(buff, powerLimiterGetRemainingBurstTime() * 100, 0, 1, 0, 3);
|
||||
osdFormatCentiNumber(buff, powerLimiterGetRemainingBurstTime() * 100, 0, 1, 0, 3, false);
|
||||
buff[3] = 'S';
|
||||
buff[4] = '\0';
|
||||
break;
|
||||
|
||||
case OSD_PLIMIT_ACTIVE_CURRENT_LIMIT:
|
||||
if (currentBatteryProfile->powerLimits.continuousCurrent) {
|
||||
osdFormatCentiNumber(buff, powerLimiterGetActiveCurrentLimit(), 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, powerLimiterGetActiveCurrentLimit(), 0, 2, 0, 3, false);
|
||||
buff[3] = SYM_AMP;
|
||||
buff[4] = '\0';
|
||||
|
||||
|
@ -3494,7 +3496,7 @@ static bool osdDrawSingleElement(uint8_t item)
|
|||
case OSD_PLIMIT_ACTIVE_POWER_LIMIT:
|
||||
{
|
||||
if (currentBatteryProfile->powerLimits.continuousPower) {
|
||||
bool kiloWatt = osdFormatCentiNumber(buff, powerLimiterGetActivePowerLimit(), 1000, 2, 2, 3);
|
||||
bool kiloWatt = osdFormatCentiNumber(buff, powerLimiterGetActivePowerLimit(), 1000, 2, 2, 3, false);
|
||||
buff[3] = kiloWatt ? SYM_KILOWATT : SYM_WATT;
|
||||
buff[4] = '\0';
|
||||
|
||||
|
@ -4017,7 +4019,7 @@ static void osdCompleteAsyncInitialization(void)
|
|||
#ifdef USE_ADC
|
||||
if (feature(FEATURE_VBAT) && feature(FEATURE_CURRENT_METER)) {
|
||||
displayWrite(osdDisplayPort, statNameX, ++y, "TOTAL ENERGY:");
|
||||
osdFormatCentiNumber(string_buffer, statsConfig()->stats_total_energy / 10, 0, 2, 0, 4);
|
||||
osdFormatCentiNumber(string_buffer, statsConfig()->stats_total_energy / 10, 0, 2, 0, 4, false);
|
||||
strcat(string_buffer, "\xAB"); // SYM_WH
|
||||
displayWrite(osdDisplayPort, statValueX-4, y, string_buffer);
|
||||
|
||||
|
@ -4028,18 +4030,18 @@ static void osdCompleteAsyncInitialization(void)
|
|||
case OSD_UNIT_UK:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_IMPERIAL:
|
||||
osdFormatCentiNumber(string_buffer, avg_efficiency / 10, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(string_buffer, avg_efficiency / 10, 0, 2, 0, 3, false);
|
||||
string_buffer[3] = SYM_WH_MI;
|
||||
break;
|
||||
case OSD_UNIT_GA:
|
||||
osdFormatCentiNumber(string_buffer, avg_efficiency / 10, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(string_buffer, avg_efficiency / 10, 0, 2, 0, 3, false);
|
||||
string_buffer[3] = SYM_WH_NM;
|
||||
break;
|
||||
default:
|
||||
case OSD_UNIT_METRIC_MPH:
|
||||
FALLTHROUGH;
|
||||
case OSD_UNIT_METRIC:
|
||||
osdFormatCentiNumber(string_buffer, avg_efficiency / 10000 * METERS_PER_MILE, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(string_buffer, avg_efficiency / 10000 * METERS_PER_MILE, 0, 2, 0, 3, false);
|
||||
string_buffer[3] = SYM_WH_KM;
|
||||
break;
|
||||
}
|
||||
|
@ -4254,22 +4256,22 @@ static void osdShowStats(bool isSinglePageStatsCompatible, uint8_t page)
|
|||
if (isSinglePageStatsCompatible || page == 1) {
|
||||
if (osdConfig()->stats_min_voltage_unit == OSD_STATS_MIN_VOLTAGE_UNIT_BATTERY) {
|
||||
displayWrite(osdDisplayPort, statNameX, top, "MIN BATTERY VOLT :");
|
||||
osdFormatCentiNumber(buff, stats.min_voltage, 0, osdConfig()->main_voltage_decimals, 0, osdConfig()->main_voltage_decimals + 2);
|
||||
osdFormatCentiNumber(buff, stats.min_voltage, 0, osdConfig()->main_voltage_decimals, 0, osdConfig()->main_voltage_decimals + 2, false);
|
||||
} else {
|
||||
displayWrite(osdDisplayPort, statNameX, top, "MIN CELL VOLTAGE :");
|
||||
osdFormatCentiNumber(buff, stats.min_voltage/getBatteryCellCount(), 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, stats.min_voltage/getBatteryCellCount(), 0, 2, 0, 3, false);
|
||||
}
|
||||
tfp_sprintf(buff, "%s%c", buff, SYM_VOLT);
|
||||
displayWrite(osdDisplayPort, statValuesX, top++, buff);
|
||||
|
||||
if (feature(FEATURE_CURRENT_METER)) {
|
||||
displayWrite(osdDisplayPort, statNameX, top, "MAX CURRENT :");
|
||||
osdFormatCentiNumber(buff, stats.max_current, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, stats.max_current, 0, 2, 0, 3, false);
|
||||
tfp_sprintf(buff, "%s%c", buff, SYM_AMP);
|
||||
displayWrite(osdDisplayPort, statValuesX, top++, buff);
|
||||
|
||||
displayWrite(osdDisplayPort, statNameX, top, "MAX POWER :");
|
||||
bool kiloWatt = osdFormatCentiNumber(buff, stats.max_power, 1000, 2, 2, 3);
|
||||
bool kiloWatt = osdFormatCentiNumber(buff, stats.max_power, 1000, 2, 2, 3, false);
|
||||
buff[3] = kiloWatt ? SYM_KILOWATT : SYM_WATT;
|
||||
buff[4] = '\0';
|
||||
displayWrite(osdDisplayPort, statValuesX, top++, buff);
|
||||
|
@ -4278,7 +4280,7 @@ static void osdShowStats(bool isSinglePageStatsCompatible, uint8_t page)
|
|||
if (osdConfig()->stats_energy_unit == OSD_STATS_ENERGY_UNIT_MAH) {
|
||||
tfp_sprintf(buff, "%d%c", (int)getMAhDrawn(), SYM_MAH);
|
||||
} else {
|
||||
osdFormatCentiNumber(buff, getMWhDrawn() / 10, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, getMWhDrawn() / 10, 0, 2, 0, 3, false);
|
||||
tfp_sprintf(buff, "%s%c", buff, SYM_WH);
|
||||
}
|
||||
displayWrite(osdDisplayPort, statValuesX, top++, buff);
|
||||
|
@ -4300,7 +4302,7 @@ static void osdShowStats(bool isSinglePageStatsCompatible, uint8_t page)
|
|||
FALLTHROUGH;
|
||||
case OSD_UNIT_IMPERIAL:
|
||||
if (osdConfig()->stats_energy_unit == OSD_STATS_ENERGY_UNIT_MAH) {
|
||||
moreThanAh = osdFormatCentiNumber(buff, (int32_t)(getMAhDrawn() * 10000.0f * METERS_PER_MILE / totalDistance), 1000, 0, 2, digits);
|
||||
moreThanAh = osdFormatCentiNumber(buff, (int32_t)(getMAhDrawn() * 10000.0f * METERS_PER_MILE / totalDistance), 1000, 0, 2, digits, false);
|
||||
if (!moreThanAh) {
|
||||
tfp_sprintf(buff, "%s%c%c", buff, SYM_MAH_MI_0, SYM_MAH_MI_1);
|
||||
} else {
|
||||
|
@ -4313,7 +4315,7 @@ static void osdShowStats(bool isSinglePageStatsCompatible, uint8_t page)
|
|||
buff[5] = '\0';
|
||||
}
|
||||
} else {
|
||||
osdFormatCentiNumber(buff, (int32_t)(getMWhDrawn() * 10.0f * METERS_PER_MILE / totalDistance), 0, 2, 0, digits);
|
||||
osdFormatCentiNumber(buff, (int32_t)(getMWhDrawn() * 10.0f * METERS_PER_MILE / totalDistance), 0, 2, 0, digits, false);
|
||||
tfp_sprintf(buff, "%s%c", buff, SYM_WH_MI);
|
||||
if (!efficiencyValid) {
|
||||
buff[0] = buff[1] = buff[2] = '-';
|
||||
|
@ -4322,7 +4324,7 @@ static void osdShowStats(bool isSinglePageStatsCompatible, uint8_t page)
|
|||
break;
|
||||
case OSD_UNIT_GA:
|
||||
if (osdConfig()->stats_energy_unit == OSD_STATS_ENERGY_UNIT_MAH) {
|
||||
moreThanAh = osdFormatCentiNumber(buff, (int32_t)(getMAhDrawn() * 10000.0f * METERS_PER_NAUTICALMILE / totalDistance), 1000, 0, 2, digits);
|
||||
moreThanAh = osdFormatCentiNumber(buff, (int32_t)(getMAhDrawn() * 10000.0f * METERS_PER_NAUTICALMILE / totalDistance), 1000, 0, 2, digits, false);
|
||||
if (!moreThanAh) {
|
||||
tfp_sprintf(buff, "%s%c%c", buff, SYM_MAH_NM_0, SYM_MAH_NM_1);
|
||||
} else {
|
||||
|
@ -4335,7 +4337,7 @@ static void osdShowStats(bool isSinglePageStatsCompatible, uint8_t page)
|
|||
buff[5] = '\0';
|
||||
}
|
||||
} else {
|
||||
osdFormatCentiNumber(buff, (int32_t)(getMWhDrawn() * 10.0f * METERS_PER_NAUTICALMILE / totalDistance), 0, 2, 0, digits);
|
||||
osdFormatCentiNumber(buff, (int32_t)(getMWhDrawn() * 10.0f * METERS_PER_NAUTICALMILE / totalDistance), 0, 2, 0, digits, false);
|
||||
tfp_sprintf(buff, "%s%c", buff, SYM_WH_NM);
|
||||
if (!efficiencyValid) {
|
||||
buff[0] = buff[1] = buff[2] = '-';
|
||||
|
@ -4346,7 +4348,7 @@ static void osdShowStats(bool isSinglePageStatsCompatible, uint8_t page)
|
|||
FALLTHROUGH;
|
||||
case OSD_UNIT_METRIC:
|
||||
if (osdConfig()->stats_energy_unit == OSD_STATS_ENERGY_UNIT_MAH) {
|
||||
moreThanAh = osdFormatCentiNumber(buff, (int32_t)(getMAhDrawn() * 10000000.0f / totalDistance), 1000, 0, 2, digits);
|
||||
moreThanAh = osdFormatCentiNumber(buff, (int32_t)(getMAhDrawn() * 10000000.0f / totalDistance), 1000, 0, 2, digits, false);
|
||||
if (!moreThanAh) {
|
||||
tfp_sprintf(buff, "%s%c%c", buff, SYM_MAH_KM_0, SYM_MAH_KM_1);
|
||||
} else {
|
||||
|
@ -4359,7 +4361,7 @@ static void osdShowStats(bool isSinglePageStatsCompatible, uint8_t page)
|
|||
buff[5] = '\0';
|
||||
}
|
||||
} else {
|
||||
osdFormatCentiNumber(buff, (int32_t)(getMWhDrawn() * 10000.0f / totalDistance), 0, 2, 0, digits);
|
||||
osdFormatCentiNumber(buff, (int32_t)(getMWhDrawn() * 10000.0f / totalDistance), 0, 2, 0, digits, false);
|
||||
tfp_sprintf(buff, "%s%c", buff, SYM_WH_KM);
|
||||
if (!efficiencyValid) {
|
||||
buff[0] = buff[1] = buff[2] = '-';
|
||||
|
@ -4374,19 +4376,19 @@ static void osdShowStats(bool isSinglePageStatsCompatible, uint8_t page)
|
|||
|
||||
const float max_gforce = accGetMeasuredMaxG();
|
||||
displayWrite(osdDisplayPort, statNameX, top, "MAX G-FORCE :");
|
||||
osdFormatCentiNumber(buff, max_gforce * 100, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, max_gforce * 100, 0, 2, 0, 3, false);
|
||||
displayWrite(osdDisplayPort, statValuesX, top++, buff);
|
||||
|
||||
const acc_extremes_t *acc_extremes = accGetMeasuredExtremes();
|
||||
const float acc_extremes_min = acc_extremes[Z].min;
|
||||
const float acc_extremes_max = acc_extremes[Z].max;
|
||||
displayWrite(osdDisplayPort, statNameX, top, "MIN/MAX Z G-FORCE:");
|
||||
osdFormatCentiNumber(buff, acc_extremes_min * 100, 0, 2, 0, 4);
|
||||
osdFormatCentiNumber(buff, acc_extremes_min * 100, 0, 2, 0, 4, false);
|
||||
osdLeftAlignString(buff);
|
||||
strcat(osdFormatTrimWhiteSpace(buff),"/");
|
||||
multiValueLengthOffset = strlen(buff);
|
||||
displayWrite(osdDisplayPort, statValuesX, top, buff);
|
||||
osdFormatCentiNumber(buff, acc_extremes_max * 100, 0, 2, 0, 3);
|
||||
osdFormatCentiNumber(buff, acc_extremes_max * 100, 0, 2, 0, 3, false);
|
||||
osdLeftAlignString(buff);
|
||||
displayWrite(osdDisplayPort, statValuesX + multiValueLengthOffset, top++, buff);
|
||||
}
|
||||
|
|
|
@ -483,7 +483,7 @@ void osdStartedSaveProcess(void);
|
|||
void osdShowEEPROMSavedNotification(void);
|
||||
|
||||
void osdCrosshairPosition(uint8_t *x, uint8_t *y);
|
||||
bool osdFormatCentiNumber(char *buff, int32_t centivalue, uint32_t scale, int maxDecimals, int maxScaledDecimals, int length);
|
||||
bool osdFormatCentiNumber(char *buff, int32_t centivalue, uint32_t scale, int maxDecimals, int maxScaledDecimals, int length, bool leadingZeros);
|
||||
void osdFormatAltitudeSymbol(char *buff, int32_t alt);
|
||||
void osdFormatVelocityStr(char* buff, int32_t vel, bool _3D, bool _max);
|
||||
// Returns a heading angle in degrees normalized to [0, 360).
|
||||
|
|
|
@ -256,18 +256,18 @@ void osdHudDrawPoi(uint32_t poiDistance, int16_t poiDirection, int32_t poiAltitu
|
|||
case OSD_UNIT_IMPERIAL:
|
||||
{
|
||||
if (poiType == 1) {
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(poiDistance * 100), FEET_PER_MILE, 0, 4, 4);
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(poiDistance * 100), FEET_PER_MILE, 0, 4, 4, false);
|
||||
} else {
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(poiDistance * 100), FEET_PER_MILE, 0, 3, 3);
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(poiDistance * 100), FEET_PER_MILE, 0, 3, 3, false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case OSD_UNIT_GA:
|
||||
{
|
||||
if (poiType == 1) {
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(poiDistance * 100), (uint32_t)FEET_PER_NAUTICALMILE, 0, 4, 4);
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(poiDistance * 100), (uint32_t)FEET_PER_NAUTICALMILE, 0, 4, 4, false);
|
||||
} else {
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(poiDistance * 100), (uint32_t)FEET_PER_NAUTICALMILE, 0, 3, 3);
|
||||
osdFormatCentiNumber(buff, CENTIMETERS_TO_CENTIFEET(poiDistance * 100), (uint32_t)FEET_PER_NAUTICALMILE, 0, 3, 3, false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -278,9 +278,9 @@ void osdHudDrawPoi(uint32_t poiDistance, int16_t poiDirection, int32_t poiAltitu
|
|||
case OSD_UNIT_METRIC:
|
||||
{
|
||||
if (poiType == 1) {
|
||||
osdFormatCentiNumber(buff, poiDistance * 100, METERS_PER_KILOMETER, 0, 4, 4);
|
||||
osdFormatCentiNumber(buff, poiDistance * 100, METERS_PER_KILOMETER, 0, 4, 4, false);
|
||||
} else {
|
||||
osdFormatCentiNumber(buff, poiDistance * 100, METERS_PER_KILOMETER, 0, 3, 3);
|
||||
osdFormatCentiNumber(buff, poiDistance * 100, METERS_PER_KILOMETER, 0, 3, 3, false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -38,7 +38,7 @@ int digitCount(int32_t value)
|
|||
}
|
||||
|
||||
|
||||
bool osdFormatCentiNumber(char *buff, int32_t centivalue, uint32_t scale, int maxDecimals, int maxScaledDecimals, int length)
|
||||
bool osdFormatCentiNumber(char *buff, int32_t centivalue, uint32_t scale, int maxDecimals, int maxScaledDecimals, int length, bool leadingZeros)
|
||||
{
|
||||
char *ptr = buff;
|
||||
char *dec;
|
||||
|
@ -86,7 +86,11 @@ bool osdFormatCentiNumber(char *buff, int32_t centivalue, uint32_t scale, int ma
|
|||
// Done counting. Time to write the characters.
|
||||
// Write spaces at the start
|
||||
while (remaining > 0) {
|
||||
*ptr = SYM_BLANK;
|
||||
if (leadingZeros)
|
||||
*ptr = '0';
|
||||
else
|
||||
*ptr = SYM_BLANK;
|
||||
|
||||
ptr++;
|
||||
remaining--;
|
||||
}
|
||||
|
@ -98,7 +102,11 @@ bool osdFormatCentiNumber(char *buff, int32_t centivalue, uint32_t scale, int ma
|
|||
// Add any needed remaining leading spaces
|
||||
while(rem_spaces > 0)
|
||||
{
|
||||
*ptr = SYM_BLANK;
|
||||
if (leadingZeros)
|
||||
*ptr = '0';
|
||||
else
|
||||
*ptr = SYM_BLANK;
|
||||
|
||||
ptr++;
|
||||
remaining--;
|
||||
rem_spaces--;
|
||||
|
|
|
@ -33,6 +33,6 @@ int digitCount(int32_t value);
|
|||
* of the same length. If the value doesn't fit into the provided length
|
||||
* it will be divided by scale and true will be returned.
|
||||
*/
|
||||
bool osdFormatCentiNumber(char *buff, int32_t centivalue, uint32_t scale, int maxDecimals, int maxScaledDecimals, int length);
|
||||
bool osdFormatCentiNumber(char *buff, int32_t centivalue, uint32_t scale, int maxDecimals, int maxScaledDecimals, int length, bool leadingZeros);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue