From 8ec3f8817a2df2e99e499aaf01d4180513ce82c6 Mon Sep 17 00:00:00 2001 From: Mikael Nousiainen Date: Sat, 26 Feb 2022 19:23:45 +0200 Subject: [PATCH] Fix incorrect cast for atmospheric pressure. Fix Horus not supporting negative altitudes. Attempt to filter out invalid GPS data by improving fix detection. --- src/codecs/horus/horus_packet_v1.c | 2 +- src/codecs/horus/horus_packet_v2.c | 4 ++-- src/telemetry.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/codecs/horus/horus_packet_v1.c b/src/codecs/horus/horus_packet_v1.c index a3019d0..20c4098 100644 --- a/src/codecs/horus/horus_packet_v1.c +++ b/src/codecs/horus/horus_packet_v1.c @@ -29,7 +29,7 @@ size_t horus_packet_v1_create(uint8_t *payload, size_t length, telemetry_data *d horus_packet.Seconds = gps_data->seconds; horus_packet.Latitude = float_lat; horus_packet.Longitude = float_lon; - horus_packet.Altitude = (uint16_t)(gps_data->altitude_mm / 1000); + horus_packet.Altitude = (uint16_t)((gps_data->altitude_mm > 0 ? gps_data->altitude_mm : 0) / 1000); horus_packet.Speed = (uint8_t)((float) gps_data->ground_speed_cm_per_second * 0.036); // Temporary pDOP info, to determine suitable pDOP limits. diff --git a/src/codecs/horus/horus_packet_v2.c b/src/codecs/horus/horus_packet_v2.c index 3edce08..cf1b5fa 100644 --- a/src/codecs/horus/horus_packet_v2.c +++ b/src/codecs/horus/horus_packet_v2.c @@ -29,7 +29,7 @@ size_t horus_packet_v2_create(uint8_t *payload, size_t length, telemetry_data *d horus_packet.Seconds = gps_data->seconds; horus_packet.Latitude = float_lat; horus_packet.Longitude = float_lon; - horus_packet.Altitude = (uint16_t)(gps_data->altitude_mm / 1000); + horus_packet.Altitude = (uint16_t)((gps_data->altitude_mm > 0 ? gps_data->altitude_mm : 0) / 1000); horus_packet.Speed = (uint8_t)((float) gps_data->ground_speed_cm_per_second * 0.036); horus_packet.BattVoltage = volts_scaled; @@ -62,7 +62,7 @@ size_t horus_packet_v2_create(uint8_t *payload, size_t length, telemetry_data *d custom_data_pointer += sizeof(ext_humidity_percentage); // Unit: mbar * 10 - uint16_t ext_pressure_mbar = (uint8_t) (data->pressure_mbar_100 / 10.0f); + uint16_t ext_pressure_mbar = (uint16_t) (data->pressure_mbar_100 / 10.0f); memcpy(custom_data_pointer, &ext_pressure_mbar, sizeof(ext_pressure_mbar)); // custom_data_pointer += sizeof(ext_pressure_mbar); diff --git a/src/telemetry.c b/src/telemetry.c index 6d83ade..e36f4a8 100644 --- a/src/telemetry.c +++ b/src/telemetry.c @@ -20,7 +20,7 @@ void telemetry_collect(telemetry_data *data) // Zero out position data if we don't have a valid GPS fix. // This is done to avoid transmitting invalid position information. - if (!(data->gps.fix_ok) || data->gps.fix == 0) { + if (!data->gps.fix_ok) { data->gps.latitude_degrees_1000000 = 0; data->gps.longitude_degrees_1000000 = 0; data->gps.altitude_mm = 0;