summaryrefslogtreecommitdiff
path: root/altoslib/AltosReplayReader.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-05-26 00:51:37 -0700
committerKeith Packard <keithp@keithp.com>2017-05-26 00:51:37 -0700
commitaa0300f11fe5b7f1d3e548e29dc809b803aa1f7a (patch)
tree2d35e4fea08964911f3a7159511ce4d9e4f0c439 /altoslib/AltosReplayReader.java
parent2e82051a6aaaccf1e8a242f9c8141e4167e652d2 (diff)
altoslib: Make AltosReplayReader start synchronously enough to track states
The Altos UI needs to see 'pad' state and then 'boost' state so that it will automatically switch tabs during the flight. When reading from eeprom files, the only way that is going to happen is if the reader thread waits until the UI has definitely seen 'pad' state, which we do by simply delaying the reader thread until after that has happened. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosReplayReader.java')
-rw-r--r--altoslib/AltosReplayReader.java50
1 files changed, 25 insertions, 25 deletions
diff --git a/altoslib/AltosReplayReader.java b/altoslib/AltosReplayReader.java
index fb8432e7..2117bc87 100644
--- a/altoslib/AltosReplayReader.java
+++ b/altoslib/AltosReplayReader.java
@@ -83,20 +83,8 @@ class AltosReplay extends AltosDataListener implements Runnable {
public void set_companion(AltosCompanion companion) { state.set_companion(companion); }
public void run () {
- System.out.printf("ReplayReader running\n");
- state = new AltosState(record_set.cal_data());
-
- /* Tell the display that we're in pad mode */
- state.set_state(AltosLib.ao_flight_pad);
- semaphore.release();
- try {
- Thread.sleep(100);
- } catch (InterruptedException ie) {
- }
-
/* Run the flight */
record_set.capture_series(this);
-
/* All done, signal that it's over */
done = true;
semaphore.release();
@@ -104,31 +92,45 @@ class AltosReplay extends AltosDataListener implements Runnable {
public AltosReplay(AltosRecordSet record_set) {
super(record_set.cal_data());
+ state = new AltosState(record_set.cal_data());
+ this.record_set = record_set;
try {
semaphore.acquire();
- } catch (InterruptedException ie) { }
- this.record_set = record_set;
- Thread t = new Thread(this);
- t.start();
+ } catch (InterruptedException ie) {
+ }
}
}
public class AltosReplayReader extends AltosFlightReader {
File file;
AltosReplay replay;
+ Thread t;
+ int reads;
public AltosState read() {
+ switch (reads) {
+ case 0:
+ /* Tell the display that we're in pad mode */
+ replay.state.set_state(AltosLib.ao_flight_pad);
+ break;
+ case 1:
+ t = new Thread(replay);
+ t.start();
+ /* fall through */
+ default:
+ /* Wait for something to change */
+ try {
+ replay.semaphore.acquire();
+ } catch (InterruptedException ie) {
+ }
+ break;
+ }
+ reads++;
/* When done, let the display know */
if (replay.done)
return null;
- /* Wait for something to change */
- try {
- replay.semaphore.acquire();
- } catch (InterruptedException ie) {
- }
-
/* Fake out the received time */
replay.state.set_received_time(System.currentTimeMillis());
return replay.state;
@@ -137,12 +139,10 @@ public class AltosReplayReader extends AltosFlightReader {
public void close (boolean interrupted) {
}
- public void update(AltosState state) throws InterruptedException {
- }
-
public File backing_file() { return file; }
public AltosReplayReader(AltosRecordSet record_set, File in_file) {
+ reads = 0;
file = in_file;
name = file.getName();
replay = new AltosReplay(record_set);