* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_11;
+package org.altusmetrum.altoslib_12;
import java.io.*;
import java.util.*;
AltosState state;
AltosRecordSet record_set;
double last_time = AltosLib.MISSING;
- Semaphore semaphore = new Semaphore(1);;
+ Semaphore semaphore = new Semaphore(1);
boolean done = false;
public void set_time(double time) {
public void set_apogee_voltage(double volts) { state.set_apogee_voltage(volts); }
public void set_main_voltage(double volts) { state.set_main_voltage(volts); }
- public void set_gps(AltosGPS gps) { state.set_gps(gps); }
+ public void set_gps(AltosGPS gps) { super.set_gps(gps); state.set_gps(gps); }
public void set_orient(double orient) { state.set_orient(orient); }
public void set_gyro(double roll, double pitch, double yaw) { state.set_gyro(roll, pitch, yaw); }
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();
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 AltosCalData cal_data() {
+ return replay.state.cal_data();
+ }
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;
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);