0c1a4a9287b6ecd9beb373fc785b08fb6b36cc41
[fw/altos] / altosui / AltosEepromBlock.java
1 /*
2  * Copyright © 2011 Keith Packard <keithp@keithp.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 2 of the License.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along
14  * with this program; if not, write to the Free Software Foundation, Inc.,
15  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
16  */
17
18 package altosui;
19
20 import java.awt.*;
21 import java.awt.event.*;
22 import javax.swing.*;
23 import javax.swing.filechooser.FileNameExtensionFilter;
24 import javax.swing.table.*;
25 import java.io.*;
26 import java.util.*;
27 import java.text.*;
28 import java.util.prefs.*;
29 import java.util.concurrent.*;
30 import java.lang.reflect.Array;
31
32 import libaltosJNI.*;
33
34 public class AltosEepromBlock extends ArrayList<AltosEepromRecord> {
35         boolean has_flight;
36         int     flight;
37         boolean has_state;
38         int     state;
39         boolean has_date;
40         int     year, month, day;
41
42         public AltosEepromBlock (AltosSerial serial_line, int block) throws TimeoutException, InterruptedException {
43                 int     addr;
44                 boolean done = false;
45
46                 has_flight = false;
47                 has_state = false;
48                 has_date = false;
49                 serial_line.printf("e %x\n", block);
50                 for (addr = 0; !done && addr < 0x100;) {
51                         try {
52                                 AltosEepromRecord r = new AltosEepromRecord(serial_line, block * 256 + addr);
53
54                                 if (r.cmd == Altos.AO_LOG_FLIGHT) {
55                                         flight = r.b;
56                                         has_flight = true;
57                                 }
58
59                                 /* Monitor state transitions to update display */
60                                 if (r.cmd == Altos.AO_LOG_STATE && r.a <= Altos.ao_flight_landed) {
61                                         if (!has_state || r.a > state) {
62                                                 state = r.a;
63                                                 has_state = true;
64                                         }
65                                 }
66
67                                 if (r.cmd == Altos.AO_LOG_GPS_DATE) {
68                                         year = 2000 + (r.a & 0xff);
69                                         month = (r.a >> 8) & 0xff;
70                                         day = (r.b & 0xff);
71                                         has_date = true;
72                                 }
73
74                                 if (r.cmd == Altos.AO_LOG_STATE && r.a == Altos.ao_flight_landed)
75                                         done = true;
76                                 add(addr / 8, r);
77                         } catch (ParseException pe) {
78                         }
79                         addr += 8;
80                 }
81         }
82 }