diff options
Diffstat (limited to 'altoslib')
| -rw-r--r-- | altoslib/AltosPreferences.java | 21 | ||||
| -rw-r--r-- | altoslib/AltosRecord.java | 12 | ||||
| -rw-r--r-- | altoslib/AltosRecordMM.java | 10 | ||||
| -rw-r--r-- | altoslib/AltosRecordNone.java | 4 | ||||
| -rw-r--r-- | altoslib/AltosRecordTM.java | 8 | ||||
| -rw-r--r-- | altoslib/AltosSpeed.java | 6 | ||||
| -rw-r--r-- | altoslib/AltosState.java | 8 | ||||
| -rw-r--r-- | altoslib/AltosUnitsListener.java | 22 | ||||
| -rw-r--r-- | altoslib/Makefile.am | 1 | 
9 files changed, 69 insertions, 23 deletions
diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index 47196d6e..e50b9b5c 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -367,6 +367,8 @@ public class AltosPreferences {  		set_common_frequencies(new_frequencies);  	} +	static LinkedList<AltosUnitsListener> units_listeners; +  	public static boolean imperial_units() {  		synchronized(backend) {  			return AltosConvert.imperial_units; @@ -379,5 +381,24 @@ public class AltosPreferences {  			backend.putBoolean(unitsPreference, imperial_units);  			flush_preferences();  		} +		if (units_listeners != null) { +			for (AltosUnitsListener l : units_listeners) { +				l.units_changed(imperial_units); +			} +		} +	} + +	public static void register_units_listener(AltosUnitsListener l) { +		synchronized(backend) { +			if (units_listeners == null) +				units_listeners = new LinkedList<AltosUnitsListener>(); +			units_listeners.add(l); +		} +	} + +	public static void unregister_units_listener(AltosUnitsListener l) { +		synchronized(backend) { +			units_listeners.remove(l); +		}  	}  } diff --git a/altoslib/AltosRecord.java b/altoslib/AltosRecord.java index 09169515..2c4b6fa5 100644 --- a/altoslib/AltosRecord.java +++ b/altoslib/AltosRecord.java @@ -126,6 +126,8 @@ public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable  		return tick - o.tick;  	} +	abstract public AltosRecord clone(); +  	public void copy(AltosRecord old) {  		seen = old.seen;  		version = old.version; @@ -144,16 +146,6 @@ public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable  		kalman_height = old.kalman_height;  	} -	public AltosRecord clone() { -		try { -			AltosRecord n = (AltosRecord) super.clone(); -			n.copy(this); -			return n; -		} catch (CloneNotSupportedException e) { -			return null; -		} -	} -  	public AltosRecord() {  		seen = 0;  		version = 0; diff --git a/altoslib/AltosRecordMM.java b/altoslib/AltosRecordMM.java index 9f529234..546f3055 100644 --- a/altoslib/AltosRecordMM.java +++ b/altoslib/AltosRecordMM.java @@ -131,10 +131,10 @@ public class AltosRecordMM extends AltosRecord {  		mag = old.mag;  	} + +  	public AltosRecordMM clone() { -		AltosRecordMM n = (AltosRecordMM) super.clone(); -		n.copy(this); -		return n; +		return new AltosRecordMM(this);  	}  	void make_missing() { @@ -167,6 +167,10 @@ public class AltosRecordMM extends AltosRecord {  		make_missing();  	} +	public AltosRecordMM(AltosRecordMM old) { +		copy(old); +	} +  	public AltosRecordMM() {  		super();  		make_missing(); diff --git a/altoslib/AltosRecordNone.java b/altoslib/AltosRecordNone.java index ca0a5fe3..d4ea305f 100644 --- a/altoslib/AltosRecordNone.java +++ b/altoslib/AltosRecordNone.java @@ -28,6 +28,10 @@ public class AltosRecordNone extends AltosRecord {  		super.copy(old);  	} +	public AltosRecordNone clone() { +		return new AltosRecordNone(this); +	} +  	public AltosRecordNone() {  		super();  	} diff --git a/altoslib/AltosRecordTM.java b/altoslib/AltosRecordTM.java index 9530be31..f6ed4966 100644 --- a/altoslib/AltosRecordTM.java +++ b/altoslib/AltosRecordTM.java @@ -149,9 +149,7 @@ public class AltosRecordTM extends AltosRecord {  	}  	public AltosRecordTM clone() { -		AltosRecordTM	n = (AltosRecordTM) super.clone(); -		n.copy(this); -		return n; +		return new AltosRecordTM(this);  	}  	void make_missing() { @@ -177,6 +175,10 @@ public class AltosRecordTM extends AltosRecord {  		make_missing();  	} +	public AltosRecordTM(AltosRecordTM old) { +		copy(old); +	} +	  	public AltosRecordTM() {  		super();  		make_missing(); diff --git a/altoslib/AltosSpeed.java b/altoslib/AltosSpeed.java index af63ed17..4e2daf5a 100644 --- a/altoslib/AltosSpeed.java +++ b/altoslib/AltosSpeed.java @@ -21,19 +21,19 @@ public class AltosSpeed extends AltosUnits {  	public double value(double v) {  		if (AltosConvert.imperial_units) -			return AltosConvert.meters_to_feet(v); +			return AltosConvert.meters_to_mph(v);  		return v;  	}  	public String show_units() {  		if (AltosConvert.imperial_units) -			return "ft/s"; +			return "mph";  		return "m/s";  	}  	public String say_units() {  		if (AltosConvert.imperial_units) -			return "feet per second"; +			return "miles per hour";  		return "meters per second";  	} diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 218c598a..4f59c840 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -200,10 +200,10 @@ public class AltosState {  				}  				ngps++;  			} -		} else -			pad_alt = ground_altitude; - -		data.new_gps = false; +		} else { +			if (ngps == 0) +				pad_alt = ground_altitude; +		}  		gps_waiting = MIN_PAD_SAMPLES - npad;  		if (gps_waiting < 0) diff --git a/altoslib/AltosUnitsListener.java b/altoslib/AltosUnitsListener.java new file mode 100644 index 00000000..50a00cdf --- /dev/null +++ b/altoslib/AltosUnitsListener.java @@ -0,0 +1,22 @@ +/* + * Copyright © 2012 Keith Packard <keithp@keithp.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.AltosLib; + +public interface AltosUnitsListener { +	public void units_changed(boolean imperial_units); +} diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index 0086bc65..1b03c925 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -69,6 +69,7 @@ AltosLib_JAVA = \  	$(SRC)/AltosTelemetryRecordSensor.java \  	$(SRC)/AltosTelemetryRecordMegaSensor.java \  	$(SRC)/AltosTelemetryRecordMegaData.java \ +	$(SRC)/AltosUnitsListener.java \  	$(SRC)/AltosMs5607.java \  	$(SRC)/AltosIMU.java \  	$(SRC)/AltosMag.java \  | 
