X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosTelemetry.java;h=f830bf3582a0a452f24facbda8671e45019d642b;hb=c296acd643698d0128e2f58f91a9cfeea63f580a;hp=4d50a05933100b0a7552eb89dca2a0d4fbc0d3e4;hpb=c8078d352a7f54a4a97d25af080155d3f875536a;p=fw%2Faltos diff --git a/altoslib/AltosTelemetry.java b/altoslib/AltosTelemetry.java index 4d50a059..f830bf35 100644 --- a/altoslib/AltosTelemetry.java +++ b/altoslib/AltosTelemetry.java @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_5; +package org.altusmetrum.altoslib_11; import java.text.*; @@ -44,7 +45,7 @@ public abstract class AltosTelemetry implements AltosStateUpdate { public void update_state(AltosState state) { state.set_serial(serial); - if (state.state == AltosLib.ao_flight_invalid) + if (state.state() == AltosLib.ao_flight_invalid) state.set_state(AltosLib.ao_flight_startup); state.set_tick(tick); state.set_rssi(rssi, status); @@ -66,7 +67,8 @@ public abstract class AltosTelemetry implements AltosStateUpdate { final static int packet_type_mega_data = 0x09; final static int packet_type_metrum_sensor = 0x0a; final static int packet_type_metrum_data = 0x0b; - final static int packet_type_mini = 0x10; + final static int packet_type_mini2 = 0x10; + final static int packet_type_mini3 = 0x11; static AltosTelemetry parse_hex(String hex) throws ParseException, AltosCRCException { AltosTelemetry telem = null; @@ -114,6 +116,29 @@ 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; + + 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; + } + return height; + } + public static AltosTelemetry parse(String line) throws ParseException, AltosCRCException { String[] word = line.split("\\s+"); int i =0;