From: Keith Packard Date: Tue, 9 May 2017 09:31:04 +0000 (-0700) Subject: altoslib: Remove older eeprom handling code X-Git-Tag: 1.8~127 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=0641326842bffbf4b3ae69459ca540131cb64e59 altoslib: Remove older eeprom handling code The new code appears to work in minor testing; time to try it all the time. Signed-off-by: Keith Packard --- diff --git a/altoslib/AltosEepromFile.java b/altoslib/AltosEepromFile.java index bb8abf87..4606e780 100644 --- a/altoslib/AltosEepromFile.java +++ b/altoslib/AltosEepromFile.java @@ -22,130 +22,26 @@ import java.io.*; import java.util.*; import java.text.*; -class AltosEepromIterator implements Iterator { - AltosState state; - Iterator body; - AltosEeprom next; - boolean seen; - - public boolean hasNext() { - return !seen || body.hasNext(); - } - - public AltosState next() { - if (seen) { - AltosState n = state.clone(); - AltosEeprom e = body.next(); - - e.update_state(n); - state = n; - } - seen = true; - return state; - } - - public void remove () { - } - - public AltosEepromIterator(AltosState start, Iterator body) { - this.state = start; - this.body = body; - this.seen = false; - } -} - public class AltosEepromFile extends AltosStateIterable { - AltosEepromIterable headers; - AltosEepromIterable body; AltosEepromRecordSet set; - AltosState start; + + public AltosConfigData config_data() { + return set.eeprom.config_data(); + } public void write_comments(PrintStream out) { - headers.write(out); } public void write(PrintStream out) { - headers.write(out); - body.write(out); + out.printf("%s\n", set.eeprom.toString()); } public AltosEepromFile(Reader input) throws IOException { set = new AltosEepromRecordSet(input); - - } - - public AltosEepromFile(FileInputStream input) { - headers = new AltosEepromIterable(AltosEepromHeader.read(input)); - - start = headers.state(); - if (start.state() != AltosLib.ao_flight_stateless) - start.set_state(AltosLib.ao_flight_pad); - - if (start.log_format == AltosLib.MISSING) { - if (start.product != null) { - if (start.product.startsWith("TeleMetrum")) - start.log_format = AltosLib.AO_LOG_FORMAT_FULL; - else if (start.product.startsWith("TeleMini")) - start.log_format = AltosLib.AO_LOG_FORMAT_TINY; - } - } - - switch (start.log_format) { - case AltosLib.AO_LOG_FORMAT_FULL: - body = new AltosEepromIterable(AltosEepromTM.read(input)); - break; - case AltosLib.AO_LOG_FORMAT_TINY: - body = new AltosEepromIterable(AltosEepromTMini.read(input)); - break; - case AltosLib.AO_LOG_FORMAT_TELEMETRY: - case AltosLib.AO_LOG_FORMAT_TELESCIENCE: - case AltosLib.AO_LOG_FORMAT_TELEMEGA: - case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: - body = new AltosEepromIterable(AltosEepromMega.read(input, start.log_format)); - break; - case AltosLib.AO_LOG_FORMAT_TELEMETRUM: - body = new AltosEepromIterable(AltosEepromMetrum2.read(input)); - break; - case AltosLib.AO_LOG_FORMAT_TELEMINI2: - case AltosLib.AO_LOG_FORMAT_TELEMINI3: - case AltosLib.AO_LOG_FORMAT_EASYMINI: - body = new AltosEepromIterable(AltosEepromMini.read(input)); - break; - case AltosLib.AO_LOG_FORMAT_TELEGPS: - body = new AltosEepromIterable(AltosEepromGPS.read(input)); - break; - case AltosLib.AO_LOG_FORMAT_TELEFIRETWO: - body = new AltosEepromIterable(AltosEepromFireTwo.read(input)); - break; - default: - body = new AltosEepromIterable(new LinkedList()); - break; - } - - /* Find boost tick */ - AltosState state = start.clone(); - for (AltosEeprom eeprom : body) { - eeprom.update_state(state); - state.finish_update(); - if (state.state() >= AltosLib.ao_flight_boost) { - start.set_boost_tick(state.tick); - break; - } - } } public Iterator iterator() { - if (set != null) - return set.iterator(); - - AltosState state = start.clone(); - Iterator i = body.iterator(); - - while (i.hasNext() && !state.valid()) { - i.next().update_state(state); - state.finish_update(); - } - return new AltosEepromIterator(state, i); + return set.iterator(); } } diff --git a/altoslib/AltosEepromFireTwo.java b/altoslib/AltosEepromFireTwo.java deleted file mode 100644 index 16019c8c..00000000 --- a/altoslib/AltosEepromFireTwo.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright © 2017 Keith Packard - * - * 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; 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; -import java.util.*; -import java.text.*; - -public class AltosEepromFireTwo extends AltosEeprom { - public static final int record_length = 32; - - public int record_length() { return record_length; } - - /* AO_LOG_FLIGHT elements */ - public int flight() { return data16(0); } - public int idle_pres() { return data16(2); } - public int idle_thrust() { return data16(4); } - - /* AO_LOG_STATE elements */ - public int state() { return data16(0); } - public int reason() { return data16(2); } - - /* AO_LOG_SENSOR elements */ - public int pres() { return data16(0); } - public int thrust() { return data16(2); } - public int temp(int i) { return data16(4+i*2); } - - public AltosEepromFireTwo (AltosEepromChunk chunk, int start) throws ParseException { - parse_chunk(chunk, start); - } - - private static final double r_above = 5600.0; - private static final double r_below = 10000.0; - private static final double v_adc = 3.3; - - private static double firetwo_adc(int raw) { - return raw / 4095.0; - } - - public static double adc_to_pa(int adc) { - - /* raw adc to processor voltage, then back through the - * voltage divider to the sensor voltage - */ - - double v = firetwo_adc(adc) * v_adc * (r_above + r_below) / r_below; - - /* Bound to ranges provided in sensor */ - if (v < 0.5) v = 0.5; - if (v > 4.5) v = 4.5; - - double psi = (v - 0.5) / 4.0 * 1600.0; - return AltosConvert.psi_to_pa(psi); - } - - public static double adc_to_n(int adc) { - double v = firetwo_adc(adc); - - /* this is a total guess */ - return AltosConvert.lb_to_n(v * 298 * 9.807); - } - - public void update_state(AltosState state) { - super.update_state(state); - - switch (cmd) { - case AltosLib.AO_LOG_FLIGHT: - state.set_flight(flight()); - state.set_ground_pressure(adc_to_pa(idle_pres())); - state.set_accel_g(0, -1); - break; - case AltosLib.AO_LOG_STATE: - state.set_state(state()); - break; - case AltosLib.AO_LOG_SENSOR: - state.set_pressure(adc_to_pa(pres())); - state.set_accel(firetwo_adc(thrust()) * 100); - break; - } - } - - public AltosEepromFireTwo (String line) { - parse_string(line); - } - - static public LinkedList read(FileInputStream input) { - LinkedList firetwos = new LinkedList(); - - for (;;) { - try { - String line = AltosLib.gets(input); - if (line == null) - break; - try { - AltosEepromFireTwo firetwo = new AltosEepromFireTwo(line); - - if (firetwo.cmd != AltosLib.AO_LOG_INVALID) - firetwos.add(firetwo); - } catch (Exception e) { - System.out.printf ("exception\n"); - } - } catch (IOException ie) { - break; - } - } - - return firetwos; - } -} diff --git a/altoslib/AltosEepromGPS.java b/altoslib/AltosEepromGPS.java deleted file mode 100644 index e76b36dd..00000000 --- a/altoslib/AltosEepromGPS.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright © 2014 Keith Packard - * - * 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; 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; -import java.util.*; -import java.text.*; - -public class AltosEepromGPS extends AltosEeprom { - public static final int record_length = 32; - - public static final int max_sat = 12; - - public int record_length() { return record_length; } - - /* AO_LOG_FLIGHT elements */ - public int flight() { return data16(0); } - public int start_altitude() { return data16(2); } - public int start_latitude() { return data32(4); } - public int start_longitude() { return data32(8); } - - /* AO_LOG_GPS_TIME elements */ - public int latitude() { return data32(0); } - public int longitude() { return data32(4); } - public int altitude_low() { return data16(8); } - public int hour() { return data8(10); } - public int minute() { return data8(11); } - public int second() { return data8(12); } - public int flags() { return data8(13); } - public int year() { return data8(14); } - public int month() { return data8(15); } - public int day() { return data8(16); } - public int course() { return data8(17); } - public int ground_speed() { return data16(18); } - public int climb_rate() { return data16(20); } - public int pdop() { return data8(22); } - public int hdop() { return data8(23); } - public int vdop() { return data8(24); } - public int mode() { return data8(25); } - public int altitude_high() { return data16(26); } - - public boolean has_seconds() { return cmd == AltosLib.AO_LOG_GPS_TIME; } - - public int seconds() { - switch (cmd) { - case AltosLib.AO_LOG_GPS_TIME: - return second() + 60 * (minute() + 60 * (hour() + 24 * (day() + 31 * month()))); - default: - return 0; - } - } - - public AltosEepromGPS (AltosEepromChunk chunk, int start) throws ParseException { - parse_chunk(chunk, start); - } - - public void update_state(AltosState state) { - super.update_state(state); - - AltosGPS gps; - - /* Flush any pending GPS changes */ - if (state.gps_pending) { - switch (cmd) { - case AltosLib.AO_LOG_GPS_LAT: - case AltosLib.AO_LOG_GPS_LON: - case AltosLib.AO_LOG_GPS_ALT: - case AltosLib.AO_LOG_GPS_SAT: - case AltosLib.AO_LOG_GPS_DATE: - break; - default: - state.set_temp_gps(); - break; - } - } - - switch (cmd) { - case AltosLib.AO_LOG_FLIGHT: - if (state.flight == AltosLib.MISSING) { - state.set_boost_tick(tick); - state.set_flight(flight()); - } - /* no place to log start lat/lon yet */ - break; - case AltosLib.AO_LOG_GPS_TIME: - state.set_tick(tick); - gps = state.make_temp_gps(false); - gps.lat = latitude() / 1e7; - gps.lon = longitude() / 1e7; - if (state.altitude_32()) - gps.alt = (altitude_low() & 0xffff) | (altitude_high() << 16); - else - gps.alt = altitude_low(); - - gps.hour = hour(); - gps.minute = minute(); - gps.second = second(); - - int flags = flags(); - - gps.connected = (flags & AltosLib.AO_GPS_RUNNING) != 0; - gps.locked = (flags & AltosLib.AO_GPS_VALID) != 0; - gps.nsat = (flags & AltosLib.AO_GPS_NUM_SAT_MASK) >> - AltosLib.AO_GPS_NUM_SAT_SHIFT; - - gps.year = 2000 + year(); - gps.month = month(); - gps.day = day(); - gps.ground_speed = ground_speed() * 1.0e-2; - gps.course = course() * 2; - gps.climb_rate = climb_rate() * 1.0e-2; - if (state.compare_version("1.4.9") >= 0) { - gps.pdop = pdop() / 10.0; - gps.hdop = hdop() / 10.0; - gps.vdop = vdop() / 10.0; - } else { - gps.pdop = pdop() / 100.0; - if (gps.pdop < 0.8) - gps.pdop += 2.56; - gps.hdop = hdop() / 100.0; - if (gps.hdop < 0.8) - gps.hdop += 2.56; - gps.vdop = vdop() / 100.0; - if (gps.vdop < 0.8) - gps.vdop += 2.56; - } - break; - } - } - - public AltosEepromGPS (String line) { - parse_string(line); - } - - static public LinkedList read(FileInputStream input) { - LinkedList tgpss = new LinkedList(); - - for (;;) { - try { - String line = AltosLib.gets(input); - if (line == null) - break; - try { - AltosEepromGPS tgps = new AltosEepromGPS(line); - if (tgps.cmd != AltosLib.AO_LOG_INVALID) - tgpss.add(tgps); - } catch (Exception e) { - System.out.printf ("exception\n"); - } - } catch (IOException ie) { - break; - } - } - - return tgpss; - } -} diff --git a/altoslib/AltosEepromHeader.java b/altoslib/AltosEepromHeader.java deleted file mode 100644 index 37b666b4..00000000 --- a/altoslib/AltosEepromHeader.java +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright © 2013 Keith Packard - * - * 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; 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; -import java.util.*; -import java.text.*; - -public class AltosEepromHeader extends AltosEeprom { - - public int cmd; - public String data; - public int config_a, config_b, config_c; - public boolean last; - public boolean valid; - - public int record_length () { return 0; } - - /* XXX pull rest of config data to state */ - public void update_state(AltosState state) { - switch (cmd) { - case AltosLib.AO_LOG_CONFIG_VERSION: - break; - case AltosLib.AO_LOG_MAIN_DEPLOY: - break; - case AltosLib.AO_LOG_APOGEE_DELAY: - break; - case AltosLib.AO_LOG_RADIO_CHANNEL: - break; - case AltosLib.AO_LOG_CALLSIGN: - state.set_callsign(data); - break; - case AltosLib.AO_LOG_ACCEL_CAL: - state.set_accel_g(config_a, config_b); - break; - case AltosLib.AO_LOG_RADIO_CAL: - break; - case AltosLib.AO_LOG_MANUFACTURER: - break; - case AltosLib.AO_LOG_PRODUCT: - state.product = data; - break; - case AltosLib.AO_LOG_LOG_FORMAT: - state.set_log_format(config_a); - break; - case AltosLib.AO_LOG_SERIAL_NUMBER: - state.set_serial(config_a); - break; - case AltosLib.AO_LOG_BARO_RESERVED: - state.make_baro(); - state.baro.reserved = config_a; - break; - case AltosLib.AO_LOG_BARO_SENS: - state.make_baro(); - state.baro.sens = config_a; - break; - case AltosLib.AO_LOG_BARO_OFF: - state.make_baro(); - state.baro.off = config_a; - break; - case AltosLib.AO_LOG_BARO_TCS: - state.make_baro(); - state.baro.tcs = config_a; - break; - case AltosLib.AO_LOG_BARO_TCO: - state.make_baro(); - state.baro.tco = config_a; - break; - case AltosLib.AO_LOG_BARO_TREF: - state.make_baro(); - state.baro.tref = config_a; - break; - case AltosLib.AO_LOG_BARO_TEMPSENS: - state.make_baro(); - state.baro.tempsens = config_a; - break; - case AltosLib.AO_LOG_BARO_CRC: - state.make_baro(); - state.baro.crc = config_a; - break; - case AltosLib.AO_LOG_IMU_CAL: - state.set_accel_zero(config_a, config_b, config_c); - break; - case AltosLib.AO_LOG_SOFTWARE_VERSION: - state.set_firmware_version(data); - break; - case AltosLib.AO_LOG_FREQUENCY: - case AltosLib.AO_LOG_APOGEE_LOCKOUT: - case AltosLib.AO_LOG_RADIO_RATE: - case AltosLib.AO_LOG_IGNITE_MODE: - break; - case AltosLib.AO_LOG_PAD_ORIENTATION: - state.set_pad_orientation(config_a); - break; - case AltosLib.AO_LOG_RADIO_ENABLE: - case AltosLib.AO_LOG_AES_KEY: - case AltosLib.AO_LOG_APRS: - case AltosLib.AO_LOG_BEEP_SETTING: - case AltosLib.AO_LOG_TRACKER_SETTING: - case AltosLib.AO_LOG_PYRO_TIME: - case AltosLib.AO_LOG_APRS_ID: - break; - case AltosLib.AO_LOG_ALTITUDE_32: - state.set_altitude_32(config_a); - break; - } - } - - public void write(PrintStream out) { - switch (cmd) { - case AltosLib.AO_LOG_CONFIG_VERSION: - out.printf("# Config version: %s\n", data); - break; - case AltosLib.AO_LOG_MAIN_DEPLOY: - out.printf("# Main deploy: %s\n", config_a); - break; - case AltosLib.AO_LOG_APOGEE_DELAY: - out.printf("# Apogee delay: %s\n", config_a); - break; - case AltosLib.AO_LOG_RADIO_CHANNEL: - out.printf("# Radio channel: %s\n", config_a); - break; - case AltosLib.AO_LOG_CALLSIGN: - out.printf("# Callsign: %s\n", data); - break; - case AltosLib.AO_LOG_ACCEL_CAL: - out.printf ("# Accel cal: %d %d\n", config_a, config_b); - break; - case AltosLib.AO_LOG_RADIO_CAL: - out.printf ("# Radio cal: %d\n", config_a); - break; - case AltosLib.AO_LOG_MAX_FLIGHT_LOG: - out.printf ("# Max flight log: %d\n", config_a); - break; - case AltosLib.AO_LOG_MANUFACTURER: - out.printf ("# Manufacturer: %s\n", data); - break; - case AltosLib.AO_LOG_PRODUCT: - out.printf ("# Product: %s\n", data); - break; - case AltosLib.AO_LOG_SERIAL_NUMBER: - out.printf ("# Serial number: %d\n", config_a); - break; - case AltosLib.AO_LOG_SOFTWARE_VERSION: - out.printf ("# Software version: %s\n", data); - break; - case AltosLib.AO_LOG_BARO_RESERVED: - out.printf ("# Baro reserved: %d\n", config_a); - break; - case AltosLib.AO_LOG_BARO_SENS: - out.printf ("# Baro sens: %d\n", config_a); - break; - case AltosLib.AO_LOG_BARO_OFF: - out.printf ("# Baro off: %d\n", config_a); - break; - case AltosLib.AO_LOG_BARO_TCS: - out.printf ("# Baro tcs: %d\n", config_a); - break; - case AltosLib.AO_LOG_BARO_TCO: - out.printf ("# Baro tco: %d\n", config_a); - break; - case AltosLib.AO_LOG_BARO_TREF: - out.printf ("# Baro tref: %d\n", config_a); - break; - case AltosLib.AO_LOG_BARO_TEMPSENS: - out.printf ("# Baro tempsens: %d\n", config_a); - break; - case AltosLib.AO_LOG_BARO_CRC: - out.printf ("# Baro crc: %d\n", config_a); - break; - case AltosLib.AO_LOG_IMU_CAL: - out.printf ("# IMU cal: %d %d %d\n", config_a, config_b, config_c); - break; - case AltosLib.AO_LOG_FREQUENCY: - case AltosLib.AO_LOG_APOGEE_LOCKOUT: - case AltosLib.AO_LOG_RADIO_RATE: - case AltosLib.AO_LOG_IGNITE_MODE: - break; - case AltosLib.AO_LOG_PAD_ORIENTATION: - out.printf("# Pad orientation: %d\n", config_a); - break; - case AltosLib.AO_LOG_RADIO_ENABLE: - case AltosLib.AO_LOG_AES_KEY: - case AltosLib.AO_LOG_APRS: - case AltosLib.AO_LOG_BEEP_SETTING: - case AltosLib.AO_LOG_TRACKER_SETTING: - case AltosLib.AO_LOG_PYRO_TIME: - case AltosLib.AO_LOG_APRS_ID: - break; - case AltosLib.AO_LOG_ALTITUDE_32: - out.printf("# Altitude-32: %d\n", config_a); - break; - } - } - - public AltosEepromHeader (String[] tokens) { - last = false; - valid = true; - try { - if (tokens[0].equals("Config") && tokens[1].equals("version:")) { - cmd = AltosLib.AO_LOG_CONFIG_VERSION; - data = tokens[2]; - } else if (tokens[0].equals("Main") && tokens[1].equals("deploy:")) { - cmd = AltosLib.AO_LOG_MAIN_DEPLOY; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[0].equals("Apogee") && tokens[1].equals("delay:")) { - cmd = AltosLib.AO_LOG_APOGEE_DELAY; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[0].equals("Radio") && tokens[1].equals("channel:")) { - cmd = AltosLib.AO_LOG_RADIO_CHANNEL; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[0].equals("Callsign:")) { - cmd = AltosLib.AO_LOG_CALLSIGN; - data = tokens[1].replaceAll("\"",""); - } else if (tokens[0].equals("Accel") && tokens[1].equals("cal")) { - cmd = AltosLib.AO_LOG_ACCEL_CAL; - config_a = Integer.parseInt(tokens[3]); - config_b = Integer.parseInt(tokens[5]); - } else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) { - cmd = AltosLib.AO_LOG_RADIO_CAL; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) { - cmd = AltosLib.AO_LOG_MAX_FLIGHT_LOG; - config_a = Integer.parseInt(tokens[3]); - } else if (tokens[0].equals("manufacturer")) { - cmd = AltosLib.AO_LOG_MANUFACTURER; - data = tokens[1]; - } else if (tokens[0].equals("product")) { - cmd = AltosLib.AO_LOG_PRODUCT; - data = tokens[1]; - } else if (tokens[0].equals("serial-number")) { - cmd = AltosLib.AO_LOG_SERIAL_NUMBER; - config_a = Integer.parseInt(tokens[1]); - } else if (tokens[0].equals("log-format")) { - cmd = AltosLib.AO_LOG_LOG_FORMAT; - config_a = Integer.parseInt(tokens[1]); - } else if (tokens[0].equals("altitude-32")) { - cmd = AltosLib.AO_LOG_ALTITUDE_32; - config_a = Integer.parseInt(tokens[1]); - } else if (tokens[0].equals("software-version")) { - cmd = AltosLib.AO_LOG_SOFTWARE_VERSION; - data = tokens[1]; - last = true; - } else if (tokens[0].equals("ms5607")) { - if (tokens[1].equals("reserved:")) { - cmd = AltosLib.AO_LOG_BARO_RESERVED; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[1].equals("sens:")) { - cmd = AltosLib.AO_LOG_BARO_SENS; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[1].equals("off:")) { - cmd = AltosLib.AO_LOG_BARO_OFF; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[1].equals("tcs:")) { - cmd = AltosLib.AO_LOG_BARO_TCS; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[1].equals("tco:")) { - cmd = AltosLib.AO_LOG_BARO_TCO; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[1].equals("tref:")) { - cmd = AltosLib.AO_LOG_BARO_TREF; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[1].equals("tempsens:")) { - cmd = AltosLib.AO_LOG_BARO_TEMPSENS; - config_a = Integer.parseInt(tokens[2]); - } else if (tokens[1].equals("crc:")) { - cmd = AltosLib.AO_LOG_BARO_CRC; - config_a = Integer.parseInt(tokens[2]); - } else { - cmd = AltosLib.AO_LOG_INVALID; - data = tokens[2]; - } - } else if (tokens[0].equals("IMU") && tokens[1].equals("cal")) { - cmd = AltosLib.AO_LOG_IMU_CAL; - config_a = Integer.parseInt(tokens[3]); - config_b = Integer.parseInt(tokens[5]); - config_c = Integer.parseInt(tokens[7]); - } else if (tokens[0].equals("Pad") && tokens[1].equals("orientation:")) { - cmd = AltosLib.AO_LOG_PAD_ORIENTATION; - config_a = Integer.parseInt(tokens[2]); - } else - valid = false; - } catch (Exception e) { - valid = false; - } - } - - static public LinkedList read(FileInputStream input) { - LinkedList headers = new LinkedList(); - - for (;;) { - try { - String line = AltosLib.gets(input); - if (line == null) - break; - AltosEepromHeader header = new AltosEepromHeader(line); - headers.add(header); - if (header.last) - break; - } catch (IOException ie) { - break; - } - } - - return headers; - } - - static public void write (PrintStream out, LinkedList headers) { - out.printf("# Comments\n"); - for (AltosEepromHeader header : headers) { - header.write(out); - } - - } - - public AltosEepromHeader (String line) { - this(line.split("\\s+")); - } -} diff --git a/altoslib/AltosEepromLog.java b/altoslib/AltosEepromLog.java index 1bca6563..63e4a1f8 100644 --- a/altoslib/AltosEepromLog.java +++ b/altoslib/AltosEepromLog.java @@ -32,8 +32,6 @@ public class AltosEepromLog { public int start_block; public int end_block; - public int year, month, day; - public boolean selected; public AltosEepromLog(AltosConfigData config_data, @@ -43,7 +41,6 @@ public class AltosEepromLog { throws InterruptedException, TimeoutException { int block; - boolean has_date = false; flight = in_flight; if (flight != 0) @@ -56,43 +53,5 @@ public class AltosEepromLog { * Select all flights for download */ selected = true; - - /* - * Look in TeleMetrum log data for date - */ - if (config_data.log_format == AltosLib.AO_LOG_FORMAT_UNKNOWN || - config_data.log_format == AltosLib.AO_LOG_FORMAT_FULL) - { - /* - * Only look in the first two blocks so that this - * process doesn't take a long time - */ - if (in_end_block > in_start_block + 2) - in_end_block = in_start_block + 2; - - for (block = in_start_block; block < in_end_block; block++) { - AltosEepromChunk eechunk = new AltosEepromChunk(link, block, block == in_start_block); - - for (int i = 0; i < AltosEepromChunk.chunk_size; i += AltosEepromTM.record_length) { - try { - AltosEepromTM r = new AltosEepromTM(eechunk, i); - - if (r.cmd == AltosLib.AO_LOG_FLIGHT) { - flight = r.b; - has_flight = true; - } - if (r.cmd == AltosLib.AO_LOG_GPS_DATE) { - year = 2000 + (r.a & 0xff); - month = (r.a >> 8) & 0xff; - day = (r.b & 0xff); - has_date = true; - } - } catch (ParseException pe) { - } - } - if (has_date && has_flight) - break; - } - } } } diff --git a/altoslib/AltosEepromMega.java b/altoslib/AltosEepromMega.java deleted file mode 100644 index 082d6054..00000000 --- a/altoslib/AltosEepromMega.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright © 2011 Keith Packard - * - * 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; 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; -import java.util.*; -import java.text.*; - -public class AltosEepromMega extends AltosEeprom { - public static final int record_length = 32; - - public static final int max_sat = 12; - - private int log_format; - - public int record_length() { return record_length; } - - /* AO_LOG_FLIGHT elements */ - public int flight() { return data16(0); } - public int ground_accel() { return data16(2); } - public int ground_pres() { return data32(4); } - public int ground_accel_along() { return data16(8); } - public int ground_accel_across() { return data16(10); } - public int ground_accel_through() { return data16(12); } - public int ground_roll() { - switch (log_format) { - case AltosLib.AO_LOG_FORMAT_TELEMEGA: - return data32(16); - case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: - return data16(14); - default: - return AltosLib.MISSING; - } - } - public int ground_pitch() { - switch (log_format) { - case AltosLib.AO_LOG_FORMAT_TELEMEGA: - return data32(20); - case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: - return data16(16); - default: - return AltosLib.MISSING; - } - } - public int ground_yaw() { - switch (log_format) { - case AltosLib.AO_LOG_FORMAT_TELEMEGA: - return data32(24); - case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD: - return data16(18); - default: - return AltosLib.MISSING; - } - } - - /* AO_LOG_STATE elements */ - public int state() { return data16(0); } - public int reason() { return data16(2); } - - /* AO_LOG_SENSOR elements */ - public int pres() { return data32(0); } - public int temp() { return data32(4); } - public int accel_x() { return data16(8); } - public int accel_y() { return data16(10); } - public int accel_z() { return data16(12); } - public int gyro_x() { return data16(14); } - public int gyro_y() { return data16(16); } - public int gyro_z() { return data16(18); } - public int mag_x() { return data16(20); } - public int mag_y() { return data16(22); } - public int mag_z() { return data16(24); } - public int accel() { return data16(26); } - - /* AO_LOG_TEMP_VOLT elements */ - public int v_batt() { return data16(0); } - public int v_pbatt() { return data16(2); } - public int nsense() { return data16(4); } - public int sense(int i) { return data16(6 + i * 2); } - public int pyro() { return data16(26); } - - /* AO_LOG_GPS_TIME elements */ - public int latitude() { return data32(0); } - public int longitude() { return data32(4); } - public int altitude_low() { return data16(8); } - public int hour() { return data8(10); } - public int minute() { return data8(11); } - public int second() { return data8(12); } - public int flags() { return data8(13); } - public int year() { return data8(14); } - public int month() { return data8(15); } - public int day() { return data8(16); } - public int course() { return data8(17); } - public int ground_speed() { return data16(18); } - public int climb_rate() { return data16(20); } - public int pdop() { return data8(22); } - public int hdop() { return data8(23); } - public int vdop() { return data8(24); } - public int mode() { return data8(25); } - public int altitude_high() { return data16(26); } - - /* AO_LOG_GPS_SAT elements */ - public int nsat() { return data16(0); } - public int svid(int n) { return data8(2 + n * 2); } - public int c_n(int n) { return data8(2 + n * 2 + 1); } - - public AltosEepromMega (AltosEepromChunk chunk, int start, int log_format) throws ParseException { - this.log_format = log_format; - parse_chunk(chunk, start); - } - - public void update_state(AltosState state) { - super.update_state(state); - - AltosGPS gps; - - /* Flush any pending GPS changes */ - if (state.gps_pending) { - switch (cmd) { - case AltosLib.AO_LOG_GPS_LAT: - case AltosLib.AO_LOG_GPS_LON: - case AltosLib.AO_LOG_GPS_ALT: - case AltosLib.AO_LOG_GPS_SAT: - case AltosLib.AO_LOG_GPS_DATE: - break; - default: - state.set_temp_gps(); - break; - } - } - - switch (cmd) { - case AltosLib.AO_LOG_FLIGHT: - state.set_boost_tick(tick); - state.set_flight(flight()); - state.set_ground_accel(ground_accel()); - state.set_ground_pressure(ground_pres()); - state.set_accel_ground(ground_accel_along(), - ground_accel_across(), - ground_accel_through()); - state.set_gyro_zero(ground_roll() / 512.0, - ground_pitch() / 512.0, - ground_yaw() / 512.0); - break; - case AltosLib.AO_LOG_STATE: - state.set_tick(tick); - state.set_state(state()); - break; - case AltosLib.AO_LOG_SENSOR: - state.set_tick(tick); - state.set_ms5607(pres(), temp()); - - AltosIMU imu = new AltosIMU(accel_y(), /* along */ - accel_x(), /* across */ - accel_z(), /* through */ - gyro_y(), /* roll */ - gyro_x(), /* pitch */ - gyro_z()); /* yaw */ - - if (log_format == AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD) - state.check_imu_wrap(imu); - - state.set_imu(imu); - - state.set_mag(new AltosMag(mag_x(), - mag_y(), - mag_z())); - - state.set_accel(accel()); - - break; - case AltosLib.AO_LOG_TEMP_VOLT: - state.set_battery_voltage(AltosConvert.mega_battery_voltage(v_batt())); - state.set_pyro_voltage(AltosConvert.mega_pyro_voltage(v_pbatt())); - - int nsense = nsense(); - - state.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sense(nsense-2))); - state.set_main_voltage(AltosConvert.mega_pyro_voltage(sense(nsense-1))); - - double voltages[] = new double[nsense-2]; - for (int i = 0; i < nsense-2; i++) - voltages[i] = AltosConvert.mega_pyro_voltage(sense(i)); - - state.set_ignitor_voltage(voltages); - state.set_pyro_fired(pyro()); - break; - case AltosLib.AO_LOG_GPS_TIME: - state.set_tick(tick); - gps = state.make_temp_gps(false); - gps.lat = latitude() / 1e7; - gps.lon = longitude() / 1e7; - - if (state.altitude_32()) - gps.alt = (altitude_low() & 0xffff) | (altitude_high() << 16); - else - gps.alt = altitude_low(); - - gps.hour = hour(); - gps.minute = minute(); - gps.second = second(); - - int flags = flags(); - - gps.connected = (flags & AltosLib.AO_GPS_RUNNING) != 0; - gps.locked = (flags & AltosLib.AO_GPS_VALID) != 0; - gps.nsat = (flags & AltosLib.AO_GPS_NUM_SAT_MASK) >> - AltosLib.AO_GPS_NUM_SAT_SHIFT; - - gps.year = 2000 + year(); - gps.month = month(); - gps.day = day(); - gps.ground_speed = ground_speed() * 1.0e-2; - gps.course = course() * 2; - gps.climb_rate = climb_rate() * 1.0e-2; - if (state.compare_version("1.4.9") >= 0) { - gps.pdop = pdop() / 10.0; - gps.hdop = hdop() / 10.0; - gps.vdop = vdop() / 10.0; - } else { - gps.pdop = pdop() / 100.0; - if (gps.pdop < 0.8) - gps.pdop += 2.56; - gps.hdop = hdop() / 100.0; - if (gps.hdop < 0.8) - gps.hdop += 2.56; - gps.vdop = vdop() / 100.0; - if (gps.vdop < 0.8) - gps.vdop += 2.56; - } - break; - case AltosLib.AO_LOG_GPS_SAT: - state.set_tick(tick); - gps = state.make_temp_gps(true); - - int n = nsat(); - if (n > max_sat) - n = max_sat; - for (int i = 0; i < n; i++) - gps.add_sat(svid(i), c_n(i)); - break; - } - } - - public AltosEepromMega (String line, int log_format) { - this.log_format = log_format; - parse_string(line); - } - - static public LinkedList read(FileInputStream input, int log_format) { - LinkedList megas = new LinkedList(); - - for (;;) { - try { - String line = AltosLib.gets(input); - if (line == null) - break; - try { - AltosEepromMega mega = new AltosEepromMega(line, log_format); - if (mega.cmd != AltosLib.AO_LOG_INVALID) - megas.add(mega); - } catch (Exception e) { - System.out.printf ("exception\n"); - } - } catch (IOException ie) { - break; - } - } - - return megas; - } -} diff --git a/altoslib/AltosEepromMetrum2.java b/altoslib/AltosEepromMetrum2.java deleted file mode 100644 index f685b3ce..00000000 --- a/altoslib/AltosEepromMetrum2.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright © 2011 Keith Packard - * - * 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; 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; -import java.util.*; -import java.text.*; - -public class AltosEepromMetrum2 extends AltosEeprom { - public static final int record_length = 16; - - public int record_length() { return record_length; } - - /* AO_LOG_FLIGHT elements */ - public int flight() { return data16(0); } - public int ground_accel() { return data16(2); } - public int ground_pres() { return data32(4); } - public int ground_temp() { return data32(8); } - - /* AO_LOG_STATE elements */ - public int state() { return data16(0); } - public int reason() { return data16(2); } - - /* AO_LOG_SENSOR elements */ - public int pres() { return data32(0); } - public int temp() { return data32(4); } - public int accel() { return data16(8); } - - /* AO_LOG_TEMP_VOLT elements */ - public int v_batt() { return data16(0); } - public int sense_a() { return data16(2); } - public int sense_m() { return data16(4); } - - /* AO_LOG_GPS_POS elements */ - public int latitude() { return data32(0); } - public int longitude() { return data32(4); } - public int altitude_low() { return data16(8); } - public int altitude_high() { return data16(10); } - - /* AO_LOG_GPS_TIME elements */ - public int hour() { return data8(0); } - public int minute() { return data8(1); } - public int second() { return data8(2); } - public int flags() { return data8(3); } - public int year() { return data8(4); } - public int month() { return data8(5); } - public int day() { return data8(6); } - public int pdop() { return data8(7); } - - /* AO_LOG_GPS_SAT elements */ - public int nsat() { return data8(0); } - public int more() { return data8(1); } - public int svid(int n) { return data8(2 + n * 2); } - public int c_n(int n) { return data8(2 + n * 2 + 1); } - - public AltosEepromMetrum2 (AltosEepromChunk chunk, int start) throws ParseException { - parse_chunk(chunk, start); - } - - public void update_state(AltosState state) { - super.update_state(state); - - AltosGPS gps; - - /* Flush any pending GPS changes */ - if (state.gps_pending) { - switch (cmd) { - case AltosLib.AO_LOG_GPS_POS: - case AltosLib.AO_LOG_GPS_LAT: - case AltosLib.AO_LOG_GPS_LON: - case AltosLib.AO_LOG_GPS_ALT: - case AltosLib.AO_LOG_GPS_SAT: - case AltosLib.AO_LOG_GPS_DATE: - break; - default: - state.set_temp_gps(); - break; - } - } - - switch (cmd) { - case AltosLib.AO_LOG_FLIGHT: - state.set_flight(flight()); - state.set_ground_accel(ground_accel()); - state.set_ground_pressure(ground_pres()); -// state.set_temperature(ground_temp() / 100.0); - break; - case AltosLib.AO_LOG_STATE: - state.set_state(state()); - break; - case AltosLib.AO_LOG_SENSOR: - state.set_ms5607(pres(), temp()); - state.set_accel(accel()); - - break; - case AltosLib.AO_LOG_TEMP_VOLT: - state.set_battery_voltage(AltosConvert.mega_battery_voltage(v_batt())); - - state.set_apogee_voltage(AltosConvert.mega_pyro_voltage(sense_a())); - state.set_main_voltage(AltosConvert.mega_pyro_voltage(sense_m())); - - break; - case AltosLib.AO_LOG_GPS_POS: - gps = state.make_temp_gps(false); - gps.lat = latitude() / 1e7; - gps.lon = longitude() / 1e7; - if (state.altitude_32()) - gps.alt = (altitude_low() & 0xffff) | (altitude_high() << 16); - else - gps.alt = altitude_low(); - break; - case AltosLib.AO_LOG_GPS_TIME: - gps = state.make_temp_gps(false); - - gps.hour = hour(); - gps.minute = minute(); - gps.second = second(); - - int flags = flags(); - - gps.connected = (flags & AltosLib.AO_GPS_RUNNING) != 0; - gps.locked = (flags & AltosLib.AO_GPS_VALID) != 0; - gps.nsat = (flags & AltosLib.AO_GPS_NUM_SAT_MASK) >> - AltosLib.AO_GPS_NUM_SAT_SHIFT; - - gps.year = 2000 + year(); - gps.month = month(); - gps.day = day(); - gps.pdop = pdop() / 10.0; - break; - case AltosLib.AO_LOG_GPS_SAT: - gps = state.make_temp_gps(true); - - int n = nsat(); - for (int i = 0; i < n; i++) - gps.add_sat(svid(i), c_n(i)); - break; - } - } - - public AltosEepromMetrum2 (String line) { - parse_string(line); - } - - static public LinkedList read(FileInputStream input) { - LinkedList metrums = new LinkedList(); - - for (;;) { - try { - String line = AltosLib.gets(input); - if (line == null) - break; - try { - AltosEepromMetrum2 metrum = new AltosEepromMetrum2(line); - - if (metrum.cmd != AltosLib.AO_LOG_INVALID) - metrums.add(metrum); - } catch (Exception e) { - System.out.printf ("exception\n"); - } - } catch (IOException ie) { - break; - } - } - - return metrums; - } -} diff --git a/altoslib/AltosEepromMini.java b/altoslib/AltosEepromMini.java deleted file mode 100644 index 04155071..00000000 --- a/altoslib/AltosEepromMini.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright © 2011 Keith Packard - * - * 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; 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; -import java.util.*; -import java.text.*; - -public class AltosEepromMini extends AltosEeprom { - public static final int record_length = 16; - - public int record_length() { return record_length; } - - /* AO_LOG_FLIGHT elements */ - public int flight() { return data16(0); } - public int ground_pres() { return data32(4); } - - /* AO_LOG_STATE elements */ - public int state() { return data16(0); } - public int reason() { return data16(2); } - - /* AO_LOG_SENSOR elements */ - public int pres() { return data24(0); } - public int temp() { return data24(3); } - public int sense_a() { return data16(6); } - public int sense_m() { return data16(8); } - public int v_batt() { return data16(10); } - - private double battery_voltage(AltosState state, int sensor) { - if (state.log_format == AltosLib.AO_LOG_FORMAT_EASYMINI) - return AltosConvert.easy_mini_voltage(sensor, state.serial); - if (state.log_format == AltosLib.AO_LOG_FORMAT_TELEMINI2) - return AltosConvert.tele_mini_2_voltage(sensor); - if (state.log_format == AltosLib.AO_LOG_FORMAT_TELEMINI3) - return AltosConvert.tele_mini_3_battery_voltage(sensor); - return -1; - } - - private double pyro_voltage(AltosState state, int sensor) { - if (state.log_format == AltosLib.AO_LOG_FORMAT_EASYMINI) - return AltosConvert.easy_mini_voltage(sensor, state.serial); - if (state.log_format == AltosLib.AO_LOG_FORMAT_TELEMINI2) - return AltosConvert.tele_mini_2_voltage(sensor); - if (state.log_format == AltosLib.AO_LOG_FORMAT_TELEMINI3) - return AltosConvert.tele_mini_3_pyro_voltage(sensor); - return -1; - } - - public void update_state(AltosState state) { - super.update_state(state); - - switch (cmd) { - case AltosLib.AO_LOG_FLIGHT: - state.set_flight(flight()); - state.set_ground_pressure(ground_pres()); - break; - case AltosLib.AO_LOG_STATE: - state.set_state(state()); - break; - case AltosLib.AO_LOG_SENSOR: - state.set_ms5607(pres(), temp()); - state.set_apogee_voltage(pyro_voltage(state, sense_a())); - state.set_main_voltage(pyro_voltage(state, sense_m())); - state.set_battery_voltage(battery_voltage(state, v_batt())); - break; - } - } - - public AltosEepromMini (AltosEepromChunk chunk, int start) throws ParseException { - parse_chunk(chunk, start); - } - - public AltosEepromMini (String line) { - parse_string(line); - } - - public AltosEepromMini(int in_cmd, int in_tick) { - cmd = in_cmd; - tick = in_tick; - valid = true; - } - - static public LinkedList read(FileInputStream input) { - LinkedList minis = new LinkedList(); - - for (;;) { - try { - String line = AltosLib.gets(input); - if (line == null) - break; - AltosEepromMini mini = new AltosEepromMini(line); - minis.add(mini); - } catch (IOException ie) { - break; - } - } - - return minis; - } -} diff --git a/altoslib/AltosEepromRecordSet.java b/altoslib/AltosEepromRecordSet.java index 000d9c02..911b90b9 100644 --- a/altoslib/AltosEepromRecordSet.java +++ b/altoslib/AltosEepromRecordSet.java @@ -18,6 +18,7 @@ import java.io.*; import java.util.*; public class AltosEepromRecordSet implements Iterable { + AltosEepromNew eeprom; TreeSet ordered; AltosState start_state; @@ -52,6 +53,8 @@ public class AltosEepromRecordSet implements Iterable { } public AltosEepromRecordSet(AltosEepromNew eeprom) { + this.eeprom = eeprom; + AltosConfigData config_data = eeprom.config_data(); AltosEepromRecord record = null; diff --git a/altoslib/AltosEepromTM.java b/altoslib/AltosEepromTM.java deleted file mode 100644 index 9a09f926..00000000 --- a/altoslib/AltosEepromTM.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright © 2010 Keith Packard - * - * 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; 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; -import java.util.*; -import java.text.*; - -public class AltosEepromTM extends AltosEeprom { - public int a; - public int b; - - public static final int record_length = 8; - - public void write(PrintStream out) { - out.printf("%c %4x %4x %4x\n", cmd, tick, a, b); - } - - public int record_length() { return record_length; } - - public String string() { - return String.format("%c %4x %4x %4x\n", cmd, tick, a, b); - } - - public void update_state(AltosState state) { - super.update_state(state); - - AltosGPS gps; - - /* Flush any pending GPS changes */ - if (state.gps_pending) { - switch (cmd) { - case AltosLib.AO_LOG_GPS_LAT: - case AltosLib.AO_LOG_GPS_LON: - case AltosLib.AO_LOG_GPS_ALT: - case AltosLib.AO_LOG_GPS_SAT: - case AltosLib.AO_LOG_GPS_DATE: - break; - default: - state.set_temp_gps(); - break; - } - } - - switch (cmd) { - case AltosLib.AO_LOG_FLIGHT: - state.set_state(AltosLib.ao_flight_pad); - state.set_ground_accel(a); - state.set_flight(b); - state.set_boost_tick(tick); - break; - case AltosLib.AO_LOG_SENSOR: - state.set_accel(a); - state.set_pressure(AltosConvert.barometer_to_pressure(b)); - break; - case AltosLib.AO_LOG_PRESSURE: - state.set_pressure(AltosConvert.barometer_to_pressure(b)); - break; - case AltosLib.AO_LOG_TEMP_VOLT: - state.set_temperature(AltosConvert.thermometer_to_temperature(a)); - state.set_battery_voltage(AltosConvert.cc_battery_to_voltage(b)); - break; - case AltosLib.AO_LOG_DEPLOY: - state.set_apogee_voltage(AltosConvert.cc_ignitor_to_voltage(a)); - state.set_main_voltage(AltosConvert.cc_ignitor_to_voltage(b)); - break; - case AltosLib.AO_LOG_STATE: - state.set_state(a); - break; - case AltosLib.AO_LOG_GPS_TIME: - gps = state.make_temp_gps(false); - - gps.hour = (a & 0xff); - gps.minute = (a >> 8); - gps.second = (b & 0xff); - - int flags = (b >> 8); - - gps.connected = (flags & AltosLib.AO_GPS_RUNNING) != 0; - gps.locked = (flags & AltosLib.AO_GPS_VALID) != 0; - gps.nsat = (flags & AltosLib.AO_GPS_NUM_SAT_MASK) >> - AltosLib.AO_GPS_NUM_SAT_SHIFT; - break; - case AltosLib.AO_LOG_GPS_LAT: - gps = state.make_temp_gps(false); - - int lat32 = a | (b << 16); - gps.lat = (double) lat32 / 1e7; - break; - case AltosLib.AO_LOG_GPS_LON: - gps = state.make_temp_gps(false); - - int lon32 = a | (b << 16); - gps.lon = (double) lon32 / 1e7; - break; - case AltosLib.AO_LOG_GPS_ALT: - gps = state.make_temp_gps(false); - gps.alt = a; - break; - case AltosLib.AO_LOG_GPS_SAT: - gps = state.make_temp_gps(true); - int svid = a; - int c_n0 = b >> 8; - gps.add_sat(svid, c_n0); - break; - case AltosLib.AO_LOG_GPS_DATE: - gps = state.make_temp_gps(false); - gps.year = (a & 0xff) + 2000; - gps.month = a >> 8; - gps.day = b & 0xff; - break; - } - } - - public AltosEepromTM (AltosEepromChunk chunk, int start) throws ParseException { - - cmd = chunk.data(start); - valid = true; - - valid = !chunk.erased(start, record_length); - if (valid) { - if (AltosConvert.checksum(chunk.data, start, record_length) != 0) - throw new ParseException(String.format("invalid checksum at 0x%x", - chunk.address + start), 0); - } else { - cmd = AltosLib.AO_LOG_INVALID; - } - - tick = chunk.data16(start + 2); - a = chunk.data16(start + 4); - b = chunk.data16(start + 6); - } - - public AltosEepromTM (String line) { - valid = false; - tick = 0; - a = 0; - b = 0; - if (line == null) { - cmd = AltosLib.AO_LOG_INVALID; - } else { - try { - String[] tokens = line.split("\\s+"); - - if (tokens[0].length() == 1) { - if (tokens.length != 4) { - cmd = AltosLib.AO_LOG_INVALID; - } else { - cmd = tokens[0].codePointAt(0); - tick = Integer.parseInt(tokens[1],16); - valid = true; - a = Integer.parseInt(tokens[2],16); - b = Integer.parseInt(tokens[3],16); - } - } else { - cmd = AltosLib.AO_LOG_INVALID; - } - } catch (NumberFormatException ne) { - cmd = AltosLib.AO_LOG_INVALID; - } - } - } - - public AltosEepromTM(int in_cmd, int in_tick, int in_a, int in_b) { - valid = true; - cmd = in_cmd; - tick = in_tick; - a = in_a; - b = in_b; - } - - static public LinkedList read(FileInputStream input) { - LinkedList tms = new LinkedList(); - - for (;;) { - try { - String line = AltosLib.gets(input); - if (line == null) - break; - AltosEepromTM tm = new AltosEepromTM(line); - tms.add(tm); - } catch (IOException ie) { - break; - } - } - - return tms; - } - -} diff --git a/altoslib/AltosEepromTMini.java b/altoslib/AltosEepromTMini.java deleted file mode 100644 index 2557f431..00000000 --- a/altoslib/AltosEepromTMini.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright © 2010 Keith Packard - * - * 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; 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.altoslib_11; - -import java.io.*; -import java.util.*; -import java.text.*; - -public class AltosEepromTMini extends AltosEeprom { - public int i; - public int a; - public int b; - - public static final int record_length = 2; - - public void write(PrintStream out) { - out.printf("%c %4x %4x %4x\n", cmd, tick, a, b); - } - - public int record_length() { return record_length; } - - public String string() { - return String.format("%c %4x %4x %4x\n", cmd, tick, a, b); - } - - public void update_state(AltosState state) { - super.update_state(state); - - switch (cmd) { - case AltosLib.AO_LOG_FLIGHT: - state.set_state(AltosLib.ao_flight_boost); - state.set_flight(b); - break; - case AltosLib.AO_LOG_PRESSURE: - if (tick == 0) - state.set_ground_pressure(AltosConvert.barometer_to_pressure(b)); - else - state.set_pressure(AltosConvert.barometer_to_pressure(b)); - break; - case AltosLib.AO_LOG_STATE: - state.set_state(a); - break; - } - } - - public AltosEepromTMini (AltosEepromChunk chunk, int start, AltosState state) throws ParseException { - int value = chunk.data16(start); - - int i = (chunk.address + start) / record_length; - - cmd = chunk.data(start); - valid = true; - - valid = !chunk.erased(start, record_length); - - switch (i) { - case 0: - cmd = AltosLib.AO_LOG_FLIGHT; - tick = 0; - a = 0; - b = value; - break; - case 1: - cmd = AltosLib.AO_LOG_PRESSURE; - tick = 0; - a = 0; - b = value; - break; - default: - if ((value & 0x8000) != 0) { - cmd = AltosLib.AO_LOG_STATE; - tick = state.tick; - a = value & 0x7fff; - b = 0; - } else { - if (state.ascent) - tick = state.tick + 10; - else - tick = state.tick + 100; - cmd = AltosLib.AO_LOG_PRESSURE; - a = 0; - b = value; - } - break; - } - } - - public AltosEepromTMini (String line) { - valid = false; - tick = 0; - a = 0; - b = 0; - if (line == null) { - cmd = AltosLib.AO_LOG_INVALID; - } else { - try { - String[] tokens = line.split("\\s+"); - - if (tokens[0].length() == 1) { - if (tokens.length != 4) { - cmd = AltosLib.AO_LOG_INVALID; - } else { - cmd = tokens[0].codePointAt(0); - tick = Integer.parseInt(tokens[1],16); - valid = true; - a = Integer.parseInt(tokens[2],16); - b = Integer.parseInt(tokens[3],16); - } - } else { - cmd = AltosLib.AO_LOG_INVALID; - } - } catch (NumberFormatException ne) { - cmd = AltosLib.AO_LOG_INVALID; - } - } - } - - public AltosEepromTMini(int in_cmd, int in_tick, int in_a, int in_b) { - valid = true; - cmd = in_cmd; - tick = in_tick; - a = in_a; - b = in_b; - } - - static public LinkedList read(FileInputStream input) { - LinkedList tms = new LinkedList(); - - for (;;) { - try { - String line = AltosLib.gets(input); - if (line == null) - break; - AltosEepromTMini tm = new AltosEepromTMini(line); - tms.add(tm); - } catch (IOException ie) { - break; - } - } - - return tms; - } - -} diff --git a/altoslib/AltosStateIterable.java b/altoslib/AltosStateIterable.java index 5332aecd..ec3d944d 100644 --- a/altoslib/AltosStateIterable.java +++ b/altoslib/AltosStateIterable.java @@ -29,15 +29,13 @@ public abstract class AltosStateIterable implements Iterable { public abstract void write(PrintStream out); public static AltosStateIterable iterable(File file) { - FileInputStream in; try { - in = new FileInputStream(file); + if (file.getName().endsWith("telem")) + return new AltosTelemetryFile(new FileInputStream(file)); + else + return new AltosEepromFile(new FileReader(file)); } catch (Exception e) { return null; } - if (file.getName().endsWith("telem")) - return new AltosTelemetryFile(in); - else - return new AltosEepromFile(in); } } diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index 2bcd934f..ad3fc682 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -47,19 +47,11 @@ altoslib_JAVA = \ AltosEeprom.java \ AltosEepromChunk.java \ AltosEepromDownload.java \ + AltosEepromMonitor.java \ AltosEepromFile.java \ - AltosEepromTM.java \ - AltosEepromTMini.java \ - AltosEepromHeader.java \ AltosEepromIterable.java \ AltosEepromList.java \ AltosEepromLog.java \ - AltosEepromMega.java \ - AltosEepromMetrum2.java \ - AltosEepromMini.java \ - AltosEepromGPS.java \ - AltosEepromMonitor.java \ - AltosEepromFireTwo.java \ AltosFile.java \ AltosFlash.java \ AltosFlashListener.java \ diff --git a/altosui/AltosLanded.java b/altosui/AltosLanded.java index ded08537..25d4fcc8 100644 --- a/altosui/AltosLanded.java +++ b/altosui/AltosLanded.java @@ -125,7 +125,7 @@ public class AltosLanded extends AltosUIFlightTab implements ActionListener { try { AltosStateIterable states = null; if (filename.endsWith("eeprom")) { - FileInputStream in = new FileInputStream(file); + FileReader in = new FileReader(file); states = new AltosEepromFile(in); } else if (filename.endsWith("telem")) { FileInputStream in = new FileInputStream(file); @@ -143,6 +143,11 @@ public class AltosLanded extends AltosUIFlightTab implements ActionListener { fe.getMessage(), "Cannot open file", JOptionPane.ERROR_MESSAGE); + } catch (IOException ie) { + JOptionPane.showMessageDialog(null, + ie.getMessage(), + "Error reading file file", + JOptionPane.ERROR_MESSAGE); } } } diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index b0c6d33b..72c3c161 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -367,16 +367,16 @@ public class AltosUI extends AltosUIFrame { static AltosStateIterable open_logfile(File file) { try { - FileInputStream in; - - in = new FileInputStream(file); if (file.getName().endsWith("telem")) - return new AltosTelemetryFile(in); + return new AltosTelemetryFile(new FileInputStream(file)); else - return new AltosEepromFile(in); + return new AltosEepromFile(new FileReader(file)); } catch (FileNotFoundException fe) { System.out.printf("%s\n", fe.getMessage()); return null; + } catch (IOException ie) { + System.out.printf("%s\n", ie.getMessage()); + return null; } } diff --git a/altosuilib/AltosDataChooser.java b/altosuilib/AltosDataChooser.java index 8758fc34..a8c74926 100644 --- a/altosuilib/AltosDataChooser.java +++ b/altosuilib/AltosDataChooser.java @@ -47,7 +47,7 @@ public class AltosDataChooser extends JFileChooser { filename = file.getName(); try { if (filename.endsWith("eeprom")) { - FileInputStream in = new FileInputStream(file); + FileReader in = new FileReader(file); return new AltosEepromFile(in); } else if (filename.endsWith("telem")) { FileInputStream in = new FileInputStream(file); @@ -60,6 +60,11 @@ public class AltosDataChooser extends JFileChooser { fe.getMessage(), "Cannot open file", JOptionPane.ERROR_MESSAGE); + } catch (IOException ie) { + JOptionPane.showMessageDialog(frame, + ie.getMessage(), + "Error reading file", + JOptionPane.ERROR_MESSAGE); } } return null; diff --git a/altosuilib/AltosEepromSelect.java b/altosuilib/AltosEepromSelect.java index 0b4b7a85..2c6ee6d7 100644 --- a/altosuilib/AltosEepromSelect.java +++ b/altosuilib/AltosEepromSelect.java @@ -38,11 +38,7 @@ class AltosEepromItem implements ActionListener { log = in_log; String text; - if (log.year != 0) - text = String.format("Flight #%02d - %04d-%02d-%02d", - log.flight, log.year, log.month, log.day); - else - text = String.format("Flight #%02d", log.flight); + text = String.format("Flight #%02d", log.flight); label = new JLabel(text);