diff options
| -rw-r--r-- | ChangeLog | 179 | ||||
| -rw-r--r-- | ao-tools/altosui/AltosCSV.java | 12 | ||||
| -rw-r--r-- | ao-tools/altosui/AltosEepromReader.java | 99 | ||||
| -rw-r--r-- | ao-tools/altosui/AltosEepromRecord.java | 9 | ||||
| -rw-r--r-- | ao-tools/altosui/AltosState.java | 13 | ||||
| -rw-r--r-- | ao-tools/altosui/AltosUI.java | 22 | ||||
| -rw-r--r-- | ao-tools/altosui/Manifest.txt | 2 | ||||
| -rw-r--r-- | debian/changelog | 31 | 
8 files changed, 353 insertions, 14 deletions
@@ -1,9 +1,112 @@ +commit b6da90b4627dde1fe88240c38c51559d8f781dd0 +Author: Bdale Garbee <bdale@gag.com> +Date:   Wed Aug 11 17:15:39 2010 -0400 + +    update changelogs for Debian build + +commit 4918f73fd0a0f3f5d52907f95a0ec385e901d447 +Author: Bdale Garbee <bdale@gag.com> +Date:   Wed Aug 11 08:50:27 2010 -0400 + +    update changelogs for Debian build + +commit f63f16a70e4d0535667a6364cafcbff026ee6a8c +Author: Bdale Garbee <bdale@gag.com> +Date:   Wed Aug 11 08:36:59 2010 -0400 + +    update changelogs for Debian build + +commit a0a9b445a4d379730b67720f8d7b682d5206a582 +Author: Bdale Garbee <bdale@gag.com> +Date:   Thu Aug 5 15:16:48 2010 -0400 + +    update changelogs for Debian build + +commit e075b8623533965b1b77b77d38c2df32f5f77fce +Author: Bdale Garbee <bdale@gag.com> +Date:   Thu Aug 5 15:16:24 2010 -0400 + +    update changelogs for Debian build + +commit 410de62715a0830f03b0a65d6c7730dff51e6ef4 +Author: Bdale Garbee <bdale@gag.com> +Date:   Thu Aug 5 15:15:04 2010 -0400 + +    add freetts as a build dep + +commit 0b85160c44d934f3d1352c1c07c296d01ceffc32 +Author: Bdale Garbee <bdale@gag.com> +Date:   Thu Aug 5 15:02:17 2010 -0400 + +    update changelogs for Debian build + +commit d091099753d9cae01c4805812425ebea19ec09cf +Author: Bdale Garbee <bdale@gag.com> +Date:   Thu Aug 5 15:00:46 2010 -0400 + +    update changelogs for Debian build + +commit aed55ef1ce45b0f6e6fefeebf50be97607b31d65 +Author: Bdale Garbee <bdale@gag.com> +Date:   Thu Aug 5 15:00:15 2010 -0400 + +    working on java packaging details + +commit 02f17f2cd26189e2676a9dc0d86bd959ed0bc3f4 +Author: Bdale Garbee <bdale@gag.com> +Date:   Thu Aug 5 00:54:05 2010 -0400 + +    move to science menu + +commit e3a9e3815db3f290e28b40ae02aa654f515cfc37 +Author: Bdale Garbee <bdale@gag.com> +Date:   Sat Jul 31 10:55:27 2010 -0600 + +    update changelogs for Debian build + +commit 8fc261c2b77bb8aab201a0649a84b5ffa236ce26 +Author: Bdale Garbee <bdale@gag.com> +Date:   Sat Jul 31 10:55:07 2010 -0600 + +    see if my new freetts package works + +commit 2f114c7ff6b0deddb790d34139bb11ac37f8c0da +Author: Bdale Garbee <bdale@gag.com> +Date:   Thu Jul 29 13:30:36 2010 -0600 + +    update changelogs for Debian build + +commit 7877496d47ce6d25210c0e1c6500666dbfc0876c +Merge: c71061a 4cf39b1 +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 12:07:49 2010 -0700 + +    Merge remote branch 'origin/master' + +commit c71061a37d3d3be2855b61cde33d2371989d7681 +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 12:06:06 2010 -0700 + +    Make altosui test script executable + +commit 4cf39b13a574cb656999cf329f5b08e7f910604b +Author: Bdale Garbee <bdale@gag.com> +Date:   Thu Jul 29 12:57:31 2010 -0600 + +    update changelogs for Debian build +  commit d1848193d8208388e4ccdfbed4e5663a9ba04dd3  Author: Bdale Garbee <bdale@gag.com>  Date:   Thu Jul 29 12:56:59 2010 -0600      add a jdk to the build deps +commit 9ad4984124b6c05114feac4c4ac078dc248ce16a +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 11:56:24 2010 -0700 + +    altosui: remove option to install to alternate volume +  commit 2e797b18f0724caf7aaf96f45997998c7416f34e  Author: Bdale Garbee <bdale@gag.com>  Date:   Thu Jul 29 12:50:57 2010 -0600 @@ -16,12 +119,24 @@ Date:   Thu Jul 29 12:47:37 2010 -0600      ugh, fixing failure due to aborted build +commit 6fb8546575f6d99676dbb1dce190b0b7cf24b657 +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 11:45:56 2010 -0700 + +    Moved Mac OS packaging to altosui dir +  commit 865d5cdf8931ffc796f608e3e12d7c5a70832825  Author: Bdale Garbee <bdale@gag.com>  Date:   Thu Jul 29 12:45:18 2010 -0600      add swig as a build dep +commit 91d75fb3919f606a1956bf8c6423a8012d99a56a +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 11:45:12 2010 -0700 + +    altosui: Switch eeprom extension back to .eeprom +  commit 33ffd89d5a64c991d28bd7369b61e1faa18f605b  Author: Bdale Garbee <bdale@gag.com>  Date:   Thu Jul 29 12:40:52 2010 -0600 @@ -34,6 +149,70 @@ Date:   Thu Jul 29 12:40:25 2010 -0600      update changelogs for Debian build +commit 6f86db5e0360bef26b21336769b7635e3a11e160 +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 11:24:47 2010 -0700 + +    Add Mac OS X packaging bits +     +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit 950f0a8c54e5835ee5d8b0aea360bd8362c21bc5 +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 11:09:19 2010 -0700 + +    altosui: construct Darwin application directory +     +    This adds the necessary files and build steps to construct +    AltosUI.app on a Darwin system. +     +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit 669c5f52abb972a82ed6efbee7a8c7d20afb5cd0 +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 10:48:52 2010 -0700 + +    libaltos: build with java src encoding UTF8 +     +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit efa0e034a161f4852947cbac06537d6ba4422a0e +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 10:48:25 2010 -0700 + +    altosui: remove debug printf +     +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit 53c279b9e96da8b69837ae84038a78ca5707f2a5 +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 10:45:02 2010 -0700 + +    altosui: Close serial, join reader thread, free altos_file +     +    Separating out the close and free actions ensures that the reader thread will not +    access freed memory or dereference a null pointer while shutting down the +    connection to the serial device. Otherwise, a race condition exists between the +    serial close and the thread join. +     +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit b8bc9994d8bfde6116c8a509e70ddf45fc4decce +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 10:24:59 2010 -0700 + +    altosui: Remove unnecessary freetts .jar files +     +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit e33dbbba94ce42295e9fed9f4ba7e46f9eff1517 +Author: Keith Packard <keithp@keithp.com> +Date:   Thu Jul 29 10:24:09 2010 -0700 + +    altosui: check for closed serial device before reading +     +    Signed-off-by: Keith Packard <keithp@keithp.com> +  commit 27a2d0c00acf78628428c20ab68e2bfba06340da  Author: Bdale Garbee <bdale@gag.com>  Date:   Thu Jul 29 11:02:38 2010 -0600 diff --git a/ao-tools/altosui/AltosCSV.java b/ao-tools/altosui/AltosCSV.java index db50e7a2..4ce8e30e 100644 --- a/ao-tools/altosui/AltosCSV.java +++ b/ao-tools/altosui/AltosCSV.java @@ -76,7 +76,9 @@ public class AltosCSV {  	 *	minute (0-59)  	 *	second (0-59)  	 *	from_pad_dist (m) -	 *	from_pad_dir (deg true) +	 *	from_pad_azimuth (deg true) +	 *	from_pad_range (m) +	 *	from_pad_elevation (deg from horizon)  	 *  	 * GPS Sat data  	 *	hdop @@ -121,7 +123,7 @@ public class AltosCSV {  	}  	void write_gps_header() { -		out.printf("connected locked nsat latitude longitude altitude year month day hour minute second pad_dist pad_dir"); +		out.printf("connected locked nsat latitude longitude altitude year month day hour minute second pad_dist pad_range pad_az pad_el");  	}  	void write_gps(AltosRecord record) { @@ -133,7 +135,7 @@ public class AltosCSV {  		if (from_pad == null)  			from_pad = new AltosGreatCircle(); -		out.printf("%2d,%2d,%3d,%12.7f,%12.7f,%6d,%5d,%3d,%3d,%3d,%3d,%3d,%9.0f,%4.0f", +		out.printf("%2d,%2d,%3d,%12.7f,%12.7f,%6d,%5d,%3d,%3d,%3d,%3d,%3d,%9.0f,%9.0f,%4.0f,%4.0f",  			   gps.connected?1:0,  			   gps.locked?1:0,  			   gps.nsat, @@ -147,7 +149,9 @@ public class AltosCSV {  			   gps.minute,  			   gps.second,  			   from_pad.distance, -			   from_pad.bearing); +			   state.range, +			   from_pad.bearing, +			   state.elevation);  	}  	void write_header() { diff --git a/ao-tools/altosui/AltosEepromReader.java b/ao-tools/altosui/AltosEepromReader.java index 3f2d4c62..0705d44e 100644 --- a/ao-tools/altosui/AltosEepromReader.java +++ b/ao-tools/altosui/AltosEepromReader.java @@ -42,7 +42,7 @@ import altosui.AltosEepromMonitor;   */  class AltosOrderedRecord extends AltosEepromRecord implements Comparable<AltosOrderedRecord> { -	int	index; +	public int	index;  	public AltosOrderedRecord(String line, int in_index, int prev_tick)  		throws ParseException { @@ -56,6 +56,11 @@ class AltosOrderedRecord extends AltosEepromRecord implements Comparable<AltosOr  		index = in_index;  	} +	public AltosOrderedRecord(int in_cmd, int in_tick, int in_a, int in_b, int in_index) { +		super(in_cmd, in_tick, in_a, in_b); +		index = in_index; +	} +  	public int compareTo(AltosOrderedRecord o) {  		int	tick_diff = tick - o.tick;  		if (tick_diff != 0) @@ -100,6 +105,10 @@ public class AltosEepromReader extends AltosReader {  	int			boost_tick; +	boolean			saw_gps_date; + +	boolean			missing_gps_time; +  	public AltosRecord read() throws IOException, ParseException {  		for (;;) {  			if (record == null) { @@ -168,6 +177,12 @@ public class AltosEepromReader extends AltosReader {  				state.gps.date_valid = (flags & Altos.AO_GPS_DATE_VALID) != 0;  				state.gps.nsat = (flags & Altos.AO_GPS_NUM_SAT_MASK) >>  					Altos.AO_GPS_NUM_SAT_SHIFT; +				System.out.printf("GPS %2d:%02d:%02d%s%s%s %d\n", +						  state.gps.hour, state.gps.minute, state.gps.second, +						  state.gps.connected ? " connected" : "", +						  state.gps.locked ? " locked" : "", +						  state.gps.date_valid ? " date_valid" : "", +						  state.gps.nsat);  				break;  			case Altos.AO_LOG_GPS_LAT:  				int lat32 = record.a | (record.b << 16); @@ -268,6 +283,38 @@ public class AltosEepromReader extends AltosReader {  	}  	/* +	 * Given an AO_LOG_GPS_TIME record with correct time, and one +	 * missing time, rewrite the missing time values with the good +	 * ones, assuming that the difference between them is 'diff' seconds +	 */ +	void update_time(AltosOrderedRecord good, AltosOrderedRecord bad) { + +		int diff = (bad.tick - good.tick + 50) / 100; + +		int hour = (good.a & 0xff); +		int minute = (good.a >> 8); +		int second = (good.b & 0xff); +		int flags = (good.b >> 8); +		int seconds = hour * 3600 + minute * 60 + second; + +		int new_seconds = seconds + diff; +		if (new_seconds < 0) +			new_seconds += 24 * 3600; +		int new_second = (new_seconds % 60); +		int new_minutes = (new_seconds / 60); +		int new_minute = (new_minutes % 60); +		int new_hours = (new_minutes / 60); +		int new_hour = (new_hours % 24); + +		System.out.printf("Synthesizing time good %2d:%02d:%02d bad %2d:%02d:%02d\n", +				  hour, minute, second, +				  new_hour, new_minute, new_second); + +		bad.a = new_hour + (new_minute << 8); +		bad.b = new_second + (flags << 8); +	} + +	/*  	 * Read the whole file, dumping records into a RB tree so  	 * we can enumerate them in time order -- the eeprom data  	 * are sometimes out of order with GPS data getting timestamps @@ -282,9 +329,13 @@ public class AltosEepromReader extends AltosReader {  		seen = 0;  		records = new TreeSet<AltosOrderedRecord>(); +		AltosOrderedRecord last_gps_time = null; +  		int index = 0;  		int tick = 0; +		boolean missing_time = false; +  		try {  			for (;;) {  				String line = AltosRecord.gets(input); @@ -300,6 +351,52 @@ public class AltosEepromReader extends AltosReader {  					saw_boost = true;  					boost_tick = tick;  				} + +				/* Two firmware bugs caused the loss of some GPS data. +				 * The flight date would never be recorded, and often +				 * the flight time would get overwritten by another +				 * record. Detect the loss of the GPS date and fix up the +				 * missing time records +				 */ +				if (record.cmd == Altos.AO_LOG_GPS_DATE) +					saw_gps_date = true; + +				/* go back and fix up any missing time values */ +				if (record.cmd == Altos.AO_LOG_GPS_TIME) { +					last_gps_time = record; +					if (missing_time) { +						System.out.printf("Going back to clean up broken GPS time records\n"); +						Iterator<AltosOrderedRecord> iterator = records.iterator(); +						while (iterator.hasNext()) { +							AltosOrderedRecord old = iterator.next(); +							if (old.cmd == Altos.AO_LOG_GPS_TIME) { +								System.out.printf("Old time record %d, %d\n", old.a, old.b); +							} +							if (old.cmd == Altos.AO_LOG_GPS_TIME && +							    old.a == -1 && old.b == -1) +							{ +								update_time(record, old); +							} +						} +						missing_time = false; +					} +				} + +				if (record.cmd == Altos.AO_LOG_GPS_LAT) { +					if (last_gps_time == null || last_gps_time.tick != record.tick) { +						AltosOrderedRecord add_gps_time = new AltosOrderedRecord(Altos.AO_LOG_GPS_TIME, +													 record.tick, +													 -1, -1, index-1); +						if (last_gps_time != null) +							update_time(last_gps_time, add_gps_time); +						else { +							System.out.printf("early GPS missing time\n"); +							missing_time = true; +						} +						records.add(add_gps_time); +						record.index = index++; +					} +				}  				records.add(record);  			}  		} catch (IOException io) { diff --git a/ao-tools/altosui/AltosEepromRecord.java b/ao-tools/altosui/AltosEepromRecord.java index 86ac1fd2..4d0817ab 100644 --- a/ao-tools/altosui/AltosEepromRecord.java +++ b/ao-tools/altosui/AltosEepromRecord.java @@ -44,7 +44,7 @@ public class AltosEepromRecord {  	public int	tick;  	public int	a;  	public int	b; -	String		data; +	public String	data;  	public boolean	tick_valid;  	public AltosEepromRecord (String line) throws ParseException { @@ -107,4 +107,11 @@ public class AltosEepromRecord {  		}  	} +	public AltosEepromRecord(int in_cmd, int in_tick, int in_a, int in_b) { +		tick_valid = true; +		cmd = in_cmd; +		tick = in_tick; +		a = in_a; +		b = in_b; +	}  } diff --git a/ao-tools/altosui/AltosState.java b/ao-tools/altosui/AltosState.java index c13dfe68..3ef00f35 100644 --- a/ao-tools/altosui/AltosState.java +++ b/ao-tools/altosui/AltosState.java @@ -64,6 +64,8 @@ public class AltosState {  	boolean	gps_ready;  	AltosGreatCircle from_pad; +	double	elevation;	/* from pad */ +	double	range;		/* total distance */  	double	gps_height; @@ -124,7 +126,7 @@ public class AltosState {  		}  		if (state == Altos.ao_flight_pad) { -			if (data.gps != null && data.gps.locked && data.gps.nsat >= 4) { +			if (data.gps != null && data.gps.locked) {  				npad++;  				if (npad > 1) {  					/* filter pad position */ @@ -161,11 +163,18 @@ public class AltosState {  		if (data.gps != null) {  			if (gps == null || !gps.locked || data.gps.locked)  				gps = data.gps; -			if (npad > 0 && gps.locked) +			if (npad > 0 && gps.locked) {  				from_pad = new AltosGreatCircle(pad_lat, pad_lon, gps.lat, gps.lon); +			}  		} +		elevation = 0; +		range = -1;  		if (npad > 0) {  			gps_height = gps.alt - pad_alt; +			if (from_pad != null) { +				elevation = Math.atan2(height, from_pad.distance) * 180 / Math.PI; +				range = Math.sqrt(height * height + from_pad.distance * from_pad.distance); +			}  		} else {  			gps_height = 0;  		} diff --git a/ao-tools/altosui/AltosUI.java b/ao-tools/altosui/AltosUI.java index 4f3b5dde..5b48e26f 100644 --- a/ao-tools/altosui/AltosUI.java +++ b/ao-tools/altosui/AltosUI.java @@ -264,7 +264,7 @@ public class AltosUI extends JFrame {  		private AltosState state;  		int	reported_landing; -		public void report(boolean last) { +		public synchronized void report(boolean last) {  			if (state == null)  				return; @@ -278,7 +278,16 @@ public class AltosUI extends JFrame {  			}  			/* If the rocket isn't on the pad, then report height */ -			if (state.state > Altos.ao_flight_pad) { +			if (Altos.ao_flight_drogue <= state.state && +			    state.state < Altos.ao_flight_landed && +			    state.range >= 0) +			{ +				voice.speak("Height %d, bearing %d, elevation %d, range %d.\n", +					    (int) (state.height + 0.5), +					    (int) (state.from_pad.bearing + 0.5), +					    (int) (state.elevation + 0.5), +					    (int) (state.range + 0.5)); +			} else if (state.state > Altos.ao_flight_pad) {  				voice.speak("%d meters", (int) (state.height + 0.5));  			} else {  				reported_landing = 0; @@ -288,7 +297,7 @@ public class AltosUI extends JFrame {  			 * either we've got a landed report or we haven't heard from it in  			 * a long time  			 */ -			if (!state.ascent && +			if (state.state >= Altos.ao_flight_drogue &&  			    (last ||  			     System.currentTimeMillis() - state.report_time >= 15000 ||  			     state.state == Altos.ao_flight_landed)) @@ -298,7 +307,7 @@ public class AltosUI extends JFrame {  				else  					voice.speak("rocket may have crashed");  				if (state.from_pad != null) -					voice.speak("bearing %d degrees, range %d meters", +					voice.speak("Bearing %d degrees, range %d meters.",  						    (int) (state.from_pad.bearing + 0.5),  						    (int) (state.from_pad.distance + 0.5));  				++reported_landing; @@ -311,7 +320,7 @@ public class AltosUI extends JFrame {  			state = null;  			try {  				for (;;) { -					Thread.sleep(10000); +					Thread.sleep(20000);  					report(false);  				}  			} catch (InterruptedException ie) { @@ -319,7 +328,10 @@ public class AltosUI extends JFrame {  		}  		public void notice(AltosState new_state) { +			AltosState old_state = state;  			state = new_state; +			if (old_state != null && old_state.state != state.state) +				report(false);  		}  	} diff --git a/ao-tools/altosui/Manifest.txt b/ao-tools/altosui/Manifest.txt index 251ce2a0..504d0de3 100644 --- a/ao-tools/altosui/Manifest.txt +++ b/ao-tools/altosui/Manifest.txt @@ -1,2 +1,2 @@  Main-Class: altosui.AltosUI -Class-Path: freetts.jar +Class-Path: /usr/share/java/freetts.jar diff --git a/debian/changelog b/debian/changelog index 8d6412f0..6a47c8a7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,34 @@ +altos (0.6+303+gb6da90b) unstable; urgency=low + +  * add freetts as a build dep +  * move to science menu +  * working on java packaging details + + -- Bdale Garbee <bdale@gag.com>  Wed, 11 Aug 2010 22:11:28 -0400 + +altos (0.6+292+g8fc261c) unstable; urgency=low + +  * see if my new freetts package works + + -- Bdale Garbee <bdale@gag.com>  Sat, 31 Jul 2010 10:55:21 -0600 + +altos (0.6+290+g7877496) unstable; urgency=low + +  [ Keith Packard ] +  * altosui: check for closed serial device before reading +  * altosui: Remove unnecessary freetts .jar files +  * altosui: Close serial, join reader thread, free altos_file +  * altosui: remove debug printf +  * libaltos: build with java src encoding UTF8 +  * altosui: construct Darwin application directory +  * Add Mac OS X packaging bits +  * altosui: Switch eeprom extension back to .eeprom +  * Moved Mac OS packaging to altosui dir +  * altosui: remove option to install to alternate volume +  * Make altosui test script executable + + -- Bdale Garbee <bdale@gag.com>  Thu, 29 Jul 2010 13:30:19 -0600 +  altos (0.6+277+gd184819) unstable; urgency=low    [ Bdale Garbee ]  | 
