diff options
Diffstat (limited to 'altosui')
| -rw-r--r-- | altosui/AltosAscent.java | 4 | ||||
| -rw-r--r-- | altosui/AltosDescent.java | 4 | ||||
| -rw-r--r-- | altosui/AltosDisplayThread.java | 2 | ||||
| -rw-r--r-- | altosui/AltosEepromDownload.java | 340 | ||||
| -rw-r--r-- | altosui/AltosFlightStatus.java | 2 | ||||
| -rw-r--r-- | altosui/AltosFlightUI.java | 2 | ||||
| -rw-r--r-- | altosui/AltosIdleMonitorUI.java | 8 | ||||
| -rw-r--r-- | altosui/AltosInfoTable.java | 30 | ||||
| -rw-r--r-- | altosui/AltosLanded.java | 5 | ||||
| -rw-r--r-- | altosui/AltosPad.java | 74 | ||||
| -rw-r--r-- | altosui/AltosUI.java | 15 | 
11 files changed, 129 insertions, 357 deletions
diff --git a/altosui/AltosAscent.java b/altosui/AltosAscent.java index f8435037..ceba2d1d 100644 --- a/altosui/AltosAscent.java +++ b/altosui/AltosAscent.java @@ -308,7 +308,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {  	class Lat extends AscentValue {  		void show (AltosState state, AltosListenerState listener_state) { -			if (state.gps != null) +			if (state.gps != null && state.gps.connected && state.gps.lat != AltosRecord.MISSING)  				show(pos(state.gps.lat,"N", "S"));  			else  				show("???"); @@ -322,7 +322,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {  	class Lon extends AscentValue {  		void show (AltosState state, AltosListenerState listener_state) { -			if (state.gps != null) +			if (state.gps != null && state.gps.connected && state.gps.lon != AltosRecord.MISSING)  				show(pos(state.gps.lon,"E", "W"));  			else  				show("???"); diff --git a/altosui/AltosDescent.java b/altosui/AltosDescent.java index 2b6575cb..35efce16 100644 --- a/altosui/AltosDescent.java +++ b/altosui/AltosDescent.java @@ -278,7 +278,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {  	class Lat extends DescentValue {  		void show (AltosState state, AltosListenerState listener_state) { -			if (state.gps != null && state.gps.connected) +			if (state.gps != null && state.gps.connected && state.gps.lat != AltosRecord.MISSING)  				show(pos(state.gps.lat,"N", "S"));  			else  				show("???"); @@ -292,7 +292,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {  	class Lon extends DescentValue {  		void show (AltosState state, AltosListenerState listener_state) { -			if (state.gps != null && state.gps.connected) +			if (state.gps != null && state.gps.connected && state.gps.lon != AltosRecord.MISSING)  				show(pos(state.gps.lon,"W", "E"));  			else  				show("???"); diff --git a/altosui/AltosDisplayThread.java b/altosui/AltosDisplayThread.java index 70144fb2..7a750c86 100644 --- a/altosui/AltosDisplayThread.java +++ b/altosui/AltosDisplayThread.java @@ -110,7 +110,7 @@ public class AltosDisplayThread extends Thread {  			 */  			if (state.state >= Altos.ao_flight_drogue &&  			    (last || -			     System.currentTimeMillis() - state.report_time >= 15000 || +			     System.currentTimeMillis() - state.received_time >= 15000 ||  			     state.state == Altos.ao_flight_landed))  			{  				if (Math.abs(state.speed) < 20 && state.height < 100) diff --git a/altosui/AltosEepromDownload.java b/altosui/AltosEepromDownload.java index 95b17e2a..931b55fd 100644 --- a/altosui/AltosEepromDownload.java +++ b/altosui/AltosEepromDownload.java @@ -33,9 +33,6 @@ public class AltosEepromDownload implements Runnable {  	Thread			eeprom_thread;  	AltosEepromMonitor	monitor; -	int			flight; -	int			serial; -	int			year, month, day;  	boolean			want_file;  	FileWriter		eeprom_file;  	LinkedList<String>	eeprom_pending; @@ -44,7 +41,7 @@ public class AltosEepromDownload implements Runnable {  	ActionListener		listener;  	boolean			success;  	ParseException		parse_exception; -	String			extension; +	AltosState		state;  	private void FlushPending() throws IOException {  		for (String s : flights.config_data) { @@ -59,15 +56,19 @@ public class AltosEepromDownload implements Runnable {  	private void CheckFile(boolean force) throws IOException {  		if (eeprom_file != null)  			return; -		if (force || (flight != 0 && want_file)) { +		if (force || (state.flight != 0 && want_file)) {  			AltosFile		eeprom_name; - -			if (extension == null) -				extension = "data"; -			if (year != 0 && month != 0 && day != 0) -				eeprom_name = new AltosFile(year, month, day, serial, flight, extension); -			else -				eeprom_name = new AltosFile(serial, flight, extension); +			AltosGPS		gps = state.gps; + +			if (gps != null && +			    gps.year != AltosRecord.MISSING && +			    gps.month != AltosRecord.MISSING && +			    gps.day != AltosRecord.MISSING) +			{ +				eeprom_name = new AltosFile(gps.year, gps.month, gps.day, +							    state.serial, state.flight, "eeprom"); +			} else +				eeprom_name = new AltosFile(state.serial, state.flight, "eeprom");  			eeprom_file = new FileWriter(eeprom_name);  			if (eeprom_file != null) { @@ -78,270 +79,49 @@ public class AltosEepromDownload implements Runnable {  		}  	} -	void Log(AltosEepromRecord r) throws IOException { +	boolean			done; +	boolean			start; + +	void LogEeprom(AltosEeprom r) throws IOException {  		if (r.cmd != Altos.AO_LOG_INVALID) { -			String log_line = String.format("%c %4x %4x %4x\n", -							r.cmd, r.tick, r.a, r.b); +			String line = r.string();  			if (eeprom_file != null) -				eeprom_file.write(log_line); +				eeprom_file.write(line);  			else -				eeprom_pending.add(log_line); +				eeprom_pending.add(line);  		}  	} -	void set_serial(int in_serial) { -		serial = in_serial; -		monitor.set_serial(serial); -	} - -	void set_flight(int in_flight) { -		flight = in_flight; -		monitor.set_flight(flight); -	} -		 -	boolean			done; -	int			state; - -	void CaptureFull(AltosEepromChunk eechunk) throws IOException { -		boolean	any_valid = false; - -		extension = "eeprom"; -		set_serial(flights.config_data.serial); -		for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromRecord.record_length) { -			try { -				AltosEepromRecord r = new AltosEepromRecord(eechunk, i); -				if (r.cmd == Altos.AO_LOG_FLIGHT) -					set_flight(r.b); - -				/* Monitor state transitions to update display */ -				if (r.cmd == Altos.AO_LOG_STATE && r.a <= Altos.ao_flight_landed) { -					state = r.a; -					if (state > Altos.ao_flight_pad) -						want_file = true; -				} - -				if (r.cmd == Altos.AO_LOG_GPS_DATE) { -					year = 2000 + (r.a & 0xff); -					month = (r.a >> 8) & 0xff; -					day = (r.b & 0xff); -					want_file = true; -				} -				if (r.cmd == Altos.AO_LOG_STATE && r.a == Altos.ao_flight_landed) -					done = true; -				if (r.cmd != AltosLib.AO_LOG_INVALID) -					any_valid = true; -				Log(r); -			} catch (ParseException pe) { -				if (parse_exception == null) -					parse_exception = pe; -			} -		} - -		if (!any_valid) -			done = true; - -		CheckFile(false); -	} - -	boolean	start; -	int	tiny_tick; - -	void CaptureTiny (AltosEepromChunk eechunk) throws IOException { +	void CaptureEeprom(AltosEepromChunk eechunk, int log_format) throws IOException {  		boolean any_valid = false; -		extension = "eeprom"; -		set_serial(flights.config_data.serial); -		for (int i = 0; i < eechunk.data.length && !done; i += 2) { -			int			v = eechunk.data16(i); -			AltosEepromRecord	r; - -			if (i == 0 && start) { -				tiny_tick = 0; -				start = false; -				set_flight(v); -				r = new AltosEepromRecord(Altos.AO_LOG_FLIGHT, tiny_tick, 0, v); -				any_valid = true; -			} else { -				int	s = v ^ 0x8000; - -				if (Altos.ao_flight_startup <= s && s <= Altos.ao_flight_invalid) { -					state = s; -					r = new AltosEepromRecord(Altos.AO_LOG_STATE, tiny_tick, state, 0); -					if (state == Altos.ao_flight_landed) -						done = true; -					state = s; -					any_valid = true; -				} else { -					if (v != 0xffff) -						any_valid = true; - -					r = new AltosEepromRecord(Altos.AO_LOG_PRESSURE, tiny_tick, 0, v); - -					/* -					 * The flight software records ascent data every 100ms, and descent -					 * data every 1s. -					 */ -					if (state < Altos.ao_flight_drogue) -						tiny_tick += 10; -					else -						tiny_tick += 100; -				} -			} -			Log(r); -		} -		CheckFile(false); -		if (!any_valid) -			done = true; -	} - -	void LogTeleScience(AltosEepromTeleScience r) throws IOException { -		if (r.type != Altos.AO_LOG_INVALID) { -			String log_line = String.format("%c %4x %4x %d %5d %5d %5d %5d %5d %5d %5d %5d %5d %5d %5d %5d\n", -							r.type, r.tick, r.tm_tick, r.tm_state, -							r.data[0], r.data[1], r.data[2], r.data[3],  -							r.data[4], r.data[5], r.data[6], r.data[7],  -							r.data[8], r.data[9], r.data[10], r.data[11]); -			if (eeprom_file != null) -				eeprom_file.write(log_line); -			else -				eeprom_pending.add(log_line); -		} -	} -	 -	boolean	telescience_start; - -	void CaptureTeleScience (AltosEepromChunk eechunk) throws IOException { -		boolean	any_valid = false; - -		extension = "science"; -		for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromTeleScience.record_length) { -			try { -				AltosEepromTeleScience r = new AltosEepromTeleScience(eechunk, i); -				if (r.type == AltosEepromTeleScience.AO_LOG_TELESCIENCE_START) { -					if (telescience_start) { -						done = true; -						break; -					} -					set_serial(r.data[0]); -					set_flight(r.data[1]); -					telescience_start = true; -				} else { -					if (!telescience_start) -						break; -				} -				state = r.tm_state; -				want_file =true; -				any_valid = true; -				LogTeleScience(r); -			} catch (ParseException pe) { -				if (parse_exception == null) -					parse_exception = pe; -			} -		} +		int record_length = 8; -		CheckFile(false); -		if (!any_valid) -			done = true; -	} +		state.set_serial(flights.config_data.serial); -	void LogMega(AltosEepromMega r) throws IOException { -		if (r.cmd != Altos.AO_LOG_INVALID) { -			String log_line = String.format("%c %4x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x\n", -							r.cmd, r.tick, -							r.data8[0], r.data8[1], r.data8[2], r.data8[3], -							r.data8[4], r.data8[5], r.data8[6], r.data8[7], -							r.data8[8], r.data8[9], r.data8[10], r.data8[11], -							r.data8[12], r.data8[13], r.data8[14], r.data8[15], -							r.data8[16], r.data8[17], r.data8[18], r.data8[19], -							r.data8[20], r.data8[21], r.data8[22], r.data8[23], -							r.data8[24], r.data8[25], r.data8[26], r.data8[27]); -			if (eeprom_file != null) -				eeprom_file.write(log_line); -			else -				eeprom_pending.add(log_line); -		} -	} +		for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += record_length) { +			AltosEeprom r = eechunk.eeprom(i, log_format); -	void CaptureMega(AltosEepromChunk eechunk) throws IOException { -		boolean any_valid = false; +			record_length = r.record_length(); -		extension = "mega"; -		set_serial(flights.config_data.serial); -		for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromMega.record_length) { -			try { -				AltosEepromMega r = new AltosEepromMega(eechunk, i); -				if (r.cmd == Altos.AO_LOG_FLIGHT) -					set_flight(r.data16(0)); - -				/* Monitor state transitions to update display */ -				if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) <= Altos.ao_flight_landed) { -					state = r.data16(0); -					if (state > Altos.ao_flight_pad) -						want_file = true; -				} +			r.update_state(state); -				if (r.cmd == Altos.AO_LOG_GPS_TIME) { -					year = 2000 + r.data8(14); -					month = r.data8(15); -					day = r.data8(16); +			/* Monitor state transitions to update display */ +			if (state.state != AltosLib.ao_flight_invalid && +			    state.state <= AltosLib.ao_flight_landed) +			{ +				if (state.state > Altos.ao_flight_pad)  					want_file = true; -				} - -				if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) == Altos.ao_flight_landed) +				if (state.state == AltosLib.ao_flight_landed)  					done = true; -				if (r.cmd != AltosLib.AO_LOG_INVALID) -					any_valid = true; -				LogMega(r); -			} catch (ParseException pe) { -				if (parse_exception == null) -					parse_exception = pe;  			} -		} -		if (!any_valid) -			done = true; -		CheckFile(false); -	} -	 -	void LogMini(AltosEepromMini r) throws IOException { -		if (r.cmd != Altos.AO_LOG_INVALID) { -			String log_line = String.format("%c %4x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x\n", -							r.cmd, r.tick, -							r.data8[0], r.data8[1], r.data8[2], r.data8[3], -							r.data8[4], r.data8[5], r.data8[6], r.data8[7], -							r.data8[8], r.data8[9], r.data8[10], r.data8[11]); -			if (eeprom_file != null) -				eeprom_file.write(log_line); -			else -				eeprom_pending.add(log_line); -		} -	} +			if (state.gps != null) +				want_file = true; -	void CaptureMini(AltosEepromChunk eechunk) throws IOException { -		boolean any_valid = false; - -		extension = "mini"; -		set_serial(flights.config_data.serial); -		for (int i = 0; i < AltosEepromChunk.chunk_size && !done; i += AltosEepromMini.record_length) { -			try { -				AltosEepromMini r = new AltosEepromMini(eechunk, i); -				if (r.cmd == Altos.AO_LOG_FLIGHT) -					set_flight(r.data16(0)); - -				/* Monitor state transitions to update display */ -				if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) <= Altos.ao_flight_landed) { -					state = r.data16(0); -					if (state > Altos.ao_flight_pad) -						want_file = true; -				} - -				if (r.cmd == Altos.AO_LOG_STATE && r.data16(0) == Altos.ao_flight_landed) -					done = true; +			if (r.valid) {  				any_valid = true; -				LogMini(r); -			} catch (ParseException pe) { -				if (parse_exception == null) -					parse_exception = pe; +				LogEeprom(r);  			}  		}  		if (!any_valid) @@ -350,15 +130,12 @@ public class AltosEepromDownload implements Runnable {  		CheckFile(false);  	} -	void CaptureTelemetry(AltosEepromChunk eechunk) throws IOException { -		 -	} -  	void CaptureLog(AltosEepromLog log) throws IOException, InterruptedException, TimeoutException {  		int			block, state_block = 0;  		int			log_format = flights.config_data.log_format; -		state = 0; +		state = new AltosState(); +  		done = false;  		start = true; @@ -366,10 +143,6 @@ public class AltosEepromDownload implements Runnable {  			throw new IOException("no serial number found");  		/* Reset per-capture variables */ -		flight = 0; -		year = 0; -		month = 0; -		day = 0;  		want_file = false;  		eeprom_file = null;  		eeprom_pending = new LinkedList<String>(); @@ -377,9 +150,12 @@ public class AltosEepromDownload implements Runnable {  		/* Set serial number in the monitor dialog window */  		/* Now scan the eeprom, reading blocks of data and converting to .eeprom file form */ -		state = 0; state_block = log.start_block; +		state_block = log.start_block;  		for (block = log.start_block; !done && block < log.end_block; block++) { -			monitor.set_value(AltosLib.state_name(state), state, block - state_block, block - log.start_block); +			monitor.set_value(state.state_name(), +					  state.state, +					  block - state_block, +					  block - log.start_block);  			AltosEepromChunk	eechunk = new AltosEepromChunk(serial_line, block, block == log.start_block); @@ -397,33 +173,7 @@ public class AltosEepromDownload implements Runnable {  				}  			} -			switch (log_format) { -			case AltosLib.AO_LOG_FORMAT_FULL: -				extension = "eeprom"; -				CaptureFull(eechunk); -				break; -			case AltosLib.AO_LOG_FORMAT_TINY: -				extension = "eeprom"; -				CaptureTiny(eechunk); -				break; -			case AltosLib.AO_LOG_FORMAT_TELEMETRY: -				extension = "telem"; -				CaptureTelemetry(eechunk); -				break; -			case AltosLib.AO_LOG_FORMAT_TELESCIENCE: -				extension = "science"; -				CaptureTeleScience(eechunk); -				break; -			case AltosLib.AO_LOG_FORMAT_TELEMEGA: -				extension = "mega"; -				CaptureMega(eechunk); -				break; -			case AltosLib.AO_LOG_FORMAT_EASYMINI: -			case AltosLib.AO_LOG_FORMAT_TELEMINI: -				extension = "eeprom"; -				CaptureMini(eechunk); -				break; -			} +			CaptureEeprom (eechunk, log_format);  		}  		CheckFile(true);  		if (eeprom_file != null) { diff --git a/altosui/AltosFlightStatus.java b/altosui/AltosFlightStatus.java index 0be7bb51..6383e5b9 100644 --- a/altosui/AltosFlightStatus.java +++ b/altosui/AltosFlightStatus.java @@ -126,7 +126,7 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay  	class LastPacket extends FlightValue {  		void show(AltosState state, AltosListenerState listener_state) { -			long secs = (System.currentTimeMillis() - state.report_time + 500) / 1000; +			long secs = (System.currentTimeMillis() - state.received_time + 500) / 1000;  			value.setText(String.format("%d", secs));  		}  		public LastPacket(GridBagLayout layout, int x) { diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java index 423cf10c..1c450ce3 100644 --- a/altosui/AltosFlightUI.java +++ b/altosui/AltosFlightUI.java @@ -102,7 +102,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A  		status_update.saved_state = state;  		if (state == null) -			state = new AltosState(new AltosRecord()); +			state = new AltosState();  		pad.show(state, listener_state); diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index bbab017f..f6a91de8 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -65,13 +65,13 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl  	public void show(AltosState state, AltosListenerState listener_state) {  		status_update.saved_state = state; -		try { +//		try {  			pad.show(state, listener_state);  			flightStatus.show(state, listener_state);  			flightInfo.show(state, listener_state); -		} catch (Exception e) { -			System.out.print("Show exception" + e); -		} +//		} catch (Exception e) { +//			System.out.print("Show exception " + e); +//		}  	}  	public void update(final AltosState state, final AltosListenerState listener_state) { diff --git a/altosui/AltosInfoTable.java b/altosui/AltosInfoTable.java index 8601d76f..8906920b 100644 --- a/altosui/AltosInfoTable.java +++ b/altosui/AltosInfoTable.java @@ -155,10 +155,14 @@ public class AltosInfoTable extends JTable {  				else  					info_add_row(1, "GPS", "  missing");  				info_add_row(1, "Satellites", "%6d", state.gps.nsat); -				info_add_deg(1, "Latitude", state.gps.lat, 'N', 'S'); -				info_add_deg(1, "Longitude", state.gps.lon, 'E', 'W'); -				info_add_row(1, "GPS altitude", "%6d", state.gps.alt); -				info_add_row(1, "GPS height", "%6.0f", state.gps_height); +				if (state.gps.lat != AltosRecord.MISSING) +					info_add_deg(1, "Latitude", state.gps.lat, 'N', 'S'); +				if (state.gps.lon != AltosRecord.MISSING) +					info_add_deg(1, "Longitude", state.gps.lon, 'E', 'W'); +				if (state.gps.alt != AltosRecord.MISSING) +					info_add_row(1, "GPS altitude", "%8.1f", state.gps.alt); +				if (state.gps_height != AltosRecord.MISSING) +					info_add_row(1, "GPS height", "%8.1f", state.gps_height);  				/* The SkyTraq GPS doesn't report these values */  				/* @@ -195,14 +199,16 @@ public class AltosInfoTable extends JTable {  					info_add_deg(1, "Pad longitude", state.pad_lon, 'E', 'W');  					info_add_row(1, "Pad GPS alt", "%6.0f m", state.pad_alt);  				} -				info_add_row(1, "GPS date", "%04d-%02d-%02d", -					     state.gps.year, -					     state.gps.month, -					     state.gps.day); -				info_add_row(1, "GPS time", "  %02d:%02d:%02d", -					     state.gps.hour, -					     state.gps.minute, -					     state.gps.second); +				if (state.gps.year != AltosRecord.MISSING)  +					info_add_row(1, "GPS date", "%04d-%02d-%02d", +						     state.gps.year, +						     state.gps.month, +						     state.gps.day); +				if (state.gps.hour != AltosRecord.MISSING) +					info_add_row(1, "GPS time", "  %02d:%02d:%02d", +						     state.gps.hour, +						     state.gps.minute, +						     state.gps.second);  				//int	nsat_vis = 0;  				int	c; diff --git a/altosui/AltosLanded.java b/altosui/AltosLanded.java index 38f273cf..4cdaa3df 100644 --- a/altosui/AltosLanded.java +++ b/altosui/AltosLanded.java @@ -103,7 +103,8 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio  	class Lat extends LandedValue {  		void show (AltosState state, AltosListenerState listener_state) { -			if (state.gps != null && state.gps.connected) +			show(); +			if (state.gps != null && state.gps.connected && state.gps.lat != AltosRecord.MISSING)  				show(pos(state.gps.lat,"N", "S"));  			else  				show("???"); @@ -118,7 +119,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio  	class Lon extends LandedValue {  		void show (AltosState state, AltosListenerState listener_state) {  			show(); -			if (state.gps != null && state.gps.connected) +			if (state.gps != null && state.gps.connected && state.gps.lon != AltosRecord.MISSING)  				show(pos(state.gps.lon,"E", "W"));  			else  				show("???"); diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java index fed009cc..e9c973de 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -310,17 +310,23 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {  	class PadLat extends LaunchValue {  		void show (AltosState state, AltosListenerState listener_state) { -			if (state == null || state.gps == null) { -				hide(); -			} else { -				if (state.state < AltosLib.ao_flight_pad) { -					show(pos(state.gps.lat,"N", "S")); -					set_label("Latitude"); -				} else {  -					show(pos(state.pad_lat,"N", "S")); -					set_label("Pad Latitude"); +			double lat = AltosRecord.MISSING; +			String label = null; + +			if (state != null) { +				if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lat != AltosRecord.MISSING) { +					lat = state.gps.lat; +					label = "Latitude"; +				} else { +					lat = state.pad_lat; +					label = "Pad Latitude";  				}  			} +			if (lat != AltosRecord.MISSING) { +				show(pos(lat,"E", "W")); +				set_label(label); +			} else +				hide();  		}  		public PadLat (GridBagLayout layout, int y) {  			super (layout, y, "Pad Latitude"); @@ -331,17 +337,23 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {  	class PadLon extends LaunchValue {  		void show (AltosState state, AltosListenerState listener_state) { -			if (state == null || state.gps == null) { -				hide(); -			} else { -				if (state.state < AltosLib.ao_flight_pad) { -					show(pos(state.gps.lon,"E", "W")); -					set_label("Longitude"); -				} else {  -					show(pos(state.pad_lon,"E", "W")); -					set_label("Pad Longitude"); +			double lon = AltosRecord.MISSING; +			String label = null; + +			if (state != null) { +				if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.lon != AltosRecord.MISSING) { +					lon = state.gps.lon; +					label = "Longitude"; +				} else { +					lon = state.pad_lon; +					label = "Pad Longitude";  				}  			} +			if (lon != AltosRecord.MISSING) { +				show(pos(lon,"E", "W")); +				set_label(label); +			} else +				hide();  		}  		public PadLon (GridBagLayout layout, int y) {  			super (layout, y, "Pad Longitude"); @@ -352,21 +364,23 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {  	class PadAlt extends LaunchValue {  		void show (AltosState state, AltosListenerState listener_state) { -			if (state == null) -				hide(); -			else { -				if (state.state < AltosLib.ao_flight_pad && state.gps != null) { -					show("%4.0f m", state.gps.alt); -					set_label("Altitude"); +			double alt = AltosRecord.MISSING; +			String label = null; + +			if (state != null) { +				if (state.state < AltosLib.ao_flight_pad && state.gps != null && state.gps.alt != AltosRecord.MISSING) { +					alt = state.gps.alt; +					label = "Altitude";  				} else { -					if (state.pad_alt == AltosRecord.MISSING) -						hide(); -					else { -						show("%4.0f m", state.pad_alt); -						set_label("Pad Altitude"); -					} +					alt = state.pad_alt; +					label = "Pad Altitude";  				}  			} +			if (alt != AltosRecord.MISSING) { +				show("%4.0f m", state.gps.alt); +				set_label(label); +			} else +				hide();  		}  		public PadAlt (GridBagLayout layout, int y) {  			super (layout, y, "Pad Altitude"); diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index b47df0d9..151f68fd 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -350,10 +350,10 @@ public class AltosUI extends AltosUIFrame {  			FileInputStream in;  			in = new FileInputStream(file); -			if (file.getName().endsWith("eeprom")) -				return new AltosEepromFile(in); -			else +			if (file.getName().endsWith("telem"))  				return new AltosTelemetryFile(in); +			else +				return new AltosEepromFile(in);  		} catch (FileNotFoundException fe) {  			System.out.printf("%s\n", fe.getMessage());  			return null; @@ -434,11 +434,10 @@ public class AltosUI extends AltosUIFrame {  			System.out.printf("Failed to open file '%s'\n", file);  			return null;  		} -		if (file.getName().endsWith("eeprom")) { -			return new AltosEepromFile(in); -		} else { +		if (file.getName().endsWith("telem"))  			return new AltosTelemetryFile(in); -		} +		else +			return new AltosEepromFile(in);  	}  	static AltosReplayReader replay_file(File file) { @@ -521,6 +520,8 @@ public class AltosUI extends AltosUIFrame {  			System.out.printf ("process cat\n");  			for (AltosState state : eef) { +				System.out.printf ("tick %d state %d height %g\n", +						   state.tick, state.state, state.height);  				if ((state.set & AltosState.set_gps) != 0)  					System.out.printf ("time %g lat %g lon %g alt %g\n",  							   state.time_since_boost(),  | 
