diff options
Diffstat (limited to 'altoslib/AltosLib.java')
| -rw-r--r-- | altoslib/AltosLib.java | 71 | 
1 files changed, 64 insertions, 7 deletions
| diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 69c6d604..2e9dc648 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -15,7 +15,7 @@   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.   */ -package org.altusmetrum.altoslib_4; +package org.altusmetrum.altoslib_5;  import java.util.*;  import java.io.*; @@ -51,6 +51,20 @@ public class AltosLib {  	public static final int AO_LOG_SERIAL_NUMBER = 2002;  	public static final int AO_LOG_LOG_FORMAT = 2003; +	public static final int AO_LOG_FREQUENCY = 2004; +	public static final int AO_LOG_APOGEE_LOCKOUT = 2005; +	public static final int AO_LOG_RADIO_RATE = 2006; +	public static final int AO_LOG_IGNITE_MODE = 2007; +	public static final int AO_LOG_PAD_ORIENTATION = 2008; +	public static final int AO_LOG_RADIO_ENABLE = 2009; +	public static final int AO_LOG_AES_KEY = 2010; +	public static final int AO_LOG_APRS = 2011; +	public static final int AO_LOG_BEEP_SETTING = 2012; +	public static final int AO_LOG_TRACKER_SETTING = 2013; +	public static final int AO_LOG_PYRO_TIME = 2014; +	public static final int AO_LOG_APRS_ID = 2015; +	public static final int AO_LOG_ALTITUDE_32 = 2016; +  	/* Added for header fields in telemega files */  	public static final int AO_LOG_BARO_RESERVED = 3000;  	public static final int AO_LOG_BARO_SENS = 3001; @@ -98,6 +112,7 @@ public class AltosLib {  	public final static int product_telegps = 0x0025;  	public final static int product_easymini = 0x0026;  	public final static int product_telemini = 0x0027; +	public final static int product_easymega = 0x0028;  	public final static int product_altusmetrum_min = 0x000a;  	public final static int product_altusmetrum_max = 0x002c; @@ -129,7 +144,8 @@ public class AltosLib {  		new Product("megadongle", product_megadongle),  		new Product("telegps", product_telegps),  		new Product("easymini", product_easymini), -		new Product("telemini", product_telemini) +		new Product("telemini", product_telemini), +		new Product("easymega", product_easymega)  	};  	public static int name_to_product(String name) { @@ -161,6 +177,15 @@ public class AltosLib {  		"Off", "Standard Telemetry", "TeleMetrum v0.9", "TeleMetrum v0.8"  	}; +	public static final int ao_telemetry_rate_38400 = 0; +	public static final int ao_telemetry_rate_9600 = 1; +	public static final int ao_telemetry_rate_2400 = 2; +	public static final int ao_telemetry_rate_max = 2; + +	public static final Integer[] ao_telemetry_rate_values = { +		38400, 9600, 2400 +	}; +  	public static final String launch_sites_url = "http://www.altusmetrum.org/AltOS/launch-sites.txt";  	public static final int ao_telemetry_standard_len = 32; @@ -206,6 +231,31 @@ public class AltosLib {  								 telemetry));  	} +	private static int[] split_version(String version) { +		String[] tokens = version.split("\\."); +		int[] ret = new int[tokens.length]; +		for (int i = 0; i < tokens.length; i++) +			ret[i] = Integer.parseInt(tokens[i]); +		return ret; +	} + +	public static int compare_version(String version_a, String version_b) { +		int[] a = split_version(version_a); +		int[] b = split_version(version_b); + +		for (int i = 0; i < Math.min(a.length, b.length); i++) { +			if (a[i] < b[i]) +				return -1; +			if (a[i] > b[i]) +				return 1; +		} +		if (a.length < b.length) +			return -1; +		if (a.length > b.length) +			return 1; +		return 0; +	} +  	private static String[] state_to_string = {  		"startup",  		"idle", @@ -281,7 +331,7 @@ public class AltosLib {  		return false;  	} -	public static boolean ishex(int c) { +	public static final boolean ishex(int c) {  		if ('0' <= c && c <= '9')  			return true;  		if ('a' <= c && c <= 'f') @@ -291,7 +341,7 @@ public class AltosLib {  		return false;  	} -	public static boolean ishex(String s) { +	public static final boolean ishex(String s) {  		for (int i = 0; i < s.length(); i++)  			if (!ishex(s.charAt(i)))  				return false; @@ -415,10 +465,17 @@ public class AltosLib {  		if ((s.length() & 1) != 0)  			throw new NumberFormatException(String.format("invalid line \"%s\"", s)); -		n = s.length() / 2; +		byte[] bytes = s.getBytes(unicode_set); +		n = bytes.length / 2;  		r = new int[n]; -		for (i = 0; i < n; i++) -			r[i] = hexbyte(s, i * 2); +		for (i = 0; i < n; i++) { +			int h = fromhex(bytes[(i << 1)]); +			int l = fromhex(bytes[(i << 1) + 1]); +			if (h < 0 || l < 0) +				throw new NumberFormatException(String.format("invalid hex \"%c%c\"", +									      bytes[(i<<1)], bytes[(i<<1) + 1])); +			r[i] = (h << 4) + l; +		}  		return r;  	} | 
