Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
authorBdale Garbee <bdale@gag.com>
Fri, 10 Sep 2010 02:05:27 +0000 (20:05 -0600)
committerBdale Garbee <bdale@gag.com>
Fri, 10 Sep 2010 02:05:27 +0000 (20:05 -0600)
ao-tools/altosui/AltosDevice.java
ao-tools/altosui/AltosDeviceDialog.java
ao-tools/altosui/AltosUI.java
ao-tools/altosui/Makefile.am
ao-tools/libaltos/Makefile.am
configure.ac

index e62a0a7aa31f6b9e610c2c2d06372aae8ce44af3..9ae522c28452b42a1e42fb0abfc5116663f5c269 100644 (file)
@@ -22,20 +22,67 @@ 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_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;
+       }
+
+       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_ALTUSMETRUM;
+               return 0x000c;
+       }
+
+       static int usb_product_teleterra() {
+               if (load_library())
+                       return libaltosConstants.USB_PRODUCT_ALTUSMETRUM;
+               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 AltusMetrum = usb_product_altusmetrum();
+       public final static int TeleMetrum = usb_product_telemetrum();
+       public final static int TeleDongle = usb_product_teledongle();
+       public final static int TeleTerra = usb_product_teleterra();
+       public final static int AltusMetrumMin = usb_product_altusmetrum_min();
+       public final static int AltusMetrumMax = usb_product_altusmetrum_max();
+
+
        public final static int Any = 0x10000;
        public final static int BaseStation = 0x10000 + 1;
 
@@ -48,11 +95,11 @@ public class AltosDevice extends altos_device {
        }
 
        public boolean isAltusMetrum() {
-               if (getVendor() != libaltosConstants.USB_VENDOR_ALTUSMETRUM)
+               if (getVendor() != AltusMetrum)
                        return false;
-               if (getProduct() < libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MIN)
+               if (getProduct() < AltusMetrumMin)
                        return false;
-               if (getProduct() > libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MAX)
+               if (getProduct() > AltusMetrumMax)
                        return false;
                return true;
        }
@@ -80,7 +127,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();
index 3df4c6ebeb15c27e4176dc16ff1560bf5fdbe7b6..ec78e2889fcdef70f1ac37be7eb240f8705945d1 100644 (file)
@@ -49,10 +49,15 @@ public class AltosDeviceDialog extends JDialog implements ActionListener {
                        dialog.setVisible(true);
                        return value;
                } else {
-                       JOptionPane.showMessageDialog(frame,
-                                                     "No AltOS devices available",
-                                                     "No AltOS devices",
-                                                     JOptionPane.ERROR_MESSAGE);
+                       /* check for missing altos JNI library, which
+                        * will put up its own error dialog
+                        */
+                       if (AltosUI.load_library(frame)) {
+                               JOptionPane.showMessageDialog(frame,
+                                                             "No AltOS devices available",
+                                                             "No AltOS devices",
+                                                             JOptionPane.ERROR_MESSAGE);
+                       }
                        return null;
                }
        }
