diff options
| -rw-r--r-- | ChangeLog | 328 | ||||
| -rw-r--r-- | Releasing | 4 | ||||
| -rw-r--r-- | altoslib/AltosEepromIterable.java | 25 | ||||
| -rw-r--r-- | altoslib/AltosIdleMonitor.java | 68 | ||||
| -rw-r--r-- | altosui/AltosAscent.java | 43 | ||||
| -rw-r--r-- | altosui/AltosDescent.java | 54 | ||||
| -rw-r--r-- | altosui/AltosKML.java | 1 | ||||
| -rw-r--r-- | altosui/AltosLanded.java | 40 | ||||
| -rw-r--r-- | altosui/AltosPad.java | 61 | ||||
| -rw-r--r-- | configure.ac | 2 | ||||
| -rw-r--r-- | doc/Makefile | 1 | ||||
| -rw-r--r-- | doc/altusmetrum.xsl | 37 | ||||
| -rw-r--r-- | doc/release-notes-1.1.1.xsl | 61 | ||||
| -rw-r--r-- | src/cc1111/ao_arch.h | 6 | ||||
| -rw-r--r-- | src/cc1111/ao_string.c | 6 | ||||
| -rw-r--r-- | src/telemini-v1.0/.sdcdbrc | 3 | 
16 files changed, 622 insertions, 118 deletions
| @@ -1,3 +1,331 @@ +commit 0cd443d5e55b2c3b97ecf53389ff76bc4bc6018f +Author: Keith Packard <keithp@keithp.com> +Date:   Sun Sep 16 12:38:33 2012 -0700 + +    Add release notes for version 1.1.1 +     +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit cb48dd0b03b445437f751028e8383610b65b0a68 +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 3520bbf1ed6461d1ce7af001c529563a3cffa3c9 +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 31f5a02654cbf172beed25f4c518dfb7be8c714e +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit b898cf0a2abf2b0478d5afc5aca030c6b4c8bd0b +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit f36f73b2d02b72201683cf5795851034bbd6f28e +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 97ab77d548964115e4b41ad5952194fcd1455c96 +Author: Keith Packard <keithp@keithp.com> +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 <bdale@gag.com> +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit 43e646657502f6162fa02f37fd2bd5aa3e29a1a8 +Author: Keith Packard <keithp@keithp.com> +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 <prefect@kloudbusters.org> +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit 7b6dd9105ba36aa11d6d0ee6e0823965b9beffb9 +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit eefcfa94f360f8c5a7233370d4178525bccbb22f +Author: Bdale Garbee <bdale@gag.com> +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 <keithp@keithp.com> +Date:   Thu Sep 13 15:12:33 2012 -0700 + +    doc: Add revision history for 1.1. Update copyright date +     +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit 320d90c376dccfe1599505e3b485df8d46e34bb3 +Merge: 9a7d643 2e6c6a6 +Author: Bdale Garbee <bdale@gag.com> +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 <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 9a7d6431777ce3377b788ddac6cb9fadd53c039c +Merge: 2439f53 9728b20 +Author: Bdale Garbee <bdale@gag.com> +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 <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 0564f9b13d4e3050b0a45fc1c4f710ab2b1f9d81 +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 7e237920abb582d7ceb3e1925b11a848575ac68a +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 2439f53ea21c84f7c510dc191dde025ada24281f +Author: Bdale Garbee <bdale@gag.com> +Date:   Wed Sep 12 21:50:25 2012 -0600 + +    document workaround for 'make fat' not building altoslib + +commit 07d9ba938f2742da1bce5d8df55cbc236207a981 +Author: Bdale Garbee <bdale@gag.com> +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 <bdale@gag.com> +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 <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 19e35de47157923670b1864ce7b04f8d82f3bdea +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 1b5340c2b75c500011355c4889da443c4b9c4891 +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 3e4fc0b3953655eb720372d9b4274cd4bca19556 +Author: Tom Marble <tmarble@info9.net> +Date:   Wed Sep 12 10:05:42 2012 -0500 + +    Reference specific dependent jars in the AltosUI launchers + +commit f0f4f907042e12815284abe1b63ae2d4a5a2d598 +Author: Keith Packard <keithp@keithp.com> +Date:   Wed Sep 12 02:30:59 2012 -0700 + +    doc: Mention changes to flight data download UI +     +    Signed-off-by: Keith Packard <keithp@keithp.com> + +commit 42bbe15512533f2d958b8219a02fbd256593092a +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit b3c3c6eabd6837f0e72acee3906c8f71c6f0030e +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 87f9a8923656f275f74cfb6c8c6a57bbe59e74f8 +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 69d42b26223b45df4167aa3baafba100ad71baab +Merge: 3e9078c 3fa5fbd +Author: Bdale Garbee <bdale@gag.com> +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 <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 1a154ce0b9fc3ea360d6bc7e17d6debb2da94438 +Author: Keith Packard <keithp@keithp.com> +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 <keithp@keithp.com> + +commit 3e9078cb1077e7ad0d845f10c2ad0a007df76d29 +Author: Bdale Garbee <bdale@gag.com> +Date:   Tue Sep 11 22:17:22 2012 -0600 + +    releasing 1.1 + +commit 4563624638884b7b2f16cd4d396c00690e045999 +Merge: 11fbcf5 e5a55db +Author: Tom Marble <tmarble@info9.net> +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 <tmarble@info9.net> +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 <keithp@keithp.com>  Date:   Tue Sep 11 15:53:36 2012 -0700 @@ -41,6 +41,10 @@ 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/<rev> +	- 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/<rev>.mdwn to include  	  release date and explicit ref to dir contents so the AltOS page  	  shows versioned links, commit and push 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 a158eb21..3fe517aa 100644 --- a/altosui/AltosAscent.java +++ b/altosui/AltosAscent.java @@ -51,6 +51,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); @@ -112,6 +126,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); @@ -268,8 +295,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) { @@ -281,8 +307,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) { @@ -294,11 +319,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"); @@ -309,11 +333,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 62258814..2fe7d544 100644 --- a/altosui/AltosDescent.java +++ b/altosui/AltosDescent.java @@ -45,6 +45,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); @@ -119,16 +128,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() { @@ -305,10 +315,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) { @@ -320,8 +342,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) { @@ -377,6 +398,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {  		speed.reset();  		bearing.reset();  		range.reset(); +		distance.reset();  		elevation.reset();  		main.reset();  		apogee.reset(); @@ -389,6 +411,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(); @@ -400,12 +423,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(); @@ -431,10 +456,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 ff0734b8..73a5ae53 100644 --- a/altosui/AltosKML.java +++ b/altosui/AltosKML.java @@ -133,6 +133,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 a47e1cbd..68efae8d 100644 --- a/altosui/AltosLanded.java +++ b/altosui/AltosLanded.java @@ -46,6 +46,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); @@ -56,12 +69,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; @@ -102,11 +109,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"); @@ -119,9 +125,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"); @@ -136,7 +142,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"); @@ -149,9 +155,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"); @@ -162,7 +168,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"); @@ -173,7 +179,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"); @@ -184,7 +190,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 0a3f3d65..947c7540 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -38,6 +38,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {  		AltosLights	lights;  		void show(AltosState state, int crc_errors) {} +  		void reset() {  			value.setText("");  			lights.set(false); @@ -49,6 +50,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); @@ -116,9 +130,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); @@ -148,7 +176,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) { @@ -160,8 +188,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) { @@ -173,8 +200,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) { @@ -186,17 +212,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) { @@ -208,8 +233,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) { @@ -221,11 +245,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) { @@ -248,8 +271,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"); @@ -260,8 +282,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"); @@ -272,7 +293,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 5dd93fdf..b2677a02 100644 --- a/doc/altusmetrum.xsl +++ b/doc/altusmetrum.xsl @@ -22,7 +22,7 @@        <surname>Towns</surname>      </author>      <copyright> -      <year>2011</year> +      <year>2012</year>        <holder>Bdale Garbee and Keith Packard</holder>      </copyright>      <legalnotice> @@ -36,6 +36,22 @@      </legalnotice>      <revhistory>        <revision> +	<revnumber>1.1.1</revnumber> +	<date>16 September 2012</date> +	<revremark> +	  Updated for software version 1.1.1 Version 1.1.1 fixes a few +	  bugs found in version 1.1. +	</revremark> +      </revision> +      <revision> +	<revnumber>1.1</revnumber> +	<date>13 September 2012</date> +	<revremark> +	  Updated for software version 1.1. Version 1.1 has new +	  features but is otherwise compatible with version 1.0. +	</revremark> +      </revision> +      <revision>          <revnumber>1.0</revnumber>          <date>24 August 2011</date>  	<revremark> @@ -864,14 +880,16 @@ NAR #88757, TRA #12200  	  be below 10m/s when under the main parachute in a dual-deploy flight.          </para>          <para> -          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.          </para>          <para>            Finally, the igniter voltages are reported in this tab as @@ -2559,6 +2577,7 @@ NAR #88757, TRA #12200    <appendix        xmlns:xi="http://www.w3.org/2001/XInclude">      <title>Release Notes</title> +    <xi:include	href="release-notes-1.1.1.xsl"  xpointer="xpointer(/article/*)"/>      <xi:include	href="release-notes-1.1.xsl"  xpointer="xpointer(/article/*)"/>      <xi:include	href="release-notes-1.0.1.xsl"  xpointer="xpointer(/article/*)"/>      <xi:include	href="release-notes-0.9.2.xsl"  xpointer="xpointer(/article/*)"/> 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 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" +"/usr/share/xml/docbook/schema/dtd/4.5/docbookx.dtd"> + +<article> +  <para> +    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. +  </para> +  <para> +    AltOS Firmware Changes +    <itemizedlist> +      <listitem> +	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. +      </listitem> +    </itemizedlist> +  </para> +  <para> +    AltosUI Changes +    <itemizedlist> +      <listitem> +	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. +      </listitem> +      <listitem> +	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. +      </listitem> +      <listitem> +	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. +      </listitem> +      <listitem> +	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. +      </listitem> +    </itemizedlist> +  </para> +</article> 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:. + | 
