--- /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; version 2 of the License.
+ *
+ * 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 altosui;
+
+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 java.lang.reflect.Array;
+
+import libaltosJNI.*;
+
+public class AltosEepromBlock extends ArrayList<AltosEepromRecord> {
+ boolean has_flight;
+ int flight;
+ boolean has_state;
+ int state;
+ boolean has_date;
+ int year, month, day;
+
+ public AltosEepromBlock (AltosSerial serial_line, int block) throws TimeoutException, InterruptedException {
+ int addr;
+ boolean done = false;
+
+ has_flight = false;
+ has_state = false;
+ has_date = false;
+ serial_line.printf("e %x\n", block);
+ for (addr = 0; !done && addr < 0x100;) {
+ try {
+ AltosEepromRecord r = new AltosEepromRecord(serial_line, block * 256 + addr);
+
+ if (r.cmd == Altos.AO_LOG_FLIGHT) {
+ flight = r.b;
+ has_flight = true;
+ }
+
+ /* Monitor state transitions to update display */
+ if (r.cmd == Altos.AO_LOG_STATE && r.a <= Altos.ao_flight_landed) {
+ if (!has_state || r.a > state) {
+ state = r.a;
+ has_state = true;
+ }
+ }
+
+ if (r.cmd == Altos.AO_LOG_GPS_DATE) {
+ year = 2000 + (r.a & 0xff);
+ month = (r.a >> 8) & 0xff;
+ day = (r.b & 0xff);
+ has_date = true;
+ }
+
+ if (r.cmd == Altos.AO_LOG_STATE && r.a == Altos.ao_flight_landed)
+ done = true;
+ add(addr / 8, r);
+ } catch (ParseException pe) {
+ }
+ addr += 8;
+ }
+ }
+}
\ No newline at end of file