From a4ccdd253a9873c16f194a63a79f0c26feaafa29 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 2 Jan 2012 20:57:57 -0800 Subject: [PATCH] altosui: Move eeprom managment code to library Signed-off-by: Keith Packard --- altosui/Makefile.am | 2 - altosui/altoslib/Makefile.am | 2 + .../AltosLib}/AltosEepromIterable.java | 118 +++++++++--------- .../AltosLib}/AltosEepromRecord.java | 46 +++---- 4 files changed, 77 insertions(+), 91 deletions(-) rename altosui/{ => altoslib/src/org/altusmetrum/AltosLib}/AltosEepromIterable.java (83%) rename altosui/{ => altoslib/src/org/altusmetrum/AltosLib}/AltosEepromRecord.java (80%) diff --git a/altosui/Makefile.am b/altosui/Makefile.am index 01732749..a168b6fc 100644 --- a/altosui/Makefile.am +++ b/altosui/Makefile.am @@ -43,8 +43,6 @@ altosui_JAVA = \ AltosEepromLog.java \ AltosEepromManage.java \ AltosEepromMonitor.java \ - AltosEepromIterable.java \ - AltosEepromRecord.java \ AltosEepromTeleScience.java \ AltosEepromMega.java \ AltosEepromMegaIterable.java \ diff --git a/altosui/altoslib/Makefile.am b/altosui/altoslib/Makefile.am index cce9b4c4..ad4d2d98 100644 --- a/altosui/altoslib/Makefile.am +++ b/altosui/altoslib/Makefile.am @@ -15,6 +15,8 @@ AltosLib_JAVA = \ $(SRC)/AltosConvert.java \ $(SRC)/AltosCRCException.java \ $(SRC)/AltosEepromChunk.java \ + $(SRC)/AltosEepromIterable.java \ + $(SRC)/AltosEepromRecord.java \ $(SRC)/AltosFrequency.java \ $(SRC)/AltosGPS.java \ $(SRC)/AltosGPSSat.java \ diff --git a/altosui/AltosEepromIterable.java b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromIterable.java similarity index 83% rename from altosui/AltosEepromIterable.java rename to altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromIterable.java index 11cb97e4..f1397c7b 100644 --- a/altosui/AltosEepromIterable.java +++ b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromIterable.java @@ -15,19 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package altosui; +package org.altusmetrum.AltosLib; -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.*; import java.io.*; import java.util.*; import java.text.*; import java.util.prefs.*; import java.util.concurrent.LinkedBlockingQueue; -import org.altusmetrum.AltosLib.*; /* * AltosRecords with an index field so they can be sorted by tick while preserving @@ -113,17 +107,17 @@ public class AltosEepromIterable extends AltosRecordIterable { void update_state(AltosRecord state, AltosEepromRecord record, EepromState eeprom) { state.tick = record.tick; switch (record.cmd) { - case Altos.AO_LOG_FLIGHT: + case AltosLib.AO_LOG_FLIGHT: eeprom.seen |= seen_flight; state.ground_accel = record.a; state.flight_accel = record.a; state.flight = record.b; eeprom.boost_tick = record.tick; break; - case Altos.AO_LOG_SENSOR: + case AltosLib.AO_LOG_SENSOR: state.accel = record.a; state.pres = record.b; - if (state.state < Altos.ao_flight_boost) { + if (state.state < AltosLib.ao_flight_boost) { eeprom.n_pad_samples++; eeprom.ground_pres += state.pres; state.ground_pres = (int) (eeprom.ground_pres / eeprom.n_pad_samples); @@ -139,7 +133,7 @@ public class AltosEepromIterable extends AltosRecordIterable { eeprom.sensor_tick = record.tick; has_accel = true; break; - case Altos.AO_LOG_PRESSURE: + case AltosLib.AO_LOG_PRESSURE: state.pres = record.b; state.flight_pres = state.pres; if (eeprom.n_pad_samples == 0) { @@ -148,21 +142,21 @@ public class AltosEepromIterable extends AltosRecordIterable { } eeprom.seen |= seen_sensor; break; - case Altos.AO_LOG_TEMP_VOLT: + case AltosLib.AO_LOG_TEMP_VOLT: state.temp = record.a; state.batt = record.b; eeprom.seen |= seen_temp_volt; break; - case Altos.AO_LOG_DEPLOY: + case AltosLib.AO_LOG_DEPLOY: state.drogue = record.a; state.main = record.b; eeprom.seen |= seen_deploy; has_ignite = true; break; - case Altos.AO_LOG_STATE: + case AltosLib.AO_LOG_STATE: state.state = record.a; break; - case Altos.AO_LOG_GPS_TIME: + case AltosLib.AO_LOG_GPS_TIME: eeprom.gps_tick = state.tick; AltosGPS old = state.gps; state.gps = new AltosGPS(); @@ -178,62 +172,62 @@ public class AltosEepromIterable extends AltosRecordIterable { state.gps.second = (record.b & 0xff); int flags = (record.b >> 8); - state.gps.connected = (flags & Altos.AO_GPS_RUNNING) != 0; - state.gps.locked = (flags & Altos.AO_GPS_VALID) != 0; - state.gps.nsat = (flags & Altos.AO_GPS_NUM_SAT_MASK) >> - Altos.AO_GPS_NUM_SAT_SHIFT; + state.gps.connected = (flags & AltosLib.AO_GPS_RUNNING) != 0; + state.gps.locked = (flags & AltosLib.AO_GPS_VALID) != 0; + state.gps.nsat = (flags & AltosLib.AO_GPS_NUM_SAT_MASK) >> + AltosLib.AO_GPS_NUM_SAT_SHIFT; state.new_gps = true; has_gps = true; break; - case Altos.AO_LOG_GPS_LAT: + case AltosLib.AO_LOG_GPS_LAT: int lat32 = record.a | (record.b << 16); state.gps.lat = (double) lat32 / 1e7; break; - case Altos.AO_LOG_GPS_LON: + case AltosLib.AO_LOG_GPS_LON: int lon32 = record.a | (record.b << 16); state.gps.lon = (double) lon32 / 1e7; break; - case Altos.AO_LOG_GPS_ALT: + case AltosLib.AO_LOG_GPS_ALT: state.gps.alt = record.a; break; - case Altos.AO_LOG_GPS_SAT: + case AltosLib.AO_LOG_GPS_SAT: if (state.tick == eeprom.gps_tick) { int svid = record.a; int c_n0 = record.b >> 8; state.gps.add_sat(svid, c_n0); } break; - case Altos.AO_LOG_GPS_DATE: + case AltosLib.AO_LOG_GPS_DATE: state.gps.year = (record.a & 0xff) + 2000; state.gps.month = record.a >> 8; state.gps.day = record.b & 0xff; break; - case Altos.AO_LOG_CONFIG_VERSION: + case AltosLib.AO_LOG_CONFIG_VERSION: break; - case Altos.AO_LOG_MAIN_DEPLOY: + case AltosLib.AO_LOG_MAIN_DEPLOY: break; - case Altos.AO_LOG_APOGEE_DELAY: + case AltosLib.AO_LOG_APOGEE_DELAY: break; - case Altos.AO_LOG_RADIO_CHANNEL: + case AltosLib.AO_LOG_RADIO_CHANNEL: break; - case Altos.AO_LOG_CALLSIGN: + case AltosLib.AO_LOG_CALLSIGN: state.callsign = record.data; break; - case Altos.AO_LOG_ACCEL_CAL: + case AltosLib.AO_LOG_ACCEL_CAL: state.accel_plus_g = record.a; state.accel_minus_g = record.b; break; - case Altos.AO_LOG_RADIO_CAL: + case AltosLib.AO_LOG_RADIO_CAL: break; - case Altos.AO_LOG_MANUFACTURER: + case AltosLib.AO_LOG_MANUFACTURER: break; - case Altos.AO_LOG_PRODUCT: + case AltosLib.AO_LOG_PRODUCT: break; - case Altos.AO_LOG_SERIAL_NUMBER: + case AltosLib.AO_LOG_SERIAL_NUMBER: state.serial = record.a; break; - case Altos.AO_LOG_SOFTWARE_VERSION: + case AltosLib.AO_LOG_SOFTWARE_VERSION: break; } state.seen |= eeprom.seen; @@ -247,7 +241,7 @@ public class AltosEepromIterable extends AltosRecordIterable { boolean last_reported = false; EepromState eeprom = new EepromState(); - state.state = Altos.ao_flight_pad; + state.state = AltosLib.ao_flight_pad; state.accel_plus_g = 15758; state.accel_minus_g = 16294; @@ -288,40 +282,40 @@ public class AltosEepromIterable extends AltosRecordIterable { while (iterator.hasNext()) { AltosOrderedRecord record = iterator.next(); switch (record.cmd) { - case Altos.AO_LOG_CONFIG_VERSION: + case AltosLib.AO_LOG_CONFIG_VERSION: out.printf("# Config version: %s\n", record.data); break; - case Altos.AO_LOG_MAIN_DEPLOY: + case AltosLib.AO_LOG_MAIN_DEPLOY: out.printf("# Main deploy: %s\n", record.a); break; - case Altos.AO_LOG_APOGEE_DELAY: + case AltosLib.AO_LOG_APOGEE_DELAY: out.printf("# Apogee delay: %s\n", record.a); break; - case Altos.AO_LOG_RADIO_CHANNEL: + case AltosLib.AO_LOG_RADIO_CHANNEL: out.printf("# Radio channel: %s\n", record.a); break; - case Altos.AO_LOG_CALLSIGN: + case AltosLib.AO_LOG_CALLSIGN: out.printf("# Callsign: %s\n", record.data); break; - case Altos.AO_LOG_ACCEL_CAL: + case AltosLib.AO_LOG_ACCEL_CAL: out.printf ("# Accel cal: %d %d\n", record.a, record.b); break; - case Altos.AO_LOG_RADIO_CAL: + case AltosLib.AO_LOG_RADIO_CAL: out.printf ("# Radio cal: %d\n", record.a); break; - case Altos.AO_LOG_MAX_FLIGHT_LOG: + case AltosLib.AO_LOG_MAX_FLIGHT_LOG: out.printf ("# Max flight log: %d\n", record.a); break; - case Altos.AO_LOG_MANUFACTURER: + case AltosLib.AO_LOG_MANUFACTURER: out.printf ("# Manufacturer: %s\n", record.data); break; - case Altos.AO_LOG_PRODUCT: + case AltosLib.AO_LOG_PRODUCT: out.printf ("# Product: %s\n", record.data); break; - case Altos.AO_LOG_SERIAL_NUMBER: + case AltosLib.AO_LOG_SERIAL_NUMBER: out.printf ("# Serial number: %d\n", record.a); break; - case Altos.AO_LOG_SOFTWARE_VERSION: + case AltosLib.AO_LOG_SOFTWARE_VERSION: out.printf ("# Software version: %s\n", record.data); break; case Altos.AO_LOG_BARO_RESERVED: @@ -368,10 +362,10 @@ public class AltosEepromIterable extends AltosRecordIterable { int seconds = hour * 3600 + minute * 60 + second; /* Make sure this looks like a good GPS value */ - if ((flags & Altos.AO_GPS_NUM_SAT_MASK) >> Altos.AO_GPS_NUM_SAT_SHIFT < 4) - flags = (flags & ~Altos.AO_GPS_NUM_SAT_MASK) | (4 << Altos.AO_GPS_NUM_SAT_SHIFT); - flags |= Altos.AO_GPS_RUNNING; - flags |= Altos.AO_GPS_VALID; + if ((flags & AltosLib.AO_GPS_NUM_SAT_MASK) >> AltosLib.AO_GPS_NUM_SAT_SHIFT < 4) + flags = (flags & ~AltosLib.AO_GPS_NUM_SAT_MASK) | (4 << AltosLib.AO_GPS_NUM_SAT_SHIFT); + flags |= AltosLib.AO_GPS_RUNNING; + flags |= AltosLib.AO_GPS_VALID; int new_seconds = seconds + diff; if (new_seconds < 0) @@ -411,12 +405,12 @@ public class AltosEepromIterable extends AltosRecordIterable { AltosOrderedRecord record = new AltosOrderedRecord(line, index++, prev_tick, prev_tick_valid); if (record == null) break; - if (record.cmd == Altos.AO_LOG_INVALID) + if (record.cmd == AltosLib.AO_LOG_INVALID) continue; prev_tick = record.tick; - if (record.cmd < Altos.AO_LOG_CONFIG_VERSION) + if (record.cmd < AltosLib.AO_LOG_CONFIG_VERSION) prev_tick_valid = true; - if (record.cmd == Altos.AO_LOG_FLIGHT) { + if (record.cmd == AltosLib.AO_LOG_FLIGHT) { flight_record = record; continue; } @@ -427,19 +421,19 @@ public class AltosEepromIterable extends AltosRecordIterable { * record. Detect the loss of the GPS date and fix up the * missing time records */ - if (record.cmd == Altos.AO_LOG_GPS_DATE) { + if (record.cmd == AltosLib.AO_LOG_GPS_DATE) { gps_date_record = record; continue; } /* go back and fix up any missing time values */ - if (record.cmd == Altos.AO_LOG_GPS_TIME) { + if (record.cmd == AltosLib.AO_LOG_GPS_TIME) { last_gps_time = record; if (missing_time) { Iterator iterator = records.iterator(); while (iterator.hasNext()) { AltosOrderedRecord old = iterator.next(); - if (old.cmd == Altos.AO_LOG_GPS_TIME && + if (old.cmd == AltosLib.AO_LOG_GPS_TIME && old.a == -1 && old.b == -1) { update_time(record, old); @@ -449,9 +443,9 @@ public class AltosEepromIterable extends AltosRecordIterable { } } - if (record.cmd == Altos.AO_LOG_GPS_LAT) { + if (record.cmd == AltosLib.AO_LOG_GPS_LAT) { if (last_gps_time == null || last_gps_time.tick != record.tick) { - AltosOrderedRecord add_gps_time = new AltosOrderedRecord(Altos.AO_LOG_GPS_TIME, + AltosOrderedRecord add_gps_time = new AltosOrderedRecord(AltosLib.AO_LOG_GPS_TIME, record.tick, -1, -1, index-1); if (last_gps_time != null) @@ -466,8 +460,8 @@ public class AltosEepromIterable extends AltosRecordIterable { records.add(record); /* Bail after reading the 'landed' record; we're all done */ - if (record.cmd == Altos.AO_LOG_STATE && - record.a == Altos.ao_flight_landed) + if (record.cmd == AltosLib.AO_LOG_STATE && + record.a == AltosLib.ao_flight_landed) break; } } catch (IOException io) { diff --git a/altosui/AltosEepromRecord.java b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromRecord.java similarity index 80% rename from altosui/AltosEepromRecord.java rename to altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromRecord.java index ea003a1e..b2f23c52 100644 --- a/altosui/AltosEepromRecord.java +++ b/altosui/altoslib/src/org/altusmetrum/AltosLib/AltosEepromRecord.java @@ -15,21 +15,13 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package altosui; +package org.altusmetrum.AltosLib; -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.*; import java.io.*; import java.util.*; import java.text.*; import java.util.prefs.*; import java.util.concurrent.*; -import org.altusmetrum.AltosLib.*; - -import libaltosJNI.*; public class AltosEepromRecord { public int cmd; @@ -52,7 +44,7 @@ public class AltosEepromRecord { throw new ParseException(String.format("invalid checksum at 0x%x", chunk.address + start), 0); } else { - cmd = Altos.AO_LOG_INVALID; + cmd = AltosLib.AO_LOG_INVALID; } tick = chunk.data16(start + 2); @@ -69,7 +61,7 @@ public class AltosEepromRecord { b = 0; data = null; if (line == null) { - cmd = Altos.AO_LOG_INVALID; + cmd = AltosLib.AO_LOG_INVALID; data = ""; } else { try { @@ -77,7 +69,7 @@ public class AltosEepromRecord { if (tokens[0].length() == 1) { if (tokens.length != 4) { - cmd = Altos.AO_LOG_INVALID; + cmd = AltosLib.AO_LOG_INVALID; data = line; } else { cmd = tokens[0].codePointAt(0); @@ -87,51 +79,51 @@ public class AltosEepromRecord { b = Integer.parseInt(tokens[3],16); } } else if (tokens[0].equals("Config") && tokens[1].equals("version:")) { - cmd = Altos.AO_LOG_CONFIG_VERSION; + cmd = AltosLib.AO_LOG_CONFIG_VERSION; data = tokens[2]; } else if (tokens[0].equals("Main") && tokens[1].equals("deploy:")) { - cmd = Altos.AO_LOG_MAIN_DEPLOY; + cmd = AltosLib.AO_LOG_MAIN_DEPLOY; a = Integer.parseInt(tokens[2]); } else if (tokens[0].equals("Apogee") && tokens[1].equals("delay:")) { - cmd = Altos.AO_LOG_APOGEE_DELAY; + cmd = AltosLib.AO_LOG_APOGEE_DELAY; a = Integer.parseInt(tokens[2]); } else if (tokens[0].equals("Radio") && tokens[1].equals("channel:")) { - cmd = Altos.AO_LOG_RADIO_CHANNEL; + cmd = AltosLib.AO_LOG_RADIO_CHANNEL; a = Integer.parseInt(tokens[2]); } else if (tokens[0].equals("Callsign:")) { - cmd = Altos.AO_LOG_CALLSIGN; + cmd = AltosLib.AO_LOG_CALLSIGN; data = tokens[1].replaceAll("\"",""); } else if (tokens[0].equals("Accel") && tokens[1].equals("cal")) { - cmd = Altos.AO_LOG_ACCEL_CAL; + cmd = AltosLib.AO_LOG_ACCEL_CAL; a = Integer.parseInt(tokens[3]); b = Integer.parseInt(tokens[5]); } else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) { - cmd = Altos.AO_LOG_RADIO_CAL; + cmd = AltosLib.AO_LOG_RADIO_CAL; a = Integer.parseInt(tokens[2]); } else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) { - cmd = Altos.AO_LOG_MAX_FLIGHT_LOG; + cmd = AltosLib.AO_LOG_MAX_FLIGHT_LOG; a = Integer.parseInt(tokens[3]); } else if (tokens[0].equals("manufacturer")) { - cmd = Altos.AO_LOG_MANUFACTURER; + cmd = AltosLib.AO_LOG_MANUFACTURER; data = tokens[1]; } else if (tokens[0].equals("product")) { - cmd = Altos.AO_LOG_PRODUCT; + cmd = AltosLib.AO_LOG_PRODUCT; data = tokens[1]; } else if (tokens[0].equals("serial-number")) { - cmd = Altos.AO_LOG_SERIAL_NUMBER; + cmd = AltosLib.AO_LOG_SERIAL_NUMBER; a = Integer.parseInt(tokens[1]); } else if (tokens[0].equals("log-format")) { - cmd = Altos.AO_LOG_LOG_FORMAT; + cmd = AltosLib.AO_LOG_LOG_FORMAT; a = Integer.parseInt(tokens[1]); } else if (tokens[0].equals("software-version")) { - cmd = Altos.AO_LOG_SOFTWARE_VERSION; + cmd = AltosLib.AO_LOG_SOFTWARE_VERSION; data = tokens[1]; } else { - cmd = Altos.AO_LOG_INVALID; + cmd = AltosLib.AO_LOG_INVALID; data = line; } } catch (NumberFormatException ne) { - cmd = Altos.AO_LOG_INVALID; + cmd = AltosLib.AO_LOG_INVALID; data = line; } } -- 2.30.2