import java.util.*;
import java.text.*;
+import libaltosJNI.*;
+
public class Altos {
/* EEProm command letters */
static final int AO_LOG_FLIGHT = 'F';
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;
}
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();
/*
- * 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
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();
+}
Frame frame = JOptionPane.getFrameForComponent(frameComp);
AltosDevice[] devices;
- devices = AltosDevice.list(product);
+ devices = AltosUSBDevice.list(product);
if (devices != null && devices.length > 0) {
value = null;
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;
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);
build_dialog();
- debug_dongle = AltosDeviceDialog.show(frame, AltosDevice.product_any);
+ debug_dongle = AltosDeviceDialog.show(frame, Altos.product_any);
if (debug_dongle == null)
return;
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
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);
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());
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;
}
}
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>")),
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);
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]);
}
--- /dev/null
+/*
+ * 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
AltosDescent.java \
AltosDeviceDialog.java \
AltosDevice.java \
+ AltosUSBDevice.java \
AltosBTDevice.java \
AltosBTDeviceIterator.java \
AltosBTManage.java \