From ddc92c237e2258306200265810fbe15889cf2cfd Mon Sep 17 00:00:00 2001 From: 3djc Date: Sun, 19 May 2019 09:11:33 +0200 Subject: [PATCH] Fix GPS overflow --- radio/src/opentx.h | 1 + radio/src/telemetry/telemetry_sensors.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index a5216a0a5..9e0a40c08 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1279,6 +1279,7 @@ extern uint8_t s_frsky_view; #endif constexpr uint32_t EARTH_RADIUS = 6371009; +constexpr uint32_t PRECALCULATED_EARTH_RADIUS_CONSTANT = 111194; // meters * pi / 180° void getGpsPilotPosition(); void getGpsDistance(); diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index 52098e6a5..560cb5570 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -355,7 +355,7 @@ void TelemetryItem::eval(const TelemetrySensor & sensor) } } uint32_t angle = abs(gpsItem.gps.latitude - gpsItem.pilotLatitude); - uint32_t dist = ((uint64_t )EARTH_RADIUS * M_PI / 180) * angle) / 1000000; + uint32_t dist = ((uint64_t)PRECALCULATED_EARTH_RADIUS_CONSTANT * angle) / 1000000; uint32_t result = dist * dist; angle = abs(gpsItem.gps.longitude - gpsItem.pilotLongitude);