From f854442c798201d7af306114ba3ea00070d3828f Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Tue, 10 Nov 2015 17:24:49 +0100 Subject: [PATCH] Fixes #3047: * negative altitude on top bar was displayed wrong (same bug affected vertical speed) * add ability to select an altitude sensor with ft unit for top bar * display actual sensor unit for top bar altitude --- radio/src/gui/Taranis/menu_model_telemetry.cpp | 10 +++------- radio/src/gui/Taranis/view_main.cpp | 2 +- radio/src/myeeprom.h | 4 ++-- radio/src/telemetry/telemetry.cpp | 8 ++++++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/radio/src/gui/Taranis/menu_model_telemetry.cpp b/radio/src/gui/Taranis/menu_model_telemetry.cpp index cf5de4cbd..2fa9db275 100644 --- a/radio/src/gui/Taranis/menu_model_telemetry.cpp +++ b/radio/src/gui/Taranis/menu_model_telemetry.cpp @@ -164,12 +164,8 @@ enum SensorFields { bool isSensorUnit(int sensor, uint8_t unit) { - if (sensor == 0) - return true; - - sensor -= 1; - - return g_model.telemetrySensors[sensor].unit == unit; + if (sensor <= 0 || sensor > MAX_SENSORS ) return true; + return g_model.telemetrySensors[--sensor].unit == unit; } bool isCellsSensor(int sensor) @@ -184,7 +180,7 @@ bool isGPSSensor(int sensor) bool isAltSensor(int sensor) { - return isSensorUnit(sensor, UNIT_DIST); + return isSensorUnit(sensor, UNIT_DIST) || isSensorUnit(sensor, UNIT_FEET); } bool isVoltsSensor(int sensor) diff --git a/radio/src/gui/Taranis/view_main.cpp b/radio/src/gui/Taranis/view_main.cpp index 2c1f292f3..a4d7e7cb2 100644 --- a/radio/src/gui/Taranis/view_main.cpp +++ b/radio/src/gui/Taranis/view_main.cpp @@ -254,7 +254,7 @@ void displayTopBar() if (altitudeItem.isAvailable()) { LCD_ICON(altitude_icon_x, BAR_Y, ICON_ALTITUDE); int32_t value = altitudeItem.value / g_model.telemetrySensors[item].getPrecDivisor(); - putsValueWithUnit(altitude_icon_x+2*FW-1, BAR_Y+1, value, UNIT_METERS, LEFT); + putsValueWithUnit(altitude_icon_x+2*FW-1, BAR_Y+1, value, g_model.telemetrySensors[item].unit, LEFT); } } } diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 5882ca4d3..6d4918799 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -1317,8 +1317,8 @@ PACK(typedef struct { int32_t getValue(int32_t value, uint8_t unit, uint8_t prec) const; bool isConfigurable() const; bool isPrecConfigurable() const; - uint32_t getPrecMultiplier() const; - uint32_t getPrecDivisor() const; + int32_t getPrecMultiplier() const; + int32_t getPrecDivisor() const; }) TelemetrySensor; #endif diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index bbde9fd95..4f790fff9 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -647,14 +647,18 @@ bool TelemetrySensor::isPrecConfigurable() const } } -uint32_t TelemetrySensor::getPrecMultiplier() const +int32_t TelemetrySensor::getPrecMultiplier() const { + /* + Important: the return type must be signed, otherwise + mathematic operations with a negative telemetry value won't work + */ if (prec == 2) return 1; if (prec == 1) return 10; return 100; } -uint32_t TelemetrySensor::getPrecDivisor() const +int32_t TelemetrySensor::getPrecDivisor() const { if (prec == 2) return 100; if (prec == 1) return 10;