altosui: Create abstract AltosDevice class
authorKeith Packard <keithp@keithp.com>
Thu, 14 Apr 2011 17:12:29 +0000 (10:12 -0700)
committerKeith Packard <keithp@keithp.com>
Thu, 14 Apr 2011 17:12:29 +0000 (10:12 -0700)
This will wrap either USB or BT devices. The USB device constants have
been moved to Altos.java

Signed-off-by: Keith Packard <keithp@keithp.com>
13 files changed:
altosui/Altos.java
altosui/AltosConfig.java
altosui/AltosDevice.java
altosui/AltosDeviceDialog.java
altosui/AltosEepromManage.java
altosui/AltosFlashUI.java
altosui/AltosIgnite.java
altosui/AltosIgniteUI.java
altosui/AltosSerial.java
altosui/AltosSerialInUseException.java
altosui/AltosUI.java
altosui/AltosUSBDevice.java [new file with mode: 0644]
altosui/Makefile.am

index 1f791da..5df004c 100644 (file)
@@ -21,6 +21,8 @@ import java.awt.*;
 import java.util.*;
 import java.text.*;
 
+import libaltosJNI.*;
+
 public class Altos {
        /* EEProm command letters */
        static final int AO_LOG_FLIGHT = 'F';
@@ -222,4 +224,81 @@ public class Altos {
                        input = input.substring(0,dot);
                return input.concat(extension);
        }
+
+       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;
+               }
+               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;
+       }
+
+       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;
+       }
+
+       static int usb_product_telebt() {
+               if (load_library())
+                       return libaltosConstants.USB_PRODUCT_TELEBT;
+               return 0x000e;
+       }
+
+       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_telebt = usb_product_telebt();
+       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;
 }
