diff --git a/src/main/common/maths.h b/src/main/common/maths.h index 7ee0ac980a..300c18fae6 100644 --- a/src/main/common/maths.h +++ b/src/main/common/maths.h @@ -39,6 +39,7 @@ #define DEGREES_TO_RADIANS(angle) ((angle) * 0.0174532925f) #define CM_S_TO_KM_H(centimetersPerSecond) (centimetersPerSecond * 36 / 1000) +#define CM_S_TO_MPH(centimetersPerSecond) (((centimetersPerSecond * 10000) / 5080) / 88) #define MIN(a,b) \ __extension__ ({ __typeof__ (a) _a = (a); \ diff --git a/src/main/io/osd.c b/src/main/io/osd.c index bed34cc9f3..ec85489cf4 100644 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -428,8 +428,15 @@ static bool osdDrawSingleElement(uint8_t item) break; case OSD_GPS_SPEED: - // FIXME ideally we want to use SYM_KMH symbol but it's not in the font any more, so we use K. - tfp_sprintf(buff, "%3dK", CM_S_TO_KM_H(gpsSol.groundSpeed)); + // FIXME ideally we want to use SYM_KMH symbol but it's not in the font any more, so we use K (M for MPH) + switch (osdConfig()->units) { + case OSD_UNIT_IMPERIAL: + tfp_sprintf(buff, "%3dM", CM_S_TO_MPH(gpsSol.groundSpeed)); + break; + default: + tfp_sprintf(buff, "%3dK", CM_S_TO_KM_H(gpsSol.groundSpeed)); + break; + } break; case OSD_GPS_LAT: @@ -1121,7 +1128,14 @@ static void osdUpdateStats(void) { int16_t value = 0; #ifdef USE_GPS - value = CM_S_TO_KM_H(gpsSol.groundSpeed); + switch (osdConfig()->units) { + case OSD_UNIT_IMPERIAL: + value = CM_S_TO_MPH(gpsSol.groundSpeed); + break; + default: + value = CM_S_TO_KM_H(gpsSol.groundSpeed); + break; + } #endif if (stats.max_speed < value) { stats.max_speed = value; diff --git a/src/test/unit/osd_unittest.cc b/src/test/unit/osd_unittest.cc index d087cc269f..1c169bb125 100644 --- a/src/test/unit/osd_unittest.cc +++ b/src/test/unit/osd_unittest.cc @@ -370,7 +370,7 @@ TEST(OsdTest, TestStatsImperial) displayPortTestBufferSubstring(2, row++, "2017-11-19 10:12:"); displayPortTestBufferSubstring(2, row++, "TOTAL ARM : 00:05.00"); displayPortTestBufferSubstring(2, row++, "LAST ARM : 00:03"); - displayPortTestBufferSubstring(2, row++, "MAX SPEED : 28"); + displayPortTestBufferSubstring(2, row++, "MAX SPEED : 17"); displayPortTestBufferSubstring(2, row++, "MAX DISTANCE : 328%c", SYM_FT); displayPortTestBufferSubstring(2, row++, "MIN BATTERY : 14.7%c", SYM_VOLT); displayPortTestBufferSubstring(2, row++, "END BATTERY : 15.2%c", SYM_VOLT);