The new code appears to work in minor testing; time to try it all the time.
Signed-off-by: Keith Packard <keithp@keithp.com>
import java.util.*;
import java.text.*;
-class AltosEepromIterator implements Iterator<AltosState> {
- AltosState state;
- Iterator<AltosEeprom> 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<AltosEeprom> 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<AltosEeprom>());
- 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<AltosState> iterator() {
- if (set != null)
- return set.iterator();
-
- AltosState state = start.clone();
- Iterator<AltosEeprom> i = body.iterator();
-
- while (i.hasNext() && !state.valid()) {
- i.next().update_state(state);
- state.finish_update();
- }
- return new AltosEepromIterator(state, i);
+ return set.iterator();
}
}
+++ /dev/null
-/*
- * Copyright © 2017 Keith Packard <keithp@keithp.com>
- *
- * 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<AltosEeprom> read(FileInputStream input) {
- LinkedList<AltosEeprom> firetwos = new LinkedList<AltosEeprom>();
-
- 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;
- }
-}
+++ /dev/null
-/*
- * Copyright © 2014 Keith Packard <keithp@keithp.com>
- *
- * 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<AltosEeprom> read(FileInputStream input) {
- LinkedList<AltosEeprom> tgpss = new LinkedList<AltosEeprom>();
-
- 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;
- }
-}
+++ /dev/null
-/*
- * Copyright © 2013 Keith Packard <keithp@keithp.com>
- *
- * 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<AltosEeprom> read(FileInputStream input) {
- LinkedList<AltosEeprom> headers = new LinkedList<AltosEeprom>();
-
- 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<AltosEepromHeader> headers) {
- out.printf("# Comments\n");
- for (AltosEepromHeader header : headers) {
- header.write(out);
- }
-
- }
-
- public AltosEepromHeader (String line) {
- this(line.split("\\s+"));
- }
-}
public int start_block;
public int end_block;
- public int year, month, day;
-
public boolean selected;
public AltosEepromLog(AltosConfigData config_data,
throws InterruptedException, TimeoutException {
int block;
- boolean has_date = false;
flight = in_flight;
if (flight != 0)
* 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;
- }
- }
}
}
+++ /dev/null
-/*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
- *
- * 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<AltosEeprom> read(FileInputStream input, int log_format) {
- LinkedList<AltosEeprom> megas = new LinkedList<AltosEeprom>();
-
- 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;
- }
-}
+++ /dev/null
-/*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
- *
- * 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<AltosEeprom> read(FileInputStream input) {
- LinkedList<AltosEeprom> metrums = new LinkedList<AltosEeprom>();
-
- 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;
- }
-}
+++ /dev/null
-/*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
- *
- * 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<AltosEeprom> read(FileInputStream input) {
- LinkedList<AltosEeprom> minis = new LinkedList<AltosEeprom>();
-
- 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;
- }
-}
import java.util.*;
public class AltosEepromRecordSet implements Iterable<AltosState> {
+ AltosEepromNew eeprom;
TreeSet<AltosEepromRecord> ordered;
AltosState start_state;
}
public AltosEepromRecordSet(AltosEepromNew eeprom) {
+ this.eeprom = eeprom;
+
AltosConfigData config_data = eeprom.config_data();
AltosEepromRecord record = null;
+++ /dev/null
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * 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<AltosEeprom> read(FileInputStream input) {
- LinkedList<AltosEeprom> tms = new LinkedList<AltosEeprom>();
-
- 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;
- }
-
-}
+++ /dev/null
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * 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<AltosEeprom> read(FileInputStream input) {
- LinkedList<AltosEeprom> tms = new LinkedList<AltosEeprom>();
-
- 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;
- }
-
-}
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);
}
}
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 \
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);
fe.getMessage(),
"Cannot open file",
JOptionPane.ERROR_MESSAGE);
+ } catch (IOException ie) {
+ JOptionPane.showMessageDialog(null,
+ ie.getMessage(),
+ "Error reading file file",
+ JOptionPane.ERROR_MESSAGE);
}
}
}
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;
}
}
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);
fe.getMessage(),
"Cannot open file",
JOptionPane.ERROR_MESSAGE);
+ } catch (IOException ie) {
+ JOptionPane.showMessageDialog(frame,
+ ie.getMessage(),
+ "Error reading file",
+ JOptionPane.ERROR_MESSAGE);
}
}
return null;
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);