summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altosui/Altos.java79
-rw-r--r--altosui/AltosConfig.java4
-rw-r--r--altosui/AltosDevice.java166
-rw-r--r--altosui/AltosDeviceDialog.java2
-rw-r--r--altosui/AltosEepromManage.java4
-rw-r--r--altosui/AltosFlashUI.java2
-rw-r--r--altosui/AltosIgnite.java2
-rw-r--r--altosui/AltosIgniteUI.java2
-rw-r--r--altosui/AltosSerial.java2
-rw-r--r--altosui/AltosSerialInUseException.java6
-rw-r--r--altosui/AltosUI.java6
-rw-r--r--altosui/AltosUSBDevice.java103
-rw-r--r--altosui/Makefile.am1
13 files changed, 206 insertions, 173 deletions
diff --git a/altosui/Altos.java b/altosui/Altos.java
index 1f791da5..5df004c5 100644
--- a/altosui/Altos.java
+++ b/altosui/Altos.java
@@ -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;
}
diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java
index f45e2040..c5de83f2 100644
--- a/altosui/AltosConfig.java
+++ b/altosui/AltosConfig.java
@@ -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();
diff --git a/altosui/AltosDevice.java b/altosui/AltosDevice.java
index b7aa38f6..3357c550 100644
--- a/altosui/AltosDevice.java
+++ b/altosui/AltosDevice.java
@@ -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();
+}
diff --git a/altosui/AltosDeviceDialog.java b/altosui/AltosDeviceDialog.java
index 2966ad1e..154bf20b 100644
--- a/altosui/AltosDeviceDialog.java
+++ b/altosui/AltosDeviceDialog.java
@@ -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;
diff --git a/altosui/AltosEepromManage.java b/altosui/AltosEepromManage.java
index b46364db..cd2b74fe 100644
--- a/altosui/AltosEepromManage.java
+++ b/altosui/AltosEepromManage.java
@@ -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);
diff --git a/altosui/AltosFlashUI.java b/altosui/AltosFlashUI.java
index 0302ccd3..ad7aeac8 100644
--- a/altosui/AltosFlashUI.java
+++ b/altosui/AltosFlashUI.java
@@ -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;
diff --git a/altosui/AltosIgnite.java b/altosui/AltosIgnite.java
index 1171d2ed..7a06c63d 100644
--- a/altosui/AltosIgnite.java
+++ b/altosui/AltosIgnite.java
@@ -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
diff --git a/altosui/AltosIgniteUI.java b/altosui/AltosIgniteUI.java
index 000adc98..ad5b7cfb 100644
--- a/altosui/AltosIgniteUI.java
+++ b/altosui/AltosIgniteUI.java
@@ -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);
diff --git a/altosui/AltosSerial.java b/altosui/AltosSerial.java
index 111bd771..6c80b66f 100644
--- a/altosui/AltosSerial.java
+++ b/altosui/AltosSerial.java
@@ -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());
diff --git a/altosui/AltosSerialInUseException.java b/altosui/AltosSerialInUseException.java
index 4b108c7c..7380f331 100644
--- a/altosui/AltosSerialInUseException.java
+++ b/altosui/AltosSerialInUseException.java
@@ -17,12 +17,10 @@
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;
}
}
diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java
index 73ddf979..0fc6583c 100644
--- a/altosui/AltosUI.java
+++ b/altosui/AltosUI.java
@@ -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
index 00000000..03ddf5a8
--- /dev/null
+++ b/altosui/AltosUSBDevice.java
@@ -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
diff --git a/altosui/Makefile.am b/altosui/Makefile.am
index 37a40eaa..f2de4a3a 100644
--- a/altosui/Makefile.am
+++ b/altosui/Makefile.am
@@ -26,6 +26,7 @@ altosui_JAVA = \
AltosDescent.java \
AltosDeviceDialog.java \
AltosDevice.java \
+ AltosUSBDevice.java \
AltosBTDevice.java \
AltosBTDeviceIterator.java \
AltosBTManage.java \