diff options
| -rw-r--r-- | altosui/AltosDataPointReader.java | 10 | ||||
| -rw-r--r-- | altosui/AltosEepromIterable.java | 20 | ||||
| -rw-r--r-- | altosui/AltosGraphUI.java | 33 | ||||
| -rw-r--r-- | altosui/AltosRecord.java | 20 | ||||
| -rw-r--r-- | altosui/AltosRecordIterable.java | 3 | ||||
| -rw-r--r-- | altosui/AltosTelemetryIterable.java | 13 | 
6 files changed, 75 insertions, 24 deletions
| diff --git a/altosui/AltosDataPointReader.java b/altosui/AltosDataPointReader.java index ee57d2ce..4335421c 100644 --- a/altosui/AltosDataPointReader.java +++ b/altosui/AltosDataPointReader.java @@ -14,12 +14,18 @@ class AltosDataPointReader implements Iterable<AltosDataPoint> {      Iterator<AltosRecord> iter;      AltosState state;      AltosRecord record; +    boolean has_gps; +    boolean has_accel; +    boolean has_ignite;      final static int MISSING = AltosRecord.MISSING; -    public AltosDataPointReader(Iterable<AltosRecord> reader) { +    public AltosDataPointReader(AltosRecordIterable reader) {          this.iter = reader.iterator();          this.state = null; +	has_accel = reader.has_accel(); +	has_gps = reader.has_gps(); +	has_ignite = reader.has_ignite();      }      private void read_next_record()  @@ -46,7 +52,7 @@ class AltosDataPointReader implements Iterable<AltosDataPoint> {              public double acceleration() { return record.acceleration(); }              public double pressure() { return record.raw_pressure(); }              public double altitude() { return record.raw_altitude(); } -            public double height() { return record.raw_height(); } +	    public double height() { return record.raw_height(); }              public double accel_speed() { return record.accel_speed(); }              public double baro_speed() { return state.baro_speed; }              public double temperature() { return record.temperature(); } diff --git a/altosui/AltosEepromIterable.java b/altosui/AltosEepromIterable.java index a7fd742f..624e1dd3 100644 --- a/altosui/AltosEepromIterable.java +++ b/altosui/AltosEepromIterable.java @@ -57,6 +57,11 @@ class AltosOrderedRecord extends AltosEepromRecord implements Comparable<AltosOr  		index = in_index;  	} +	public String toString() { +		return String.format("%d.%d %04x %04x %04x", +				     cmd, index, tick, a, b); +	} +  	public int compareTo(AltosOrderedRecord o) {  		int	tick_diff = tick - o.tick;  		if (tick_diff != 0) @@ -75,7 +80,11 @@ public class AltosEepromIterable extends AltosRecordIterable {  	static final int	seen_gps_lat = 32;  	static final int	seen_gps_lon = 64; -	static final int	seen_basic = seen_flight|seen_sensor|seen_temp_volt|seen_deploy; +	static final int	seen_basic = seen_flight|seen_sensor; + +	boolean			has_accel; +	boolean			has_gps; +	boolean			has_ignite;  	AltosEepromRecord	flight_record;  	AltosEepromRecord	gps_date_record; @@ -123,9 +132,10 @@ public class AltosEepromIterable extends AltosRecordIterable {  				state.flight_vel += (state.accel_plus_g - state.accel);  			}  			eeprom.seen |= seen_sensor; +			has_accel = true;  			break;  		case Altos.AO_LOG_HEIGHT: -			state.height = record.a; +			state.height = (short) record.a;  			eeprom.seen |= seen_sensor;  			break;  		case Altos.AO_LOG_TEMP_VOLT: @@ -137,6 +147,7 @@ public class AltosEepromIterable extends AltosRecordIterable {  			state.drogue = record.a;  			state.main = record.b;  			eeprom.seen |= seen_deploy; +			has_ignite = true;  			break;  		case Altos.AO_LOG_STATE:  			state.state = record.a; @@ -161,6 +172,7 @@ public class AltosEepromIterable extends AltosRecordIterable {  			state.gps.locked = (flags & Altos.AO_GPS_VALID) != 0;  			state.gps.nsat = (flags & Altos.AO_GPS_NUM_SAT_MASK) >>  				Altos.AO_GPS_NUM_SAT_SHIFT; +			has_gps = true;  			break;  		case Altos.AO_LOG_GPS_LAT:  			int lat32 = record.a | (record.b << 16); @@ -254,6 +266,10 @@ public class AltosEepromIterable extends AltosRecordIterable {  		return list.iterator();  	} +	public boolean has_gps() { return has_gps; } +	public boolean has_accel() { return has_accel; } +	public boolean has_ignite() { return has_ignite; } +  	public void write_comments(PrintStream out) {  		Iterator<AltosOrderedRecord>	iterator = records.iterator();  		out.printf("# Comments\n"); diff --git a/altosui/AltosGraphUI.java b/altosui/AltosGraphUI.java index cd158651..e98c302b 100644 --- a/altosui/AltosGraphUI.java +++ b/altosui/AltosGraphUI.java @@ -96,10 +96,14 @@ public class AltosGraphUI extends JFrame          public ArrayList<AltosGraph> graphs() {              ArrayList<AltosGraph> graphs = new ArrayList<AltosGraph>(); -            graphs.add( myAltosGraphTime("Summary") -                    .addElement(height) -                    .addElement(speed) -                    .addElement(acceleration) ); +	    graphs.add( myAltosGraphTime("Summary") +			.addElement(height) +			.addElement(speed) +			.addElement(acceleration) ); + +	    graphs.add( myAltosGraphTime("Summary") +			.addElement(height) +			.addElement(speed));              graphs.add( myAltosGraphTime("Altitude")                      .addElement(height) ); @@ -107,15 +111,15 @@ public class AltosGraphUI extends JFrame              graphs.add( myAltosGraphTime("Speed")                      .addElement(speed) ); -            graphs.add( myAltosGraphTime("Acceleration") -                    .addElement(acceleration) ); +	    graphs.add( myAltosGraphTime("Acceleration") +			.addElement(acceleration) );              graphs.add( myAltosGraphTime("Temperature")                      .addElement(temperature) ); -            graphs.add( myAltosGraphTime("Continuity") -                    .addElement(drogue_voltage) -                    .addElement(main_voltage) ); +	    graphs.add( myAltosGraphTime("Continuity") +			.addElement(drogue_voltage) +			.addElement(main_voltage) );              return graphs;          } @@ -154,20 +158,23 @@ public class AltosGraphUI extends JFrame  	public AltosGraphUI(AltosRecordIterable records) {  		super("Altos Graph"); -		Iterable<AltosDataPoint> reader = new AltosDataPointReader (records); +		AltosDataPointReader reader = new AltosDataPointReader (records);  		if (reader == null)  			return; -		init(reader, 0); +		if (reader.has_accel) +			init(reader, 0); +		else +			init(reader, 1);  	} -    public AltosGraphUI(Iterable<AltosDataPoint> data, int which)  +    public AltosGraphUI(AltosDataPointReader data, int which)      {          super("Altos Graph");          init(data, which);      } -    private void init(Iterable<AltosDataPoint> data, int which) { +    private void init(AltosDataPointReader data, int which) {          AltosGraph graph = createGraph(data, which);          JFreeChart chart = graph.createChart(); diff --git a/altosui/AltosRecord.java b/altosui/AltosRecord.java index 46e96b95..200fffe5 100644 --- a/altosui/AltosRecord.java +++ b/altosui/AltosRecord.java @@ -139,7 +139,7 @@ public class AltosRecord {  		double g = ground_altitude();  		if (r == MISSING || g == MISSING) -			return MISSING; +			return height;  		return r - g;  	} @@ -246,6 +246,9 @@ public class AltosRecord {  		ground_pres = old.ground_pres;  		accel_plus_g = old.accel_plus_g;  		accel_minus_g = old.accel_minus_g; +		acceleration = old.acceleration; +		speed = old.speed; +		height = old.height;  		gps = new AltosGPS(old.gps);  	} @@ -258,12 +261,12 @@ public class AltosRecord {  		status = 0;  		state = Altos.ao_flight_startup;  		tick = 0; -		accel = 0; -		pres = 0; -		temp = 0; -		batt = 0; -		drogue = 0; -		main = 0; +		accel = MISSING; +		pres = MISSING; +		temp = MISSING; +		batt = MISSING; +		drogue = MISSING; +		main = MISSING;  		flight_accel = 0;  		ground_accel = 0;  		flight_vel = 0; @@ -271,6 +274,9 @@ public class AltosRecord {  		ground_pres = 0;  		accel_plus_g = 0;  		accel_minus_g = 0; +		acceleration = MISSING; +		speed = MISSING; +		height = MISSING;  		gps = new AltosGPS();  	}  } diff --git a/altosui/AltosRecordIterable.java b/altosui/AltosRecordIterable.java index a7df92d1..45843b92 100644 --- a/altosui/AltosRecordIterable.java +++ b/altosui/AltosRecordIterable.java @@ -31,4 +31,7 @@ import java.util.concurrent.LinkedBlockingQueue;  public abstract class AltosRecordIterable implements Iterable<AltosRecord> {  	public abstract Iterator<AltosRecord> iterator();  	public void write_comments(PrintStream out) { } +	public boolean has_accel() { return false; } +	public boolean has_gps() { return false; } +	public boolean has_ignite() { return false; };  } diff --git a/altosui/AltosTelemetryIterable.java b/altosui/AltosTelemetryIterable.java index 14b5f27f..44e5ad8f 100644 --- a/altosui/AltosTelemetryIterable.java +++ b/altosui/AltosTelemetryIterable.java @@ -28,6 +28,13 @@ public class AltosTelemetryIterable extends AltosRecordIterable {  		return records.iterator();  	} +	boolean has_gps = false; +	boolean has_accel = false; +	boolean has_ignite = false; +	public boolean has_gps() { return has_gps; } +	public boolean has_accel() { return has_accel; } +	public boolean has_ignite() { return has_ignite; }; +  	public AltosTelemetryIterable (FileInputStream input) {  		boolean saw_boost = false;  		int	current_tick = 0; @@ -59,6 +66,12 @@ public class AltosTelemetryIterable extends AltosRecordIterable {  						saw_boost = true;  						boost_tick = record.tick;  					} +					if (record.accel != AltosRecord.MISSING) +						has_accel = true; +					if (record.gps != null) +						has_gps = true; +					if (record.main != AltosRecord.MISSING) +						has_ignite = true;  					records.add(record);  				} catch (ParseException pe) {  					System.out.printf("parse exception %s\n", pe.getMessage()); | 
