diff options
Diffstat (limited to 'ao-tools/altosui/AltosDevice.java')
| -rw-r--r-- | ao-tools/altosui/AltosDevice.java | 96 | 
1 files changed, 75 insertions, 21 deletions
| diff --git a/ao-tools/altosui/AltosDevice.java b/ao-tools/altosui/AltosDevice.java index e62a0a7a..f646305b 100644 --- a/ao-tools/altosui/AltosDevice.java +++ b/ao-tools/altosui/AltosDevice.java @@ -22,22 +22,76 @@ import libaltosJNI.*;  public class AltosDevice extends altos_device { -	static boolean initialized = false; -	static { -		try { -			System.loadLibrary("altos"); -			libaltos.altos_init(); +	static public boolean initialized = false; +	static public boolean loaded_library = false; + +	public static boolean load_library() { +		if (!initialized) { +			try { +				System.loadLibrary("altos"); +				libaltos.altos_init(); +				loaded_library = true; +			} catch (UnsatisfiedLinkError e) { +				loaded_library = false; +			}  			initialized = true; -		} catch (UnsatisfiedLinkError e) { -			System.err.println("Native library failed to load.\n" + e);  		} +		return loaded_library; +	} + +	static int usb_vendor_altusmetrum() { +		if (load_library()) +			return libaltosConstants.USB_VENDOR_ALTUSMETRUM; +		return 0x000a; +	} + +	static int usb_product_altusmetrum() { +		if (load_library()) +			return libaltosConstants.USB_PRODUCT_ALTUSMETRUM; +		return 0x000a; +	} + +	static int usb_product_altusmetrum_min() { +		if (load_library()) +			return libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MIN; +		return 0x000a; +	} + +	static int usb_product_altusmetrum_max() { +		if (load_library()) +			return libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MAX; +		return 0x000d;  	} -	public final static int AltusMetrum = libaltosConstants.USB_PRODUCT_ALTUSMETRUM; -	public final static int TeleMetrum = libaltosConstants.USB_PRODUCT_TELEMETRUM; -	public final static int TeleDongle = libaltosConstants.USB_PRODUCT_TELEDONGLE; -	public final static int TeleTerra = libaltosConstants.USB_PRODUCT_TELETERRA; -	public final static int Any = 0x10000; -	public final static int BaseStation = 0x10000 + 1; + +	static int usb_product_telemetrum() { +		if (load_library()) +			return libaltosConstants.USB_PRODUCT_TELEMETRUM; +		return 0x000b; +	} + +	static int usb_product_teledongle() { +		if (load_library()) +			return libaltosConstants.USB_PRODUCT_TELEDONGLE; +		return 0x000c; +	} + +	static int usb_product_teleterra() { +		if (load_library()) +			return libaltosConstants.USB_PRODUCT_TELETERRA; +		return 0x000d; +	} + +	public final static int vendor_altusmetrum = usb_vendor_altusmetrum(); +	public final static int product_altusmetrum = usb_product_altusmetrum(); +	public final static int product_telemetrum = usb_product_telemetrum(); +	public final static int product_teledongle = usb_product_teledongle(); +	public final static int product_teleterra = usb_product_teleterra(); +	public final static int product_altusmetrum_min = usb_product_altusmetrum_min(); +	public final static int product_altusmetrum_max = usb_product_altusmetrum_max(); + + +	public final static int product_any = 0x10000; +	public final static int product_basestation = 0x10000 + 1;  	public String toString() {  		String	name = getName(); @@ -48,11 +102,11 @@ public class AltosDevice extends altos_device {  	}  	public boolean isAltusMetrum() { -		if (getVendor() != libaltosConstants.USB_VENDOR_ALTUSMETRUM) +		if (getVendor() != vendor_altusmetrum)  			return false; -		if (getProduct() < libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MIN) +		if (getProduct() < product_altusmetrum_min)  			return false; -		if (getProduct() > libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MAX) +		if (getProduct() > product_altusmetrum_max)  			return false;  		return true;  	} @@ -62,15 +116,15 @@ public class AltosDevice extends altos_device {  		if (!isAltusMetrum())  			return false; -		if (want_product == Any) +		if (want_product == product_any)  			return true; -		if (want_product == BaseStation) -			return matchProduct(TeleDongle) || matchProduct(TeleTerra); +		if (want_product == product_basestation) +			return matchProduct(product_teledongle) || matchProduct(product_teleterra);  		int have_product = getProduct(); -		if (have_product == AltusMetrum)	/* old devices match any request */ +		if (have_product == product_altusmetrum)	/* old devices match any request */  			return true;  		if (want_product == have_product) @@ -80,7 +134,7 @@ public class AltosDevice extends altos_device {  	}  	static AltosDevice[] list(int product) { -		if (!initialized) +		if (!load_library())  			return null;  		SWIGTYPE_p_altos_list list = libaltos.altos_list_start(); | 
