From: Keith Packard Date: Thu, 20 Sep 2012 09:30:11 +0000 (+0200) Subject: Merge remote-tracking branch 'mjb/prefs_interface' X-Git-Tag: 1.1.9.1~54 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=e69a433fd93b9f6bd2297d8045eb075fee29e73b;hp=6e0d672b8a516a604d8ea1abd2bed113c608143f Merge remote-tracking branch 'mjb/prefs_interface' --- diff --git a/ChangeLog b/ChangeLog index bc9670f1..762b06b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,331 @@ +commit 0cd443d5e55b2c3b97ecf53389ff76bc4bc6018f +Author: Keith Packard +Date: Sun Sep 16 12:38:33 2012 -0700 + + Add release notes for version 1.1.1 + + Signed-off-by: Keith Packard + +commit cb48dd0b03b445437f751028e8383610b65b0a68 +Author: Keith Packard +Date: Sun Sep 16 02:39:25 2012 -0700 + + altos: Fix telemini sdcdb init file + + Set the driver source path for the debugger + + Signed-off-by: Keith Packard + +commit 3520bbf1ed6461d1ce7af001c529563a3cffa3c9 +Author: Keith Packard +Date: Sun Sep 16 00:58:20 2012 -0700 + + altosui: Gather Tm sensor data in Monitor Idle mode + + Tm is pretty much the same as TM for the analog sensors, it's just + missing the accelerometr. Use the same code for constructing an + AltosRecord for it + + Signed-off-by: Keith Packard + +commit 31f5a02654cbf172beed25f4c518dfb7be8c714e +Author: Keith Packard +Date: Fri Sep 14 16:56:04 2012 -0700 + + altos: Need to use 16-bit counts for ao_xmem functions + + Trying to use 8-bit counts is a nice optimization which fails when the + count is larger than 255, as is the case with clearing the flash block + in the AT45 driver. This bug resulted in the inability to erase + flights on TeleMetrum v1.0 boards. + + Signed-off-by: Keith Packard + +commit b898cf0a2abf2b0478d5afc5aca030c6b4c8bd0b +Author: Keith Packard +Date: Fri Sep 14 12:59:31 2012 -0700 + + altosui: Show over-ground-distance in Descent tab + + Helps to know where the rocket might land. + + Signed-off-by: Keith Packard + +commit f36f73b2d02b72201683cf5795851034bbd6f28e +Author: Keith Packard +Date: Fri Sep 14 12:58:54 2012 -0700 + + altosui: Remove debugging from KML export + + Left in from testing the Eeprom export bug + + Signed-off-by: Keith Packard + +commit 97ab77d548964115e4b41ad5952194fcd1455c96 +Author: Keith Packard +Date: Fri Sep 14 11:13:02 2012 -0700 + + altosui: Fix Landed tab units + + And clean up the whole flight value reporting code base. It would be + nice to create a separate class to make this easier; at present + there's a bunch of customization embedded in how values are presented + in each tab. + + Reported by: Bdale Garbee + Signed-off-by: Keith Packard + +commit 43e646657502f6162fa02f37fd2bd5aa3e29a1a8 +Author: Keith Packard +Date: Fri Sep 14 11:08:57 2012 -0700 + + altoslib: Update GPS seen_values in AltosEepromIterable + + Otherwise, KML export won't ever get GPS data to write. + + Reported by: Bob Brown + Signed-off-by: Keith Packard + +commit 7b6dd9105ba36aa11d6d0ee6e0823965b9beffb9 +Author: Keith Packard +Date: Fri Sep 14 11:08:19 2012 -0700 + + altoslib: Remove duplicate seen_ values in AltosEepromIterable + + These are defined in AltosRecord; duplicating them is not a good plan + + Signed-off-by: Keith Packard + +commit eefcfa94f360f8c5a7233370d4178525bccbb22f +Author: Bdale Garbee +Date: Thu Sep 13 16:13:42 2012 -0600 + + add note about checking doc copyright date and revision history to Releasing + +commit 2441090f26c3df66a6ce48d64e64384ce9e5ef82 +Author: Keith Packard +Date: Thu Sep 13 15:12:33 2012 -0700 + + doc: Add revision history for 1.1. Update copyright date + + Signed-off-by: Keith Packard + +commit 320d90c376dccfe1599505e3b485df8d46e34bb3 +Merge: 9a7d643 2e6c6a6 +Author: Bdale Garbee +Date: Thu Sep 13 15:36:37 2012 -0600 + + Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos + +commit 2e6c6a6c15a7cff9f20b70a4cf58697da1302f01 +Author: Keith Packard +Date: Thu Sep 13 00:35:27 2012 -0700 + + doc: Document imperial units and groundstation configuration + + What it says on the tin. + + Signed-off-by: Keith Packard + +commit 9a7d6431777ce3377b788ddac6cb9fadd53c039c +Merge: 2439f53 9728b20 +Author: Bdale Garbee +Date: Thu Sep 13 00:58:30 2012 -0600 + + Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos + +commit 9728b20a4ad9576ac1022dc9a5771f5a3eb92b3d +Author: Keith Packard +Date: Wed Sep 12 23:56:18 2012 -0700 + + altosui: Exit with an error status when file processing fails + + If the user provides any files on the command line, and if processing + them fails in some way, exit immediately with an error indication. + + Signed-off-by: Keith Packard + +commit 0564f9b13d4e3050b0a45fc1c4f710ab2b1f9d81 +Author: Keith Packard +Date: Wed Sep 12 22:40:57 2012 -0700 + + altosui: Leave new_gps indication until gps value is used + + During replay, AltosState may not see a new GPS value as soon as it + lands in the state field as additional records with the same timestamp + may come in after the GPS record. + + Instead of resetting the new_gps indication when the new record is + created, wait until the new_gps indication is seen by the AltosState + update code and have that clear the new_gps indication. + + Signed-off-by: Keith Packard + +commit 7e237920abb582d7ceb3e1925b11a848575ac68a +Author: Keith Packard +Date: Wed Sep 12 21:32:25 2012 -0700 + + altosui: Stop downloading eeprom data on a block full of invalid data + + When no valid records are found within an eeprom block, we assume that + no more data will be found within the entire storage area. + + Signed-off-by: Keith Packard + +commit 2439f53ea21c84f7c510dc191dde025ada24281f +Author: Bdale Garbee +Date: Wed Sep 12 21:50:25 2012 -0600 + + document workaround for 'make fat' not building altoslib + +commit 07d9ba938f2742da1bce5d8df55cbc236207a981 +Author: Bdale Garbee +Date: Wed Sep 12 19:50:07 2012 -0600 + + update Releasing for non-native versioning and builds on debian branch + +commit fe009534ce6846b6db96cac8f6c2d53ba8010d91 +Merge: 69d42b2 8ee29fe +Author: Bdale Garbee +Date: Wed Sep 12 19:49:51 2012 -0600 + + Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos + +commit 8ee29fe48771dd22a0c5428761ee53a728495d11 +Author: Keith Packard +Date: Wed Sep 12 16:07:41 2012 -0700 + + altosui: Serialize data access in TD config code + + Setting the values was being done in the UI thread instead of the + Serial thread, which left the serial thread with uninitialized values + when it went to update the displayed value for the current + frequency. All fixed now. + + Signed-off-by: Keith Packard + +commit 19e35de47157923670b1864ce7b04f8d82f3bdea +Author: Keith Packard +Date: Wed Sep 12 16:06:59 2012 -0700 + + altosui: Lock access to preferences data + + These are accessed by several different threads, so keep things sane + by just holding locks across all access. + + Signed-off-by: Keith Packard + +commit 1b5340c2b75c500011355c4889da443c4b9c4891 +Author: Keith Packard +Date: Wed Sep 12 13:07:01 2012 -0700 + + altosui: Add multi-sized icons to all windows + + This lets the window system pick a better size for presentation + + Signed-off-by: Keith Packard + +commit 3e4fc0b3953655eb720372d9b4274cd4bca19556 +Author: Tom Marble +Date: Wed Sep 12 10:05:42 2012 -0500 + + Reference specific dependent jars in the AltosUI launchers + +commit f0f4f907042e12815284abe1b63ae2d4a5a2d598 +Author: Keith Packard +Date: Wed Sep 12 02:30:59 2012 -0700 + + doc: Mention changes to flight data download UI + + Signed-off-by: Keith Packard + +commit 42bbe15512533f2d958b8219a02fbd256593092a +Author: Keith Packard +Date: Wed Sep 12 02:26:32 2012 -0700 + + altosui: Initialize flight velocity to zero when reading eeprom files + + Otherwise, the integration of velocity will start at MISSING and get + stranger. Fortunately, we know the initial velocity of the rocket when + sitting on the pad. + + Signed-off-by: Keith Packard + +commit b3c3c6eabd6837f0e72acee3906c8f71c6f0030e +Author: Keith Packard +Date: Tue Sep 11 23:37:20 2012 -0700 + + altosui: Don't say a decimal point for distances in meters + + Useful for distances in miles, but not meters. + + Signed-off-by: Keith Packard + +commit 87f9a8923656f275f74cfb6c8c6a57bbe59e74f8 +Author: Keith Packard +Date: Tue Sep 11 23:36:26 2012 -0700 + + altosui: Initialize imperial units checkbox with correct value + + Use imperial units preference instead of serial debug preference. Cut + & paste programming failure... + + Signed-off-by: Keith Packard + +commit 69d42b26223b45df4167aa3baafba100ad71baab +Merge: 3e9078c 3fa5fbd +Author: Bdale Garbee +Date: Wed Sep 12 00:26:21 2012 -0600 + + Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos + +commit 3fa5fbdfd1ab257028f272fbc32759b39608ddaf +Author: Keith Packard +Date: Tue Sep 11 23:04:19 2012 -0700 + + Clean up Windows event handles on com port close + + This avoids having to wait for the receiver to timeout before we can + open the same com port again. + + This patch also adds a bit more debugging -- it prints Windows error + messages to stdout along with the file/line where the error was generated. + + Signed-off-by: Keith Packard + +commit 1a154ce0b9fc3ea360d6bc7e17d6debb2da94438 +Author: Keith Packard +Date: Tue Sep 11 22:03:17 2012 -0700 + + Include AltosLib.jar in windows install + + Otherwise, altosui doesn't do much. + + Signed-off-by: Keith Packard + +commit 3e9078cb1077e7ad0d845f10c2ad0a007df76d29 +Author: Bdale Garbee +Date: Tue Sep 11 22:17:22 2012 -0600 + + releasing 1.1 + +commit 4563624638884b7b2f16cd4d396c00690e045999 +Merge: 11fbcf5 e5a55db +Author: Tom Marble +Date: Tue Sep 11 22:50:18 2012 -0500 + + Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos + +commit 11fbcf5e30e0cd09f2d6b448911d2ef62b7f29c7 +Author: Tom Marble +Date: Tue Sep 11 22:48:04 2012 -0500 + + Added the feature to AC to default --with-android to $ANDROID_SDK (if set) + Fixed typos in altosui/Makefile.am (had removed JCOMMON, but it's from AC) + Jenkins changes: + - added android sdk + - will now record artifacts: altoslib/AltosLib.jar,altosui/altosui.jar,**/*.apk + commit e5a55dbf265354e7c94be3e2be53c2d5c8fba056 Author: Keith Packard Date: Tue Sep 11 15:53:36 2012 -0700 diff --git a/Releasing b/Releasing index 537388fd..973cb01f 100644 --- a/Releasing +++ b/Releasing @@ -1,6 +1,12 @@ These are Bdale's notes on how to do a release. git checkout master + + - make sure there is a doc/release-notes-.xsl + - make sure that doc/altusmetrum.xsl has the right copyright year, + and add release to the revision history at the front (release notes + will be pulled in automatically) + - update the version in configure.ac git log > ChangeLog git commit -a @@ -24,8 +30,14 @@ These are Bdale's notes on how to do a release. git commit -n debian/changelog -m "update changelog for Debian build" - git-buildpackage --git-no-pristine-tar - pristine-tar commit ../build-area/altos/altos_.orig.tar.gz + - if this is a -1 release, then + git-buildpackage --git-no-pristine-tar + pristine-tar commit \ + ../build-area/altos/altos_.orig.tar.gz \ + branch- + else if this is not a -1 release + git-buildpackage + git tag debian/ - at this point we have packages in ~/debian/build-area/altos, now @@ -41,10 +53,6 @@ These are Bdale's notes on how to do a release. - copy the relevant release notes file from doc/ to /home/bdale/web/altusmetrum/AltOS/releases/ - - make sure that doc/altusmetrum.xsl has the right copyright year, - and add release to the revision history at the front (release notes - will be pulled in automatically) - - go edit ~/web/altusmetrum/AltOS/releases/.mdwn to include release date and explicit ref to dir contents so the AltOS page shows versioned links, commit and push @@ -54,7 +62,7 @@ These are Bdale's notes on how to do a release. this pushes fresh documents to the web site sudo debian/rules clean - git push + git push origin master branch-1.1 debian git push --tags push commits and leave the build tree in an uncluttered state diff --git a/altoslib/AltosEepromIterable.java b/altoslib/AltosEepromIterable.java index 2ac10e85..986b7a2c 100644 --- a/altoslib/AltosEepromIterable.java +++ b/altoslib/AltosEepromIterable.java @@ -23,15 +23,7 @@ import java.text.*; public class AltosEepromIterable extends AltosRecordIterable { - static final int seen_flight = 1; - static final int seen_sensor = 2; - static final int seen_temp_volt = 4; - static final int seen_deploy = 8; - static final int seen_gps_time = 16; - static final int seen_gps_lat = 32; - static final int seen_gps_lon = 64; - - static final int seen_basic = seen_flight|seen_sensor; + static final int seen_basic = AltosRecord.seen_flight|AltosRecord.seen_sensor; boolean has_accel; boolean has_gps; @@ -64,7 +56,7 @@ public class AltosEepromIterable extends AltosRecordIterable { state.tick = record.tick; switch (record.cmd) { case AltosLib.AO_LOG_FLIGHT: - eeprom.seen |= seen_flight; + eeprom.seen |= AltosRecord.seen_flight; state.ground_accel = record.a; state.flight_accel = record.a; state.flight = record.b; @@ -82,10 +74,10 @@ public class AltosEepromIterable extends AltosRecordIterable { state.flight_pres = (state.flight_pres * 15 + state.pres) / 16; } state.flight_accel = (state.flight_accel * 15 + state.accel) / 16; - if ((eeprom.seen & seen_sensor) == 0) + if ((eeprom.seen & AltosRecord.seen_sensor) == 0) eeprom.sensor_tick = record.tick - 1; state.flight_vel += (state.accel_plus_g - state.accel) * (record.tick - eeprom.sensor_tick); - eeprom.seen |= seen_sensor; + eeprom.seen |= AltosRecord.seen_sensor; eeprom.sensor_tick = record.tick; has_accel = true; break; @@ -96,17 +88,17 @@ public class AltosEepromIterable extends AltosRecordIterable { eeprom.n_pad_samples++; state.ground_pres = state.pres; } - eeprom.seen |= seen_sensor; + eeprom.seen |= AltosRecord.seen_sensor; break; case AltosLib.AO_LOG_TEMP_VOLT: state.temp = record.a; state.batt = record.b; - eeprom.seen |= seen_temp_volt; + eeprom.seen |= AltosRecord.seen_temp_volt; break; case AltosLib.AO_LOG_DEPLOY: state.drogue = record.a; state.main = record.b; - eeprom.seen |= seen_deploy; + eeprom.seen |= AltosRecord.seen_deploy; has_ignite = true; break; case AltosLib.AO_LOG_STATE: @@ -114,6 +106,7 @@ public class AltosEepromIterable extends AltosRecordIterable { break; case AltosLib.AO_LOG_GPS_TIME: eeprom.gps_tick = state.tick; + eeprom.seen |= AltosRecord.seen_gps_time; AltosGPS old = state.gps; state.gps = new AltosGPS(); @@ -136,10 +129,12 @@ public class AltosEepromIterable extends AltosRecordIterable { has_gps = true; break; case AltosLib.AO_LOG_GPS_LAT: + eeprom.seen |= AltosRecord.seen_gps_lat; int lat32 = record.a | (record.b << 16); state.gps.lat = (double) lat32 / 1e7; break; case AltosLib.AO_LOG_GPS_LON: + eeprom.seen |= AltosRecord.seen_gps_lon; int lon32 = record.a | (record.b << 16); state.gps.lon = (double) lon32 / 1e7; break; diff --git a/altoslib/AltosIdleMonitor.java b/altoslib/AltosIdleMonitor.java index ae3b7b06..2c4965ff 100644 --- a/altoslib/AltosIdleMonitor.java +++ b/altoslib/AltosIdleMonitor.java @@ -45,6 +45,42 @@ public class AltosIdleMonitor extends Thread { return rssi; } + boolean has_sensor_tm(AltosConfigData config_data) { + return config_data.product.startsWith("TeleMetrum") || config_data.product.startsWith("TeleMini"); + } + + boolean has_sensor_mm(AltosConfigData config_data) { + return config_data.product.startsWith("MegaMetrum"); + } + + boolean has_gps(AltosConfigData config_data) { + return config_data.product.startsWith("TeleMetrum") || config_data.product.startsWith("MegaMetrum"); + } + + AltosRecord sensor_mm(AltosConfigData config_data) throws InterruptedException, TimeoutException { + AltosRecordMM record_mm = new AltosRecordMM(); + AltosSensorMM sensor = new AltosSensorMM(link); + AltosMs5607 ms5607 = new AltosMs5607Query(link); + AltosIMU imu = new AltosIMUQuery(link); + + record_mm.accel_plus_g = config_data.accel_cal_plus; + record_mm.accel_minus_g = config_data.accel_cal_minus; + + record_mm.ground_accel = sensor.accel; + record_mm.accel = sensor.accel; + record_mm.ground_pres = ms5607.pa; + record_mm.pres = ms5607.pa; + record_mm.temp = ms5607.cc; + + record_mm.v_batt = sensor.v_batt; + record_mm.v_pyro = sensor.v_pyro; + record_mm.sense = sensor.sense; + + record_mm.imu = imu; + + return record_mm; + } + void update_state() throws InterruptedException, TimeoutException { AltosRecord record = null; @@ -55,34 +91,16 @@ public class AltosIdleMonitor extends Thread { } else link.flush_input(); config_data = new AltosConfigData(link); - if (config_data.product.startsWith("TeleMetrum")) { - record = new AltosSensorTM(link, config_data); - } else if (config_data.product.startsWith("MegaMetrum")) { - AltosRecordMM record_mm = new AltosRecordMM(); - AltosSensorMM sensor = new AltosSensorMM(link); - AltosMs5607 ms5607 = new AltosMs5607Query(link); - AltosIMU imu = new AltosIMUQuery(link); - - record_mm.accel_plus_g = config_data.accel_cal_plus; - record_mm.accel_minus_g = config_data.accel_cal_minus; - record_mm.ground_accel = sensor.accel; - record_mm.accel = sensor.accel; - record_mm.ground_pres = ms5607.pa; - record_mm.pres = ms5607.pa; - record_mm.temp = ms5607.cc; - - record_mm.v_batt = sensor.v_batt; - record_mm.v_pyro = sensor.v_pyro; - record_mm.sense = sensor.sense; - - record_mm.imu = imu; - - record = record_mm; - } else + if (has_sensor_tm(config_data)) + record = new AltosSensorTM(link, config_data); + else if (has_sensor_mm(config_data)) + record = sensor_mm(config_data); + else record = new AltosRecord(); - gps = new AltosGPSQuery(link, config_data); + if (has_gps(config_data)) + gps = new AltosGPSQuery(link, config_data); record.version = 0; record.callsign = config_data.callsign; diff --git a/altosui/AltosAscent.java b/altosui/AltosAscent.java index 945af7e2..007c74ec 100644 --- a/altosui/AltosAscent.java +++ b/altosui/AltosAscent.java @@ -43,6 +43,20 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { } void show(AltosState state, int crc_errors) {} + + void show(String s) { + show(); + value.setText(s); + } + + void show(AltosUnits units, double v) { + show(units.show(8, v)); + } + + void show(String format, double v) { + show(String.format(format, v)); + } + void reset() { value.setText(""); lights.set(false); @@ -104,6 +118,19 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { value.setVisible(true); } + void show(String s) { + show(); + value.setText(s); + } + + void show(AltosUnits units, double v) { + show(units.show(8, v)); + } + + void show(String format, double v) { + show(String.format(format, v)); + } + void hide() { label.setVisible(false); value.setVisible(false); @@ -260,8 +287,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { class Apogee extends AscentStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.drogue_sense)); + show("%4.2f V", state.drogue_sense); lights.set(state.drogue_sense > 3.2); } public Apogee (GridBagLayout layout, int y) { @@ -273,8 +299,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { class Main extends AscentStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.main_sense)); + show("%4.2f V", state.main_sense); lights.set(state.main_sense > 3.2); } public Main (GridBagLayout layout, int y) { @@ -286,11 +311,10 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { class Lat extends AscentValue { void show (AltosState state, int crc_errors) { - show(); if (state.gps != null) - value.setText(pos(state.gps.lat,"N", "S")); + show(pos(state.gps.lat,"N", "S")); else - value.setText("???"); + show("???"); } public Lat (GridBagLayout layout, int y) { super (layout, y, "Latitude"); @@ -301,11 +325,10 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { class Lon extends AscentValue { void show (AltosState state, int crc_errors) { - show(); if (state.gps != null) - value.setText(pos(state.gps.lon,"E", "W")); + show(pos(state.gps.lon,"E", "W")); else - value.setText("???"); + show("???"); } public Lon (GridBagLayout layout, int y) { super (layout, y, "Longitude"); diff --git a/altosui/AltosDescent.java b/altosui/AltosDescent.java index 61709afe..e9ff590b 100644 --- a/altosui/AltosDescent.java +++ b/altosui/AltosDescent.java @@ -37,6 +37,15 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { lights.setVisible(true); } + void show(String s) { + show(); + value.setText(s); + } + + void show(String format, double value) { + show(String.format(format, value)); + } + void hide() { label.setVisible(false); value.setVisible(false); @@ -111,16 +120,17 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { value.setVisible(false); } - void show(AltosUnits units, double v) { - value.setText(units.show(8, v)); + void show(String v) { + show(); + value.setText(v); } - void show(String format, double v) { - value.setText(String.format(format, v)); + void show(AltosUnits units, double v) { + show(units.show(8, v)); } - void show(String v) { - value.setText(v); + void show(String format, double v) { + show(String.format(format, v)); } void set_font() { @@ -297,10 +307,22 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { Lon lon; + class Distance extends DescentValue { + void show(AltosState state, int crc_errors) { + show(AltosConvert.distance, state.from_pad.distance); + } + + public Distance (GridBagLayout layout, int x, int y) { + super(layout, x, y, "Ground Distance"); + } + } + + Distance distance; + + class Apogee extends DescentStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.drogue_sense)); + show("%4.2f V", state.drogue_sense); lights.set(state.drogue_sense > 3.2); } public Apogee (GridBagLayout layout, int y) { @@ -312,8 +334,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { class Main extends DescentStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.main_sense)); + show("%4.2f V", state.main_sense); lights.set(state.main_sense > 3.2); } public Main (GridBagLayout layout, int y) { @@ -369,6 +390,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { speed.reset(); bearing.reset(); range.reset(); + distance.reset(); elevation.reset(); main.reset(); apogee.reset(); @@ -381,6 +403,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { speed.set_font(); bearing.set_font(); range.set_font(); + distance.set_font(); elevation.set_font(); main.set_font(); apogee.set_font(); @@ -392,12 +415,14 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { if (state.gps != null && state.gps.connected) { bearing.show(state, crc_errors); range.show(state, crc_errors); + distance.show(state, crc_errors); elevation.show(state, crc_errors); lat.show(state, crc_errors); lon.show(state, crc_errors); } else { bearing.hide(); range.hide(); + distance.hide(); elevation.hide(); lat.hide(); lon.hide(); @@ -423,10 +448,11 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay { elevation = new Elevation(layout, 0, 1); range = new Range(layout, 2, 1); bearing = new Bearing(layout, 0, 2); - lat = new Lat(layout, 0, 3); - lon = new Lon(layout, 2, 3); + distance = new Distance(layout, 0, 3); + lat = new Lat(layout, 0, 4); + lon = new Lon(layout, 2, 4); - apogee = new Apogee(layout, 4); - main = new Main(layout, 5); + apogee = new Apogee(layout, 5); + main = new Main(layout, 6); } } diff --git a/altosui/AltosKML.java b/altosui/AltosKML.java index 952fb141..57339b19 100644 --- a/altosui/AltosKML.java +++ b/altosui/AltosKML.java @@ -130,6 +130,7 @@ public class AltosKML implements AltosWriter { if (gps == null) return; + if ((record.seen & (AltosRecord.seen_flight)) == 0) return; if ((record.seen & (AltosRecord.seen_gps_lat)) == 0) diff --git a/altosui/AltosLanded.java b/altosui/AltosLanded.java index c6ef55fd..57c2d476 100644 --- a/altosui/AltosLanded.java +++ b/altosui/AltosLanded.java @@ -40,6 +40,19 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio value.setVisible(true); } + void show(String s) { + show(); + value.setText(s); + } + + void show(AltosUnits units, double v) { + show(units.show(8, v)); + } + + void show(String format, double v) { + show(String.format(format, v)); + } + public void set_font() { label.setFont(Altos.label_font); value.setFont(Altos.value_font); @@ -50,12 +63,6 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio value.setVisible(false); } - void show(String format, double v) { - show(); - value.setText(String.format(format, v)); - } - - public LandedValue (GridBagLayout layout, int y, String text) { GridBagConstraints c = new GridBagConstraints(); c.weighty = 1; @@ -96,11 +103,10 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio class Lat extends LandedValue { void show (AltosState state, int crc_errors) { - show(); if (state.gps != null && state.gps.connected) - value.setText(pos(state.gps.lat,"N", "S")); + show(pos(state.gps.lat,"N", "S")); else - value.setText("???"); + show("???"); } public Lat (GridBagLayout layout, int y) { super (layout, y, "Latitude"); @@ -113,9 +119,9 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio void show (AltosState state, int crc_errors) { show(); if (state.gps != null && state.gps.connected) - value.setText(pos(state.gps.lon,"E", "W")); + show(pos(state.gps.lon,"E", "W")); else - value.setText("???"); + show("???"); } public Lon (GridBagLayout layout, int y) { super (layout, y, "Longitude"); @@ -130,7 +136,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio if (state.from_pad != null) show("%3.0f°", state.from_pad.bearing); else - value.setText("???"); + show("???"); } public Bearing (GridBagLayout layout, int y) { super (layout, y, "Bearing"); @@ -143,9 +149,9 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio void show (AltosState state, int crc_errors) { show(); if (state.from_pad != null) - show("%6.0f m", state.from_pad.distance); + show(AltosConvert.distance, state.from_pad.distance); else - value.setText("???"); + show("???"); } public Distance (GridBagLayout layout, int y) { super (layout, y, "Distance"); @@ -156,7 +162,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio class Height extends LandedValue { void show (AltosState state, int crc_errors) { - show("%6.0f m", state.max_height); + show(AltosConvert.height, state.max_height); } public Height (GridBagLayout layout, int y) { super (layout, y, "Maximum Height"); @@ -167,7 +173,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio class Speed extends LandedValue { void show (AltosState state, int crc_errors) { - show("%6.0f m/s", state.max_speed); + show(AltosConvert.speed, state.max_speed); } public Speed (GridBagLayout layout, int y) { super (layout, y, "Maximum Speed"); @@ -178,7 +184,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay, Actio class Accel extends LandedValue { void show (AltosState state, int crc_errors) { - show("%6.0f m/s²", state.max_acceleration); + show(AltosConvert.accel, state.max_acceleration); } public Accel (GridBagLayout layout, int y) { super (layout, y, "Maximum Acceleration"); diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java index f2deb165..2d9c8323 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -30,6 +30,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { AltosLights lights; void show(AltosState state, int crc_errors) {} + void reset() { value.setText(""); lights.set(false); @@ -41,6 +42,19 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { lights.setVisible(true); } + void show(String s) { + show(); + value.setText(s); + } + + void show(String format, double value) { + show(String.format(format, value)); + } + + void show(String format, int value) { + show(String.format(format, value)); + } + public void hide() { label.setVisible(false); value.setVisible(false); @@ -108,9 +122,23 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { value.setFont(Altos.value_font); } + void show(String s) { + show(); + value.setText(s); + } + + void show(AltosUnits units, double v) { + show(units.show(8, v)); + } + + void show(String format, double v) { + show(String.format(format, v)); + } + void reset() { value.setText(""); } + public LaunchValue (GridBagLayout layout, int y, String text) { GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad); @@ -140,7 +168,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class Battery extends LaunchStatus { void show (AltosState state, int crc_errors) { - value.setText(String.format("%4.2f V", state.battery)); + show("%4.2f V", state.battery); lights.set(state.battery > 3.7); } public Battery (GridBagLayout layout, int y) { @@ -152,8 +180,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class Apogee extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.drogue_sense)); + show("%4.2f V", state.drogue_sense); lights.set(state.drogue_sense > 3.2); } public Apogee (GridBagLayout layout, int y) { @@ -165,8 +192,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class Main extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4.2f V", state.main_sense)); + show("%4.2f V", state.main_sense); lights.set(state.main_sense > 3.2); } public Main (GridBagLayout layout, int y) { @@ -178,17 +204,16 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class LoggingReady extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); if (state.data.flight != 0) { if (state.data.state <= Altos.ao_flight_pad) - value.setText("Ready to record"); + show("Ready to record"); else if (state.data.state < Altos.ao_flight_landed) - value.setText("Recording data"); + show("Recording data"); else - value.setText("Recorded data"); + show("Recorded data"); } else - value.setText("Storage full"); + show("Storage full"); lights.set(state.data.flight != 0); } public LoggingReady (GridBagLayout layout, int y) { @@ -200,8 +225,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class GPSLocked extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); - value.setText(String.format("%4d sats", state.gps.nsat)); + show("%4d sats", state.gps.nsat); lights.set(state.gps.locked && state.gps.nsat >= 4); } public GPSLocked (GridBagLayout layout, int y) { @@ -213,11 +237,10 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class GPSReady extends LaunchStatus { void show (AltosState state, int crc_errors) { - show(); if (state.gps_ready) - value.setText("Ready"); + show("Ready"); else - value.setText(String.format("Waiting %d", state.gps_waiting)); + show("Waiting %d", state.gps_waiting); lights.set(state.gps_ready); } public GPSReady (GridBagLayout layout, int y) { @@ -240,8 +263,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class PadLat extends LaunchValue { void show (AltosState state, int crc_errors) { - show(); - value.setText(pos(state.pad_lat,"N", "S")); + show(pos(state.pad_lat,"N", "S")); } public PadLat (GridBagLayout layout, int y) { super (layout, y, "Pad Latitude"); @@ -252,8 +274,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class PadLon extends LaunchValue { void show (AltosState state, int crc_errors) { - show(); - value.setText(pos(state.pad_lon,"E", "W")); + show(pos(state.pad_lon,"E", "W")); } public PadLon (GridBagLayout layout, int y) { super (layout, y, "Pad Longitude"); @@ -264,7 +285,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { class PadAlt extends LaunchValue { void show (AltosState state, int crc_errors) { - value.setText(String.format("%4.0f m", state.pad_alt)); + show("%4.0f m", state.pad_alt); } public PadAlt (GridBagLayout layout, int y) { super (layout, y, "Pad Altitude"); diff --git a/configure.ac b/configure.ac index cb765e1e..21cf2ddc 100644 --- a/configure.ac +++ b/configure.ac @@ -18,7 +18,7 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([altos], 1.1) +AC_INIT([altos], 1.1.1) AC_CONFIG_SRCDIR([src/core/ao.h]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE diff --git a/doc/Makefile b/doc/Makefile index fbe8bc11..3e1626f0 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -8,6 +8,7 @@ RELNOTES=\ release-notes-0.9.html \ release-notes-0.9.2.html \ release-notes-1.0.1.html \ + release-notes-1.1.1.html \ release-notes-1.1.html RELNOTES_XSL=$(RELNOTES:.html=.xsl) diff --git a/doc/altusmetrum.xsl b/doc/altusmetrum.xsl index 87220baa..b2677a02 100644 --- a/doc/altusmetrum.xsl +++ b/doc/altusmetrum.xsl @@ -35,6 +35,14 @@ + + 1.1.1 + 16 September 2012 + + Updated for software version 1.1.1 Version 1.1.1 fixes a few + bugs found in version 1.1. + + 1.1 13 September 2012 @@ -872,14 +880,16 @@ NAR #88757, TRA #12200 be below 10m/s when under the main parachute in a dual-deploy flight. - For TeleMetrum altimeters, you can locate the rocket in the sky - using the elevation and - bearing information to figure out where to look. Elevation is - in degrees above the horizon. Bearing is reported in degrees - relative to true north. Range can help figure out how big the - rocket will appear. Note that all of these values are relative - to the pad location. If the elevation is near 90°, the rocket - is over the pad, not over you. + For TeleMetrum altimeters, you can locate the rocket in the + sky using the elevation and bearing information to figure + out where to look. Elevation is in degrees above the + horizon. Bearing is reported in degrees relative to true + north. Range can help figure out how big the rocket will + appear. Ground Distance shows how far it is to a point + directly under the rocket and can help figure out where the + rocket is likely to land. Note that all of these values are + relative to the pad location. If the elevation is near 90°, + the rocket is over the pad, not over you. Finally, the igniter voltages are reported in this tab as @@ -2567,6 +2577,7 @@ NAR #88757, TRA #12200 Release Notes + diff --git a/doc/release-notes-1.1.1.xsl b/doc/release-notes-1.1.1.xsl new file mode 100644 index 00000000..14984a2a --- /dev/null +++ b/doc/release-notes-1.1.1.xsl @@ -0,0 +1,61 @@ + + + +
+ + Version 1.1.1 is a bug-fix release. It fixes a couple of bugs in + AltosUI and one firmware bug that affects TeleMetrum version 1.0 + boards. Thanks to Bob Brown for help diagnosing the Google Earth + file export issue, and for suggesting the addition of the Ground + Distance value in the Descent tab. + + + AltOS Firmware Changes + + + TeleMetrum v1.0 boards use the AT45DB081D flash memory part to + store flight data, which is different from later TeleMetrum + boards. The AltOS v1.1 driver for this chip couldn't erase + memory, leaving it impossible to delete flight data or update + configuration values. This bug doesn't affect newer TeleMetrum + boards, and it doesn't affect the safety of rockets flying + version 1.1 firmware. + + + + + AltosUI Changes + + + Creating a Google Earth file (KML) from on-board flight data + (EEPROM) would generate an empty file. The code responsible + for reading the EEPROM file wasn't ever setting the GPS valid + bits, and so the KML export code thought there was no GPS data + in the file. + + + The “Landed” tab was displaying all values in metric units, + even when AltosUI was configured to display imperial + units. Somehow I just missed this tab when doing the units stuff. + + + The “Descent” tab displays the range to the rocket, which is a + combination of the over-the-ground distance to the rockets + current latitude/longitude and the height of the rocket. As + such, it's useful for knowing how far away the rocket is, but + difficult to use when estimating where the rocket might + eventually land. A new “Ground Distance” field has been added + which displays the distance to a spot right underneath the + rocket. + + + Sensor data wasn't being displayed for TeleMini flight + computers in Monitor Idle mode, including things like battery + voltage. The code that picked which kinds of data to fetch + from the flight computer was missing a check for TeleMini when + deciding whether to fetch the analog sensor data. + + + +
diff --git a/src/cc1111/ao_arch.h b/src/cc1111/ao_arch.h index a97515a7..7fdfad80 100644 --- a/src/cc1111/ao_arch.h +++ b/src/cc1111/ao_arch.h @@ -229,17 +229,17 @@ ao_button_clear(void) __critical; /* ao_string.c */ void -_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint8_t count); +_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint16_t count); #define ao_xmemcpy(d,s,c) _ao_xmemcpy(d,s,c) void -_ao_xmemset(__xdata void *dst, uint8_t value, uint8_t count); +_ao_xmemset(__xdata void *dst, uint8_t value, uint16_t count); #define ao_xmemset(d,v,c) _ao_xmemset(d,v,c) int8_t -_ao_xmemcmp(__xdata void *a, __xdata void *b, uint8_t count); +_ao_xmemcmp(__xdata void *a, __xdata void *b, uint16_t count); #define ao_xmemcmp(d,s,c) _ao_xmemcmp((d), (s), (c)) diff --git a/src/cc1111/ao_string.c b/src/cc1111/ao_string.c index 3a07e47e..85d6383e 100644 --- a/src/cc1111/ao_string.c +++ b/src/cc1111/ao_string.c @@ -18,7 +18,7 @@ #include "ao.h" void -_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint8_t count) +_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint16_t count) { while (count--) { *(__xdata uint8_t *) dst = *(__xdata uint8_t *) src; @@ -28,7 +28,7 @@ _ao_xmemcpy(__xdata void *dst, __xdata void *src, uint8_t count) } void -_ao_xmemset(__xdata void *dst, uint8_t v, uint8_t count) +_ao_xmemset(__xdata void *dst, uint8_t v, uint16_t count) { while (count--) { *(__xdata uint8_t *) dst = v; @@ -37,7 +37,7 @@ _ao_xmemset(__xdata void *dst, uint8_t v, uint8_t count) } int8_t -_ao_xmemcmp(__xdata void *a, __xdata void *b, uint8_t count) +_ao_xmemcmp(__xdata void *a, __xdata void *b, uint16_t count) { while (count--) { int8_t d = *(__xdata int8_t *) a - *(__xdata int8_t *) b; diff --git a/src/telemini-v1.0/.sdcdbrc b/src/telemini-v1.0/.sdcdbrc index 710b4a2f..b9f6129c 100644 --- a/src/telemini-v1.0/.sdcdbrc +++ b/src/telemini-v1.0/.sdcdbrc @@ -1 +1,2 @@ ---directory=.. +--directory=../cc1111:../product:../core:../drivers:. +