summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altoslib/AltosEepromChunk.java36
-rw-r--r--altoslib/AltosEepromDownload.java225
-rw-r--r--altoslib/AltosEepromMonitor.java4
-rw-r--r--altoslib/AltosEepromNew.java31
-rw-r--r--altoslib/AltosEepromRecord.java22
-rw-r--r--altoslib/AltosEepromRecordFireTwo.java7
-rw-r--r--altoslib/AltosEepromRecordFull.java7
-rw-r--r--altoslib/AltosEepromRecordGps.java7
-rw-r--r--altoslib/AltosEepromRecordMega.java7
-rw-r--r--altoslib/AltosEepromRecordMetrum.java7
-rw-r--r--altoslib/AltosEepromRecordMini.java7
-rw-r--r--altoslib/AltosEepromRecordTiny.java11
-rw-r--r--altoslib/AltosJson.java45
-rw-r--r--altosuilib/AltosEepromMonitorUI.java53
14 files changed, 200 insertions, 269 deletions
diff --git a/altoslib/AltosEepromChunk.java b/altoslib/AltosEepromChunk.java
index 32d9f8ea..1deb0ded 100644
--- a/altoslib/AltosEepromChunk.java
+++ b/altoslib/AltosEepromChunk.java
@@ -63,40 +63,8 @@ public class AltosEepromChunk {
return true;
}
- public AltosEeprom eeprom(int offset, int log_format, AltosState state) throws ParseException {
- AltosEeprom eeprom = null;
- switch (log_format) {
- case AltosLib.AO_LOG_FORMAT_FULL:
- eeprom = new AltosEepromTM(this, offset);
- break;
- case AltosLib.AO_LOG_FORMAT_TINY:
- eeprom = new AltosEepromTMini(this, offset, state);
- break;
- case AltosLib.AO_LOG_FORMAT_TELEMETRY:
- case AltosLib.AO_LOG_FORMAT_TELESCIENCE:
- break;
- case AltosLib.AO_LOG_FORMAT_TELEMEGA:
- case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD:
- eeprom = new AltosEepromMega(this, offset, log_format);
- break;
- case AltosLib.AO_LOG_FORMAT_TELEMETRUM:
- eeprom = new AltosEepromMetrum2(this, offset);
- break;
- case AltosLib.AO_LOG_FORMAT_TELEMINI2:
- case AltosLib.AO_LOG_FORMAT_TELEMINI3:
- case AltosLib.AO_LOG_FORMAT_EASYMINI:
- eeprom = new AltosEepromMini(this, offset);
- break;
- case AltosLib.AO_LOG_FORMAT_TELEGPS:
- eeprom = new AltosEepromGPS(this, offset);
- break;
- case AltosLib.AO_LOG_FORMAT_TELEFIRETWO:
- eeprom = new AltosEepromFireTwo(this, offset);
- break;
- default:
- throw new ParseException("unknown eeprom format " + log_format, 0);
- }
- return eeprom;
+ public boolean erased() {
+ return erased(0, chunk_size);
}
public AltosEepromChunk(AltosLink link, int block, boolean flush)
diff --git a/altoslib/AltosEepromDownload.java b/altoslib/AltosEepromDownload.java
index c38fcfdf..74912ed4 100644
--- a/altoslib/AltosEepromDownload.java
+++ b/altoslib/AltosEepromDownload.java
@@ -30,65 +30,38 @@ public class AltosEepromDownload implements Runnable {
Thread eeprom_thread;
AltosEepromMonitor monitor;
- boolean want_file;
- FileWriter eeprom_file;
- LinkedList<String> eeprom_pending;
-
AltosEepromList flights;
- boolean success;
String parse_errors;
- AltosState state;
- private void FlushPending() throws IOException {
- for (String s : flights.config_data) {
- eeprom_file.write(s);
- eeprom_file.write('\n');
- }
+ private boolean has_gps_date(AltosState state) {
+ if (state == null)
+ return false;
+
+ AltosGPS gps = state.gps;
- for (String s : eeprom_pending)
- eeprom_file.write(s);
+ return gps != null &&
+ gps.year != AltosLib.MISSING &&
+ gps.month != AltosLib.MISSING &&
+ gps.day != AltosLib.MISSING;
}
- private void CheckFile(boolean force) throws IOException {
- if (eeprom_file != null)
- return;
- if (force || (state.flight != 0 && want_file)) {
- AltosFile eeprom_name;
+ private AltosFile MakeFile(int serial, int flight, AltosState state) throws IOException {
+ AltosFile eeprom_name;
+
+ if (has_gps_date(state)) {
AltosGPS gps = state.gps;
+ eeprom_name = new AltosFile(gps.year, gps.month, gps.day,
+ serial, flight, "eeprom");
+ } else
+ eeprom_name = new AltosFile(serial, flight, "eeprom");
- if (gps != null &&
- gps.year != AltosLib.MISSING &&
- gps.month != AltosLib.MISSING &&
- gps.day != AltosLib.MISSING)
- {
- eeprom_name = new AltosFile(gps.year, gps.month, gps.day,
- state.serial, state.flight, "eeprom");
- } else
- eeprom_name = new AltosFile(state.serial, state.flight, "eeprom");
-
- eeprom_file = new FileWriter(eeprom_name);
- if (eeprom_file != null) {
- monitor.set_filename(eeprom_name.getName());
- FlushPending();
- eeprom_pending = null;
- }
- }
+ return eeprom_name;
}
boolean done;
int prev_state;
int state_block;
- void LogEeprom(AltosEeprom r) throws IOException {
- if (r.cmd != AltosLib.AO_LOG_INVALID) {
- String line = r.string();
- if (eeprom_file != null)
- eeprom_file.write(line);
- else
- eeprom_pending.add(line);
- }
- }
-
void LogError(String error) {
if (parse_errors != null)
parse_errors.concat(error.concat("\n"));
@@ -96,112 +69,101 @@ public class AltosEepromDownload implements Runnable {
parse_errors = error;
}
- void CaptureEeprom(AltosEepromChunk eechunk, int log_format) throws IOException, ParseException {
- boolean any_valid = false;
- boolean got_flight = false;
-
- int record_length = 8;
-
- state.set_serial(flights.config_data.serial);
- monitor.set_serial(flights.config_data.serial);
+ class BlockCache extends Hashtable<Integer,AltosEepromChunk> {
+ AltosEepromLog log;
- for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += record_length) {
- AltosEeprom r = null;
-
- try {
- r = eechunk.eeprom(i, log_format, state);
- } catch (ParseException pe) {
- LogError(pe.getMessage());
- r = null;
- }
-
- if (r == null)
- continue;
-
- record_length = r.record_length();
-
- r.update_state(state);
+ AltosEepromChunk get(int start, boolean add) throws TimeoutException, InterruptedException {
+ if (contains(start))
+ return super.get(start);
+ AltosEepromChunk eechunk = new AltosEepromChunk(link, start, start == log.start_block);
+ if (add)
+ put(start, eechunk);
+ return eechunk;
+ }
- if (!got_flight && state.flight != AltosLib.MISSING)
- monitor.set_flight(state.flight);
+ public BlockCache(AltosEepromLog log) {
+ this.log = log;
+ }
+ }
- /* Monitor state transitions to update display */
- if (state.state() != AltosLib.ao_flight_invalid &&
- state.state() <= AltosLib.ao_flight_landed)
- {
- if (state.state() > AltosLib.ao_flight_pad)
- want_file = true;
- if (state.state() == AltosLib.ao_flight_landed)
- done = true;
- }
+ int FindLastLog(AltosEepromLog log, BlockCache cache) throws TimeoutException, InterruptedException {
+ int low = log.start_block;
+ int high = log.end_block - 1;
- if (state.gps != null)
- want_file = true;
+ while (low <= high) {
+ int mid = (high + low) / 2;
- if (r.valid) {
- any_valid = true;
- LogEeprom(r);
- }
+ if (!cache.get(mid, true).erased())
+ low = mid + 1;
+ else
+ high = mid - 1;
}
- if (!any_valid)
- done = true;
-
- CheckFile(false);
+ return low;
}
void CaptureLog(AltosEepromLog log) throws IOException, InterruptedException, TimeoutException, ParseException {
int block, state_block = 0;
int log_format = flights.config_data.log_format;
-
- state = new AltosState();
+ BlockCache cache = new BlockCache(log);
done = false;
if (flights.config_data.serial < 0)
throw new IOException("no serial number found");
- /* Reset per-capture variables */
- want_file = false;
- eeprom_pending = new LinkedList<String>();
-
/* Set serial number in the monitor dialog window */
- /* Now scan the eeprom, reading blocks of data and converting to .eeprom file form */
-
- state_block = log.start_block;
- prev_state = AltosLib.ao_flight_startup;
- for (block = log.start_block; !done && block < log.end_block; block++) {
- AltosEepromChunk eechunk = new AltosEepromChunk(link, block, block == log.start_block);
-
- /*
- * Guess what kind of data is there if the device
- * didn't tell us
- */
-
- if (log_format == AltosLib.AO_LOG_FORMAT_UNKNOWN) {
- if (block == log.start_block) {
- if (eechunk.data(0) == AltosLib.AO_LOG_FLIGHT)
- log_format = AltosLib.AO_LOG_FORMAT_FULL;
- else
- log_format = AltosLib.AO_LOG_FORMAT_TINY;
- }
- }
+ monitor.set_serial(log.serial);
+ monitor.set_flight(log.flight);
- CaptureEeprom (eechunk, log_format);
+ int start_block = log.start_block;
+ int end_block = FindLastLog(log, cache);
- if (state.state() != prev_state && state.state() != AltosLib.ao_flight_invalid) {
- state_block = block;
- prev_state = state.state();
- }
+ monitor.set_max(end_block - start_block - 1);
+
+ ArrayList<Byte> data = new ArrayList<Byte>();
+
+ /* Now scan the eeprom, reading blocks of data to create a byte array of data */
+
+ for (block = start_block; block < end_block; block++) {
+ monitor.set_block(block - start_block);
+
+ AltosEepromChunk eechunk = cache.get(block, false);
+
+ for (int i = 0; i < eechunk.data.length; i++)
+ data.add((byte) eechunk.data[i]);
+ }
- monitor.set_value(state.state_name(),
- state.state(),
- block - state_block,
- block - log.start_block);
+ /* Construct our internal representation of the eeprom data */
+ AltosEepromNew eeprom = new AltosEepromNew(flights.config_data, data);
+
+ /* Now see if we can't actually parse the resulting
+ * file to generate a better filename. Note that this
+ * doesn't need to work; we'll still save the data using
+ * a less accurate name.
+ */
+ AltosEepromRecordSet set = new AltosEepromRecordSet(eeprom);
+
+ AltosState state = new AltosState();
+
+ for (AltosState s : set) {
+ state = s;
+ if (state.gps != null)
+ break;
}
- CheckFile(true);
+
+ AltosFile f = MakeFile(flights.config_data.serial, log.flight, state);
+
+ monitor.set_filename(f.toString());
+
+ FileWriter w = new FileWriter(f);
+
+ eeprom.write(w);
+ w.close();
}
public void run () {
+ boolean success = false;
+
try {
boolean failed = false;
if (remote)
@@ -211,16 +173,11 @@ public class AltosEepromDownload implements Runnable {
parse_errors = null;
if (log.selected) {
monitor.reset();
- eeprom_file = null;
try {
CaptureLog(log);
} catch (ParseException e) {
LogError(e.getMessage());
}
- if (eeprom_file != null) {
- eeprom_file.flush();
- eeprom_file.close();
- }
}
if (parse_errors != null) {
failed = true;
@@ -273,12 +230,6 @@ public class AltosEepromDownload implements Runnable {
link = given_link;
remote = given_remote;
flights = given_flights;
- success = false;
-
- if (flights.config_data.log_has_state())
- monitor.set_states(AltosLib.ao_flight_boost, AltosLib.ao_flight_landed);
- else
- monitor.set_states(AltosLib.ao_flight_invalid, AltosLib.ao_flight_invalid);
monitor.start();
}
diff --git a/altoslib/AltosEepromMonitor.java b/altoslib/AltosEepromMonitor.java
index 792fde27..250568ac 100644
--- a/altoslib/AltosEepromMonitor.java
+++ b/altoslib/AltosEepromMonitor.java
@@ -20,9 +20,9 @@ package org.altusmetrum.altoslib_11;
public interface AltosEepromMonitor {
- public void set_states(int min_state, int max_state);
+ public void set_block(int in_block);
- public void set_value(String in_state_name, int in_state, int in_state_block, int in_block);
+ public void set_max(int in_max);
public void set_serial(int in_serial);
diff --git a/altoslib/AltosEepromNew.java b/altoslib/AltosEepromNew.java
index c8f44509..b76e3e19 100644
--- a/altoslib/AltosEepromNew.java
+++ b/altoslib/AltosEepromNew.java
@@ -103,29 +103,22 @@ public class AltosEepromNew {
return true;
}
- static private byte[] byte_list_to_array(List<Byte> bytes) {
- byte[] data = new byte[bytes.size()];
- int i = 0;
-
- for (Byte b : bytes) {
- data[i++] = b;
- }
- return data;
- }
-
private boolean read_data(Reader r) throws IOException {
BufferedReader br = new BufferedReader(r);
String s;
data = new ArrayList<Byte>();
while ((s = br.readLine()) != null) {
+
String[] tokens = s.split("\\s+");
for (int i = 0; i < tokens.length; i++) {
- try {
- data.add((byte) AltosLib.fromhex(tokens[i]));
- } catch (NumberFormatException e) {
- throw new IOException(e.toString());
+ if (tokens[i].length() > 0) {
+ try {
+ data.add((byte) AltosLib.fromhex(tokens[i]));
+ } catch (NumberFormatException e) {
+ throw new IOException(e.toString());
+ }
}
}
}
@@ -270,6 +263,16 @@ public class AltosEepromNew {
read(new StringReader(s));
}
+ public AltosEepromNew(AltosJson config, ArrayList<Byte> data) {
+ this.config = config;
+ this.data = data;
+ }
+
+ public AltosEepromNew(AltosConfigData config_data, ArrayList<Byte> data) {
+ this.config = new AltosJson(config_data);
+ this.data = data;
+ }
+
public AltosEepromNew() {
}
}
diff --git a/altoslib/AltosEepromRecord.java b/altoslib/AltosEepromRecord.java
index efcca857..c0edb952 100644
--- a/altoslib/AltosEepromRecord.java
+++ b/altoslib/AltosEepromRecord.java
@@ -51,8 +51,12 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
return data8(i) | (data8(i+1) << 8) | (data8(i+2) << 16) | (data8(i+3) << 24);
}
+ public boolean valid(int s) {
+ return AltosConvert.checksum(eeprom.data, s, length) == 0;
+ }
+
public boolean valid() {
- return AltosConvert.checksum(eeprom.data, start, length) == 0;
+ return valid(start);
}
private int cmdi() {
@@ -81,8 +85,19 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
state.set_tick(tick());
}
+ public int next_start() {
+ int s = start + length;
+
+ while (s + length < eeprom.data.size()) {
+ if (valid(s))
+ return s;
+ s += length;
+ }
+ return -1;
+ }
+
public boolean hasNext() {
- return start + length * 2 < eeprom.data.size();
+ return next_start() >= 0;
}
public abstract AltosEepromRecord next();
@@ -91,5 +106,8 @@ public abstract class AltosEepromRecord implements Comparable<AltosEepromRecord>
this.eeprom = eeprom;
this.start = start;
this.length = length;
+
+ while (start + length < eeprom.data.size() && !valid())
+ start += length;
}
}
diff --git a/altoslib/AltosEepromRecordFireTwo.java b/altoslib/AltosEepromRecordFireTwo.java
index 9b92f111..dd9e34e1 100644
--- a/altoslib/AltosEepromRecordFireTwo.java
+++ b/altoslib/AltosEepromRecordFireTwo.java
@@ -90,9 +90,10 @@ public class AltosEepromRecordFireTwo extends AltosEepromRecord {
}
public AltosEepromRecord next() {
- if (start + length + length < eeprom.data.size())
- return new AltosEepromRecordFireTwo(eeprom, start + length);
- return null;
+ int s = next_start();
+ if (s < 0)
+ return null;
+ return new AltosEepromRecordFireTwo(eeprom, s);
}
public AltosEepromRecordFireTwo(AltosEepromNew eeprom, int start) {
diff --git a/altoslib/AltosEepromRecordFull.java b/altoslib/AltosEepromRecordFull.java
index d240da28..4b1a460f 100644
--- a/altoslib/AltosEepromRecordFull.java
+++ b/altoslib/AltosEepromRecordFull.java
@@ -108,9 +108,10 @@ public class AltosEepromRecordFull extends AltosEepromRecord {
}
public AltosEepromRecord next() {
- if (start + length + length < eeprom.data.size())
- return new AltosEepromRecordFull(eeprom, start + length);
- return null;
+ int s = next_start();
+ if (s < 0)
+ return null;
+ return new AltosEepromRecordFull(eeprom, s);
}
public AltosEepromRecordFull(AltosEepromNew eeprom, int start) {
diff --git a/altoslib/AltosEepromRecordGps.java b/altoslib/AltosEepromRecordGps.java
index d547ef02..1312d3ec 100644
--- a/altoslib/AltosEepromRecordGps.java
+++ b/altoslib/AltosEepromRecordGps.java
@@ -145,9 +145,10 @@ public class AltosEepromRecordGps extends AltosEepromRecord {
}
public AltosEepromRecord next() {
- if (start + length + length < eeprom.data.size())
- return new AltosEepromRecordGps(eeprom, start + length);
- return null;
+ int s = next_start();
+ if (s < 0)
+ return null;
+ return new AltosEepromRecordGps(eeprom, s);
}
public AltosEepromRecordGps(AltosEepromNew eeprom, int start) {
diff --git a/altoslib/AltosEepromRecordMega.java b/altoslib/AltosEepromRecordMega.java
index 167f666b..1c6d1aee 100644
--- a/altoslib/AltosEepromRecordMega.java
+++ b/altoslib/AltosEepromRecordMega.java
@@ -237,9 +237,10 @@ public class AltosEepromRecordMega extends AltosEepromRecord {
}
public AltosEepromRecord next() {
- if (start + length + length < eeprom.data.size())
- return new AltosEepromRecordMega(eeprom, start + length);
- return null;
+ int s = next_start();
+ if (s < 0)
+ return null;
+ return new AltosEepromRecordMega(eeprom, s);
}
public AltosEepromRecordMega(AltosEepromNew eeprom, int start) {
diff --git a/altoslib/AltosEepromRecordMetrum.java b/altoslib/AltosEepromRecordMetrum.java
index df4d23a2..c11b6aac 100644
--- a/altoslib/AltosEepromRecordMetrum.java
+++ b/altoslib/AltosEepromRecordMetrum.java
@@ -146,9 +146,10 @@ public class AltosEepromRecordMetrum extends AltosEepromRecord {
}
public AltosEepromRecord next() {
- if (start + length + length < eeprom.data.size())
- return new AltosEepromRecordMetrum(eeprom, start + length);
- return null;
+ int s = next_start();
+ if (s < 0)
+ return null;
+ return new AltosEepromRecordMetrum(eeprom, s);
}
public AltosEepromRecordMetrum(AltosEepromNew eeprom, int start) {
diff --git a/altoslib/AltosEepromRecordMini.java b/altoslib/AltosEepromRecordMini.java
index 4c5a88bf..f0fc61ad 100644
--- a/altoslib/AltosEepromRecordMini.java
+++ b/altoslib/AltosEepromRecordMini.java
@@ -83,9 +83,10 @@ public class AltosEepromRecordMini extends AltosEepromRecord {
}
public AltosEepromRecord next() {
- if (start + length + length < eeprom.data.size())
- return new AltosEepromRecordMini(eeprom, start + length);
- return null;
+ int s = next_start();
+ if (s < 0)
+ return null;
+ return new AltosEepromRecordMini(eeprom, s);
}
public AltosEepromRecordMini(AltosEepromNew eeprom, int start) {
diff --git a/altoslib/AltosEepromRecordTiny.java b/altoslib/AltosEepromRecordTiny.java
index 6c04bfee..fda6ddff 100644
--- a/altoslib/AltosEepromRecordTiny.java
+++ b/altoslib/AltosEepromRecordTiny.java
@@ -21,6 +21,10 @@ public class AltosEepromRecordTiny extends AltosEepromRecord {
return eeprom.data16(start);
}
+ public boolean valid(int s) {
+ return eeprom.data16(s) != 0xffff;
+ }
+
public int cmd() {
if (start == 0)
return AltosLib.AO_LOG_FLIGHT;
@@ -66,9 +70,10 @@ public class AltosEepromRecordTiny extends AltosEepromRecord {
}
public AltosEepromRecord next() {
- if (start + record_length * 2 < eeprom.data.size())
- return new AltosEepromRecordTiny(eeprom, start + record_length);
- return null;
+ int s = next_start();
+ if (s < 0)
+ return null;
+ return new AltosEepromRecordTiny(eeprom, s);
}
public AltosEepromRecordTiny(AltosEepromNew eeprom, int start) {
diff --git a/altoslib/AltosJson.java b/altoslib/AltosJson.java
index 94ec2aee..9191be68 100644
--- a/altoslib/AltosJson.java
+++ b/altoslib/AltosJson.java
@@ -185,6 +185,7 @@ class JsonToken {
static final int _colon = 9;
static final int _end = 10;
static final int _error = 11;
+ static final int _none = 12;
static String token_name(int token) {
switch (token) {
@@ -254,11 +255,11 @@ class JsonToken {
* Lexer for json
*/
class JsonLexer extends JsonUtil {
- Reader f;
- int line;
- int ungot = -2;
- StringBuffer pending_token;
- JsonToken token;
+ Reader f;
+ int line;
+ int ungot = -2;
+ StringBuffer pending_token;
+ private JsonToken token;
static class keyword {
String word;
@@ -424,11 +425,17 @@ class JsonLexer extends JsonUtil {
}
void next() {
- token = lex();
+ token = null;
+ }
+
+ JsonToken token() {
+ if (token == null)
+ token = lex();
+ return token;
}
JsonToken expect(int e) {
- JsonToken t = token;
+ JsonToken t = token();
if (t.token != e)
throw new IllegalArgumentException(String.format("got \"%s\" while expecting \"%s\"",
token.token_name(),
@@ -470,7 +477,7 @@ class JsonParse {
lexer.next();
for (;;) {
/* Allow for empty hashes */
- if (lexer.token.token == JsonToken._cc) {
+ if (lexer.token().token == JsonToken._cc) {
lexer.next();
return hash;
}
@@ -481,7 +488,7 @@ class JsonParse {
AltosJson value = value();
hash.put(key, value);
- switch (lexer.token.token) {
+ switch (lexer.token().token) {
case JsonToken._comma:
lexer.next();
break;
@@ -489,7 +496,7 @@ class JsonParse {
lexer.next();
return hash;
default:
- parse_error("got %s expect \",\" or \"}\"", lexer.token.token_name());
+ parse_error("got %s expect \",\" or \"}\"", lexer.token().token_name());
return null;
}
}
@@ -502,14 +509,14 @@ class JsonParse {
lexer.next();
for (int i = 0;; i++) {
/* Allow for empty arrays */
- if (lexer.token.token == JsonToken._cs) {
+ if (lexer.token().token == JsonToken._cs) {
lexer.next();
return array;
}
AltosJson value = value();
array.put(i, value);
- switch (lexer.token.token) {
+ switch (lexer.token().token) {
case JsonToken._comma:
lexer.next();
break;
@@ -517,7 +524,7 @@ class JsonParse {
lexer.next();
return array;
default:
- parse_error("got %s expect \",\" or \"]\"", lexer.token.token_name());
+ parse_error("got %s expect \",\" or \"]\"", lexer.token().token_name());
return null;
}
}
@@ -527,29 +534,29 @@ class JsonParse {
* identify the next object in the input
*/
AltosJson value() {
- switch (lexer.token.token) {
+ switch (lexer.token().token) {
case JsonToken._oc:
return new AltosJson(hash());
case JsonToken._os:
return new AltosJson(array());
case JsonToken._double:
- double dval = lexer.token.dval;
+ double dval = lexer.token().dval;
lexer.next();
return new AltosJson(dval);
case JsonToken._long:
- long lval = lexer.token.lval;
+ long lval = lexer.token().lval;
lexer.next();
return new AltosJson(lval);
case JsonToken._string:
- String sval = lexer.token.sval;
+ String sval = lexer.token().sval;
lexer.next();
return new AltosJson(sval);
case JsonToken._boolean:
- boolean bval = lexer.token.bval;
+ boolean bval = lexer.token().bval;
lexer.next();
return new AltosJson(bval);
default:
- parse_error("Unexpected token \"%s\"", lexer.token.token_name());
+ parse_error("Unexpected token \"%s\"", lexer.token().token_name());
}
return null;
}
diff --git a/altosuilib/AltosEepromMonitorUI.java b/altosuilib/AltosEepromMonitorUI.java
index d708ae96..03661662 100644
--- a/altosuilib/AltosEepromMonitorUI.java
+++ b/altosuilib/AltosEepromMonitorUI.java
@@ -35,7 +35,6 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
JLabel file_value;
JButton cancel;
JProgressBar pbar;
- int min_state, max_state;
ActionListener listener;
static final int progress_max = 10000;
@@ -138,11 +137,6 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
listener = l;
}
- public void set_states(int min_state, int max_state) {
- this.min_state = min_state;
- this.max_state = max_state;
- }
-
public void set_thread(Thread in_eeprom_thread) {
final Thread eeprom_thread = in_eeprom_thread;
cancel.addActionListener(new ActionListener() {
@@ -157,52 +151,30 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
setVisible(true);
}
- private void set_value_internal(String state_name, int state, int state_block, int block) {
+ int max_block = 1;
+
+ public void set_block_internal(int block) {
double pos;
String s;
- if (min_state == AltosLib.ao_flight_invalid) {
- int lblock = block;
- if (lblock > 1000)
- lblock = 1000;
- pos = lblock / 1000.0;
- s = String.format("block %d", block);
- } else {
- if (state == AltosLib.ao_flight_invalid)
- state = 0;
- if (state_block > 100)
- state_block = 100;
- if (state < min_state) state = min_state;
- if (state > max_state) state = max_state;
-
- if (state == max_state)
- state_block = 0;
-
- state -= min_state;
-
- int nstate = max_state - min_state;
+ pos = (double) block / (double) max_block;
- double spos = (double) state / (double) nstate;
- double bpos = state_block / 100.0;
-
- pos = spos + bpos / nstate;
-
- s = String.format("block %d state %s", block, state_name);
- }
+ s = String.format("block %d of %d", block, max_block);
pbar.setString(s);
pbar.setValue((int) (pos * progress_max));
}
- public void set_value(String in_state_name, int in_state, int in_state_block, int in_block) {
- final String state_name = in_state_name;
- final int state = in_state;
- final int state_block = in_state_block;
+ public void set_max(int max_block) {
+ this.max_block = max_block;
+ }
+
+ public void set_block(int in_block) {
final int block = in_block;
Runnable r = new Runnable() {
public void run() {
try {
- set_value_internal(state_name, state, state_block, block);
+ set_block_internal(block);
} catch (Exception ex) {
}
}
@@ -283,7 +255,8 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
}
private void reset_internal() {
- set_value_internal("startup",min_state,0, 0);
+ set_max(1);
+ set_block_internal(0);
set_flight_internal(0);
set_filename_internal("");
}