X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=micropeak%2FMicroData.java;h=c38ada9151868a8e69e704cec6d6f42f01dabe1f;hp=4c0ed4c3312bf1de84e5a6947f5d1e1865e9837b;hb=0b70ea04e807c69a987d5976ab217f9f65fb1e09;hpb=bf88c5f829ea5d32043431945e862a9f6c96740a diff --git a/micropeak/MicroData.java b/micropeak/MicroData.java index 4c0ed4c3..c38ada91 100644 --- a/micropeak/MicroData.java +++ b/micropeak/MicroData.java @@ -20,8 +20,8 @@ package org.altusmetrum.micropeak; import java.lang.*; import java.io.*; import java.util.*; -import org.altusmetrum.altoslib_1.*; -import org.altusmetrum.altosuilib_1.*; +import org.altusmetrum.altoslib_5.*; +import org.altusmetrum.altosuilib_3.*; class MicroIterator implements Iterator { int i; @@ -97,16 +97,22 @@ public class MicroData implements AltosUIDataSet { private double time_step; private double ground_altitude; private ArrayList bytes; + public int log_id; String name; MicroStats stats; - - class FileEndedException extends Exception { + + public static final int LOG_ID_MICROPEAK = 0; + public static final int LOG_ID_MICROKITE = 1; + + public static final double CLOCK = 0.096; + + public class FileEndedException extends Exception { } - class NonHexcharException extends Exception { + public class NonHexcharException extends Exception { } - class InvalidCrcException extends Exception { + public class InvalidCrcException extends Exception { } private int getc(InputStream f) throws IOException, FileEndedException { @@ -167,16 +173,12 @@ public class MicroData implements AltosUIDataSet { return h; } - private boolean find_header(InputStream f) throws IOException { - try { - for (;;) { - if (get_nonwhite(f) == 'M' && get_nonwhite(f) == 'P') - return true; - } - } catch (FileEndedException fe) { - return false; + private boolean find_header(InputStream f) throws IOException, FileEndedException { + for (;;) { + if (get_nonwhite(f) == 'M' && get_nonwhite(f) == 'P') + return true; } - } + } private int get_32(InputStream f) throws IOException, FileEndedException, NonHexcharException { int v = 0; @@ -339,7 +341,7 @@ public class MicroData implements AltosUIDataSet { this.name = name; } - public MicroData (InputStream f, String name) throws IOException, InterruptedException { + public MicroData (InputStream f, String name) throws IOException, InterruptedException, NonHexcharException, FileEndedException { this.name = name; bytes = new ArrayList(); if (!find_header(f)) @@ -349,6 +351,9 @@ public class MicroData implements AltosUIDataSet { ground_pressure = get_32(f); min_pressure = get_32(f); int nsamples = get_16(f); + + log_id = nsamples >> 12; + nsamples &= 0xfff; pressures = new int[nsamples + 1]; ground_altitude = AltosConvert.pressure_to_altitude(ground_pressure); @@ -371,7 +376,7 @@ public class MicroData implements AltosUIDataSet { else cur = down; } - + pressures[i+1] = cur; } @@ -380,12 +385,17 @@ public class MicroData implements AltosUIDataSet { crc_valid = crc == current_crc; - time_step = 0.192; + switch (log_id) { + case LOG_ID_MICROPEAK: + time_step = 2 * CLOCK; + break; + case LOG_ID_MICROKITE: + time_step = 200 * CLOCK; + break; + } stats = new MicroStats(this); } catch (FileEndedException fe) { throw new IOException("File Ended Unexpectedly"); - } catch (NonHexcharException ne) { - throw new IOException("Non hexadecimal character found"); } } @@ -395,5 +405,5 @@ public class MicroData implements AltosUIDataSet { pressures = new int[1]; pressures[0] = 101000; } - + }