From bbfebc5de9e7789618000723fe94a3cc9cf1e7fe Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Wed, 28 May 2014 21:32:13 +0100 Subject: [PATCH] Updating HoTT GPS Altitude code to match spec. Unit test added. --- src/telemetry_hott.c | 6 ++++-- src/telemetry_hott.h | 5 +++++ test/telemetry_hott_unittest.cc | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/telemetry_hott.c b/src/telemetry_hott.c index 3f9b3c2ae0..7603c44785 100644 --- a/src/telemetry_hott.c +++ b/src/telemetry_hott.c @@ -171,8 +171,10 @@ void hottPrepareGPSResponse(HOTT_GPS_MSG_t *hottGPSMessage) hottGPSMessage->home_distance_L = GPS_distanceToHome & 0x00FF; hottGPSMessage->home_distance_H = GPS_distanceToHome >> 8; - hottGPSMessage->altitude_L = GPS_altitude & 0x00FF; - hottGPSMessage->altitude_H = GPS_altitude >> 8; + uint16_t hottGpsAltitude = (GPS_altitude / 10) + HOTT_GPS_ALTITUDE_OFFSET; // 1 / 0.1f == 10, GPS_altitude of 1 == 0.1m + + hottGPSMessage->altitude_L = hottGpsAltitude & 0x00FF; + hottGPSMessage->altitude_H = hottGpsAltitude >> 8; hottGPSMessage->home_direction = GPS_directionToHome; } diff --git a/src/telemetry_hott.h b/src/telemetry_hott.h index 496b158f7d..169c6a912e 100644 --- a/src/telemetry_hott.h +++ b/src/telemetry_hott.h @@ -27,6 +27,8 @@ #define HOTT_EAM_OFFSET_M3S 120 #define HOTT_EAM_OFFSET_TEMPERATURE 20 +#define HOTT_GPS_ALTITUDE_OFFSET 500 + typedef enum { HOTT_EAM_ALARM1_FLAG_NONE = 0, HOTT_EAM_ALARM1_FLAG_MAH = (1 << 0), @@ -476,4 +478,7 @@ void configureHoTTTelemetryPort(void); void freeHoTTTelemetryPort(void); uint32_t getHoTTTelemetryProviderBaudRate(void); + +void hottPrepareGPSResponse(HOTT_GPS_MSG_t *hottGPSMessage); + #endif /* TELEMETRY_HOTT_H_ */ diff --git a/test/telemetry_hott_unittest.cc b/test/telemetry_hott_unittest.cc index 7942f2ace0..875c382baa 100644 --- a/test/telemetry_hott_unittest.cc +++ b/test/telemetry_hott_unittest.cc @@ -109,6 +109,22 @@ TEST(TelemetryHottTest, UpdateGPSCoordinates3) EXPECT_EQ((int16_t)(hottGPSMessage->pos_EW_sec_H << 8 | hottGPSMessage->pos_EW_sec_L), 9999); } +TEST(TelemetryHottTest, PrepareGPSMessage_Altitude1m) +{ + // given + HOTT_GPS_MSG_t *hottGPSMessage = getGPSMessageForTest(); + + f.GPS_FIX = 1; + uint16_t altitudeInMeters = 1; + GPS_altitude = altitudeInMeters * (1 / 0.1f); // 1 = 0.1m + + // when + hottPrepareGPSResponse(hottGPSMessage); + + // then + EXPECT_EQ((int16_t)(hottGPSMessage->altitude_H << 8 | hottGPSMessage->altitude_L), 1 + HOTT_GPS_ALTITUDE_OFFSET); +} + // STUBS @@ -166,6 +182,8 @@ serialPort_t *openSerialPort(serialPortFunction_e functionMask, serialReceiveCal UNUSED(callback); UNUSED(mode); UNUSED(inversion); + + return NULL; } serialPort_t *findOpenSerialPort(uint16_t functionMask) {