2 * Copyright © 2010 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
23 public class AltosDevice extends altos_device {
25 static boolean initialized = false;
28 System.loadLibrary("altos");
29 libaltos.altos_init();
31 } catch (UnsatisfiedLinkError e) {
32 System.err.println("Native library failed to load.\n" + e);
35 public final static int TeleMetrum = libaltosConstants.USB_PRODUCT_TELEMETRUM;
36 public final static int TeleDongle = libaltosConstants.USB_PRODUCT_TELEDONGLE;
37 public final static int TeleTerra = libaltosConstants.USB_PRODUCT_TELETERRA;
38 public final static int Any = 0x10000;
39 public final static int BaseStation = 0x10000 + 1;
41 public String toString() {
42 String name = getName();
44 name = "Altus Metrum";
45 return String.format("%-20.20s %4d %s",
46 getName(), getSerial(), getPath());
49 public boolean isAltusMetrum() {
50 if (getVendor() != libaltosConstants.USB_VENDOR_ALTUSMETRUM)
52 if (getProduct() < libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MIN)
54 if (getProduct() > libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MAX)
59 public boolean matchProduct(int want_product) {
61 if (want_product == Any)
64 if (want_product == BaseStation)
65 return matchProduct(TeleDongle) || matchProduct(TeleTerra);
70 int have_product = getProduct();
72 if (want_product == have_product)
75 if (have_product != libaltosConstants.USB_PRODUCT_ALTUSMETRUM)
78 String name = getName();
82 if (want_product == libaltosConstants.USB_PRODUCT_TELEMETRUM)
83 return name.startsWith("TeleMetrum");
84 if (want_product == libaltosConstants.USB_PRODUCT_TELEDONGLE)
85 return name.startsWith("TeleDongle");
86 if (want_product == libaltosConstants.USB_PRODUCT_TELETERRA)
87 return name.startsWith("TeleTerra");
91 static AltosDevice[] list(int product) {
95 SWIGTYPE_p_altos_list list = libaltos.altos_list_start();
97 ArrayList<AltosDevice> device_list = new ArrayList<AltosDevice>();
99 SWIGTYPE_p_altos_file file;
102 AltosDevice device = new AltosDevice();
103 if (libaltos.altos_list_next(list, device) == 0)
105 if (device.matchProduct(product))
106 device_list.add(device);
108 libaltos.altos_list_finish(list);
111 AltosDevice[] devices = new AltosDevice[device_list.size()];
112 for (int i = 0; i < device_list.size(); i++)
113 devices[i] = device_list.get(i);