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 1f791da5b8b0f77b7c7dcd8f28ca5aa549d3c6fe..5df004c5b0dfda75b127eaab5429eb3901beba7a 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 f45e20408c7501b604f0b6d67e829ea66772b9c6..c5de83f20608cea55c17a6eb78b1d5cab3090470 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 b7aa38f6f440feacb71f3a9eeec1b28a5a636b36..3357c550fa632ab66c8f73773ae15849b3605c77 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 2966ad1e52bd44a6855d07e47fe3c68bad6bd9b1..154bf20b4743c30743cbc3b72a8e88501e398a6b 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 b46364dbaacdd7efc8c6a13703407f8433ed9405..cd2b74fef448d6816ac25e23f5208ffa2367eb76 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 0302ccd38d9231fd25e8166d2547422efe5c1d01..ad7aeac844feb6eecb166fe6b0ae56d88f03322c 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 1171d2edd4510aeeea6f846aeb79ef1d341a97de..7a06c63d41244a7a53d2581c15d17907f93b1400 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 000adc980d76144b615bcebad943426e274d98d7..ad5b7cfb192f99ed0e6b5affdba51a90cd477eb6 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 111bd77170fc5514107c4ef75f0ca050a84c4a9a..6c80b66fbd46ec6d7401ac52162a2332bcb9a7a5 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 4b108c7c5ee566325884e6c015c55e2e698f9358..7380f331b2d561b46b39943554735461af57acc0 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 73ddf979c254a8f2343c57bc8cebdf31687fc688..0fc6583ca11c46771eaf32df6d18a41414fec4a5 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 37a40eaa894fcebfdaa4c1ee03d9a304c49d4f02..f2de4a3a437cba30c5075fbaa7b6f1a0fc2c36ae 100644 (file)
@@ -26,6 +26,7 @@ altosui_JAVA = \
        AltosDescent.java \
        AltosDeviceDialog.java \
        AltosDevice.java \
+       AltosUSBDevice.java \
        AltosBTDevice.java \
        AltosBTDeviceIterator.java \
        AltosBTManage.java \