From: Bdale Garbee Date: Fri, 27 Aug 2010 18:38:25 +0000 (-0600) Subject: Merge branch 'bdale' X-Git-Tag: debian/0.6+373+gcf65c6b~1 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=cf65c6b8056c4af7c26b52ec6f9fbd3400cef638;hp=ae5eff7bc0b63047737223423009707bedcb00f5 Merge branch 'bdale' Conflicts: debian/control --- diff --git a/ChangeLog b/ChangeLog index 8f4ee8e6..33986884 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,112 @@ +commit b6da90b4627dde1fe88240c38c51559d8f781dd0 +Author: Bdale Garbee +Date: Wed Aug 11 17:15:39 2010 -0400 + + update changelogs for Debian build + +commit 4918f73fd0a0f3f5d52907f95a0ec385e901d447 +Author: Bdale Garbee +Date: Wed Aug 11 08:50:27 2010 -0400 + + update changelogs for Debian build + +commit f63f16a70e4d0535667a6364cafcbff026ee6a8c +Author: Bdale Garbee +Date: Wed Aug 11 08:36:59 2010 -0400 + + update changelogs for Debian build + +commit a0a9b445a4d379730b67720f8d7b682d5206a582 +Author: Bdale Garbee +Date: Thu Aug 5 15:16:48 2010 -0400 + + update changelogs for Debian build + +commit e075b8623533965b1b77b77d38c2df32f5f77fce +Author: Bdale Garbee +Date: Thu Aug 5 15:16:24 2010 -0400 + + update changelogs for Debian build + +commit 410de62715a0830f03b0a65d6c7730dff51e6ef4 +Author: Bdale Garbee +Date: Thu Aug 5 15:15:04 2010 -0400 + + add freetts as a build dep + +commit 0b85160c44d934f3d1352c1c07c296d01ceffc32 +Author: Bdale Garbee +Date: Thu Aug 5 15:02:17 2010 -0400 + + update changelogs for Debian build + +commit d091099753d9cae01c4805812425ebea19ec09cf +Author: Bdale Garbee +Date: Thu Aug 5 15:00:46 2010 -0400 + + update changelogs for Debian build + +commit aed55ef1ce45b0f6e6fefeebf50be97607b31d65 +Author: Bdale Garbee +Date: Thu Aug 5 15:00:15 2010 -0400 + + working on java packaging details + +commit 02f17f2cd26189e2676a9dc0d86bd959ed0bc3f4 +Author: Bdale Garbee +Date: Thu Aug 5 00:54:05 2010 -0400 + + move to science menu + +commit e3a9e3815db3f290e28b40ae02aa654f515cfc37 +Author: Bdale Garbee +Date: Sat Jul 31 10:55:27 2010 -0600 + + update changelogs for Debian build + +commit 8fc261c2b77bb8aab201a0649a84b5ffa236ce26 +Author: Bdale Garbee +Date: Sat Jul 31 10:55:07 2010 -0600 + + see if my new freetts package works + +commit 2f114c7ff6b0deddb790d34139bb11ac37f8c0da +Author: Bdale Garbee +Date: Thu Jul 29 13:30:36 2010 -0600 + + update changelogs for Debian build + +commit 7877496d47ce6d25210c0e1c6500666dbfc0876c +Merge: c71061a 4cf39b1 +Author: Keith Packard +Date: Thu Jul 29 12:07:49 2010 -0700 + + Merge remote branch 'origin/master' + +commit c71061a37d3d3be2855b61cde33d2371989d7681 +Author: Keith Packard +Date: Thu Jul 29 12:06:06 2010 -0700 + + Make altosui test script executable + +commit 4cf39b13a574cb656999cf329f5b08e7f910604b +Author: Bdale Garbee +Date: Thu Jul 29 12:57:31 2010 -0600 + + update changelogs for Debian build + commit d1848193d8208388e4ccdfbed4e5663a9ba04dd3 Author: Bdale Garbee Date: Thu Jul 29 12:56:59 2010 -0600 add a jdk to the build deps +commit 9ad4984124b6c05114feac4c4ac078dc248ce16a +Author: Keith Packard +Date: Thu Jul 29 11:56:24 2010 -0700 + + altosui: remove option to install to alternate volume + commit 2e797b18f0724caf7aaf96f45997998c7416f34e Author: Bdale Garbee 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 +Date: Thu Jul 29 11:45:56 2010 -0700 + + Moved Mac OS packaging to altosui dir + commit 865d5cdf8931ffc796f608e3e12d7c5a70832825 Author: Bdale Garbee Date: Thu Jul 29 12:45:18 2010 -0600 add swig as a build dep +commit 91d75fb3919f606a1956bf8c6423a8012d99a56a +Author: Keith Packard +Date: Thu Jul 29 11:45:12 2010 -0700 + + altosui: Switch eeprom extension back to .eeprom + commit 33ffd89d5a64c991d28bd7369b61e1faa18f605b Author: Bdale Garbee 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 +Date: Thu Jul 29 11:24:47 2010 -0700 + + Add Mac OS X packaging bits + + Signed-off-by: Keith Packard + +commit 950f0a8c54e5835ee5d8b0aea360bd8362c21bc5 +Author: Keith Packard +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 + +commit 669c5f52abb972a82ed6efbee7a8c7d20afb5cd0 +Author: Keith Packard +Date: Thu Jul 29 10:48:52 2010 -0700 + + libaltos: build with java src encoding UTF8 + + Signed-off-by: Keith Packard + +commit efa0e034a161f4852947cbac06537d6ba4422a0e +Author: Keith Packard +Date: Thu Jul 29 10:48:25 2010 -0700 + + altosui: remove debug printf + + Signed-off-by: Keith Packard + +commit 53c279b9e96da8b69837ae84038a78ca5707f2a5 +Author: Keith Packard +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 + +commit b8bc9994d8bfde6116c8a509e70ddf45fc4decce +Author: Keith Packard +Date: Thu Jul 29 10:24:59 2010 -0700 + + altosui: Remove unnecessary freetts .jar files + + Signed-off-by: Keith Packard + +commit e33dbbba94ce42295e9fed9f4ba7e46f9eff1517 +Author: Keith Packard +Date: Thu Jul 29 10:24:09 2010 -0700 + + altosui: check for closed serial device before reading + + Signed-off-by: Keith Packard + commit 27a2d0c00acf78628428c20ab68e2bfba06340da Author: Bdale Garbee 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 { - 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> 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); @@ -267,6 +282,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 @@ -282,9 +329,13 @@ public class AltosEepromReader extends AltosReader { seen = 0; records = new TreeSet(); + 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 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 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 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 Thu, 29 Jul 2010 13:30:19 -0600 + altos (0.6+277+gd184819) unstable; urgency=low [ Bdale Garbee ]