summaryrefslogtreecommitdiff
path: root/altoslib/AltosTelemetry.java
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2014-08-14 17:08:36 -0600
committerBdale Garbee <bdale@gag.com>2014-08-14 17:08:36 -0600
commit4828be0ca5252ac9cd6061209385dcd6c4c57965 (patch)
treedde4f86d893d280fbeef284120d6f967cdbfeaa5 /altoslib/AltosTelemetry.java
parent17e894d1b65231d07df009bc4e8ca92864ccf790 (diff)
parent165b7dcf6fba90b15ff32b891cba4b9111c1965b (diff)
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Diffstat (limited to 'altoslib/AltosTelemetry.java')
-rw-r--r--altoslib/AltosTelemetry.java29
1 files changed, 29 insertions, 0 deletions
diff --git a/altoslib/AltosTelemetry.java b/altoslib/AltosTelemetry.java
index 4d50a059..2f15cd89 100644
--- a/altoslib/AltosTelemetry.java
+++ b/altoslib/AltosTelemetry.java
@@ -114,6 +114,35 @@ public abstract class AltosTelemetry implements AltosStateUpdate {
return telem;
}
+ public static int extend_height(AltosState state, int height_16) {
+ double compare_height;
+ int height = height_16;
+
+ System.out.printf("state kalman height %g altitude %g ground_altitude %g gps_height %g\n",
+ state.kalman_height.value(), state.altitude(), state.ground_altitude(), state.gps_height());
+ if (state.gps != null && state.gps.alt != AltosLib.MISSING) {
+ compare_height = state.gps_height();
+ } else {
+ compare_height = state.height();
+ }
+
+ if (compare_height != AltosLib.MISSING) {
+ int high_bits = (int) Math.floor (compare_height / 65536.0);
+
+ height = (high_bits << 16) | (height_16 & 0xffff);
+
+ if (Math.abs(height + 65536 - compare_height) < Math.abs(height - compare_height))
+ height += 65536;
+ else if (Math.abs(height - 65536 - compare_height) < Math.abs(height - compare_height))
+ height -= 65536;
+ if (height != height_16) {
+ System.out.printf("Height adjusted from %d to %d with %g\n",
+ height_16, height, compare_height);
+ }
+ }
+ return height;
+ }
+
public static AltosTelemetry parse(String line) throws ParseException, AltosCRCException {
String[] word = line.split("\\s+");
int i =0;