index f45e204..c5de83f 100644 (file)
@@ -344,11 +344,11 @@ public class AltosConfig implements ActionListener {
                version = new string_ref("unknown");
                product = new string_ref("unknown");
 
-               device = AltosDeviceDialog.show(owner, AltosDevice.product_any);
+               device = AltosDeviceDialog.show(owner, Altos.product_any);
                if (device != null) {
                        try {
                                serial_line = new AltosSerial(device);
-                               if (!device.matchProduct(AltosDevice.product_telemetrum))
+                               if (!device.matchProduct(Altos.product_telemetrum))
                                        remote = true;
                                try {
                                        init_ui();
index b7aa38f..3357c55 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
+ * Copyright © 2011 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
@@ -20,159 +20,11 @@ import java.lang.*;
 import java.util.*;
 import libaltosJNI.*;
 
-public class AltosDevice extends altos_device {
-
-       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;
-               }
-               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;
-       }
-
-       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;
-       }
-
-       static int usb_product_telebt() {
-               if (load_library())
-                       return libaltosConstants.USB_PRODUCT_TELEBT;
-               return 0x000e;
-       }
-
-       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_telebt = usb_product_telebt();
-       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();
-               if (name == null)
-                       name = "Altus Metrum";
-               return String.format("%-20.20s %4d %s",
-                                    name, getSerial(), getPath());
-       }
-
-       public String toShortString() {
-               String  name = getName();
-               if (name == null)
-                       name = "Altus Metrum";
-               return String.format("%s %d %s",
-                                    name, getSerial(), getPath());
-
-       }
-
-       public boolean isAltusMetrum() {
-               if (getVendor() != vendor_altusmetrum)
-                       return false;
-               if (getProduct() < product_altusmetrum_min)
-                       return false;
-               if (getProduct() > product_altusmetrum_max)
-                       return false;
-               return true;
-       }
-
-       public boolean matchProduct(int want_product) {
-
-               if (!isAltusMetrum())
-                       return false;
-
-               if (want_product == product_any)
-                       return true;
-
-               if (want_product == product_basestation)
-                       return matchProduct(product_teledongle) ||
-                               matchProduct(product_teleterra) ||
-                               matchProduct(product_telebt);
-
-               int have_product = getProduct();
-
-               if (have_product == product_altusmetrum)        /* old devices match any request */
-                       return true;
-
-               if (want_product == have_product)
-                       return true;
-
-               return false;
-       }
-
-       static AltosDevice[] list(int product) {
-               if (!load_library())
-                       return null;
-
-               SWIGTYPE_p_altos_list list = libaltos.altos_list_start();
-
-               ArrayList<AltosDevice> device_list = new ArrayList<AltosDevice>();
-               if (list != null) {
-                       SWIGTYPE_p_altos_file file;
-
-                       for (;;) {
-                               AltosDevice device = new AltosDevice();
-                               if (libaltos.altos_list_next(list, device) == 0)
-                                       break;
-                               if (device.matchProduct(product))
-                                       device_list.add(device);
-                       }
-                       libaltos.altos_list_finish(list);
-               }
-
-               AltosDevice[] devices = new AltosDevice[device_list.size()];
-               for (int i = 0; i < device_list.size(); i++)
-                       devices[i] = device_list.get(i);
-               return devices;
-       }
-}
\ No newline at end of file
+public interface AltosDevice {
+       public abstract String toString();
+       public abstract String toShortString();
+       public abstract int getSerial();
+       public abstract String getPath();
+       public abstract boolean matchProduct(int product);
+       public SWIGTYPE_p_altos_file open();
+}
index 2966ad1..154bf20 100644 (file)
@@ -37,7 +37,7 @@ public class AltosDeviceDialog extends JDialog implements ActionListener {
 
                Frame frame = JOptionPane.getFrameForComponent(frameComp);
                AltosDevice[]   devices;
-               devices = AltosDevice.list(product);
+               devices = AltosUSBDevice.list(product);
 
                if (devices != null && devices.length > 0) {
                        value = null;
index b46364d..cd2b74f 100644 (file)
@@ -197,7 +197,7 @@ public class AltosEepromManage implements ActionListener {
                boolean running = false;
 
                frame = given_frame;
-               device = AltosDeviceDialog.show(frame, AltosDevice.product_any);
+               device = AltosDeviceDialog.show(frame, Altos.product_any);
 
                remote = false;
                any_download = false;
@@ -206,7 +206,7 @@ public class AltosEepromManage implements ActionListener {
                if (device != null) {
                        try {
                                serial_line = new AltosSerial(device);
-                               if (!device.matchProduct(AltosDevice.product_telemetrum))
+                               if (!device.matchProduct(Altos.product_telemetrum))
                                        remote = true;
 
                                serial_line.set_frame(frame);
index 0302ccd..ad7aeac 100644 (file)
@@ -151,7 +151,7 @@ public class AltosFlashUI
 
                build_dialog();
 
-               debug_dongle = AltosDeviceDialog.show(frame, AltosDevice.product_any);
+               debug_dongle = AltosDeviceDialog.show(frame, Altos.product_any);
 
                if (debug_dongle == null)
                        return;
index 1171d2e..7a06c63 100644 (file)
@@ -172,7 +172,7 @@ public class AltosIgnite {
                serial = new AltosSerial(device);
                remote = false;
 
-               if (!device.matchProduct(AltosDevice.product_telemetrum))
+               if (!device.matchProduct(Altos.product_telemetrum))
                        remote = true;
        }
 }
\ No newline at end of file
index 000adc9..ad5b7cf 100644 (file)
@@ -275,7 +275,7 @@ public class AltosIgniteUI
        private boolean open() {
                command_queue = new LinkedBlockingQueue<String>();
 
-               device = AltosDeviceDialog.show(owner, AltosDevice.product_any);
+               device = AltosDeviceDialog.show(owner, Altos.product_any);
                if (device != null) {
                        try {
                                AltosIgnite     ignite = new AltosIgnite(device);
index 111bd77..6c80b66 100644 (file)
@@ -304,7 +304,7 @@ public class AltosSerial implements Runnable {
                                throw new AltosSerialInUseException(device);
                        devices_opened.add(device.getPath());
                }
-               altos = libaltos.altos_open(device);
+               altos = device.open();
                if (altos == null) {
                        close();
                        throw new FileNotFoundException(device.toShortString());
index 4b108c7..7380f33 100644 (file)
 
 package altosui;
 
-import libaltosJNI.*;
-
 public class AltosSerialInUseException extends Exception {
-       public altos_device     device;
+       public AltosDevice      device;
 
-       public AltosSerialInUseException (altos_device in_device) {
+       public AltosSerialInUseException (AltosDevice in_device) {
                device = in_device;
        }
 }
index 73ddf97..0fc6583 100644 (file)
@@ -34,7 +34,7 @@ public class AltosUI extends JFrame {
        public AltosVoice voice = new AltosVoice();
 
        public static boolean load_library(Frame frame) {
-               if (!AltosDevice.load_library()) {
+               if (!Altos.load_library()) {
                        JOptionPane.showMessageDialog(frame,
                                                      String.format("No AltOS library in \"%s\"",
                                                                    System.getProperty("java.library.path","<undefined>")),
@@ -203,7 +203,7 @@ public class AltosUI extends JFrame {
                bt_manage = new AltosBTManage(AltosBTDevice.bt_product_any, this);
                bt_manage.list();
                AltosDevice     device = AltosDeviceDialog.show(AltosUI.this,
-                                                               AltosDevice.product_basestation);
+                                                               Altos.product_basestation);
 
                if (device != null)
                        telemetry_window(device);
@@ -401,7 +401,7 @@ public class AltosUI extends JFrame {
                        AltosUI altosui = new AltosUI();
                        altosui.setVisible(true);
 
-                       AltosDevice[] devices = AltosDevice.list(AltosDevice.product_basestation);
+                       AltosDevice[] devices = AltosUSBDevice.list(Altos.product_basestation);
                        for (int i = 0; i < devices.length; i++)
                                altosui.telemetry_window(devices[i]);
                }
diff --git a/altosui/AltosUSBDevice.java b/altosui/AltosUSBDevice.java
new file mode 100644 (file)
index 0000000..03ddf5a
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * Copyright © 2010 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 altosui;
+import java.lang.*;
+import java.util.*;
+import libaltosJNI.*;
+
+public class AltosUSBDevice  extends altos_device implements AltosDevice {
+
+       public String toString() {
+               String  name = getName();
+               if (name == null)
+                       name = "Altus Metrum";
+               return String.format("%-20.20s %4d %s",
+                                    name, getSerial(), getPath());
+       }
+
+       public String toShortString() {
+               String  name = getName();
+               if (name == null)
+                       name = "Altus Metrum";
+               return String.format("%s %d %s",
+                                    name, getSerial(), getPath());
+
+       }
+
+       public SWIGTYPE_p_altos_file open() {
+               return libaltos.altos_open(this);
+       }
+
+       public boolean isAltusMetrum() {
+               if (getVendor() != Altos.vendor_altusmetrum)
+                       return false;
+               if (getProduct() < Altos.product_altusmetrum_min)
+                       return false;
+               if (getProduct() > Altos.product_altusmetrum_max)
+                       return false;
+               return true;
+       }
+
+       public boolean matchProduct(int want_product) {
+
+               if (!isAltusMetrum())
+                       return false;
+
+               if (want_product == Altos.product_any)
+                       return true;
+
+               if (want_product == Altos.product_basestation)
+                       return matchProduct(Altos.product_teledongle) ||
+                               matchProduct(Altos.product_teleterra) ||
+                               matchProduct(Altos.product_telebt);
+
+               int have_product = getProduct();
+
+               if (have_product == Altos.product_altusmetrum)  /* old devices match any request */
+                       return true;
+
+               if (want_product == have_product)
+                       return true;
+
+               return false;
+       }
+
+       static AltosUSBDevice[] list(int product) {
+               if (!Altos.load_library())
+                       return null;
+
+               SWIGTYPE_p_altos_list list = libaltos.altos_list_start();
+
+               ArrayList<AltosUSBDevice> device_list = new ArrayList<AltosUSBDevice>();
+               if (list != null) {
+                       for (;;) {
+                               AltosUSBDevice device = new AltosUSBDevice();
+                               if (libaltos.altos_list_next(list, device) == 0)
+                                       break;
+                               if (device.matchProduct(product))
+                                       device_list.add(device);
+                       }
+                       libaltos.altos_list_finish(list);
+               }
+
+               AltosUSBDevice[] devices = new AltosUSBDevice[device_list.size()];
+               for (int i = 0; i < device_list.size(); i++)
+                       devices[i] = device_list.get(i);
+               return devices;
+       }
+}
\ No newline at end of file
index 37a40ea..f2de4a3 100644 (file)
@@ -26,6 +26,7 @@ altosui_JAVA = \
        AltosDescent.java \
        AltosDeviceDialog.java \
        AltosDevice.java \
+       AltosUSBDevice.java \
        AltosBTDevice.java \
        AltosBTDeviceIterator.java \
        AltosBTManage.java \