index 3aaeb888380c5400caed334476238da980e166a6..ca587b257ee81236fd564fa3c3fd796e0b153582 100644 (file)
@@ -70,8 +70,22 @@ public class AltosUI extends JFrame {
 
        public AltosVoice voice = new AltosVoice();
 
+       public static boolean load_library(Frame frame) {
+               if (!AltosDevice.load_library()) {
+                       JOptionPane.showMessageDialog(frame,
+                                                     String.format("No AltOS library in \"%s\"",
+                                                                   System.getProperty("java.library.path","<undefined>")),
+                                                     "Cannot load device access library",
+                                                     JOptionPane.ERROR_MESSAGE);
+                       return false;
+               }
+               return true;
+       }
+
        public AltosUI() {
 
+               load_library(null);
+
                String[] statusNames = { "Height (m)", "State", "RSSI (dBm)", "Speed (m/s)" };
                Object[][] statusData = { { "0", "pad", "-50", "0" } };
 
index 760e662de26c996cb576c8c7ee16d3fd8744e3eb..804e0c740cf4b6d909cfd118e3cb0f99fad4f10d 100644 (file)
@@ -1,6 +1,8 @@
 JAVAROOT=classes
 AM_JAVACFLAGS=-encoding UTF-8
 
+altoslibdir=$(libdir)/altos
+
 CLASSPATH_ENV=mkdir -p $(JAVAROOT); CLASSPATH=".:classes:../libaltos:$(FREETTS)/*:/usr/share/java/*"
 
 bin_SCRIPTS=altosui
@@ -131,12 +133,12 @@ Manifest-fat.txt:
 
 altosui: Makefile
        echo "#!/bin/sh" > $@
-       echo 'exec java  -cp "$(FREETTS)/*" -Djava.library.path="$(libdir)" -jar "$(altosuidir)/altosui.jar" "$$@"' >> $@
+       echo 'exec java  -cp "$(FREETTS)/*" -Djava.library.path="$(altoslibdir)" -jar "$(altosuidir)/altosui.jar" "$$@"' >> $@
        chmod +x $@
 
 altosui-test: Makefile
        echo "#!/bin/sh" > $@
-       echo 'exec java -cp "$(FREETTS)/*" -Djava.library.path="../libaltos" -jar altosui.jar "$$*"' >> $@
+       echo 'exec java -cp "$(FREETTS)/*" -Djava.library.path="../libaltos/.libs" -jar altosui.jar "$$@"' >> $@
        chmod +x $@
 
 $(LIBALTOS):
index 4d29d80e44bab58355c2af6fcb682e03490ffc0e..388d21046dc1c655fb66d20ebd89789fccb832ed 100644 (file)
@@ -1,11 +1,22 @@
 JAVAC=javac
-AM_CFLAGS="-I$(JVM_INCLUDE)"
+AM_CFLAGS=-DLINUX -DPOSIX_TTY -I$(JVM_INCLUDE)
 AM_JAVACFLAGS=-encoding UTF-8
 
-lib_LTLIBRARIES=libaltos.la
+altoslibdir=$(libdir)/altos
+
+altoslib_LTLIBRARIES=libaltos.la
+
+libaltos_la_LDFLAGS = -version-info 1:0:1
 
 libaltos_la_SOURCES=\
-       libaltos.c
+       libaltos.c \
+       libaltos_wrap.c
+
+noinst_PROGRAMS=cjnitest
+
+cjnitest_LDADD=libaltos.la
+
+LIBS=
 
 HFILES=libaltos.h
 
@@ -18,6 +29,8 @@ $(SWIG_FILE): libaltos.i0 $(HFILES)
 
 all-local: classlibaltos.stamp
 
+libaltos_wrap.c: classlibaltos.stamp
+
 classlibaltos.stamp: $(SWIG_FILE)
        swig -java -package libaltosJNI $(SWIG_FILE)
        mkdir -p libaltosJNI
@@ -25,4 +38,4 @@ classlibaltos.stamp: $(SWIG_FILE)
        touch classlibaltos.stamp
 
 clean-local:
-       -rm -rf libaltosJNI *.class *.java classlibaltos.stamp $(SWIG_FILE)
\ No newline at end of file
+       -rm -rf libaltosJNI *.class *.java classlibaltos.stamp $(SWIG_FILE) libaltos_wrap.c
index d376af3f6dc66826f521bbffd49afc70146adb08..61c03b183c40d9b3191749b6155cb3062b34a3be 100644 (file)
@@ -56,6 +56,8 @@ if test "x$JVM_INCLUDE" = "xauto"; then
        AC_MSG_RESULT([$JVM_INCLUDE])
 fi
 
+AC_SUBST(JVM_INCLUDE)
+
 AC_PROG_CC
 AC_PROG_INSTALL
 AC_PROG_LN_S