From e88eba1009f995c4b2c73f7b977eba079252d95e Mon Sep 17 00:00:00 2001 From: mikeller Date: Wed, 7 Dec 2016 00:03:28 +1300 Subject: [PATCH 1/2] Added speed / altitude readings from vario / baro to HoTT, in case of no GPS fix. --- src/main/telemetry/hott.c | 19 ++++++++++++++++--- src/test/unit/telemetry_hott_unittest.cc | 4 ++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/telemetry/hott.c b/src/main/telemetry/hott.c index c918edae6a..2401276994 100644 --- a/src/main/telemetry/hott.c +++ b/src/main/telemetry/hott.c @@ -64,6 +64,7 @@ #include "build/debug.h" #include "common/axis.h" +#include "common/time.h" #include "drivers/system.h" @@ -73,9 +74,11 @@ #include "sensors/sensors.h" #include "sensors/battery.h" +#include "sensors/barometer.h" #include "flight/pid.h" #include "flight/navigation.h" +#include "flight/altitudehold.h" #include "io/gps.h" #include "telemetry/telemetry.h" @@ -193,15 +196,25 @@ void hottPrepareGPSResponse(HOTT_GPS_MSG_t *hottGPSMessage) addGPSCoordinates(hottGPSMessage, GPS_coord[LAT], GPS_coord[LON]); - // GPS Speed is returned in cm/s (from io/gps.c) and must be sent in km/h (Hott requirement) - const uint16_t speed = (GPS_speed * 36) / 1000; + uint16_t speed = GPS_speed; + if (!STATE(GPS_FIX)) { + speed = vario; + } + + // Speed is returned in cm/s and must be sent in km/h (Hott requirement) + speed = (speed * 36) / 1000; hottGPSMessage->gps_speed_L = speed & 0x00FF; hottGPSMessage->gps_speed_H = speed >> 8; hottGPSMessage->home_distance_L = GPS_distanceToHome & 0x00FF; hottGPSMessage->home_distance_H = GPS_distanceToHome >> 8; - const uint16_t hottGpsAltitude = (GPS_altitude) + HOTT_GPS_ALTITUDE_OFFSET; // GPS_altitude in m ; offset = 500 -> O m + uint16_t altitude = GPS_altitude; + if (!STATE(GPS_FIX)) { + altitude = baro.BaroAlt / 100; + } + + const uint16_t hottGpsAltitude = (altitude) + HOTT_GPS_ALTITUDE_OFFSET; // GPS_altitude in m ; offset = 500 -> O m hottGPSMessage->altitude_L = hottGpsAltitude & 0x00FF; hottGPSMessage->altitude_H = hottGpsAltitude >> 8; diff --git a/src/test/unit/telemetry_hott_unittest.cc b/src/test/unit/telemetry_hott_unittest.cc index 68505e9722..d2ca60521d 100644 --- a/src/test/unit/telemetry_hott_unittest.cc +++ b/src/test/unit/telemetry_hott_unittest.cc @@ -33,6 +33,7 @@ extern "C" { #include "sensors/sensors.h" #include "sensors/battery.h" + #include "sensors/barometer.h" #include "io/serial.h" #include "io/gps.h" @@ -172,6 +173,9 @@ int32_t mAhDrawn; uint32_t fixedMillis = 0; +baro_t baro; +uint16_t vario; + uint32_t millis(void) { return fixedMillis; } From ccb155fc8e26ccceac4398d32cb357944f429d93 Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Thu, 8 Dec 2016 16:37:57 +1300 Subject: [PATCH 2/2] Reverted change to speed reporting. --- src/main/telemetry/hott.c | 10 ++-------- src/test/unit/telemetry_hott_unittest.cc | 1 - 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/main/telemetry/hott.c b/src/main/telemetry/hott.c index 2401276994..4e600b3676 100644 --- a/src/main/telemetry/hott.c +++ b/src/main/telemetry/hott.c @@ -78,7 +78,6 @@ #include "flight/pid.h" #include "flight/navigation.h" -#include "flight/altitudehold.h" #include "io/gps.h" #include "telemetry/telemetry.h" @@ -196,13 +195,8 @@ void hottPrepareGPSResponse(HOTT_GPS_MSG_t *hottGPSMessage) addGPSCoordinates(hottGPSMessage, GPS_coord[LAT], GPS_coord[LON]); - uint16_t speed = GPS_speed; - if (!STATE(GPS_FIX)) { - speed = vario; - } - - // Speed is returned in cm/s and must be sent in km/h (Hott requirement) - speed = (speed * 36) / 1000; + // GPS Speed is returned in cm/s (from io/gps.c) and must be sent in km/h (Hott requirement) + const uint16_t speed = (GPS_speed * 36) / 1000; hottGPSMessage->gps_speed_L = speed & 0x00FF; hottGPSMessage->gps_speed_H = speed >> 8; diff --git a/src/test/unit/telemetry_hott_unittest.cc b/src/test/unit/telemetry_hott_unittest.cc index d2ca60521d..62d4be0b10 100644 --- a/src/test/unit/telemetry_hott_unittest.cc +++ b/src/test/unit/telemetry_hott_unittest.cc @@ -174,7 +174,6 @@ int32_t mAhDrawn; uint32_t fixedMillis = 0; baro_t baro; -uint16_t vario; uint32_t millis(void) { return fixedMillis;