X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosTelemetry.java;h=f17e11717c391410fd222148b4e6733165c45ed0;hb=4151c30e1294c0dda3aa02e7ac23b9616f25a4d0;hp=5600e7beb3f19b31620d8217d9e239d8d0eda054;hpb=7600116a191b3ac252a0f716d200d0e0b3500987;p=fw%2Faltos diff --git a/altoslib/AltosTelemetry.java b/altoslib/AltosTelemetry.java index 5600e7be..f17e1171 100644 --- a/altoslib/AltosTelemetry.java +++ b/altoslib/AltosTelemetry.java @@ -16,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_11; +package org.altusmetrum.altoslib_12; import java.text.*; @@ -24,7 +24,7 @@ import java.text.*; * Telemetry data contents */ -public abstract class AltosTelemetry implements AltosStateUpdate { +public abstract class AltosTelemetry implements AltosDataProvider { int[] bytes; /* All telemetry packets have these fields */ @@ -38,6 +38,9 @@ public abstract class AltosTelemetry implements AltosStateUpdate { /* Mark when we received the packet */ long received_time; + /* Mark frequency packet was received on */ + public double frequency = AltosLib.MISSING; + static boolean cksum(int[] bytes) { int sum = 0x5a; for (int i = 1; i < bytes.length - 1; i++) @@ -46,13 +49,15 @@ public abstract class AltosTelemetry implements AltosStateUpdate { return sum == bytes[bytes.length - 1]; } - public void update_state(AltosState state) { - state.set_serial(serial()); - if (state.state() == AltosLib.ao_flight_invalid) - state.set_state(AltosLib.ao_flight_startup); - state.set_tick(tick()); - state.set_rssi(rssi(), status()); - state.set_received_time(received_time); + public void provide_data(AltosDataListener listener) { + listener.set_serial(serial()); + if (listener.state == AltosLib.ao_flight_invalid) + listener.set_state(AltosLib.ao_flight_startup); + if (frequency != AltosLib.MISSING) + listener.set_frequency(frequency); + listener.set_tick(tick()); + listener.set_rssi(rssi(), status()); + listener.set_received_time(received_time); } final static int PKT_APPEND_STATUS_1_CRC_OK = (1 << 7); @@ -108,27 +113,8 @@ 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 void set_frequency(double frequency) { + this.frequency = frequency; } public AltosTelemetry() {