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>
public void set_companion(AltosCompanion companion) { state.set_companion(companion); }
public void run () {
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);
/* Run the flight */
record_set.capture_series(this);
/* All done, signal that it's over */
done = true;
semaphore.release();
/* All done, signal that it's over */
done = true;
semaphore.release();
public AltosReplay(AltosRecordSet record_set) {
super(record_set.cal_data());
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();
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;
}
}
public class AltosReplayReader extends AltosFlightReader {
File file;
AltosReplay replay;
public AltosState read() {
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;
/* 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;
/* Fake out the received time */
replay.state.set_received_time(System.currentTimeMillis());
return replay.state;
public void close (boolean interrupted) {
}
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) {
public File backing_file() { return file; }
public AltosReplayReader(AltosRecordSet record_set, File in_file) {
file = in_file;
name = file.getName();
replay = new AltosReplay(record_set);
file = in_file;
name = file.getName();
replay = new AltosReplay(record_set);
public double igniter_voltage[];
public AltosGPS gps;
public double igniter_voltage[];
public AltosGPS gps;
- public AltosGPS temp_gps;
- public int temp_gps_sat_tick;
public boolean gps_pending;
public AltosIMU imu;
public boolean gps_pending;
public AltosIMU imu;
public void init() {
set = 0;
public void init() {
set = 0;
+ System.out.printf("state init\n");
received_time = System.currentTimeMillis();
time = AltosLib.MISSING;
time_change = AltosLib.MISSING;
received_time = System.currentTimeMillis();
time = AltosLib.MISSING;
time_change = AltosLib.MISSING;
kalman_acceleration = new AltosValue();
gps = null;
kalman_acceleration = new AltosValue();
gps = null;
- temp_gps = null;
- temp_gps_sat_tick = 0;
gps_pending = false;
imu = null;
gps_pending = false;
imu = null;
- if (state.gps != null && state.gps.connected) {
+ if (state.gps != null) {
if (!has_map) {
pane.add("Site Map", sitemap);
has_map = true;
if (!has_map) {
pane.add("Site Map", sitemap);
has_map = true;