diff --git a/src/main/osd/osd.c b/src/main/osd/osd.c index 8372212b47..4c9cb71d3b 100644 --- a/src/main/osd/osd.c +++ b/src/main/osd/osd.c @@ -302,7 +302,7 @@ void pgResetFn_osdConfig(osdConfig_t *osdConfig) osdConfig->profile[i][0] = '\0'; } osdConfig->rssi_dbm_alarm = 60; - osdConfig->dynamic_distance_units = false; + osdConfig->dynamic_distance_units = true; } static void osdDrawLogo(int x, int y) diff --git a/src/main/osd/osd_elements.c b/src/main/osd/osd_elements.c index 3461ce02b5..133ec5fc66 100644 --- a/src/main/osd/osd_elements.c +++ b/src/main/osd/osd_elements.c @@ -240,17 +240,15 @@ static void osdFormatCoordinate(char *buff, char sym, int32_t val) } #endif // USE_GPS -void osdFormatDistanceString(char *result, int distance, char leadingSymbol) +void osdFormatDistanceString(char *ptr, int distance, char leadingSymbol) { const int convertedDistance = osdGetMetersToSelectedUnit(distance); char unitSymbol; char unitSymbolExtended; int unitTransition; - char buff[10]; - result[0] = leadingSymbol; if (leadingSymbol != SYM_NONE) { - result[1] = 0; + *ptr++ = leadingSymbol; } switch (osdConfig()->units) { case OSD_UNIT_IMPERIAL: @@ -266,16 +264,15 @@ void osdFormatDistanceString(char *result, int distance, char leadingSymbol) } if (convertedDistance < unitTransition || !osdConfig()->dynamic_distance_units) { - tfp_sprintf(buff, "%d%c", convertedDistance, unitSymbol); + tfp_sprintf(ptr, "%d%c", convertedDistance, unitSymbol); } else { const int displayDistance = convertedDistance * 100 / unitTransition; if (displayDistance >= 1000) { // >= 10 miles or km - 1 decimal place - tfp_sprintf(buff, "%d.%d%c", displayDistance / 100, (displayDistance / 10) % 10, unitSymbolExtended); + tfp_sprintf(ptr, "%d.%d%c", displayDistance / 100, (displayDistance / 10) % 10, unitSymbolExtended); } else { // < 10 miles or km - 2 decimal places - tfp_sprintf(buff, "%d.%02d%c", displayDistance / 100, displayDistance % 100, unitSymbolExtended); + tfp_sprintf(ptr, "%d.%02d%c", displayDistance / 100, displayDistance % 100, unitSymbolExtended); } } - strcat(result, buff); } static void osdFormatPID(char * buff, const char * label, const pidf_t * pid) diff --git a/src/test/unit/osd_unittest.cc b/src/test/unit/osd_unittest.cc index c808c691da..a10e43b572 100644 --- a/src/test/unit/osd_unittest.cc +++ b/src/test/unit/osd_unittest.cc @@ -328,6 +328,7 @@ TEST(OsdTest, TestStatsImperial) // and // using imperial unit system osdConfigMutable()->units = OSD_UNIT_IMPERIAL; + osdConfigMutable()->dynamic_distance_units = false; // and // this timer 1 configuration @@ -414,6 +415,7 @@ TEST(OsdTest, TestStatsMetric) // given // using metric unit system osdConfigMutable()->units = OSD_UNIT_METRIC; + osdConfigMutable()->dynamic_distance_units = false; // set timer 1 configuration to tenths precision osdConfigMutable()->timers[OSD_TIMER_1] = OSD_TIMER(OSD_TIMER_SRC_TOTAL_ARMED, OSD_TIMER_PREC_TENTHS, 0);