boolean done = false;
public void set_time(double time) {
- if (last_time != AltosLib.MISSING) {
- semaphore.release();
- double delay = Math.min(time - last_time,10);
- if (delay > 0) {
- try {
- Thread.sleep((int) (delay * 1000));
- } catch (InterruptedException ie) {
+ if (time > -2) {
+ if (last_time != AltosLib.MISSING) {
+ semaphore.release();
+ double delay = Math.min(time - last_time,10);
+ if (delay > 0) {
+ try {
+ Thread.sleep((int) (delay * 1000));
+ } catch (InterruptedException ie) {
+ }
}
}
}
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;
+ /* Wait for something to change */
+ try {
+ replay.semaphore.acquire();
+ } catch (InterruptedException ie) {
}
- reads++;
/* When done, let the display know */
if (replay.done)
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);
+ t = new Thread(replay);
+ t.start();
}
}
AltosTelemetryIterable telems;
AltosCalData cal_data;
+ int first_state;
public void write_comments(PrintStream out) {
}
cal_data = new AltosCalData();
AltosTelemetryNullListener l = new AltosTelemetryNullListener(cal_data);
+ first_state = AltosLib.ao_flight_startup;
for (AltosTelemetry telem : telems) {
telem.provide_data(l);
+ if (cal_data.state == AltosLib.ao_flight_pad)
+ first_state = cal_data.state;
if (l.cal_data_complete())
break;
}
}
public void capture_series(AltosDataListener listener) {
- AltosCalData cal_data = cal_data();
-
+ cal_data();
cal_data.reset();
+ cal_data.state = first_state;
for (AltosTelemetry telem : telems) {
- int tick = telem.tick();
- cal_data.set_tick(tick);
-
- /* Try to pick up at least one pre-boost value */
- if (cal_data.time() >= -2)
- telem.provide_data(listener);
+ telem.provide_data(listener);
if (listener.state() == AltosLib.ao_flight_landed)
break;
}
public AltosUnits units;
ArrayList<AltosTimeValue> values;
boolean data_changed;
+ double min_time = -2;
public int compareTo(AltosTimeSeries other) {
return label.compareTo(other.label);
}
public void add(AltosTimeValue tv) {
- data_changed = true;
- values.add(tv);
+ if (tv.time >= min_time) {
+ data_changed = true;
+ values.add(tv);
+ }
}
public void erase_values() {